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

Pet*_*omo 4 filesystem mount btrfs snapshot

所以我试图围绕 BTRFS 进行思考,并使用 BTRFS 文件系统设置我的文件服务器。这是我的设置:

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

  • /dev/sdb1 和 /dev/sdc1 :BRTFS 池文件系统,2x3GB 硬盘,
    包含我所有的媒体文件。当前挂载到 /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
Run Code Online (Sandbox Code Playgroud)

这是子卷列表:

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
Run Code Online (Sandbox Code Playgroud)

如果我尝试将 @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
Run Code Online (Sandbox Code Playgroud)

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

Vin*_* Yu 5

Btrfs 文件系统不相互交互,因此您无法挂载@media子卷,/dev/sd{b,c}1因为@media子卷当前为 on /dev/sda1,并且当您尝试快照时会收到跨设备错误/mnt/media/mnt/media_snap因为/mnt/mediais on/dev/sd{b,c}1/mnt/media_snapis on /dev/sda1

相反,具有的@media对亚体/dev/sda1BTRFS文件系统,你想创建一个@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/
Run Code Online (Sandbox Code Playgroud)

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

sudo btrfs subvol snap -r /mnt/media/ /mnt/media/<snapshot_name>
Run Code Online (Sandbox Code Playgroud)

但我建议将子卷的每个快照放在子卷本身之外,因为当您需要恢复到快照时,这会简化事情。为此,您需要挂载/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>
Run Code Online (Sandbox Code Playgroud)