Btrfs is supposed to be the “better filesystem”. It is easy to use and has a nice feature-list. Since I had some troubles with a raid1 using mdadm in the past, I will try to turn my private raid-array in a btrfs. In this article I will not post the mdadm-commands(and lvm2 commands)…
First I just remove one disk from my array and format it with btrfs:
mkfs.btrfs /dev/sdc
Now I have a single disk in my btrfs. The cool thing about btrfs is, that I can convert my btrfs to any supported raid during runtime. This feature I want to test. So first I will mount mount btrfs but I want to use compression on my filesystem. It’s super easy to use compression since it’s just a mount-option. I just created an entry in my /etc/fstab:
/dev/sdc /mnt/Raid btrfs compress=zlib,defaults 0 0
Now I can mount my btrfs:
mount /mnt/Raid
Now I can easily copy(for example using rsync) my data from the old mdadm-raid to my btrfs. Once this is done, I will just delete my mdadm-array and destroy the raid-meta-data using –zero-superblock( I made a backup of all my data before! ). After that I have a plain disk(/dev/sdb) and I will add this disk to my btrfs:
btrfs device add /dev/sdb /mnt/Raid/
Finally I was very courious if I can convert the btrfs into a raid1 using the following command:
btrfs balance start -dconvert=raid1 -mconvert=raid1 /mnt/Raid
This job runs in foreground so I would recommend using screen for it. It might take a long time. If you want to monitor the progress you can just use this command:
watch -n1 btrfs fi df /mnt/Raid
The following one-shot-command gives a good overview about your btrfs:
btrfs fi show; btfrs fi df /mnt/Raid
It really worked like expected. I just converted my single btrfs to a raid1 using 2 disks. But I have one problem: the filesystem is mounted using this fstab-entry:
/dev/sdc /mnt/Raid btrfs compress=zlib,defaults 0 0
What if /dev/sdc gets broken? Then I would have to manually mount /dev/sdb. It does not matter which device I do mount since both get synchronized but if the device doesn’t exist, the system would not be able to mount my filesystem. So I created a filesystem-label:
btrfs filesystem label /mnt/Raid/ RAIDBUTTER
And I changed my fstab-entry into:
LABEL=RAIDBUTTER /mnt/Raid btrfs compress=zlib,defaults 0 0
It’s not the end for me. Until now, I mounted my mdadm-raid and on this partition I had a directory for all my home-directories. This directory I mounted using bind-mount into /home. It was good enough for me, but it just feels like a dirty hack. Btrfs gives me the opportunity to create subvolumes. Those subvolumes I can mount wherever I want and it is just a directory in my normal btrfs. I created my subvolume using this command:
btrfs subvolume create /mnt/Raid/Home
At last I can mount it using this fstab-line:
LABEL=RAIDBUTTER /home btrfs subvol=Home,compress=zlib,auto,user 0 0
Great, isn’t it? In summary I can say that I really like the btrfs. It is very easy to use and has a nice feature list.