
Annuler n'importe quel changement : des instantanés de votre dossier personnel avec snapper
Avant de modifier un fichier de configuration, on le copie en .bak. Un mois plus tard, le dossier personnel en contient quarante, personne ne sait lequel est le bon, et certains traînent là où ils s'exécutent par erreur. Si votre système utilise le système de fichiers btrfs (Fedora, openSUSE, CachyOS et beaucoup d'autres le font par défaut), il existe mieux : les instantanés.
Un peu d'histoire
btrfs a été lancé en 2007 par Chris Mason, alors chez Oracle, comme système de fichiers Linux moderne fondé sur la copie à l'écriture : les données ne sont jamais écrasées sur place, si bien qu'un instantané de tout le disque ne coûte presque rien et prend une seconde. snapper, développé chez SUSE, planifie ces instantanés et en prend un avant et après chaque modification du système.
1. Une configuration pour votre dossier personnel
Snapper gère les instantanés btrfs. Créez une configuration pour /home, autorisez votre utilisateur à s'en servir sans sudo, et gardez un historique raisonnable :
sudo snapper -c home create-config /home
sudo snapper -c home set-config ALLOW_USERS=$USER SYNC_ACL=yes \
TIMELINE_CREATE=yes TIMELINE_LIMIT_DAILY=7 TIMELINE_LIMIT_WEEKLY=2
Puis vérifiez que les deux minuteries tournent : l'une prend les instantanés horaires, l'autre efface les anciens.
sudo systemctl enable --now snapper-timeline.timer snapper-cleanup.timer
2. Avant une modification risquée
snapper -c home create -d "avant modification de la config ssh"
Une seconde, aucune copie. La commande n'affiche rien ; snapper -c home list montre l'instantané et son numéro.
3. Annuler
Voir ce qui a changé depuis l'instantané 42, puis faire revenir un fichier :
snapper -c home status 42..0
snapper -c home undochange 42..0 $HOME/.ssh/config
Ou lisez simplement l'ancienne version : chaque instantané est un dossier normal, /home/.snapshots/42/snapshot/.
Pièges que nous avons payés
Si la minuterie de nettoyage ne tourne pas, les instantanés s'empilent pour toujours. Les nôtres dépassaient 800 ; les fichiers supprimés gardaient leur place parce que de vieux instantanés les retenaient encore. Activer le nettoyage a rendu plus de 200 Go d'un coup.
Ne laissez pas les données de Docker dans un volume photographié. Chaque instantané garde les images que vous supprimez : effacer 160 Go de modèles a libéré 5 Go. Donnez à /var/lib/docker son propre sous-volume btrfs, que les instantanés ignorent.
Les gros fichiers de modèles vont dans un dossier non photographié, pour la même raison : un téléchargement de 40 Go que vous supprimez doit revenir en espace libre, pas rester deux semaines dans un instantané.
Sources
Utile ? Dites-nous ce qu'il faut mesurer ensuite.