[OpenSUSE] Snapper - Die Basics

Datum

OpenSUSE verwendet aktuell Btrfs als Standard-Dateisystem und Snapper um regelmäßige Snapshots zu erstellen.
Beispielsweise wird vor und nach jedem Aktualisieren oder Installieren von Programmen ein Snapshot von der /-Partition erstellt.
Es lässt sich jeder Snapshot beim Start des Systems im Grub-Bootmenü auswählen und man kann direkt den Snapshot als nur-lesbares System booten um nach dem Start ein Rollback per snapper rollback durchzuführen.

Der Name der Snapper-Konfigurationsdatei lautet: /etc/snapper/configs/root und die Logdatei lautet: /var/log/snapper.log

Um eine Auflistung der btrfs-Subvolumes unter / zu sehen verwendet man btrfs subvolume list /

# btrfs subvolume list /
ID 257 gen 80 top level 5 path @
ID 258 gen 247 top level 257 path @/.snapshots
ID 259 gen 473 top level 258 path @/.snapshots/1/snapshot
ID 260 gen 122 top level 257 path @/boot/grub2/i386-pc
ID 261 gen 80 top level 257 path @/boot/grub2/x86_64-efi
ID 262 gen 257 top level 257 path @/home

Auflisten der vorhandenen Snapshots

für eine einfache Liste verwendet man snapper list oder snapper ls

# snapper list
Type   | #  | Pre # | Date                     | User | Cleanup | Description           | Userdata     
-------+----+-------+--------------------------+------+---------+-----------------------+--------------
single | 0  |       |                          | root |         | current               |              
single | 1  |       | Mon Feb  5 10:39:38 2018 | root |         | first root filesystem |              
single | 2  |       | Mon Feb  5 10:42:07 2018 | root | number  | nach der Installation | important=yes
pre    | 3  |       | Mon Feb  5 10:54:14 2018 | root | number  | zypp(zypper)          | important=yes
post   | 4  | 3     | Mon Feb  5 10:59:07 2018 | root | number  |                       | important=yes
pre    | 5  |       | Mon Feb  5 11:48:20 2018 | root | number  | zypp(zypper)          | important=no 
post   | 6  | 5     | Mon Feb  5 11:48:21 2018 | root | number  |                       | important=no 
pre    | 7  |       | Mon Feb  5 11:51:45 2018 | root | number  | zypp(zypper)          | important=no 
post   | 8  | 7     | Mon Feb  5 11:52:04 2018 | root | number  |                       | important=no 
pre    | 9  |       | Mon Feb  5 12:43:25 2018 | root | number  | zypp(zypper)          | important=no 
post   | 10 | 9     | Mon Feb  5 12:43:27 2018 | root | number  |                       | important=no 

Typen:
single – ein einfacher Snapshot
pre / post – Vor- bzw. Nach dem Ereignis (Update, Installation von Programmen, etc.) erstellter Snapshot

Auflisten aller seperat gemachten (single) Snapshots

# snapper list -t single
# | Date                     | User | Description           | Userdata     
--+--------------------------+------+-----------------------+--------------
0 |                          | root | current               |              
1 | Mon Feb  5 10:39:38 2018 | root | first root filesystem |              
2 | Mon Feb  5 10:42:07 2018 | root | nach der Installation | important=yes

Auflisten aller Pre/Post-Snapshots

# snapper list -t pre-post
Pre # | Post # | Pre Date                 | Post Date                | Description  | Userdata     
------+--------+--------------------------+--------------------------+--------------+--------------
3     | 4      | Mon Feb  5 10:54:14 2018 | Mon Feb  5 10:59:07 2018 | zypp(zypper) | important=yes
5     | 6      | Mon Feb  5 11:48:20 2018 | Mon Feb  5 11:48:21 2018 | zypp(zypper) | important=no 
7     | 8      | Mon Feb  5 11:51:45 2018 | Mon Feb  5 11:52:04 2018 | zypp(zypper) | important=no 
9     | 10     | Mon Feb  5 12:43:25 2018 | Mon Feb  5 12:43:27 2018 | zypp(zypper) | important=no 

Um zu nachzuschauen was sich zwischen den einzelnen Snapshots geändert hat, verwendet man snapper status 3..4

