Snapper
Fournit une abstraction des snapshots BTRFS et permet de faire automatiquement des instantanés lors des mises à jour avec APT.
Mise en place
sudo apt install snapper sudo snapper -c root create-config /
Désactiver les instantanés automatiques en définissant à no la clé TIMELINE_CREATE dans /etc/snapper/configs/root et en désactivant le timer:
sudo systemctl disable snapper-timeline.timer
Désactiver les instantanés au démarrage:
sudo systemctl disable snapper-boot.timer
Dupliquer dans /etc/fstab l'entrée la partition gérée par snapper pour considérer les snapshots (https://github.com/openSUSE/snapper/issues/159):
UUID=9a56fcd5-7718-4fc2-a6d1-d4247d7d155e /.snapshots btrfs subvol=.snapshots 0 0
Lister les snapshots
sudo snapper -c root list
root est la configuration par défaut, donc il n'est pas nécessaire de la préciser.
Supprimer des snapshots
sudo snapper rm 1211-1234
Restaurer un snapshot
À chaud
sudo snapper list sudo snapper rollback ${id_of_snapshot_to_get_back}
Va créer deux snapshots: un en lecture-seule de l'état actuelle du disque, et va dupliquer le snapshot auquel on souhaite revenir, enlever sa lecture-seule et le définir comme sous-volume par défaut. Il faut ensuite redémarrer.
Depuis un live CD
Utiliser un live CD Debian et booter dessus.
sudo apt update sudo apt install btrfs-progs snapper sudo mkdir /mnt/dd sudo mount /dev/sda1 /mnt/dd sudo mount -o subvol=.snapshots /dev/sda1 /mnt/dd/.snapshots sudo snapper --no-dbus -r /mnt/dd list sudo snapper --no-dbus -r /mnt/dd rollback ${id_of_snapshot_to_get_back}
Ça doit aussi être faisable en copiant la configuration de Snapper (sudo cp /mnt/dd/etc/snapper/configs/root /etc/snapper/configs/dd), en adaptant la clé SUBVOLUME de la configuration et en ajoutant cette configuration à la liste présente dans le fichier /etc/default/snapper:
## Type: string ## Default: "" # List of snapper configurations. SNAPPER_CONFIGS="dd"
S'il faut régénérer Grub (qui est sur une partition différente):
mkdir /media/temporary mount -o subvol=/subvolumes/root /dev/sdXX /media/temporary cd /media/temporary mount -o bind /dev dev mount -o bind /sys sys mount -o bind /proc proc mount -o bind /boot boot # only necessary if you have a separate boot partition chroot . update-grub exit
(non testé)