Sauver les meubles avec Snapper et Btrfs
Dans mon précédent article, je vous ai décrit en détail l'installation d'un poste de travail OpenSUSE Tumbleweed. Sous le capot, la configuration par défaut utilise le système de fichiers Btrfs. Nous pouvons sereinement faire abstraction de la complexité considérable de ce système de fichiers. Le programme d'installation d'OpenSUSE nous a mis en place une installation clé en main de Btrfs où tout fonctionne.
Faire abstraction
Faire abstraction est une expression savante pour signifier qu'on s'en fiche complètement des détails.
Un des avantages de Btrfs, c'est la possibilité d'effectuer des snapshots du système. En conjonction avec l'outil Snapper, Btrfs permet de rectifier le tir et de revenir en arrière en cas de problème, par exemple suite à un bug prohibitif lors d'une mise à jour.
Snapper par la pratique
Pour ma part, vous savez que je préfère les petites démos pratiques aux grands discours théoriques. Voici donc un cas pratique de l'utilisation de Snapper au quotidien :
-
J'applique une mise à jour.
-
J'affiche le détail des changements effectués.
-
Je me prépare à revenir en arrière.
-
J'effectue ce qu'on appelle un rollback.
-
Je fais un état des lieux.
Effectuer une mise à jour
Pour commencer, je me connecte au système que j'ai installé hier :
Le gestionnaire de paquets m'informe qu'une mise à jour est disponible :
# zypper list-updates
| Name | Current Version | Available Version | Arch
--- +---------------+----------------------+---------------------+-------
| libopenh264-8 | 2.6.0~noopenh264-1.1 | 2.6.0-2.suse1699.10 | x86_64
J'installe cette mise à jour :
Afficher les snapshots
La simple utilisation de zypper a enclenché la création d'un snapshot.
J'affiche la liste des snapshots et j'identifie les états correspondants
avant (3, pre) et après (4, post) la mise à jour :
# snapper list
# │ Type │ Pre # │ ... │ Description │ Userdata
───┼────────┼───────┼─────┼───────────────────────┼──────────────
0 │ single │ │ ... │ current │
1* │ single │ │ ... │ first root filesystem │
2 │ single │ │ ... │ after installation │ important=yes
3 │ pre │ │ ... │ zypp(zypper) │ important=no
4 │ post │ 3 │ ... │ │ important=no
J'affiche la différence entre les deux snapshots :
# snapper status 3..4
....x. /etc/ld.so.cache
c..... /usr/lib64/libopenh264.so.2.6.0
c..... /usr/lib/sysimage/rpm/Index.db
c..... /usr/lib/sysimage/rpm/Packages.db
-..... /usr/share/doc/packages/libopenh264-8/README
+..... /usr/share/doc/packages/libopenh264-8/README.md
-..... /usr/share/licenses/libopenh264-8/COPYING.LGPL-2.1+
-..... /usr/share/licenses/libopenh264-8/COPYING.LICENSE
+..... /usr/share/licenses/libopenh264-8/LICENSE
Préparer le rollback
À présent, je redémarre le système en activant l'état avant la mise à jour. Lorsque le gestionnaire de démarrage GRUB s'affiche, j'interromps la procédure de démarrage normale et je sélectionne l'option Start bootloader from a read-only snapshot :
J'identifie le snapshot vers lequel je souhaite retourner dans la liste :
Je confirme le démarrage sur le snapshot n° 3 :
Une fois que j'ai démarré, j'invoque snapper list et je note le tiret - à
côté du 3 qui m'indique que je suis bien dans le snapshot n° 3 :
# snapper list
# │ Type │ Pre # │ ... │ Description │ Userdata
───┼────────┼───────┼─────┼───────────────────────┼──────────────
0 │ single │ │ ... │ current │
1+ │ single │ │ ... │ first root filesystem │
2 │ single │ │ ... │ after installation │ important=yes
3- │ pre │ │ ... │ zypp(zypper) │ important=no
4 │ post │ 3 │ ... │ │ important=no
Effectuer le rollback
Je confirme le retour vers ce snapshot :
# snapper rollback 3
Ambit is classic.
Creating read-only snapshot of current system. (Snapshot 5.)
Creating read-write snapshot of snapshot 3. (Snapshot 6.)
Setting default subvolume to snapshot 6.
Cette opération va se solder par la création de deux nouveaux snapshots :
# snapper list
# │ Type │ Pre # │ ... │ Description │ Userdata
───┼────────┼───────┼─────┼───────────────────────┼──────────────
0 │ single │ │ ... │ current │
1 │ single │ │ ... │ first root filesystem │
2 │ single │ │ ... │ after installation │ important=yes
3- │ pre │ │ ... │ zypp(zypper) │ important=no
4 │ post │ 3 │ ... │ │ important=no
5 │ single │ │ ... │ rollback backup of #1 │ important=yes
6+ │ single │ │ ... │ writable copy of #3 │
Cette fois-ci, je redémarre le système normalement pour revenir à l'état avant la mise à jour.
État des lieux
Une fois que j'ai redémarré, je vérifie l'état de mon paquet :
# rpm -q libopenh264-8
libopenh264-8-2.6.0~noopenh264-1.1.x86_64
# zypper list-updates
| Name | Current Version | Available Version | Arch
--- +---------------+----------------------+---------------------+-------
| libopenh264-8 | 2.6.0~noopenh264-1.1 | 2.6.0-2.suse1699.10 | x86_64
Effectivement, je suis bien revenu en arrière avant la mise à jour de ce paquet.
Conclusion
Si vous utilisez une rolling release comme OpenSUSE Tumbleweed, vous n'êtes jamais à l'abri d'une mauvaise surprise lorsque vous effectuez une mise à jour du système. Dans ce cas, l'outil Snapper peut vous sauver la mise en vous permettant de rectifier le tir.
Et mes données dans tout ça ?
Dans la configuration par défaut telle qu'elle est implémentée par
OpenSUSE, Snapper vous permet d'effectuer un retour en arrière au niveau
du système. Vos données personnelles en-dessous de /home ne sont
nullement affectées par une opération de rollback.
La rédaction de cette documentation demande du temps et des quantités significatives de café espresso. Vous appréciez ce blog ? Offrez un café au rédacteur en cliquant sur la tasse.




