Updates sind ein Fluch und Segen zugleich: Sie sorgen für Sicherheit, schaffen aber oft neue Probleme. Seit OpenSuse 42.1 machen Sie missglückte Updates oder Änderungen an der Konfiguration per Rollback rückgängig.
OpenSuse ist im Moment die einzige der großen Distributionen, die das als Ersatz für Ext4 geplante Dateisystem Btrfs als Standard einsetzt. Die Distribution aus Nürnberg nutzt dabei ein Feature des Filesystems für eine Snapshot-Funktion. Windows-Anwender kennen diese als Wiederherstellungspunkte, die das System bei kritischen Operationen automatisch anlegt.
OpenSuse erstellt ebenfalls bei jeder Installation oder jedem Auffrischen von Softwarepaketen einen Vorher-/Nachher-Schnappschuss des ganzen Root-Dateisystems (Abbildung 1). Besonders Anwender von Tumbleweed [1], dem Rolling-Release-Zweig von OpenSuse, wissen die Möglichkeit zu schätzen, das System im Zweifel nach einem Update auf den alten Zustand zurückzurollen.

Abbildung 1: Bei der Installation von Software und dem Einsatz von YaST erstellt OpenSuse ab Version 12.1 Schnappschüsse, die entweder ein vollständiges Zurückspielen des alten Zustands gestatten oder nur bestimmte Dateien wiederherstellen.
Vor dem Start und nach Beenden eines YaST-Moduls legt das System ebenfalls ein solches Snapshot-Paar an. Möchten Sie von Hand Änderungen an Konfigurationsdateien erfassen, so erzeugen Sie die Snapshots mit snapper --description "Mein Schnappschuss" --cleanup-algorithm number auf der Kommandozeile. Alle systemweiten Änderungen schrauben Sie damit zuverlässig auf den festgehaltenen Zustand zurück.
Selbst wenn Sie dies vergessen haben, besteht immer noch eine Chance, den vorherigen Zustand aus einem der automatisch erstellten stündlichen Timeline-Snapshots (Beschreibung timeline in Abbildung 1) wiederherzustellen.
Bewusst ausgenommen sind lediglich die Verzeichnisse /var, /usr/local, /srv und /opt, die aber allesamt keine systemweiten Programm- oder Konfigurationsdateien enthalten. In /var liegen die Log-Dateien. Selbst nach Wiederherstellen eines Snapshots besteht die Möglichkeit, dort nachzulesen, warum das System nach dem Update oder einer Modifikation an der Konfiguration nicht mehr rund lief. Die Home-Partition bleibt ebenfalls ausgenommen, Daten der Benutzer tastet ein Rollback nicht an.
Bewährte Technik
Die Schnappschüsse basieren direkt auf der Subvolume-Funktion von Btrfs [2]. Das Erstellen dauert dank Copy-On-Write nur Sekundenbruchteile (siehe Kasten “Btrfs-Dateisystem”). Sie belegen, anfangs zumindest, keinen zusätzlichen Platz auf der Platte. Verändert sich das aktuelle System, so wachsen sie freilich um die Blöcke an, deren Inhalt sich im laufenden Betrieb verändert.
Btrfs-Dateisystem
Im Prinzip gleichen Schnappschüsse im Btrfs-Dateisystem inkrementellen Backups, die nur Änderungen zwischen den festgehaltenen Zuständen speichern. Doch statt alle Dateien direkt beim Anlegen des Snapshots zu kopieren, schreibt der Kernel hier umgekehrt nach dem Einfrieren die Blöcke aller Dateien neu, wenn wirklich eine Veränderung stattfindet (Copy on Write).
So entfällt das zeitaufwendige Prüfen auf Veränderungen und Kopieren beim Erstellen des Schnappschusses. Die Schreib-Performance beeinträchtigt dieses Verfahren nicht: Konventionelle Dateisysteme müssen alle neuen Daten auf die Platte schreiben. Btrfs unterscheidet sich hier nur darin, dass es das Überschreiben noch gebrauchter Schnappschussdaten verhindert, statt alle aus Sicht des laufenden Systems nicht mehr aktuellen Inhalte als freien Speicherplatz zu werten.
Für das automatische Anlegen und turnusmäßige Löschen ist das von Suse entwickelte Programm Snapper [3] zuständig, das aus einem Hintergrunddienst (Snapperd) und dem Kommandozeilenprogramm Snapper besteht. Dass es in OpenSuse dafür ein YaST-Modul gibt (Abbildung 1), versteht sich fast von selbst.
Nach dem Starten zeigt das Modul zunächst eine Liste der Snapshots. Datum, Uhrzeit und Beschreibung helfen beim Identifizieren des gewünschten Zustands. Das Feld Beschreibung nennt dabei den Grund, weswegen das System den Schnappschuss angelegt hat: yast Modulname gibt das YaST-Modul an, das das Backup ausgelöst hat. yast sw_single steht für das Yast-Modul Software installieren oder löschen, zypp(packagekitd) lautet die Beschreibung für das Software-Update über das KDE-Update-Plasmoid.
Änderungen anzeigen öffnet eine Übersicht der veränderten Dateien im zuvor markierten Schnappschuss: Gelbe Kugeln stehen in der Liste für veränderte Dateien, grüne für neu hinzugekommene, graue kennzeichnen Verzeichnisse, in denen relevante Dateien liegen (Abbildung 2). Markieren Sie eine Datei, so blendet das Modul für Textdateien rechts eine Diff-Ansicht der Änderungen ein.

