Snapper erlaubt im Fall eines Falles dank Btrfs-Snapshots das Zurücksetzen eines Systems auf einen früheren Zustand.
Bei OpenSuse vertrauen die Entwickler auf das Dateisystem Btrfs [1]. Es ist seit OpenSuse 13.2 beziehungsweise seit Version 12 des Suse Linux Enterprise Servers (SLES) das Dateisystem für die Root-Partition. Die Distribution CoreOS, die stark auf die Container-Technologie setzt, hat sich dagegen kürzlich wieder von Btrfs abgewandt, da das Dateisystem im Einsatz noch zu viele Fehler zeigte (siehe Kasten “Warnung”).
Die Arbeit an dem Dateisystem dauert nun schon seit rund acht Jahren an. Btrfs setzt, wie das von Sun für Solaris 10 entwickelte ZFS [2], auf Funktionen, die üblicherweise nicht zum Repertoire von Dateisystemen gehören. Dazu zählen neben einem erweiterten Speicherbereich die Unterstützung für RAID 0, 1, 5, 6 und 10, Snapshots und Subvolumes sowie die Möglichkeit, Partitionen während des Betriebs zu defragmentieren. Zudem besteht die Möglichkeit, Ext3/4-Partitionen nach Erstellen eines Backups über den Befehl btrfs-convert aus den Btrfs-Tools nach Btrfs umzuwandeln.
Warnung
Verschiedene Distributionen und Fachleute beurteilen die Sicherheit des noch jungen Dateisystems Btrfs unterschiedlich. Dabei kommt es stark auf das Einsatzgebiet und die Funktionen an, die Sie jeweils benutzen.
Btrfs-Chefentwickler Chris Mason, der bei seinem Arbeitgeber Facebook das Dateisystem im Backend im großen Stil einsetzt, sagte, es sei reif für den produktiven Einsatz. Das mobile Betriebssystem Meego setzt ebenfalls auf Btrfs.
Es ließen sich zwar in den Support-Kanälen von Suse jedoch keine Meldungen über Datenverlust in Zusammenhang mit Btrfs und Snapper finden. Um Snapper auszuprobieren, bietet es sich aber an, zuerst ein Testsystem aufzusetzen oder zeitnahe Backups anzulegen, sodass keine wertvollen Daten verloren gehen.
OpenSuse schnappt
Für den Test von Snapper verwendeten wir das Anfang November 2014 veröffentlichte OpenSuse 13.2. Der Einsatz eines möglichst aktuellen Kernels zählt zu den wichtigsten Voraussetzungen für die Arbeit mit Btrfs. Daher aktualisierten wir neben dem kompletten System den Kernel von Version 3.16.7 auf 3.19.1.
Für die Auswahl von OpenSuse als Testplattform war unter anderem maßgeblich, dass der Suse-Entwickler Arvin Schnell federführend Snapper entwickelt hat und es für die Distribution ein grafisches Werkzeug gibt, das das Verwalten der Snapshots erleichtert. Snapper findet sich jedoch auch in den Archiven von anderen Distributionen, wie beispielsweise Arch [3], Debian und Ubuntu.
Konfiguration
Nach der Installation von OpenSuse ist Snapper für die Root-Partition bereits eingerichtet. In diesem Zustand legt es vor und nach jeder Aktion mit YaST oder Zypper einen Snapshot an. Zudem besteht die Möglichkeit, über die sogenannte Timeline stündliche Snapshots zu erstellen; alternativ legen Sie diese von Hand an. Die Software löscht die meisten Schnappschüsse nach einem festgelegten Plan, einige bewahrt es jedoch standardmäßig auf.
Belassen Sie die Einstellungen bei den Vorgaben aus der Datei /etc/snapper/configs/root, dann belegen die Schnappschüsse schnell viel Platz. Dies gilt es beim Partitionieren zu bedenken. Eine Root-Partition, die normalerweise mit 30 GByte Platz auskommt, sollte – je nach geplanter Snapper-Konfiguration – für Snapshots zwischen 100 und 300 GByte Platz erhalten.
Dabei kommt erschwerend hinzu, dass Befehle wie df -h oder du zur Anzeige des belegten und freien Platzes auf den verschiedenen Partitionen der Snapshots, die in Subvolumes liegen, nicht wie erwartet funktionieren. Das ist eines der Ärgernisse von Btrfs, das zur im Internet in diesem Zusammenhang oft zu findenden Fehlermeldung no space left on device führt. Es empfiehlt sich daher, statt der klassischen Befehle grundsätzlich das Kommando btrfs filesystem show zu verwenden (Abbildung 1).