# snapper status 5..6
+..... /etc/rpm/macros.desktop-file-utils
+..... /etc/rpm/macros.update-desktop-files
+..... /usr/bin/desktop-file-edit
+..... /usr/bin/desktop-file-install
c..... /var/lib/rpm/Packages
c..... /var/lib/rpm/Providename
c..... /var/lib/rpm/Requirename

+ bedeutet, dass diese Datei hinzugefügt wurde
bedeutet, dass diese Datei entfernt wurde
c bedeutet, dass sich der Inhalt dieser Datei geändert hat

wenn man es noch genauer wissen möchte, kann man sich die Veränderungen in den entsprechenden Dateien mit snapper diff 9..10 anschauen, hierbei werden sämtliche diffs der verschiedenen Dateien hintereinander ausgegeben.

# snapper diff 9..10
--- /.snapshots/9/snapshot/etc/group    2018-02-05 11:51:56.054090466 +0100
+++ /.snapshots/10/snapshot/etc/group   2018-02-05 12:43:26.751537011 +0100
@@ -46,3 +46,4 @@
 maildrop:x:59:postfix
 adm:x:487:
 ntadmin:x:71:
+nginx:x:486:
--- /.snapshots/9/snapshot/etc/group-   2018-02-05 10:43:37.000000000 +0100
+++ /.snapshots/10/snapshot/etc/group-  2018-02-05 11:51:56.000000000 +0100
@@ -45,3 +45,4 @@
 postfix:x:51:
 maildrop:x:59:postfix
...

dabei kann man natürlich auch die Änderung in einer bestimmten Datei anschauen:

# snapper diff 9..10 /etc/group
--- /.snapshots/9/snapshot/etc/group	2018-02-05 11:51:56.054090466 +0100
+++ /.snapshots/10/snapshot/etc/group	2018-02-05 12:43:26.751537011 +0100
@@ -46,3 +46,4 @@
 maildrop:x:59:postfix
 adm:x:487:
 ntadmin:x:71:
+nginx:x:486:

Änderung rückgängig machen

um die Änderungen zwischen 2 Snapshots rückgängig zu machen, benutzt man den Befehl
snapper undochange <snapshot-ID>..<snapshot-ID>

# snapper -v undochange 11..12
create:0 modify:11 delete:105
deleting /usr/share/scite/yaml.properties
deleting /usr/share/scite/vhdl.properties
deleting /usr/share/scite/verilog.properties
...

Hierbei habe ich den Parameter -v nur mit angegeben, damit die entsprechenden Änderungen angezeigt werden.

Snapshot löschen

Einen Snapshot entfernt man mit snapper delete <Snapshot-ID>
Es läst sich auch ein bestimmter Bereich mit einmal entfernen: snapper delete <Nummer1>-<Nummer2>
Ein Beispiel wäre: snapper delete 3-25 um alle Snapshots, beginnend mit der ID 3, bis zur ID 25 zu löschen.

# snapper -v delete 11
Deleting snapshot from root:
11

Andere Partition von snapper sichern lassen

hinzufügen von /home zu Snapper: snapper -c home create-config /home
Ob es funktioniert hat, kann man mit snapper list-configs überprüfen:

Vorher

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

Nachher

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

Snapshot manuell erstellen

Nun kann man /home wie folgt sichern: snapper -c home create --description "before the big cleanup"
Zur Überprüfung kann man snapper -c home list verwenden:

# snapper -c home create --description "before the big cleanup"
# snapper -c home list
Type   | # | Pre # | Date                     | User | Cleanup | Description            | Userdata
-------+---+-------+--------------------------+------+---------+------------------------+---------
single | 0 |       |                          | root |         | current                |         
single | 1 |       | Tue Feb  6 13:38:23 2018 | root |         | before the big cleanup | 

Snapshot umbennen

Dies geschieht mit snapper modify --userdata "bootloader=<STRING>" <Snaphot-ID>

Beispiel:
# snapper modify --userdata "bootloader=Snapshot666" 9

Snapper Video

ein Video mit einer Demonstration von Snapper:

openSUSE | Btrfs - Snapper Basics

www.youtube.com/watch?v=1nJ6PjGQSHE

Autor
Kategorien OpenSUSE, Btrfs

PRTG Map