假设有人设置了一个 BTRFS 分区,并在其上创建了几个 LXC 容器。
事后看来,如何确定每个容器正在使用什么类型的后备存储(每个容器是否使用“目录”后备存储、“BTRFS”后备存储,甚至是“AUFS”后备存储等)?
这对于了解容器维护选项非常重要。
答案1
创建容器时,还会创建一个配置文件。配置文件定义容器内的某些设置。对于 LXC 容器,默认情况下,配置文件存储在
/var/lib/lxc/YourContainerName-foo/config (用于特权容器)。
和
~/.local/share/lxc/YourContainerName-foo/config (用于非特权容器)。
lxc 容器的默认后备存储是名为 dir 的基于目录的文件系统,这意味着未定义特定文件系统。'none' 选项充当 dir 的别名。如果 dir 是定义的后备存储,则容器的根文件系统将位于 usr/local/var/lib/lxc/YourContainerName-foo/rootfs,并且 ext4 将用作根文件系统。
检查每个容器使用的后备存储类型的地方是上面提到的 /var/lib/lxc/container/config 下的配置文件。
在“容器特定配置”部分下,有一行定义了 rootfs.backend。
例如 lxc.rootfs.backend = lvm
lxc.rootfs.backend = 目录
lxc.rootfs.backend = btrfs
ETC。
另一种可以使用但不太可靠的方法是在 lxc 容器内部的 shell 提示符中使用 df -Th 命令。这样不仅可以检查磁盘空间的状态,还可以显示文件系统类型。尝试确定文件系统后备存储时,输出可能会产生误导,因为 dir 将使用 ext4,而 LVM 将使用 ext3。即,即使也使用了 lvm,df 输出也会显示为 ext3。
希望这可以帮助
答案2
我现在对您的实现感到好奇,但仍然不确定您的环境。但我根据以下几个假设来发表此评论:
- 您可以访问 Linux shell 提示符 (CLI)。
- 您已下载/安装 LXC 和 btrfs-tools。
- 您已加载 btrfs 内核模块。
我原本以为,如果你要克隆一个 lxc 容器,仍然会有一个根文件系统后端条目,因为这定义了 rootfs 类型。话虽如此,从我克隆完整虚拟化环境的经验来看,似乎总是存在冲突的问题。
另外,您是否创建了实际的 btrfs 文件系统,或者只是在 lxc-create 命令中定义了它?它可能不会显示,因为实际的块设备可能未定义。
我不太确定总体问题是什么,但听起来确实与克隆有关。例如,新容器仍然指向原始容器目录块设备进行存储,或类似的东西。让我给出一些可能有助于解决问题的要点。
我创建带有 BTRFS 后备存储的 LXC 容器的方式如下。
安装 BTRFS(听起来你已经完成了):
apt-get -y 安装 btrfs 工具
加载内核模块(听起来你已经完成了这个):
modprobe btrfs
创建 btrfs 文件系统(听起来你已经完成了):
mkfs -t btrfs /dev/sda
然后将挂载块设备上的文件系统。
mkdir /home/btrfs-mnt (或任何所需位置)
挂载 /dev/sda /home/btrfs-mnt
这些就是我为 LXC 容器创建可用文件系统所要采取的步骤。
如果您正在制作一堆 btrfs 容器,那么:
文件 -s /dev/sda (显示文件类型为 btrfs 文件系统)。
btrfs 文件系统显示(显示 btrfs 文件系统)。
btrfs 子卷显示 /home/btrfs-mnt (识别 btrfs 根目录)。
cat /proc/mounts | grep btrfs (显示已安装的 btrfs 块设备)。
btrfs 文件系统 df /home/btrfs-mnt (显示 btrfs 磁盘使用情况)。
创建 btrfs 块设备并安装 LXC 后,我可以创建一个容器。使用 --lxcpath= 选项定义 btrfs 挂载的路径,使用 --bdev 选项定义 btrfs rootfs 类型。由于默认 lxc 位置的路径现在不同,因此需要符号链接来重定向到实际位置。
创建 btrfs 支持的 LXC 容器:
lxc-create --bdev btrfs --lxcpath=/home/btrfs-mnt --name mybtrfscontainerfoo --template ubuntu
创建到实际配置文件的符号链接。
cd /var/lib/lxc/mybtrfscontainerfoo/
ln -s /home/btrfs-mnt/mybtrfscontainerfoo/config /var/lib/lxc/mybtrfscontainerfoo/config
在我看来,您似乎正在尝试设置 btrfs 容器或复制它们,所以希望这能有所帮助。OpenWRT,我不确定您在那里做什么。我只用它来获取家用路由器上的非标准固件。
希望这会有所帮助,如果没有,那么也许更多地描述您的环境可能会帮助我获得更清晰的画面。
让我知道你是怎么办的。
尽最大努力,
杰森-C