Aller au contenu

Sauver les meubles avec Snapper et Btrfs

OpenSUSE

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 :

# head -n 1 /etc/os-release
NAME="openSUSE Tumbleweed"

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 :

# zypper update -y libopenh264-8

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 :

GRUB + Snapper

J'identifie le snapshot vers lequel je souhaite retourner dans la liste :

GRUB + Snapper

Je confirme le démarrage sur le snapshot n° 3 :

GRUB + Snapper

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.