在虚拟机环境中试验 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 子卷中的路径,也会产生相同的结果。