df -h und btrfs filesystem show erhebliche Unterschiede.” width=”300″ height=”187″ />
df -h und btrfs filesystem show erhebliche Unterschiede.Möchten Sie zusätzlich für die Home-Partition Snapper nutzen, so stellen Sie bei der Installation das Dateisystem für diese Partition von XFS auf Btrfs um. Verbleibt Home auf der Root-Partition, erfasst Snapper es nicht.
Nach dem Kernel-Update (Listing 1), aber noch vor dem Aktualisieren des Systems via YaST oder Zypper, sollten Sie die Datei /etc/snapper/configs/root editieren. Hier legen Sie die Intervalle für das Erstellen und Löschen von Schnappschüssen fest. Bei einem Desktop-System lohnt es sich, die vorgegebenen Werte an einigen Stellen herunterzusetzen. Listing 2 zeigt dies exemplarisch für die wichtigsten Stellen. Die Manpage zu snapper-configs gibt hier weiteren Einblick [4]. Eine detaillierte Liste der Parameter finden Sie in der Suse-Dokumentation [5].
Listing 1
$ sudo zypper ar -f http://download.opensuse.org/repositories/Kernel:/stable/standard/ kernel $ zypper ref $ zypper dup -r kernel
Listing 2
# subvolume to snapshot SUBVOLUME="/" # filesystem type FSTYPE="btrfs" [...] # run daily number cleanup NUMBER_CLEANUP="yes" # limit for number cleanup NUMBER_MIN_AGE="1800" NUMBER_LIMIT="10" #create hourly snapshots TIMELINE_CREATE="yes" [...] #cleanup hourly snapshots after some time TIMELINE_CLEANUP="yes" # limits for timeline cleanup TIMELINE_MIN_AGE="1800" TIMELINE_LIMIT_HOURLY="3" TIMELINE_LIMIT_DAILY="2" TIMELINE_LIMIT_MONTHLY="0" TIMELINE_LIMIT_YEARLY="0"
Möchten Sie Schnappschüsse der Home-Partition erstellen, dann legen Sie die entsprechende Konfiguration mittels des Befehls sudo snapper -c home create-config /home an und editieren sie dann analog zu der für Root. Überprüfen Sie anschließend mit sudo snapper list-configs, ob das System beide Subvolumes korrekt eingebunden hat. Neben dem Eintrag für root sollte es jetzt noch einen für home geben (Abbildung 2).

Abbildung 2: Bei Bedarf erstellen Sie weitere Konfigurationen, um von zusätzlichen Bereichen des Dateisystems Schnappschüsse anzulegen.
Die Datei etc/snapper/filters führt Dateien auf, die die Software nie zurückspielt. Hier tragen Sie bei Bedarf selbst Dateien ein, die Sie vom Wiederherstellen ausnehmen möchten. Damit ist die Konfiguration abgeschlossen, ab jetzt können Sie Snapper auch in der grafischen Oberfläche bedienen (Abbildung 3). Den Umgang mit Snapper im Terminal erläutert die entsprechende Manpage [6].

Abbildung 3: Dank grafischer Benutzeroberfläche macht es OpenSuse leicht, Schnappschüsse zu verwalten, zu vergleichen und bei Bedarf wieder einzuspielen.
Bedienung per GUI
Im Kontrollzentrum YaST findet sich unten unter Software | Verschiedenes das Modul Snapper, mit dem Sie unter einer grafischen Benutzeroberfläche Snapshots erstellen, anschauen, vergleichen (Abbildung 4), wieder einspielen oder löschen. Neben den automatischen, via Cron gesteuerten oder bei Updates erzeugten Schnappschüssen legen Sie dort bei Bedarf manuell über die Schaltfläche Erzeugen neue Snapshots an (Abbildung 5).

