Title: How to boot on a BTRFS snapshot | |
Author: Solène | |
Date: 04 January 2023 | |
Tags: linux gentoo btrfs | |
Description: In this article, you will learn how to boot from BTRFS | |
snapshots | |
# Introduction | |
I always wanted to have a simple rollback method on Linux systems, | |
NixOS gave me a full featured one, but it wasn't easy to find a | |
solution for other distributions. | |
Fortunately, with BTRFS, it's really simple thanks to snapshots being | |
mountable volumes. | |
# Setup | |
You need a Linux system with a BTRFS filesystem, in my examples, the | |
root subvolume (where `/` is) is named `gentoo`. | |
I use `btrbk` to make snapshots of `/` directly in `/.snapshots`, using | |
the following configuration file: | |
```file | |
snapshot_preserve_min 30d | |
volume / | |
snapshot_dir .snapshots | |
subvolume . | |
``` | |
With a systemd service, it's running once a day, so I'll have for 30 | |
days of snapshots to restore my system if needed. | |
This creates snapshots named like the following: | |
```script | |
$ ls /.snapshots/ | |
ROOT.20230102 | |
ROOT.20230103 | |
ROOT.20230104 | |
``` | |
A snapshot address from BTRFS point of view looks like | |
`gentoo/.snapshots/ROOT.20230102`. | |
I like btrbk because it's easy to use and configure, and it creates | |
easy to remember snapshots names. | |
# Booting on a snapshot | |
When you are in the bootloader (GRUB, systemd-boot, Lilo etc..), edit | |
the command line, and add the new option (replace if already exists) | |
with the following, the example uses the snapshot `ROOT.20230102`: | |
``` | |
rootflags=subvol=gentoo/.snapshots/ROOT.20230103 | |
``` | |
Boot with the new command line, and you should be on your snapshot as | |
the root filesystem. | |
# Be careful | |
When you are on a snapshot, this mean any change will be specific to | |
this volume. | |
If you use a separate partition for `/boot`, an older snapshot may not | |
have the kernel (or its module) you are trying to boot. | |
# Conclusion | |
This is a very simple but effective mecanism, more than enough to | |
recover from a bad upgrade, especially when you need the computer right | |
now. | |
# Going further | |
There is a project grub-btrfs which can help you adding BTRFS snapshots | |
as boot choices in GRUB menus. | |
grub-btrfs GitHub project page |