btrfs:浏览子卷

bra*_*ild 2 linux 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/@
Run Code Online (Sandbox Code Playgroud)

然而,根据文档,我了解到可以浏览快照,它们的完整树就像主文件树一样公开,显示为应用程序的目录。例如,我可以将单个文件从快照复制到已安装的顶级卷。也就是说,从应用程序的角度来看,制作快照很像原子的递归副本。

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

我有什么误解吗?是否有任何目录列表显示快照树?

Kam*_*ski 6

请记住,设备上的 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)
Run Code Online (Sandbox Code Playgroud)

因此,我的设置与您的设置相同:/@Btrfs 树中的子卷成为/操作系统树中的子卷。/@homeBtrfs 树中的子卷将/home进入操作系统树。

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

/dev/sda1 on /mnt/ssd type btrfs (rw,relatime,ssd,space_cache,subvolid=5,subvol=/)
Run Code Online (Sandbox Code Playgroud)

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

UUID=<UUID of my /dev/sda1 here>    /mnt/ssd            btrfs   defaults,subvol=/       0   2
Run Code Online (Sandbox Code Playgroud)

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

mount -o rw,relatime,ssd,space_cache,subvol=/ /dev/sda1 /mnt/ssd
Run Code Online (Sandbox Code Playgroud)

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

请注意,最好不要将 Btrfs 安装/为您的操作系统/。如果是这样安装,/etc那么您的 Btrfs 下就有/bin目录/以及. 在您的操作系统中,将 Btrfs 安装到操作系统后,所有这些条目都会出现在下面。/timeshift-btrfs///

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