So I'm trying to wrap my head around BTRFS and set up my fileserver using BTRFS filesystems. Here is my setup:
-
/dev/sda1 : BTRFS filesystem, contains @, @home subvolumes mounted to
/ and /home. -
/dev/sdb1 and /dev/sdc1 : BRTFS pooled filesystem, 2x3GB HDD's,
contains all my media files. Currently mounted to /mnt/media
I have them setup this way because I do not want any of my media files taking up space on /dev/sda1 which is a 120GB SSD; I'd like to only reserve that for system files. I'd like to mount this secondary BTRFS filesystem to a top-level subvolume labeled @media so I can do snapshots. However, every time I try to mount either /dev/sdb1 or /dev/sdc1 using subvolid, I get this error:
peetipablo@flexo:/$ sudo mount -t btrfs -o subvolid=354 /dev/sdb1 /mnt/media
mount: mount(2) failed: No such file or directory
Here's the subvolume list:
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
If I try to make @media the default subvolume for directory /mnt/media, I am able to mount sdb1 without the -o subvolid, but when I try to snapshot I get an error:
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
I have a feeling that I'm not understanding something or am using this newer filesystem type in a way that it's not meant to be used. Should I just merge all 3 devices into one BTRFS filesystem and not worry about filling up my SSD with media? Is there a way to achieve my end goal using a different method than the one I'm currently using?
Best Answer
Btrfs filesystems do not interact with each other, so you cannot mount the
@media
subvolume on/dev/sd{b,c}1
because the@media
subvolume is currently on/dev/sda1
, and you get a cross-device error when you try to snapshot/mnt/media
to/mnt/media_snap
because/mnt/media
is on/dev/sd{b,c}1
whereas/mnt/media_snap
is on/dev/sda1
.Instead of having the
@media
subvolume on the/dev/sda1
btrfs filesystem, you want to create an@media
subvolume on the btrfs filesystem on/dev/sd{b,c}1
:You can create snapshots of
/mnt/media/
, but you can place the snapshot only on the/dev/sd{b,c}1
filesystem. So you can create a read-only snapshot like this:But I recommend placing each snapshot of a subvolume outside the subvolume itself, because this simplifies things when you need to revert to a snapshot. To do this, you will need to mount the root of the
/dev/sd{b,c}1
filesystem: