以下是最新 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