openSUSE:Snapper Tutorial

Wechseln zu: Navigation, Suche

Einführung

Dieser Artikel geht davon aus, dass Sie Snapper mit dem Dateisystem Btrfs verwenden werden.

Bei einer frischen Installation von openSUSE ist die Standard-Verwendung Btrfs auf root, was / bedeutet, und das Dateisystem XFS auf /home. Wenn Sie die Option wählen /home während der openSUSE-Installation nicht zu trennen, ist der Standard für alles, inkl. /home, unter Btrfs zu sein.

Wenn Sie sich während der frischen openSUSE-Installation dafür entscheiden Btrfs & Snapper (Standard) zu verwenden, wird Snapper automatisch für Sie konfiguriert. Diese automatische Konfiguration von Snapper bedeutet, dass Snapshots automatisch gemacht werden, wenn Sie YaST2 und/oder zypper verwenden. Bitte lesen Sie den Absatz Softwareanforderungen unten als Schutzschrift.

Sie können die Dateisysteme EXT3 & EXT4 zu Btrfs konvertieren um Snapper auszunutzen. Es wird sehr davon abgeraten Snapper auf dem Dateisystem EXT4 zu verwenden.

Wichtige Details

Das Standard-Verhalten, wenn Snapper so konfiguriert ist auf root (/) zu laufen, ist das Ausgrenzen von jedem Btrfs-Subvolume. Das ist das gleiche Verhalten wie auf SUSE Linux Enterprise. Das bedeutet, wenn Sie das Subvolume /srv haben, wird Snapper nichts in /srv knipsen, bis Sie ausdrücklich sagen es zu tun. Das bedeutet auch, dass, wenn Sie ein Subvolume zu / irgendwann hinzufügen, es vom Standard-Verhalten von Snapper ausgegrenzt wird.

Seien Sie immer root, wenn Sie Snapper oder YaST2 verwenden, ohne dass es anders festgelegt ist.

YaST2 kommt mit einem Snapper-Modul, das yast2-snapper genannt wird und dazu verwendet werden kann um Snapshots zu prüfen und zu manipulieren. Es hat nicht die Möglichkeit Snapper-Konfigurationen zu ändern. Das muss im Terminal gemacht werden.

Snapshots machen ist automatisch aktiviert, wenn die root-Partition (/) groß genug ist (ungefähr mehr als 8GB). Bitte denken Sie daran: Snapshots machen ist auf anderen Partitionen ausser / nicht standardmäßig aktiviert.

Um zu sehen, welche Subvolumes unter / erstellt wurden und daher zu sehen, welche Verzeichnisse (Subvolumes) vom Standardverhalten von Snapper ausgegrenzt werden:

# btrfs subvolume list /

Um Snapper für Snapshots von Subvolumes zu verwenden, können Sie dies entweder manuell mit dem Snapper-Programm machen, oder eine neue Snapper-Konfigurationsdatei erstellen. Weitere Informationen im Tutorial.


Softwareanforderungen

Sie brauchen immer das Paket:

 snapper

Wenn Sie für Installationen, Aktualisierungen und zum Löschen von Paketen YaST2 verwenden, und wollen, dass Snapper automatisch Snapshots erstellt, wenn Sie dieses Tool verwenden:

 yast2-snapper

Wenn Sie für Installationen, Aktualisierungen und zum Löschen von Paketen zypper verwenden, und wollen, dass Snapper automatisch Snapshots erstellt, wenn Sie dieses Tool verwenden:

 snapper-zypp-plugin

Wenn Sie die Möglichkeit eines fortgeschrittenen Btrfs-Snapshot-Bootmenu-Managements wollen:

 grub2-snapper-plugin

WARNUNG: die oben genannten Pakete sind nicht immer standardmäßig installiert. Bei der Installation kommt es darauf an, was Sie beim openSUSE-Installationsprozess ausgewählt haben. Gehen Sie sicher, dass die notwendigen (normalerweise bedeutet das alle) oben gelisteten Pakete installiert sind, bevor Sie Änderungen am System vornehmen. Ansonsten könnten Sie eine böse Überraschung erleben, wenn Snapper keine automatischen Snapshots generiert hat, obwohl Sie dies eigentlich erwartet hätten.

Snapper Grundlagen

Snapper ist nicht darauf beschränkt Snapshots automatisch durch die Konfiguration zu erstellen und zu verwalten. Man kann auch Snapshot-Paare ("vorher und hinterher") erstellen oder einzelne manuelle Snapshots durch die manuelle Verwendung des Kommandozeilen-Tools oder vom YaST-Modul.

Alle Snapper-Operationen werden für eine existierende Konfiguration ausgeführt. Man kann nur Snapshots von Partitionen oder Volumes machen, für die eine Konfiguration existiert. Standardmäßig wird der Systembenutzer (root) verwendet. Wenn Sie Snapshots für Ihre eigene Konfiguration erstellen oder verwalten wollen, müssen Sie diesen explizit wählen. Verwenden Sie die Momentane Konfiguration Drop-Down-Box in YaST oder geben Sie das -c auf der Kommandozeile (snapper -c MEINEKONFIGURATION BEFEHL) mit an.


