Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save seraph/05cc841c87e950da4bc36ff1b43cea98 to your computer and use it in GitHub Desktop.
Save seraph/05cc841c87e950da4bc36ff1b43cea98 to your computer and use it in GitHub Desktop.
Arch Linux installation on btrfs subvolumes

Arch Linux btrfs install

0. Prerequisites

  • Plenty of storage - snapshots will take (sort of) a lot of space
  • Latest Arch Linux install iso because those have newer kernels and more bugfixes in btrfs.
  • Have previous experience with installing Arch (like you can install arch with a blind fold).
  • Read everything through

1. Parititions

Pick a partition scheme fitting your needs, GPT for UEFI and MBR for BIOS based systems.

We really need two of them, one for /boot and the other one will be a btrfs partition with subvolumes. Or whatever you desire, e.g swap partition. You know what to do

  1. /dev/sda1 - this will be /boot with vfat filesystem because UEFI or syslinux for legacy BIOS boot mkfs.fat -F32 /dev/sda1

  2. /dev/sda2 - btrfs with bunch of subvolumes mkfs.btrfs /dev/sda2

2. btrfs subvolumes

We will create few of them to support easy snapshoting with Snapper

1. Mount the root btrfs volume

mount /dev/sda2 /mnt

2. Create subvolume for root, home, var and one for snapshots

btrfs subvolume create /mnt/@root
btrfs subvolume create /mnt/@var
btrfs subvolume create /mnt/@home
btrfs subvolume create /mnt/@snapshots

3. Mount them.

umount /mnt
mount -o noatime,compress=lzo,space_cache,subvol=@root /dev/sda2 /mnt
mkdir /mnt/{boot,var,home,.snapshots}
mount -o noatime,compress=lzo,space_cache,subvol=@var /dev/sda2 /mnt/var
mount -o noatime,compress=lzo,space_cache,subvol=@home /dev/sda2 /mnt/home
mount -o noatime,compress=lzo,space_cache,subvol=@snapshots /dev/sda2 /mnt/.snapshots

pacstrap and other normal things you do when installing arch

I personally install using systemd-nspawn, e.g systemd-nspawn --directory=/mnt --boot. However, fstab and bootloader must be installed using arch-chroot.

Make sure that fstab is okay after you finish. Do not forget to use subvol=@foo and get rid of subvolid= flags

Snapshot time

You can create snapshots like so
btrfs subvolume snapshot -r / "/.snapshots/@root-$(date +%F-%R)"

And to restore from snapshot you just delete the currently used @root and replace it with a earlier snapshot

mount /dev/sda2 /mnt
btrfs subvolume delete /mnt/@root
brtfs subvolume snapshot /mnt/@snapshots/@root-2015-08-10-20:19 /mnt/@root

and then just reboot :)

you will probably want to use Snapper or something like that to manage your snapshots.

Random notes (by @artizirk)

  1. syslinux sould be capable of booting a btrfs volume but afaik it is just talk, I havent found anyone in the internet who has a working syslinux btrfs boot without seperate /boot parition. Only GRUB is capable of booting from bare btrfs file system.
  2. /boot is not snapshottable with this setup, someone somewhere sugested to create a systemd service to copy files from btrfs /boot to your seperate FAT32 ESP partition when files change in /boot folder. I havent tried that yet.

btrfs-specific notes (by @mikroskeem)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment