Workshop: Snapper vereinfacht Btrfs-Snapshots

Bitte recht freundlich

Das Linux-Dateisystem Btrfs speichert den aktuellen Zustand eines Subvolumes in sogenannten Snapshots. Schlägt beispielsweise die Installation einer Anwendung fehl, kann der Anwender über den letzten Snapshot schnell zum alten Zustand zurückkehren. Den Umgang mit den Snapshots vereinfacht das Snapper-Tool.
Open Source-Software findet in immer mehr Unternehmen und Behörden ihren Einsatz. Im Juli widmet IT-Administrator daher seinen Heftschwerpunkt der quelloffenen ... (mehr)

Das von den SUSE-Entwicklern ins Leben gerufene Snapper [1] kann nicht nur Snapshots erstellen und löschen, sondern auch zwei Snapshots miteinander vergleichen. Darüber hinaus lassen sich gezielt Änderungen an einzelnen Dateien zurücknehmen. Auf Wunsch erzeugt Snapper automatisch jede Stunde einen neuen Snapshot. Das Werkzeug unterstützt dabei ACLs (Access Control Lists) und erweiterte Attribute (Extended Attributes). Administratoren können normalen Anwendern die Nutzung von Snapper erlauben, die dann das Tool fast wie eine Versionsverwaltung einsetzen können.

 Dank eines mitgelieferten Zypp-Plugins erstellt unter anderem die Paketverwaltung Zypper jeweils vor und nach ihrer Arbeit selbstständig einen Snapshot. Für das Konfigurationsprogramm YaST gibt es schließlich noch ein Modul, über das Anwender Snapper steuern, Änderungen zwischen Snapshots begutachten und bei Bedarf auch zurücknehmen dürfen. Bei den Suse-Distributionen legt YaST ebenfalls vor jeder Änderung einen Snapshot an.

Pakete für viele Linux-Distributionen

Snapper liegt den aktuellen openSUSE-, SLES- und SLED-Versionen einsatzbereit bei. Die Entwickler bieten aber auch Repositories mit fertigen Paketen für die Linux-Distributionen RHEL 7, CentOS 7, Fedora 20 und 21, Debian 7 und 8 sowie die Ubuntu-Versionen 13.04 bis 15.04. Die jeweils notwendigen Installationsschritte verrät die Download-Seite. Im Fall von Ubuntu 15.04 genügen beispielsweise diese drei Kommandos:

sudo sh -c "echo 'deb http://download.opensuse.org/repositories/filesystems:/snapper/xUbuntu_15.04/ /' > /etc/apt/sources.list.d/snapper.list"
sudo apt-get update
sudo apt-get install snapper

Die Anleitungen für Ubuntu gelten auch für die darauf basierenden Derivate wie Linux Mint oder Kubuntu. Der Quell-code von Snapper steht auf dem SUSE-FTP-Server bereit, die Entwicklung erfolgt offen auf GitHub. Snapper selbst untersteht der liberalen GPLv2, Administratoren dürfen das Tool somit auch im kommerziellen Umfeld kostenfrei einsetzen. Den folgenden Ausführungen liegt die in openSUSE 13.2 enthaltene Snapper-Version 0.2.4 zugrunde. Von der niedrigen Nummer sollten Sie sich nicht abschrecken lassen: Snapper existiert schon seit über zwei Jahren und lag bereits den letzten openSUSE-Versionen bei.

Subvolumes

Auf einer mit Btrfs formatierten Partition können Sie weitere Subvolumes einrichten. Das sind eigenständige Dateisysteme, die sich den Platz auf der Partition dynamisch miteinander teilen. Kommen auf einem Subvolume Dateien hinzu, schrumpft folglich der ver-fügbare Platz für die anderen Subvolumes. Subvolumes lassen sich wie gewohnt in ein Unterverzeichnis mounten, über das sich dann die Inhalte des Subvolumes erreichen lassen.

Nicht nur mit Btrfs

Snapper legt Snapshots mittlerweile nicht mehr nur auf Btrfs-Dateisystemen an, sondern auch auf Ext4-Partitionen und Thin-Provisioned LVM-Volumes. Die Unterstützung für Ext4-Dateisysteme gilt derzeit noch als experimentell, verlangt einen entsprechenden Linux-Kernel und für Snapshots vorbereitete "e2fsprogs". Darüber hinaus muss diese Funktion in Snapper eincompiliert sein, was derzeit nicht bei den Snapper-Versionen in openSUSE und den vom Snapper-Projekt bereitgestellten Paketen der Fall ist. Eine Anleitung für die Zusammenarbeit mit LVM liefert [2]. Setzen Sie Snapper auf ein nicht unterstütztes Dateisystem an, erhalten Sie die Fehlermeldung "invalid filesystem type".

Konfiguration für Subvolumes

Bevor Sie mit Snapper von einem Btrfs-Subvolume einen Snapshot erstellen können, müssen Sie für dieses Subvolume zunächst eine Konfigurationsdatei anlegen. Das wiederum erledigt das Kommandozeilenprogramm "snapper", mit dem Sie auch alle weiteren Arbeiten durchführen. Für das Subvolume mit dem »/home« -Verzeichnis erstellt der folgende Befehl eine passende Konfigurationsdatei mit dem Namen "home":

snapper -c home create-config /home

Wie auch alle folgenden Snapper-Befehle müssen Sie ihn als Root-Benutzer aufrufen, Ubuntu-Nutzer stellen den Befehlen jeweils ein "sudo" voran. Die auf diesem Weg erstellten Konfigurationsdateien sammelt das Unterverzeichnis »/etc/snapper/configs« . Die Snapper-Dokumentation bezeichnet die Dateien übrigens nur kurz als Konfigurationen (Configurations).

Sobald die Konfiguration existiert, kann man direkt einen neuen Snapshot schießen. Der folgende Befehl erstellt einen solchen für das Subvolume unter »/home« :

snapper -c home create --description "Frisches Homeverzeichnis"

Der ganz am Anfang stehende Parameter "-c" wählt die Konfiguration und somit das Subvolume aus. Über den optionalen Parameter "--description" sollten Sie immer noch eine kurze Beschreibung hinterlegen. Sie vereinfacht später die Identifizierung der einzelnen Snapshots. Die wiederum sammelt das Unterverzeichnis .snapshots auf dem entsprechenden Subvolume. Im Beispiel wandern die Snapshots folglich in das Verzeichnis »/home/.snapshots« . Auf die dort von Snapper erstellten Snapshots lässt sich ausschließlich lesend zugreifen (read-only).

Alle für das Subvolume »/home« vorhandenen Snapshots listet der Befehl »snapper -c home list« auf (Bild 1). Snapper nummeriert die Snapshots dabei von oben nach unten durch, in Bild 1 wurde der letzte Snapshot mit der Nummer 3 zuletzt erstellt. Eine Ausnahme ist das aktuelle System, das immer die Nummer 0 trägt.

Bild 1: Hier hat das Snapper-Tool drei Snapshots angelegt.

Ähnliche Artikel

comments powered by Disqus
Einmal pro Woche aktuelle News, kostenlose Artikel und nützliche ADMIN-Tipps.
Ich habe die Datenschutzerklärung gelesen und bin einverstanden.

Konfigurationsmanagement

Ich konfiguriere meine Server

  • von Hand
  • mit eigenen Skripts
  • mit Puppet
  • mit Ansible
  • mit Saltstack
  • mit Chef
  • mit CFengine
  • mit dem Nix-System
  • mit Containern
  • mit anderer Konfigurationsmanagement-Software

Ausgabe /2023