无法将辅助 BTRFS 文件系统挂载到特定子卷

无法将辅助 BTRFS 文件系统挂载到特定子卷

因此,我尝试了解 BTRFS,并使用 BTRFS 文件系统设置我的文件服务器。以下是我的设置:

  • /dev/sda1 :BTRFS 文件系统,包含挂载到 / 和 /home 的 @、@home 子卷。

  • /dev/sdb1 和 /dev/sdc1 :BRTFS 池文件系统,2x3GB HDD,
    包含我的所有媒体文件。当前安装到 /mnt/media

我这样设置是因为我不想让任何媒体文件占用 /dev/sda1 上的空间,这是一个 120GB 的 SSD;我只想为系统文件保留它。我想将这个辅助 BTRFS 文件系统挂载到标记为 @media 的顶级子卷,这样我就可以进行快照。但是,每次我尝试使用 subvolid 挂载 /dev/sdb1 或 /dev/sdc1 时,都会收到此错误:

peetipablo@flexo:/$ sudo mount -t btrfs -o subvolid=354 /dev/sdb1 /mnt/media
mount: mount(2) failed: No such file or directory

以下是子卷列表:

peetipablo@flexo:/$ sudo btrfs subvolume list /
ID 257 gen 142548 top level 5 path @
ID 258 gen 142527 top level 5 path @home
ID 310 gen 113715 top level 5 path @apt-snapshot-release-upgrade-utopic-2015-04-30_08:11:14
ID 311 gen 113766 top level 5 path @apt-snapshot-release-upgrade-vivid-2015-04-30_08:39:50
ID 312 gen 134632 top level 257 path var/lib/machines
ID 313 gen 142500 top level 257 path root_snapshot_5_13_15
ID 354 gen 142517 top level 5 path @media

如果我尝试将 @media 设为目录 /mnt/media 的默认子卷,我可以在没有 -o subvolid 的情况下挂载 sdb1,但是当我尝试快照时出现错误:

peetipablo@flexo:/$ sudo btrfs subvolume set-default 354 /mnt/media
peetipablo@flexo:/$ sudo btrfs subvolume get-default /mnt/media
ID 354 gen 142517 top level 5 path @media
peetipablo@flexo:/$ sudo mount -t btrfs /dev/sdb1 /mnt/media
peetipablo@flexo:/$ sudo btrfs subvolume snapshot @media /mnt/media_snap
ERROR: error accessing '@media'
peetipablo@flexo:/$ sudo btrfs subvolume snapshot /mnt/media /mnt/media_snap
Create a snapshot of '/mnt/media' in '/mnt/media_snap'
ERROR: cannot snapshot '/mnt/media' - Invalid cross-device link

我感觉自己没有理解某些东西,或者以不该使用的方式使用了这种较新的文件系统类型。我是否应该将所有 3 个设备合并到一个 BTRFS 文件系统中,而不必担心用介质填满我的 SSD?有没有办法使用与我目前使用的方法不同的方法来实现我的最终目标?

答案1

Btrfs 文件系统彼此之间不交互,因此您无法将@media子卷挂载在 上,/dev/sd{b,c}1因为@media子卷当前位于 上,并且当您尝试将快照复制到 上/dev/sda1时会出现跨设备错误,因为位于 上,而位于 上。/mnt/media/mnt/media_snap/mnt/media/dev/sd{b,c}1/mnt/media_snap/dev/sda1

您不想在 btrfs 文件系统@media上拥有子卷/dev/sda1,而是想@media在 btrfs 文件系统上创建一个子卷/dev/sd{b,c}1

sudo mount /dev/sdb1 /mnt/media/
sudo btrfs subvol create /mnt/media/@media
sudo umount /mnt/media/
sudo mount -o subvol=@media /dev/sdb1 /mnt/media/

您可以创建 的快照/mnt/media/,但只能将快照放置在/dev/sd{b,c}1文件系统上。因此,您可以像这样创建只读快照:

sudo btrfs subvol snap -r /mnt/media/ /mnt/media/<snapshot_name>

但我建议将每个快照放在一个子卷中外部子卷本身,因为当您需要恢复到快照时,这会简化事情。为此,您需要挂载/dev/sd{b,c}1文件系统的根目录:

sudo mkdir /mnt/media_root/
sudo mount -o subvol=/ /dev/sdb1 /mnt/media_root/
sudo btrfs subvol snap -r /mnt/media_root/@media/ /mnt/media_root/<snapshot_name>

相关内容