为什么 btrfs-subvolume list 命令会列出所有子卷?

为什么 btrfs-subvolume list 命令会列出所有子卷?

在虚拟机环境中试验 BTRFS。

我创建了 2 个子卷(平面结构)

ID 256 gen 13 top level 5 path @
ID 256 gen 9 top level 5 path @home

我分别安装了@@home/mnt & /mnt/home,如下所示:

mount -o noatime,space_cache=v2,compress=zstd,subvol=@ /dev/vda3 /mnt
mount -o noatime,space_cache=v2,compress=zstd,subvol=@home /dev/vda3 /mnt/home

当我看到下面的子卷列表时,/mnt/home我会看到两个子卷

btrfs subvolume list /mnt/home
ID 256 gen 13 top level 5 path @
ID 256 gen 9 top level 5 path @home

这是预期的行为吗?我本以为只会看到@home

我做错了什么(可能没有正确创建子卷或没有正确安装它们)?

答案1

这是预期的行为。来自手册页:

列出文件系统中存在的子卷<path>

因此,默认情况下,给定路径仅用于标识要检查的文件系统。

要获得更多您期望的内容,您可以使用该选项-o

仅打印低于指定的子卷<path>

但请注意,此选项仅打印子卷以下给定的路径和路径只是子卷开始的标识符。

例如,我在普通根目录之外有一个根 (/) 子卷、一个单独的 /usr 子卷和快照卷。

$ btrfs subvolume list -ta /
ID      gen     top level       path
--      ---     ---------       ----
256     564502  5               <FS_TREE>/@rootfs
265     564432  256             @rootfs/usr
277     564433  5               <FS_TREE>/@snapshots

如果我添加-o标志

$ btrfs subvolume list -o /
ID 265 gen 564432 top level 256 path @rootfs/usr

我只得到usr子卷,因为它位于根目录之下。根子卷 (ID 256) 已退出,因为它是由路径标识的子卷/,因此不在下面,并且快照 (ID 277) 已被删除,因为它是 的同级@rootfs

让事情再次变得有点混乱,比如

$ btrfs subvolume list -o /var
ID 265 gen 564432 top level 256 path @rootfs/usr

即使 /usr 不低于 /var 但 /var 是 @rootfs 子卷中的路径,也会产生相同的结果。

相关内容