Abbildung 2: Das YaST-Modul für Snapper zeigt eine Liste aller veränderten Dateien. Eine Diff-Ansicht macht es zumindest bei Textdateien möglich, die Modifikationen nachzuvollziehen.
Dabei ist die Variante Unterschied zwischen dem ersten und zweiten Schnappschuss anzeigen vorausgewählt, alternativ wählen Sie Unterschied zwischen dem ersten Schnappschuss und dem aktuellen System oder Unterschied zwischen dem zweiten Schnappschuss und dem aktuellen System.
Wer das in der freien Software-Welt gängige Unified-Diff-Format [4] kennt, kommt mit dieser Anzeige sofort zurecht. Ansonsten genügt es zu wissen, dass weggefallene Zeilen hier rot hervorgehoben mit vorangestelltem Minuszeichen erscheinen, hinzugekommene dagegen blau mit führendem Plus. Diese Ansicht hilft also etwa dabei, nachzuvollziehen, welche Modifikationen YaST im Ordner /etc vorgenommen hat.
Möchten Sie Änderungen zurückrollen, so setzen Sie Häkchen vor die Kontrollkästchen der zugehörigen Dateien. YaST markiert bei der Auswahl übergeordneter Verzeichnisse alle darin enthalten Dateien. Danach klicken Sie auf Auswahl wiederherstellen rechts unten.
Zeit zurückdrehen
Zum vollständigen Zurücksetzen des ganzen Systems auf einen früheren Zustand ist allerdings das YaST-Modul nicht die richtige Wahl, sondern das Kommandozeilenwerkzeug Snapper. Mit snapper list zeigt dieses im Terminal eine vergleichbare Liste der Snapshots an wie das YaST-Modul (Abbildung 3).

