Determining how to upgrade a Btrfs-based system without the possibility of
/home partition took me several hours of searching, so I decided it
was worth sharing.
Arch Linux introduced me to Btrfs, a (experimental) file system with a number of
improvements, especially in creating subvolumes and data compression. When I
switched to Linux Mint 16 I decided to keep Btrfs and was happy to see that the
guided installer (Ubiquity-based) could automatically setup Btrfs with
subvolumes given a Btrfs-formatted partition (provided the partition is already
Btrfs formatted; the absence of
btrfs-tools from the live media means that
empty partitions cannot be Btrfs formatted out of the box). Following the
installation, I was left with an Ext4 boot partition and swap partition (created
myself) and a large Btrfs partition with two subvolumes:
@ (mounted to
@home (mounted to
/home onto separate partitions makes system upgrades
simple: preserve user data on
/home while replacing system components on
so it makes sense for installers to attempt to separate these folders onto
separate partitions if given control of partitioning. While Linux Mint’s
installer supports creating subvolumes on a Btrfs partition as part of
installation, its partitioning wizard does not actually recognize subvolumes.
Linux Mint’s Ubiquity installer does not allow users to select subvolumes of
Btrfs partitions as targets for installation.
Preparing to upgrade
While most operating systems (many Linux distros included) support in-place OS
upgrades, my past experience with Windows has convinced me that fresh
installations always experience less problems and the time saved by performing
an in-place upgrade is typically lost in troubleshooting unusual problems
related to upgrading. My goal: to install
Linux Mint 17 to the
@ subvolume without harming my
A problem is apparent here; Linux Mint can only be installed via the Ubiquity
installer, which does not recognize Btrfs subvolumes (sidenote: the absence of
btrfs-tools likely has a lot to do with this, although installing it does not
fix recognition). Thanks to a combination of Ask Ubuntu, Stack Overflow, the
Arch Wiki, and several other resources, I figured out how to upgrade without
deleting any data.
Before beginning the installer, open up a console and mount the existing Btrfs
# mount /dev/sdXY /mnt/ (where
the Btrfs partition) will suffice. The Btrfs subvolumes will display as folders
in the mounted partition. Rename the
@home folders to something
memorable and unique (this will prevent the guided installer from overwriting
the contents; best to prevent Ubiquity from messing with your home folder).
Unmount the Btrfs partition and begin the installer.
When the Linux Mint installer reaches the partitioning screen, setup partitions
as per your preferences. The
/boot partition can be formatted, but the Btrfs
partition must not be formatted. Just select it as the
/ mountpoint and
continue with the installer. Keep the username the same as the existing user to
prevent headaches with adding/ deleting users and managing
permissions. When installation is complete, close the installer but do not
Instead, open another console and remount the Btrfs partition as you did
previously. Now, two additional folders will exist, placed by the installer: the
@ will supplant the previous (now renamed)
@ folder from the older version of Linux Mint; once verifying that no data
from the old system is needed, the renamed subvolume can be deleted to free
space. Or kept for peace of mind—that’s the beauty of subvolumes! Because all
user data exists in the renamed
@home partition, the installer’s
partition can be deleted and replaced with the renamed
@home partition (just
rename it; the new system’s
/etc/fstab won’t mind because the partition’s UUID
is the the same). Double-check all work then unmount and reboot into a newly
upgraded Linux Mint system.
After this process, login should work flawlessly; login with the credentials
created by the installer and you should be have access to your previous
folder. If something has gone wrong, reboot to the live media and make sure that
@home folder has been renamed and is in the proper location.
- Adam Ryczkowski (Ask Ubuntu) provided the original inspiration for the method described here and this is largely just an expanded writeup of his instructions. He even tested this method on Linux Mint 16!
- ArchWiki Btrfs guide is an excellent resource for making sure that whatever command you are about to run will do what you expect and nothing more.