btrfs:浏览子卷

btrfs:浏览子卷

btrfs在阅读文档并在本地系统上进行实验后,我对子卷还不熟悉。我有一个带有btrfs根分区的 Linux Mint 系统。Mint 方便地包含一个可帮助自动执行常规快照的工具。我可以轻松列出它已创建并保留的快照。

$ sudo btrfs subvolume list /
ID 257 gen 52540 top level 5 path @
ID 258 gen 52540 top level 5 path @home
ID 283 gen 52467 top level 5 path timeshift-btrfs/snapshots/2019-01-15_02-00-51/@
ID 286 gen 50026 top level 5 path timeshift-btrfs/snapshots/2019-01-16_02-00-01/@
ID 288 gen 50026 top level 5 path timeshift-btrfs/snapshots/2019-01-17_02-00-01/@
ID 289 gen 50026 top level 5 path timeshift-btrfs/snapshots/2019-01-18_02-00-01/@
ID 291 gen 50409 top level 5 path timeshift-btrfs/snapshots/2019-01-19_02-00-01/@

但是,根据文档,我了解到可以浏览快照,其完整树与主文件树一样显示,以目录的形式显示给应用程序。例如,我可以将单个文件从快照复制到已安装的顶层卷。也就是说,从应用程序的角度来看,制作快照就像原子递归复制一样。

/但是,我在或 的目录中都找不到上面列出的七个子卷/home,而且timeshift-btrfs的列表中也没有出现名为 的条目/home

我误解了什么?是否有显示快照树的目录列表?

答案1

请记住,设备上的 Btrfs 目录(和子卷)树在概念上与操作系统中的目录结构不同。两者的根都有标示,/但它们是不同的。

@卷在 Btrfs 文件系统本身中被标识为@(或/@),但此路径在您的操作系统中不直接可用。我猜子卷被挂载到/您的目录树的根目录,正如操作系统和程序所见(注意:挂载命名空间除外)。

同样@home安装在下/home

我的 Kubuntu 中的命令输出mount包含(除其他行外):

/dev/sda1 on / type btrfs (rw,relatime,ssd,space_cache,subvolid=1902,subvol=/@)
/dev/sda1 on /home type btrfs (rw,relatime,ssd,space_cache,subvolid=258,subvol=/@home)

所以我的设置与您的相同:/@Btrfs 树中的子卷成为/OS 树中的一部分。Btrfs/@home树中的子卷成为/homeOS 树中的一部分。

但我也可以访问整个 Btrfs 树:

/dev/sda1 on /mnt/ssd type btrfs (rw,relatime,ssd,space_cache,subvolid=5,subvol=/)

这意味着 Btrfs 树的根 ( /) 在我的操作系统中可用/mnt/ssd。从那里我可以查看每个子卷和目录。我设置了这个挂载点我自己,就是为了能够看到和管理整个 Btrfs 结构。我的相关行/etc/fstab如下:

UUID=<UUID of my /dev/sda1 here>    /mnt/ssd            btrfs   defaults,subvol=/       0   2

即使没有上面这一行,我仍然可以手动挂载根 Btrfs 卷:

mount -o rw,relatime,ssd,space_cache,subvol=/ /dev/sda1 /mnt/ssd

主要的结论是,您应该使用选项将 Btrfs 文件系统的根挂载到某处subvol=/。这样,您就可以访问整个文件系统。

请注意,最好不要将 Btrfs 挂载/为操作系统/。如果是这种情况,则您必须等/etc/bin目录直接放在你的 Btrfs/子卷类似/timeshift-btrfs。在您的操作系统中,/将 Btrfs 安装/到操作系统后,所有这些条目都会出现在 下/

通过从 Btrfs 派生操作系统的根树,/@您可以使其保持整洁。您(和/或适当的工具)在 Btrfs 之外组织子卷/@,而操作系统将其大部分保留/在 Btrfs 中/@。大部分,因为例如在我的情况下/mnt/ssd/@/proc只是一个空目录(在将 Btrfs/@安装为后/,proc 文件系统在操作系统中可用/proc);对于/mnt/ssd/@/home(在将 Btrfs/@安装为后/,Btrfs/@home子卷将安装在现在的操作系统上/home)。

相关内容