Auflisten aller Snapshots für die Standardkonfiguration (root)

 snapper list

oder

 snapper ls


Anzeigen der Änderungen an Dateien und Verzeichnissen zwischen Snapshots

Für Dateien/Verzeichnisse, die zwischen Snapshot 21 und 22 geändert wurden:

 snapper status 21..22

Man kann sich auch anzeigen lassen, welche Dateien und Verzeichnisse zurückgehend vom Snapshot 41 zum 39 geändert wurden:

 snapper status 41..39

Die Ausgabe besteht aus String-Entschlüsselung vom Status gefolgt vom Dateinamen. Die Zeichen vom Status-String sind:

  1. "+" bedeutet, dass die Datei erstellt wurde.
  2. "-" bedeutet, dass die Datei gelöscht wurde.
  3. "c" bedeutet, dass der Dateiinhalt geändert wurde.
  4. "t" bedeutet, dass der Dateityp geändert wurde (z.B. von einer regulären Datei zum Verzeichnis).
  5. "p" bedeutet, dass die Zugriffsrechte geändert wurden.
  6. "u" bedeutet, dass der Besitzer (Benutzer) geändert wurde.
  7. "g" bedeutet, dass der Besitzer (Gruppe) geändert wurde.
  8. "x" bedeutet, dass erweiterte Informationsattribute geändert wurden.
  9. "a" bedeutet, dass die ACL-Information geändert wurde.
  10. "." bedeutet keine Änderungen.


Anzeigen der Unterschiede (Unterschiede in aktuellen Dateien) zwischen Snapshots

Für Unterschiede zwischen Snapshot 71 und 72:

 snapper diff 71..72

Man kann dieses Kommando auch verwenden, um sich Unterschiede zwischen einer speziellen Datei anzeigen zu lassen. Zum Beispiel lässt man sich den Unterschied von Snapshot 71 zu 72 nur für die Datei /etc/zypp/zypp.conf mit Folgendem anzeigen:

 snapper diff 71..72 /etc/zypp/zypp.conf


Säuberungs-Algorithmus

Wenn Sie keinen guten Grund haben es anders zu machen, sollten Sie imer den Säuberungs-Algorithmus mit aufführen, wenn Sie Snapshots erstellen. Sonst wird der Snapshot nie gelöscht, außer Sie machen das manuell. Sie machen das durch das Hinzufügen von Folgendem in Ihrem Snapper-Befehl:

 --cleanup-algorithm <Nummer|Zeitleiste|leeres-vor-nachher>

Die folgenden Befehle gehen davon aus, dass Sie Snapshots in der Standard-Systemkonfiguration (root) erstellen werden. Wie oben erwähnt, fürgen Sie bitte Folgendes im Snapshot-Befehl hinzu, wenn Sie die Nicht-Standard-Konfiguration verwenden wollen:

 -c MEINEKONFIGURATION

Erstellung eines Snapshots vom Typ pre und Ausgabe der Snapshot-Nummer. Der erste Befehl wird gebraucht, um ein Paar von Snapshots zu verwenden und es mit dem jeweiligen Status "vorher" und "nachher" abzuspeichern.

 snapper create --type pre --print-number --description "Vor dem Apache config cleanup" --cleanup-algorithm number

Erstellung eines Snapshots vom Typ post gepaart mit der vorherigen (pre) Snapshot-Nummer 30. Der zweite Befehl wird gebraucht, um ein Paar von Snapshots zu verwenden und es mit dem jeweiligen Status "vorher" und "nachher" abzuspeichern.

 snapper create --type post --pre-number 30 --description "After the Apache config cleanup" --cleanup-algorithm number

Erstellung eines Standalone-Snapshots (Typ single) für die Standardkonfiguration (root) mit einer Beschreibung. Weil kein Säuberungs-Algorithmus mit angegeben ist, wird der Snapshot nie automatisch gelöscht.

 snapper create --description "Snapshot für Woche 2 2014"

Löschen von Snapshots

Löschen von Snapshot 65 für die Standardkonfiguration (root):

 snapper delete 65

Snapper Tutorial

Das folgende Tutorial geht davon aus, dass Sie openSUSE mit YaST (Standard-Installation) installiert haben und Btrfs für Ihr root-(/) und home-Dateisystem (/home) gewählt haben. Der Standard ist, dass man Btrfs auf root verwendet, aber nicht auf /home. Wenn Ihr /home kein Btrfs verwendet, gilt dieses Tutorial auch, aber folgen Sie nicht denjenigen Anweisungen, die dazu dienen um Snapper für /home zu konfigurieren oder zu verwenden.

Zuerst prüft man, wie YaST Snapper konfiguriert hat:

# snapper list-configs
Config | Subvolume
-------+----------
root   | /  

Wie Sie sehen, hat YaST eine Snapper-Config mit dem Namen "root" für Ihr root-Dateisystem erstellt. Sie können sehen, welche Snapshots existieren:

