Installing btrfs as boot drive on Ubuntu 14.04
I recently upgraded my home server; it was previously running Ubuntu 12.04, but it was kind of a mess. I had a 1TB internal drive with 3 separate external drives, running on a HP ProLiant G7 N54L MicroServer. I wanted to accomplish a few things in one fell swoop:
Upgrade to Ubuntu 14.04 LTS.
Switch to a RAID11 set up with btrfs.
Rearrange my directory set up more logically.
One of the interesting things about btrfs is you can convert an ext4 filesystem to btrfs non-destructively. btrfs maintains a subvolume with the old ext4 data that you can revert to if something goes wrong. Additionally, you can change RAID levels on a live system without any downtime, as well as add or remove drives to your array that way as well.
So after doing some research, I decided I had two options:
Upgrade my current system to 14.04, convert the ext4 filesystem to btrfs, add 2 4TB drives, convert to RAID1 and balance the data, rearrange the directory structure, and remove the original 1TB drive.
Reason I didn’t go with this: I had some concerns about upgrading to 12.04 “live”, which is required because btrfs wasn’t available in that version.2 I wouldn’t have any backup or way to revert to my old system if something went wrong. Additionally, I had some software installed on my old system that I didn’t really need (MySQL, Apache, plus some drivers for scanners and other things), and a clean install would give me a chance to wipe and reconfigure everything over again.
Clean install 14.04 and reinstall/reconfigure everything
This would take a heckuva lot longer than the first option, but would leave me with a new clean setup after I was finished.
Installation Process
Step 1
Start off by installing Ubuntu 14.04 Server the normal way, with a normal partition structure. A lot of places suggest separating out the /boot
partition, but this is no longer necessary. The standard installer will install GRUB to the MBR, so we can boot from there without an issue.
I left off all the software except OpenSSH when I got to the tasksel
step. Feel free to do what you’d like there.
Step 2
Once installed, boot into the system and make sure everything is working as expected. Run sudo apt-get update && sudo apt-get upgrade
to make sure your software is updated completely. You’ll probably have to reboot afterwards.
Step 3
Boot from a LiveCD and follow these instructions to convert the ext4 system you currently have to a btrfs system. The only thing you should note is the line you prepend with the hash looks a little different:
Step 4
After you’ve converted to btrfs, boot up. Fingers crossed, everything should boot fine. I ran into an issue where I updated my Linux headers after booting and grub was giving me issues. I had to rerun grub-install
and update-grub
before it would boot properly.
Step 5
To add the second drive, run the same commands to partition the whole drive as btrfs, then run sudo fdisk -l
to get the device name. In my case, it was /dev/sdb
, so you’ll see that used in the commands below. Make sure you sub out your device name.
You’ll get this result:
I don’t know why it shows up as full after the initial mount, but that problem was fixed when I ran the balance command.
I also fiddled with getting them to mount correctly before successfully adding it to the root drive. A lot of tutorials keep telling you to add to /mnt, but don’t listen to them – we’re using it as our main drive so add to /
.
After its been added, balance the drives:
dconvert
converts the data stories to RAID1, mconvert
manages the metadata.
The balance command is where a lot of the magic happens. btrfs is able to rearrange the data into whatever setup you’d like.
Converts to:
Currently, btrfs doesn’t completely support RAID5/6, plus I only had two drives to work with, RAID1 was pretty much the only option. I could have gone with RAID0 for more space, but the point of switching to this set up was the redundancy, not the space, though I did end up with more space after I consolidated everything. ↩
This is actually one of the big pluses of btrfs: for future upgrades, I can take a snapshot of the drive as it stands now, upgrade to 14.10 (whenever it arrives), and it if doesn’t work, I can boot from the snapshot, and it’s like nothing ever happened. ↩