Abbildung 3: Die OpenSuse-Dokumentation empfiehlt das Snapper-YaST-Modul zum Wiederherstellen einzelner Dateien, für die Rückkehr zu einem früheren Zustand des gesamten Systems dagegen das Kommandozeilen-Tool Snapper.
Um zu einem früheren, als funktionierend bekannten Systemzustand zurückzukehren, geben Sie als Root auf der Konsole snapper rollback Snapshot-Nummer ein und starten den Rechner neu.
Beim Rollback geschieht etwas grundlegend anderes als beim Wiederherstellen einzelner Dateien im YaST-Modul: Hier überschreibt Snapper nicht die Dateien des laufenden Systems mit denen aus dem Backup. Vielmehr markiert es einen Btrfs-Snapshot als Default.
Beim Booten mit der Standard-Option im Bootmenü startet dieser Default-Snapshot. Daher erfolgt ein Rollback praktisch direkt, während das Kommando undochange eine Weile dauert, wenn große Datenmengen betroffen sind.
Dabei gilt es allerdings zu bedenken, dass das Zurückspielen der Veränderungen zwischen zwei in der Vergangenheit liegenden Schnappschüssen das System in einen inkonsistenten Zustand versetzen kann: Der Snapshot erfasst nur die zwischen den zwei eingefrorenen Zuständen veränderten Dateien. Andere Teile des Systems könnten sich in einem neueren, dann nicht mehr kompatiblen Zustand befinden. Auf Tumbleweed-Systemen sind eventuell bestimmte Libraries auf eine neuere Version gesprungen, die mit dem im Schnappschuss enthaltenen Binaries nicht mehr zusammenspielen.
Daher sollten Sie das YaST-Modul nur verwenden, um Änderungen an Konfigurationsdateien rückgängig zu machen. Sie sollten stets prüfen, welche Dateien das Zurückschreiben verändert, und Bescheid wissen, was dies für Ihr laufendes System bedeutet. Komplette Rollbacks bringen weniger Probleme mit sich, zumal Snapper davor stets einen weiteren Schnappschuss des laufenden Systems anfertigt (zum Beispiel rollback backup of #180 in Abbildung 1). Somit rollen Sie den Rollback bei Bedarf wieder zurück.
Letzter Rettungsanker
Snapper stellt noch einen dritten Rettungsanker bereit: Bei Systemen, denen das vom OpenSuse-Installer vorgeschlagene Layout der Partitionen zugrunde liegt, erstellt Snapper im Grub-Bootmenü Einträge, die ein Readonly-System auf der Basis eines Snapshots booten (Abbildung 4).

Abbildung 4: Sollten Sie Ihr System so gründlich torpediert haben, dass es nicht mehr hochfährt, booten Sie über das Grub-Menü in den letzten funktionierenden Zustand und rollen es von dort zurück.
Sie sind im Grub-Untermenü Start bootloader from a read-only snapshot zu finden und enthalten die zugehörige OpenSuse- und Kernelversion, Datum und Uhrzeit sowie die schon von YaST her bekannte Beschreibung des Snapshots. Allerdings ist Letztere bei der Auflösung des Boot-Screens selten leserlich. Das System ordnet die Einträge umgekehrt chronologisch an. Notfalls genügt es durch Probieren den ersten Snapshot zu ermitteln, der noch fehlerfrei startet.
Nach dem Booten in einen Snapshot sollten Sie prüfen, ob das System in diesem Zustand tadellos funktioniert. Dann rollen Sie diesen mit sudo snapper rollback auf der Konsole endgültig zurück. Danach braucht es erneut einen Neustart, der das vorläufig readonly eingehängte Root-Dateisystem wieder in den gewohnten Zustand versetzt.
Die Konfigurationsdateien für den Snapper-Dienst finden Sie unter /etc/snapper/configs. Hier legen Sie unter anderem fest, wie viel Snapshots der Dienst aufbewahrt [5]. Alternativ rufen Sie sudo snapper -c root set-config "Option" auf. Das Handbuch erläutert die Möglichkeiten [6].
Dieser Artikel geht davon aus, dass Sie beim Layout der Systempartition den Vorschlag des OpenSuse-Installers übernommen haben (Abbildung 5). Insbesondere das Booten in Snapshots zum Retten des Systems funktioniert ab OpenSuse 15 laut Handbuch nur noch, wenn dies der Fall ist. Nur wenn Sie bei der Installation als Root-Filesystem Btrfs gewählt haben, aktiviert OpenSuse den Snapper-Dienst ohne weiteres Zutun.

Abbildung 5: Die Snapshot-Funktion in OpenSuse basiert auf einem Btrfs-Layout mit Subvolumes, wie es der Installer hier vorschlägt.
Außer OpenSuse stellen inzwischen Fedora und Arch Linux Snapper-Pakete bereit. Unter Arch-Linux installiert außerdem das Paket snap-pac einen Pacman-Hook, der ähnlich wie unter OpenSuse nach Installationen oder Updates automatisch einen Schnappschuss erstellt.
Das AUR-Paket snapper-gui-git stellt eine mit dem YaST-Modul vergleichbare grafische Oberfläche bereit. Unter der Rolling-Release-Distribution Arch Linux leistet Snapper auf diese Weise ebenfalls gute Dienste, wenn nach einem Update einmal ein Problem mit einer aufgefrischten Programmversion auftreten sollte.
Infos
-
Tumbleweed: https://de.opensuse.org/Portal:Tumbleweed
-
Inkrementelle Backups mit Btrfs: https://btrfs.wiki.kernel.org/index.php/Incremental_Backup
-
Snapper: https://de.opensuse.org/SDB:Snapper
-
Unified-Diff-Format: http://www.gnu.org/software/diffutils/manual/html_node/Unified-Format.html
-
Snapper Konfiguration: https://doc.opensuse.org/documentation/leap/reference/html/book.opensuse.reference/cha.snapper.html#sec.snapper.config.modify.values
-
Snapper “set-config”: https://doc.opensuse.org/documentation/leap/reference/html/book.opensuse.reference/cha.snapper.html#sec.snapper.clean-up