Abbildung 4: Die grafische Oberfläche, die OpenSuse als YaST-Modul zu Snapper mitliefert, erlaubt den Vergleich zweier Schnappschüsse.
Das ist vor größeren Änderungen an Dateien durchaus sinnvoll. Sollte es hinterher Probleme geben, so spielen Sie über Auswahl wieder herstellen auf einen Zustand vor der Änderung [7] ein (Abbildung 6). Falls sich das System in einem Zustand befindet, der ein Zurückrollen innerhalb der bestehenden Sitzung nicht mehr erlaubt, besteht außerdem die Möglichkeit, beim Neustart in Grub einen Snapshot auszuwählen und diesen zu booten.

Abbildung 6: Haben Sie beim Konfigurieren einen Fehler gemacht, holen Sie sich eine funktionierende Version einer Datei aus einem Schnappschuss ins laufende System.
Ubuntu und Debian
Unter Ubuntu lief der Test mit einer frühen Version von “Vivid Vervet” ab, da hier bereits ein Kernel 3.19 vorinstalliert ist. Eine grafische Oberfläche für Snapper bieten derzeit weder Ubuntu noch Debian. Die Konfiguration verläuft analog zu jener bei OpenSuse.
Im Universe-Repository befinden sich drei Pakete im Zusammenhang mit Snapshots, die Sie, je nach Zielsetzung, installieren sollten: Das Paket snapper sorgt wie bei OpenSuse für die grundlegende Funktionalität. Möchten Sie jedes Mal einen Snapshot erstellen, wenn ein User sich einloggt, so benötigen Sie außerdem libpam-snapper. Das Paket apt-btrfs-snapshot sorgt dafür, dass das System bei jedem Aktualisieren per Apt einen Snapshot erstellt.
Im Prinzip handelt es sich hier um die von Core OS, Ubuntu Snappy Core oder Red Hats Atomic-Projekt bekannten “atomic updates”, auch wenn diese Distributionen das System der Subvolumes als zusätzliche Wurzelsysteme noch ausgefeilter gestalten.
Fazit
Snapper optimiert die Snapshot-Funktion von Btrfs. Das macht es bei Systemen mit fortlaufenden Änderungen zu einem wertvollen Helfer, was vor allem den Entwicklern und Anwendern von Rolling-Release-Distributionen zugute kommt. Hier leistet die Software wertvolle Dienste, indem sie unter anderem das Zurückrollen auf einen Zustand vor dem Aktualisieren ermöglicht.
Betreiben Sie ein stabiles System und installieren nicht jeden Tag größere Mengen Software, dann lohnt es sich, den Aufwand zu kalkulieren, den Snapper verursacht. Unter Umständen kann es sinnvoll sein, die stündlich per Cron erstellten Schnappschüsse abzustellen und nur die automatisierten Snapshots beim Installieren oder Aktualisieren zu nutzen.
Die Stabilität von Btrfs ist in diesem Zusammenhang ein wichtiger Faktor. Während der Tests kamen unter drei Betriebssystemen über 100 Snapshots automatisch und manuell zustande, wurden verglichen, zurückgerollt und aus Grub das System damit gestartet. Dabei verhielten sich Btrfs und Snapper stabil, es gab keine Fehler. Jedoch sollten Sie bedenken, dass Snapper keinen Ersatz für durchgehende Backups darstellt: Es gleicht eher der von Windows bekannten Systemwiederherstellung.
Infos
[1] Btrfs: http://de.wikipedia.org/wiki/Btrfs
[2] ZFS: http://de.wikipedia.org/wiki/ZFS_(Dateisystem)
[3] Snapper bei Arch: https://wiki.archlinux.org/index.php/Snapper#Create_a_new_configuration
[4] Snapper-Konfiguration: http://snapper.io/manpages/snapper-configs.html
[5] Suse-Dokumentation zu Snapper: https://www.suse.com/documentation/sles-12/book_sle_admin/data/sec_snapper_config.html
[6] Manpage zu Snapper: http://snapper.io/manpages/snapper.html
[7] Zurückrollen von Dateien: https://www.suse.com/de-de/documentation/sles11/book_sle_admin/data/sec_snapper_auto.html






