同时挂载两个 btrfs 子卷

同时挂载两个 btrfs 子卷

以下是最新 Linux 内核的假设设置:

/dev/sda1 is formatted as btrfs

然后我运行以下命令在 /dev/sda1 的根目录上创建两个子卷:

$ mount /dev/sda1 /mnt
$ btrfs subvolume create /mnt/a
$ btrfs subvolume create /mnt/b
$ umount /mnt

现在我希望将这两个子卷同时挂载在两个不同的挂载点上:

$ mount -o subvol=a /dev/sda1 /a
$ mount -o subvol=b /dev/sda1 /b

问题就在这里。我尝试将文件作为块设备(使用循环),效果很好(至少可以接触每个文件的两个文件)。但是,在安装完整系统、将根目录放在一个子卷中、将主目录放在另一个子卷中并在启动时挂载这两个子卷后,我收到一条错误消息,提示我底层设备处于“写保护”状态,第一次尝试读取主目录内容时导致内核崩溃。

我想知道我想要做的事情(使用不同的挂载选项多次挂载单个块设备)是否实际上被 btrfs 允许或者通常被操作系统允许。

答案1

您可以定义默认应作为根的子卷 a。
在这种情况下,它将自动挂载而不是 btrfs 根。

假设你的 btrfs 树如下所示

/
|
|----a(包含 / 目录的子卷)
|
|----b(包含主目录的子卷)

为了设置为默认值:

mount /dev/sda1 /mnt
btrfs subvolume create /mnt/a
btrfs subvolume set-default /mnt/a

现在你可以挂载你的 btrfs 文件系统,然后挂载子卷 b

mount -o defaults /dev/sda1 /a
mount -o defaults,subvol=b /dev/sda1 /b

相关内容