Mit Snapper und Btrfs Dateien auf Knopfdruck wiederherstellen

Aus LinuxUser 05/2016

Mit Snapper und Btrfs Dateien auf Knopfdruck wiederherstellen

© Sellingpix, 123RF

Letzte Rettung

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 relativ jungen Dateisystems Btrfs unterschiedlich. Dabei kommt es stark auf das Einsatzgebiet und die Funktionen an, die Sie jeweils benutzen. Btrfs-Chefentwickler Chris Mason etwa, der bei seinem Arbeitgeber Facebook das Dateisystem im Backend im großen Stil einsetzt, hält Btrfs reif für den produktiven Einsatz. Auch in den Support-Kanälen von Suse ließen sich keine Meldungen über Datenverluste 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 unter Btrfs verwendeten wir die aktuelle OpenSuse Leap 42.1 sowie ein aktuelles Ubuntu 16.04 Beta, für den Versuch unter Ext4 setzten wir auf Siduction aka Debian “Sid”. Da bei der Arbeit mit Btrfs und Snapshots ein aktuelles System samt Kernel wichtig ist, aktualisierten wir alle drei Systeme vor dem Start unserer Versuche auf den neuesten Stand. Bei Suse kam damit Kernel 4.1.15 sowie btrfsprogs 4.1.2-10.1 und snapper 0.2.9.1 auf die Platte. Zusätzlich installierten wir pam_snapper, um Snapper beim Anmelden am System zu starten. Siduction und Ubuntu aktualisierten wir ebenfalls entsprechend.

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. Debian wählten wir, um zu testen, ob Snapper auch unter Ext4 seinen Dienst tut – die Aussagen dazu im Internet widersprechen sich teils. Zudem wollten wir eine Debian-Installation mit Ext4 nach Btrfs umwandeln und Snapper auch dort testen.

Konfiguration

Nach der Installation von OpenSuse Leap 42.1 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).

Abbildung 1: Irritationen beim belegten Speicherplatz: Unter Btrfs gibt es bei den Ausgaben der Befehle <code srcset=

df -h und btrfs filesystem show erhebliche Unterschiede.” width=”300″ height=”187″ /> Abbildung 1: Irritationen beim belegten Speicherplatz: Unter Btrfs gibt es bei den Ausgaben der Befehle 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.

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.

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.

Abbildung 4: Die grafische Oberfläche, die OpenSuse als YaST-Modul zu Snapper mitliefert, erlaubt den Vergleich zweier Schnappschüsse.

Abbildung 5: Bei Bedarf legen Sie von Hand einen Schnappschuss außer der Reihe an.

Abbildung 5: Bei Bedarf legen Sie von Hand einen Schnappschuss außer der Reihe an.

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.

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 Debian Sid/Siduction und Ubuntu versuchten wir, mittels Ext4 Snapper und Snapper-GUI [8] zum Laufen zu bekommen. Dabei erzielten wir bei mehreren Versuchen recht gemischte Ergebnisse, die an einer verlässlichen Funktion zweifeln lassen. Wir brachen diese Versuche letztlich ohne brauchbares Ergebnis ab und raten derzeit vom Einsatz von Ext4 mit Snapper ab.

Da wir bereits alle Bestandteile und Konfigurationen für Snapper und Snapper-GUI installiert hatten, entschieden wir uns, den Versuch zu wagen, das bestehende Ext4-Dateisystem nach Btrfs zu konvertieren. Sucht man im Netz nach Anleitungen zu einer solchen Konvertierung, taucht als einer der ersten Treffer das Ubuntu-Wiki [9] auf. Die dortige Beschreibung entpuppt sich allerdings als völlig unbrauchbar, sie führt zu einem nicht mehr bootfähigen System. Die Debian-Anleitung [10] dagegen führte im Test zum Erfolg: Nach einem anschließendem Neustart funktionierte auch Snapper samt Snapper-Gui. Eine solche Konvertierung dauert allerdings wesentlich länger, als ein System neu mit Btrfs aufzusetzen. Insofern handelt es sich hier eher um eine Fingerübung.

Ubuntu installierten mit Btrfs als Dateisystem entsprechend neu auf einer 30 GByte großen Partition. Dabei nutzten wir auch die Möglichkeit, das System dem Logical Volume Manager [11] anzuvertrauen. Dazu wählen Sie im Installer unter Installationsart zuerst LVM, dann unten Andere…. Dort haben Sie nach einem Rechtsklick auf die entsprechene(n) Partition(en) die Möglichkeit, Btrfs als Dateisystem auszuwählen (Abbildung 7). Der Rest der Installation verläuft wie gewohnt. Nach dem Neustart ins installierte System sollten Sie zunächst das System aktualisieren: Jeder neue Kernel in letzter Zeit brachte Optimierungen auch für Btrfs mit.

