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
树中的子卷成为/home
OS 树中的一部分。
但我也可以访问整个 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
)。