# snapper list
Type   | # | Pre # | Date                         | Cleanup  | Description |  Userdata
-------+---+-------+------------------------------+----------+-------------+---------
single | 0 |       |                              |          | current     |         
single | 1 |       | Tue 22 Nov 2011 10:30:02 CET | timeline | timeline    |

Snapshot #0 zeigt immer auf das momentane System. Es können auch schon unterschiedliche weitere Snapshots da sein, die auf die Laufzeit des Systems verweisen und darauf, ob Sie schon YaST oder zypper verwendet haben.

Jetzt wollen wir Snapper als undo-Tool für YaST ausprobieren. Als erstes starten wir YaST:

# yast2 system_settings

In YaST aktivieren wir die SysReq. Nach dem Beenden von YaST sehen Sie zwei neue Snapshots:

# snapper list
Type   | # | Pre # | Date                         | Cleanup  | Description          | Userdata
-------+---+-------+------------------------------+----------+----------------------+---------
single | 0 |       |                              |          | current              |         
single | 1 |       | Tue 22 Nov 2011 10:30:02 CET | timeline | timeline             |         
pre    | 2 |       | Tue 22 Nov 2011 10:41:28 CET | number   | yast system_settings |         
post   | 3 | 2     | Tue 22 Nov 2011 10:41:49 CET | number   |                      |

Typen von Snapshots

Es wird Zeit die Typen von Snapshots zu erklären. Snapper erstellt vor und nach YaST-Aktivitäten Snapshots. Diese Snapshots werden jeweils pre (vorher) und post (nachher) genannt. Die post-Snapshots wissen, welcher pre-Snapshot zu ihnen gehört. Wenn wir einen pre- und post-Snapshot haben, können wir sehen, welche Änderungen am Dateisystem durchgeführt wurden, während YaST lief. Einzelne Snapshots (single) haben keine spezielle Beziehung zu anderen Snapshots.


Änderungen sehen (YaST)

Durch die Verwendung von Snapper ist es einfach zu sehen, welche Änderungen durchgeführt wurden, während YaST lief. Um das zu machen, geben Sie die Nummer des jeweiligen pre- und post-Snapshots ein:

# snapper status 2..3
c... /etc/sysctl.conf

Das 'c' bedeutet, dass der Inhalt der Datei geändert wurde.

Wir können auch den Unterschied innerhalb der Datei sehen:

# snapper diff 2..3
--- /.snapshots/2/snapshot/etc/sysctl.conf      2011-11-22 10:35:43.355493753 +0100
+++ /.snapshots/3/snapshot/etc/sysctl.conf      2011-11-22 10:41:47.019512185 +0100
@@ -17,7 +17,7 @@
 # See sysctl.conf(5) and sysctl(8) for more information
 #
 ####
-kernel.sysrq = 0
+kernel.sysrq = 1
 net.ipv4.ip_forward = 0
 net.ipv4.tcp_syncookies = 1
 net.ipv6.conf.all.forwarding = 0

Wenn Sie die Änderung, die von YaST durchgeführt wurde, nicht wollen und diese rückgängig machen wollen, führen Sie aus:

# snapper undochange 2..3
create:0 modify:1 delete:0
undoing change...
undoing change done

Denken Sie allerdings daran, dass Snapper dem Kernel nichts über die Änderungen, wie YaST sie gemacht hat, sagt, so dass Sie es dann selbst machen müssen oder ein Neustart notwendig ist.


Hinzufügen von /home zu Snapper

Während der Installation wird von YaST keine Snapper-Config für /home eingerichtet. Wir können das manuell machen:

# snapper -c home create-config /home

Wenn Sie Snapper für /home verwenden wollen, müssen Sie die Option -c home mit angeben.

Jetzt können Sie sehen, welche Dateien seit dem letzten stündlichen Snapshot geändert wurden:

# snapper -c home list
Type   | # | Pre # | Date                         | Cleanup  | Description | Userdata
-------+---+-------+------------------------------+----------+-------------+---------
single | 0 |       |                              |          | current     |         
single | 1 |       | Tue 22 Nov 2011 11:30:01 CET | timeline | timeline    |         
# snapper -c home status 1..0
comparing snapshots... done
+... /home/tux/just-married.jpg

Das '+' bedeutet, dass die Datei neu ist.


Manuelle Erstellung eines Snapshots

Wenn Sie einen Snapshot manuell erstellen wollen, verwenden Sie:

# snapper -c home create --description "vor der großen Reinigung"

YaST Snapper GUI

Zum Schluß bietet yast2-snapper eine YaST-Benutzeroberfläche für Snapper.

Snapper.png


Troubleshooting

Logs

Snapper logs können unter /var/log/snapper.log gefunden werden. Überprüfen Sie diese Datei, wenn Sie Probleme haben. Sie kann hilfreiche Informationen zum Troubleshooting beinhalten.

Snapper Videos

Snapper Quick Overview (4min)

Greg Kroah-Hartman & SUSE Linux Enterprise Product Manager Demo Snapper (~7min)

Snapper, Btrfs & LVM Presentation (22min)