Abbildung 7: Im Installer wählen Sie Btrfs aus.

Abbildung 7: Im Installer wählen Sie Btrfs aus.

Danach installieren Sie das Paket snapper, bei Bedarf libpam-snapper, das Snapper beim Anmelden ans System startet, sowie apt-btrfs-snapshot, das dafür sorgt, dass nach jedem Upgrade mit Apt ein Snapshot angelegt wird. Danach gilt es, Snapper-GUI einzurichten. Als Abhängigkeiten erfordert es auf einem aktuellen Ubuntu lediglich die Pakete git und python3-setuptools. Dann laden Sie den Code für die GUI herunter (Listing 3, erste Zeile). Nun wechseln Sie in das dabei neu entstandene Verzeichnis snapper-gui/ und starten die Installation (Zeile 2 und 3). Vor dem ersten Start der grafischen Oberfläche erstellen Sie noch eine Grundkonfiguration für Schnappschüsse des gesamten Systems (Zeile 4).

Listing 3

$ git clone --depth=1 https://github.com/ricardomv/snapper-gui.git
$ cd snapper-gui/
$ sudo python3 setup.py install
$ sudo snapper create-config /

Dann rufen Sie mit sudo snapper-gui die Oberfläche auf, die mit ihren wenigen Bedienelementen weitgehend selbsterklärend ausfällt (Abbildung 8). Sie können Konfigurationen und Snapshots anlegen, öffnen, entfernen und die Unterschiede betrachten (Abbildung 9). Die einzige Abweichung, die wir von der gewohnten Linux-Logik feststellten, stellt das Markieren von zwei Snapshots zum Vergleich der Unterschiede dar: Es gelingt nur mit der linken [Strg]-Taste, woraufhin Snapper-GUI per Klick auf Changes die Änderungen anzeigt (Abbildung 10). Insgesamt bietet die Oberfläche in etwa die gleichen Funktionen wie das YaST-Modul unter OpenSuse. Im Endeffekt ist aber mit etwas Praxis auch das Steuern von Snapper im Terminal kein Hexenwerk.

Abbildung 8: Der erste Snapshot für das Home-Verzeichnis in Snapper-GUI.

Abbildung 8: Der erste Snapshot für das Home-Verzeichnis in Snapper-GUI.

Abbildung 9: Das Überprüfen eines Snapshots für das Gesamtsystem.

Abbildung 9: Das Überprüfen eines Snapshots für das Gesamtsystem.

Abbildung 10: Snapper-GUI zeigt die Unterschiede zweier Snapshots an.

Abbildung 10: Snapper-GUI zeigt die Unterschiede zweier Snapshots an.

Unter Ubuntu, Debian und vermutlich auch unter anderen Distributionen verwendet Snapper dieselben Konfigurationsdateien für Snapshots wie unter OpenSuse. Somit sollten Sie vor dem Betrieb auch hier alle angelegten Konfigurationen unter /etc/snapper/configs überprüfen und bei Bedarf entsprechend Listing 2 oder nach eigenen Vorstellungen anpassen.

Die weitere Handhabung läuft ebenfalls so ab wie weiter oben beschrieben, die entsprechenden Befehle funktionieren auch unter Debian und Ubuntu. Das von uns genutzte LVM benötigen Sie keineswegs zwingend, da Btrfs die Funktionalität des Logical Volume Managers bereits mitbringt. Wir wollten unter anderem testen, ob die quasi gedoppelten Funktionen sich in diesem Fall gegenseitig behindern – worauf der Test keinerlei Hinweise lieferte.

Ein Fehler im Paket apt-btrfs-snapshot verhindert derzeit das automatische Erstellen eines Snapshots bei Aktionen mit dem APT-Paketmanager. Vor einer Systemaktualisierung sollten Sie also per Terminal oder GUI einen Schnappschuss von des Gesamtsystems (/) anstoßen.

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, Snapper und unter Ubuntu die Snapper-GUI stabil: Es gab keine Fehler, die unsere Daten in irgendeiner Weise gefährdeten. Jedoch sollten Sie bedenken, dass Snapper keinen Ersatz für durchgehende Backups darstellt. Es gleicht eher der von Windows bekannten Systemwiederherstellung. 

DIESEN ARTIKEL ALS PDF KAUFEN
EXPRESS-KAUF ALS PDF
LinuxUser 05/2016 KAUFEN
EINZELNE AUSGABE
ABONNEMENTS
TABLET & SMARTPHONE APPS
E-Mail Benachrichtigung
Benachrichtige mich zu:

Hinweis: Dieser Artikel ist älter als ein Jahr, enthaltene Informationen sind möglicherweise veraltet.

0 Kommentare
Älteste
Neuste Beste Bewertung
Inline Feedbacks
Alle Kommentare anzeigen
Nach oben