Inhaltsverzeichnis
ArchLinux - Minimal Server Installation - UEFI-Boot, Grub2, LVM, Btrfs mit snapper und xfs - snapper
Mein besonderer Dank gilt hier an dieser Stelle Nicolai Mladenoff (unicks.eu), welcher mich durch seine Videos auf seinem Youtube™-Kanal: unicks.eu erst auf die Idee gebracht hat, unter ArchLinux das Dateisystem Btrfs einzusetzen und mir auch wertvolle Verbesserungen zu meinen bisherigen DokuWiki-Einträgen gegeben hat. Vielen Dank noch mal an dieser Stelle! |
snapper ist ein Werkzeug zur Verwaltung von Linux-Dateisystem-Snapshots. Abgesehen von der offensichtlichen Erstellung und Löschung von Snapshots, kann snapper Snapshots vergleichen und Unterschiede zwischen Snapshots rückgängig machen. Vereinfacht ausgedrückt ermöglicht dies Root- und Nicht-Root-Benutzern, ältere Versionen von Dateien anzuzeigen und Änderungen rückgängig zu machen.
Beschreibung | Externer Link |
---|---|
Homepage | https://www.archlinux.de/ |
Herunterladen | https://www.archlinux.de/download |
Dokumentation | https://wiki.archlinux.de/title/Hauptseite |
Installation | https://wiki.archlinux.de/title/Anleitung_für_Einsteiger |
- LVM | https://wiki.archlinux.de/title/LVM https://tldp.org/HOWTO/LVM-HOWTO/ |
- Btrfs | https://wiki.archlinux.org/index.php/btrfs https://btrfs.wiki.kernel.org |
* Quelle: YouTube - Channel: unicks.eu - Total Arch Linux | 3.4 Snapper auf die leichte Art!
Ab hier werden root
-Rechte zur Ausführung der nachfolgenden Befehle benötigt. Um der Benutzer root
zu werden, geben Sie bitte nachfolgenden Befehl ein:
$ su - Password:
Voraussetzungen
Für die nachfolgende Installation wird vorausgesetzt,
- dass eine lauffähige Version von ArchLinux und für mindestens der ROOT-Partition mit dem Dateisystem: Btrfs vorhanden ist
Die unter nachfolgendem Link beschriebenen Installation von ArchLinux wird hier als Mindestvoraussetzung angenommen:
Installation: snapper
Zum erstellen von Snapshots ist die Nutzung des Programms snapper erforderlich.
Mit nachfolgendem Befehl, kann snapper installiert werden:
[root@vmtest ~]# pacman --noconfirm -S snapper resolving dependencies... looking for conflicting packages... Packages (2) boost-libs-1.80.0-3 snapper-0.10.3-1 Total Download Size: 2.82 MiB Total Installed Size: 10.45 MiB :: Proceed with installation? [Y/n] :: Retrieving packages... boost-libs-1.80.... 2.1 MiB 7.81 MiB/s 00:00 [######################] 100% snapper-0.10.3-1... 726.6 KiB 8.87 MiB/s 00:00 [######################] 100% Total (2/2) 2.8 MiB 6.71 MiB/s 00:00 [######################] 100% (2/2) checking keys in keyring [######################] 100% (2/2) checking package integrity [######################] 100% (2/2) loading package files [######################] 100% (2/2) checking for file conflicts [######################] 100% (2/2) checking available disk space [######################] 100% :: Processing package changes... (1/2) installing boost-libs [######################] 100% Optional dependencies for boost-libs openmpi: for mpi support (2/2) installing snapper [######################] 100% Optional dependencies for snapper pam: pam_snapper [installed] :: Running post-transaction hooks... (1/3) Reloading system manager configuration... (2/3) Arming ConditionNeedsUpdate... (3/3) Reloading system bus configuration...
snapper: root
Nach der erfolgreichen Installation von snapper, soll dieser so konfiguriert werden, dass vom Btrfs: Subvolume - /
(root) - Snapshots erstellt werden können.
Dazu ist die Anlage einer Konfiguration für das Btrfs: Subvolume - /
(root) erforderlich, welche mit nachfolgendem Befehl erzeugt werden kann:
[root@archlinux ~]# snapper -c root create-config /
Die so neu erstellte Konfigurationsdatei ist in nachfolgendem Verzeichnis mit nachfolgendem Namen root
zu finden:
/etc/snapper/configs/root
Mit der Erstellung der Konfiguration für das Btrfs: Subvolume - /
(root), wird auch ein Btrfs: Unter-Subvolume, mit der Bezeichnung
.snapshots
erstellt, wie nachfolgender Befehl zeigt:
[root@vmtest ~]# btrfs subvolume list / ID 256 gen 76 top level 5 path @root ID 257 gen 8 top level 5 path @home ID 258 gen 9 top level 5 path @opt ID 259 gen 19 top level 5 path @srv ID 260 gen 49 top level 5 path @usr_local ID 261 gen 12 top level 5 path @btrfs ID 262 gen 13 top level 5 path @snapshots ID 263 gen 20 top level 256 path var/lib/portables ID 264 gen 21 top level 256 path var/lib/machines ID 265 gen 76 top level 256 path .snapshots
HINWEIS - Das Btrfs: Unter-Subvolume - .snapshots
von root
kann jedoch so NICHT verwendet werden!
Erklärung
Da bei einem möglichen Zurücksetzen auf einen vorherigen „Snapshot“, die in diesem „Snapshot“ enthaltenen „Snapshots“ ebenfalls nicht mehr vorhanden wären, wurde bereits für die Lösung dieses Problems ein eigenes Btrfs: Subvolume /.snapshots
angelegt. Siehe auch den nachfolgenden internen Link
Um das automatisch neu erstellte Btrfs: Unter-Subvolume - .snapshots
zu löschen, kann nachfolgender Befehl verwendet werden:
[root@vmtest ~]# btrfs subvolume delete /.snapshots/ Delete subvolume (no-commit): '//.snapshots'
Zur Überprüfung, ob das Entfernen auch korrekt funktioniert hat, kann nachfolgender Befehl verwendet werden:
[root@vmtest ~]# btrfs subvolume list / ID 256 gen 78 top level 5 path @root ID 257 gen 8 top level 5 path @home ID 258 gen 9 top level 5 path @opt ID 259 gen 19 top level 5 path @srv ID 260 gen 49 top level 5 path @usr_local ID 261 gen 12 top level 5 path @btrfs ID 262 gen 13 top level 5 path @snapshots ID 263 gen 20 top level 256 path var/lib/portables ID 264 gen 21 top level 256 path var/lib/machines
Anschliessend legen wir im Wurzelverzeichnis ein neues Verzeichnis mit dem Namen
/.snapshots
mit nachfolgendem Befehl angelegt:
# [root@vmtest ~]# mkdir /.snapshots
Jetzt muss nur noch die Konfigurationsdatei
/etc/fstab
wie folgt erweitert werden, so dass das neue Verzeichnis /.snapshots
auch auf die mit der ursprünglichen Installation angelegtes Btrfs: Subvolume /.snapshots
(welches KEIN Btrfs: Unter-Subvolume ist), automatisch bei jedem Start mit gemounttet wird:
[root@vmtest ~]# vim /etc/fstab
# /dev/mapper/archlinux-root LABEL=ROOT UUID=5fcb7352-cf13-48a2-bad4-63aaf211b10e / btrfs rw,relatime,compress=zstd:3,space_cache=v2,subvol=/@root 0 1 # /dev/vda1 UUID=BEBA-75BC /boot vfat rw,relatime,fmask=0022,dmask=0022,codepage=437,iocharset=ascii,shortname=mixed,utf8,errors=remount-ro 0 2 # /dev/mapper/archlinux-tmp LABEL=TMP UUID=ea57d0c6-d35c-4847-946a-22095ba5cfa4 /tmp xfs rw,relatime,attr2,inode64,logbufs=8,logbsize=32k,noquota 0 2 # /dev/mapper/archlinux-var_log LABEL=VAR_LOG UUID=bb5ce2db-d7aa-42e6-9902-6da53979eecb /var/log xfs rw,relatime,attr2,inode64,logbufs=8,logbsize=32k,noquota 0 2 # /dev/mapper/archlinux-var_cache LABEL=VAR_CACHE UUID=7e6d08a8-7714-4883-960d-42520d5227b7 /var/cache xfs rw,relatime,attr2,inode64,logbufs=8,logbsize=32k,noquota 0 2 # /dev/mapper/archlinux-var_spool LABEL=VAR_SPOOL UUID=654e831a-f639-4ff9-9ae5-0be86d53cb86 /var/spool xfs rw,relatime,attr2,inode64,logbufs=8,logbsize=32k,noquota 0 2 # /dev/mapper/archlinux-root LABEL=ROOT UUID=5fcb7352-cf13-48a2-bad4-63aaf211b10e /home btrfs rw,relatime,compress=zstd:3,space_cache=v2,subvol=/@home 0 2 # /dev/mapper/archlinux-root LABEL=ROOT UUID=5fcb7352-cf13-48a2-bad4-63aaf211b10e /opt btrfs rw,relatime,compress=zstd:3,space_cache=v2,subvol=/@opt 0 2 # /dev/mapper/archlinux-root LABEL=ROOT UUID=5fcb7352-cf13-48a2-bad4-63aaf211b10e /srv btrfs rw,relatime,compress=zstd:3,space_cache=v2,subvol=/@srv 0 2 # /dev/mapper/archlinux-root LABEL=ROOT UUID=5fcb7352-cf13-48a2-bad4-63aaf211b10e /usr/local btrfs rw,relatime,compress=zstd:3,space_cache=v2,subvol=/@usr_local 0 2 # /dev/mapper/archlinux-root LABEL=ROOT UUID=5fcb7352-cf13-48a2-bad4-63aaf211b10e /btrfs btrfs rw,relatime,compress=zstd:3,space_cache=v2,subvolid=5,subvol=/ 0 2 # /dev/mapper/archlinux-swap LABEL=SWAP UUID=c727a3d1-51f9-4fd3-9c7c-711991a94d3b none swap defaults 0 0 # /dev/mapper/archlinux-root LABEL=ROOT UUID=5fcb7352-cf13-48a2-bad4-63aaf211b10e /.snapshots btrfs rw,relatime,compress=zstd:3,space_cache=v2,subvol=/@snapshots 0 1
*Der letzte Eintrag ist hinzugekommen!
Erklärung
# /dev/mapper/archlinux-root LABEL=ROOT UUID=5fcb7352-cf13-48a2-bad4-63aaf211b10e /.snapshots btrfs rw,relatime,compress=zstd:3,space_cache=v2,subvol=/@snapshots 0 1
Hinzufügen eines Mount-Points (Einhängepunktes im Dateisystem) für das Btrfs: Subvolume - snapshots
, welcher auf das Verzeichnis /.snapshots
zeigt.
HINWEIS - Zum erzeugen des neuen Eintrags kann der erste Eintrag (@root) an das Ende der Konfigurationsdtei /etc/fstab
kopiert werden und die Zeichenfolge @root
gegen @snapshots
ausgetauscht werden!
Um den in der Konfigurationsdatei /etc/fstab
neu hinzugefügten Eintrag manuell zu aktivieren, was sonst ja mit dem (Neu)-Starten des Betriebssystems erfolgt, kann nachfolgender Befehl verwendet werden:
[root@vmtest ~]# mount /.snapshots/ mount: (hint) your fstab has been modified, but systemd still uses the old version; use 'systemctl daemon-reload' to reload.
Wie in der Ausgabe des oben genutzten Befehls beschrieben steht, muss nachfolgender zusätzlich noch ausgeführt werden, damit auch systemd
die Änderungen an der Konfigurationsdatei /etc/fstab
respektiert:
[root@vmtest ~]# systemctl daemon-reload
Ob das manuelle mounten erfolgreich war, kann mit nachfolgendem Befehl überprüft werden:
[root@vmtest ~]# mount | grep -E ^/dev | column -t /dev/mapper/archlinux-root on / type btrfs (rw,relatime,compress=zstd:3,space_cache=v2,subvolid=256,subvol=/@root) /dev/vda1 on /boot type vfat (rw,relatime,fmask=0022,dmask=0022,codepage=437,iocharset=ascii,shortname=mixed,utf8,errors=remount-ro) /dev/mapper/archlinux-tmp on /tmp type xfs (rw,relatime,attr2,inode64,logbufs=8,logbsize=32k,noquota) /dev/mapper/archlinux-var_log on /var/log type xfs (rw,relatime,attr2,inode64,logbufs=8,logbsize=32k,noquota) /dev/mapper/archlinux-var_cache on /var/cache type xfs (rw,relatime,attr2,inode64,logbufs=8,logbsize=32k,noquota) /dev/mapper/archlinux-var_spool on /var/spool type xfs (rw,relatime,attr2,inode64,logbufs=8,logbsize=32k,noquota) /dev/mapper/archlinux-root on /btrfs type btrfs (rw,relatime,compress=zstd:3,space_cache=v2,subvolid=5,subvol=/) /dev/mapper/archlinux-root on /home type btrfs (rw,relatime,compress=zstd:3,space_cache=v2,subvolid=257,subvol=/@home) /dev/mapper/archlinux-root on /opt type btrfs (rw,relatime,compress=zstd:3,space_cache=v2,subvolid=258,subvol=/@opt) /dev/mapper/archlinux-root on /srv type btrfs (rw,relatime,compress=zstd:3,space_cache=v2,subvolid=259,subvol=/@srv) /dev/mapper/archlinux-root on /usr/local type btrfs (rw,relatime,compress=zstd:3,space_cache=v2,subvolid=260,subvol=/@usr_local) /dev/mapper/archlinux-root on /.snapshots type btrfs (rw,relatime,compress=zstd:3,space_cache=v2,subvolid=262,subvol=/@snapshots)
Um sicher zu gehen, das snapper auch weiterhin korrekt funktioniert, kann nachfolgender Befehl verwendet werden, welche den aktuellen Status aller Snapshots auflistet:
[root@vmtest ~]# snapper list # | Type | Pre # | Date | User | Cleanup | Description | Userdata ---+--------+-------+------+------+---------+-------------+--------- 0 | single | | | root | | current |
/etc/snapper/configs/root
Nachfolgende Einstellungen passen das Verhalten von snapper an.
- Es sollen KEINE stündlichen Snapshots durchgeführt werden.
- Die Anzahl der aufzubewahrenden Snapshots soll begrenzt werden.
- Die Anzahl der als wichtig gekennzeichneten Snapshots soll begrenzt werden.
[root@archlinux ~]# vim /etc/snapper/configs/root
[root@archlinux ~]# vim /etc/snapper/configs/root # subvolume to snapshot SUBVOLUME="/" # filesystem type FSTYPE="btrfs" # btrfs qgroup for space aware cleanup algorithms QGROUP="" # fraction of the filesystems space the snapshots may use SPACE_LIMIT="0.5" # fraction of the filesystems space that should be free FREE_LIMIT="0.2" # users and groups allowed to work with config ALLOW_USERS="" ALLOW_GROUPS="" # sync users and groups from ALLOW_USERS and ALLOW_GROUPS to .snapshots # directory SYNC_ACL="no" # start comparing pre- and post-snapshot in background after creating # post-snapshot BACKGROUND_COMPARISON="yes" # run daily number cleanup NUMBER_CLEANUP="yes" # limit for number cleanup # Tachtler # default: NUMBER_MIN_AGE="1800" NUMBER_MIN_AGE="0" # Tachtler # default: NUMBER_LIMIT="50" NUMBER_LIMIT="10" # Tachtler # default: NUMBER_LIMIT_IMPORTANT="10" NUMBER_LIMIT_IMPORTANT="3" # create hourly snapshots # Tachtler # default: TIMELINE_CREATE="yes" TIMELINE_CREATE="no" # cleanup hourly snapshots after some time TIMELINE_CLEANUP="yes" # limits for timeline cleanup TIMELINE_MIN_AGE="1800" TIMELINE_LIMIT_HOURLY="10" TIMELINE_LIMIT_DAILY="10" TIMELINE_LIMIT_WEEKLY="0" TIMELINE_LIMIT_MONTHLY="10" TIMELINE_LIMIT_YEARLY="10" # cleanup empty pre-post-pairs EMPTY_PRE_POST_CLEANUP="yes" # limits for empty pre-post-pair cleanup EMPTY_PRE_POST_MIN_AGE="1800"
Erklärungen:
# run daily number cleanup NUMBER_CLEANUP="yes"
Falls nicht bereits auf „yes“ gesetzt, bewrikt dies, das ab einer gewissen Anzahl ältere Snaphots wieder gelöscht werden
# limit for number cleanup # Tachtler # default: NUMBER_MIN_AGE="1800" NUMBER_MIN_AGE="0"
Bewrikt, das das Alter eines Snapshats ignoriert und nur die Anzahl entscheinden ist, da sonst ggf. unbeabsichtigt automatisch evtl. ein Snapshot gelöscht wird.
# Tachtler # default: NUMBER_LIMIT="50" NUMBER_LIMIT="10"
Anzahl der zu speichernden Snapshots.
# Tachtler # default: NUMBER_LIMIT_IMPORTANT="10" NUMBER_LIMIT_IMPORTANT="3"
Anzahl der zu speichernden - wichtigen - Snapshots.
# create hourly snapshots # Tachtler # default: TIMELINE_CREATE="yes" TIMELINE_CREATE="no"
Verhindert, das jede Stunde automatisch ein Snapshot erstellt wird.
/usr/lib/systemd/system/snapper-cleanup.timer
Damit jedoch stündlich durch den systemd - timer ältere, anhand der vorgegebenen Anzahl der vorhandenen Snapshots automatisch auch gelöscht werden, muss mit nachfolgendem Befehl der mit der Installation mit gekommene systemd
-Timer
/usr/lib/systemd/system/snapper-cleanup.timer
aktiviert werden:
[root@vmtest ~]# systemctl enable --now snapper-cleanup.timer Created symlink /etc/systemd/system/timers.target.wants/snapper-cleanup.timer → /usr/lib/systemd/system/snapper-cleanup.timer.
* Die Angabe des Parameters –now
bewirkt die sofortige Ausführung!
Ob dies korrekt funktioniert hat, kann mit nachfolgendem Befehl überprüft werden:
[root@vmtest ~]# systemctl list-timers NEXT LEFT LAST PASSED UNIT ACTIVATES Sun 2022-11-13 00:00:00 CET 14h left Sat 2022-11-12 07:12:16 CET 1h 50min ago shadow.timer shadow.service Sun 2022-11-13 08:05:06 CET 23h left Sat 2022-11-12 08:05:06 CET 58min ago systemd-tmpfiles-clean.timer systemd-tmpfiles-clean.service Sun 2022-11-13 09:02:44 CET 23h left Sat 2022-11-12 09:02:44 CET 30s ago snapper-cleanup.timer snapper-cleanup.service Sat 2022-11-19 02:29:27 CET 6 days left Sun 2022-11-06 18:29:58 CET 5 days ago archlinux-keyring-wkd-sync.timer archlinux-keyring-wkd-sync.service 4 timers listed. Pass --all to see loaded but inactive timers, too.
HINWEIS - Wichtig ist hier der nachfolgende systemd
-Timer
Sun 2022-11-13 09:02:44 CET 23h left Sat 2022-11-12 09:02:44 CET 30s ago snapper-cleanup.timer snapper-cleanup.service
Installation: grub-btrfs
Damit aus dem mit snapper erstellten Snapshots auch automatisch - Boot-Menü-Einträge für GRUB erstellt werden, ist die Installation des Programms
erforderlich.
Mit nachfolgendem Befehl, kann grub-btrfs installiert werden:
[root@vmtest ~]# pacman --noconfirm -S grub-btrfs
Mit nachfolgendem Befehl, muss eine weitere Abhängigkeit zu grub-btrfs installiert werden:
[root@vmtest ~]# pacman --noconfirm -S inotify-tools
Die Konfiguration für das Programm grub-btrfs ist in nachfolgendem Verzeichnis mit nachfolgendem Namen zu finden:
/etc/grub.d/41_snapshots-btrfs
HINWEIS - Anpassungen müssen hier aktuell KEINE erfolgen!
Installation: snap-pac
Hierbei handelt es sich um eine Reihe von pacman
-„Hooks“ und ein Skript, das automatisiert dafür sorgt, dass snapper jeweils ein Snapshot vor und nach einer pacman
-Transaktionen durchgeführt wird.
Dies bietet eine einfache Möglichkeit, Änderungen an einem System nach einer pacman
-Transaktion rückgängig zu machen.
Mit nachfolgendem Befehl, kann snap-pac installiert werden:
[root@vmtest ~]# pacman --noconfirm -S snap-pac
HINWEIS - Wie bereits an den letzten vier Zeilen der Installation zu sehen ist, wurde bereits ein „Snapshot“ erstellt!
:: Running post-transaction hooks... (1/2) Arming ConditionNeedsUpdate... (2/2) Performing snapper post snapshots for the following configurations... ==> root: 1
Konfiguration: grub-btrfsd.service
Nachfolgender systemd
-Dienst überwacht standardmässig und kontinuierlich, das Verzeichnis
/.snapshots
auf Änderungen und erstellt daraufhin die Konfigurationsdaten/-menü für den „Bootloader“ - GRUB neu.
HINWEIS - Falls ein anderes Verzeichnis als /.snapshots
überwacht werden soll, ist dies in der systemd-Service-Start-Konfigurationsdatei mit nachfolgendem Befehl zu ändern:
# systemctl edit --full grub-btrfsd.service
Dies erstellt eine Kopie in ursprünglichen Konfigurationsdatei:
/usr/lib/systemd/system/grub-btrfsd.service
wie folgt als neue editierte systemd-Service-Start-Konfigurationsdatei unter
/etc/systemd/system/grub-btrfsd.service
Der Inhalt der systemd-Service-Start-Konfigurationsdatei sieht wie folgt aus und kann entsprechend abgeändert werden:
[Unit] Description=Regenerate grub-btrfs.cfg [Service] Type=simple LogLevelMax=notice # Set the possible paths for `grub-mkconfig` Environment="PATH=/sbin:/bin:/usr/sbin:/usr/bin" # Load environment variables from the configuration EnvironmentFile=/etc/default/grub-btrfs/config # Start the daemon, usage of it is: # grub-btrfsd [-h, --help] [-t, --timeshift-auto] [-l, --log-file LOG_FILE] SNAPSHOTS_DIR # SNAPSHOTS_DIR Snapshot directory to watch, without effect when --timeshift-auto # Optional arguments: # -t, --timeshift-auto Automatically detect Timeshifts snapshot directory # -l, --log-file Specify a logfile to write to # -v, --verbose Let the log of the daemon be more verbose # -s, --syslog Write to syslog ExecStart=/usr/bin/grub-btrfsd --syslog /.snapshots [Install] WantedBy=multi-user.target
HINWEIS - Falls Änderungen durchgeführt werden, ist nachfolgender Befehl zusätzlich auszuführen:
# systemctl daemon-reload
ACHTUNG - Hier ist aktuelle KEINE Anpassung der systemd-Service-Start-Konfigurationsdatei durchzuführen!
grub-btrfsd.service-Dienst/Deamon einrichten
Um den grub-btrfsd.service-Dienst/Deamon als Hintergrundprozesse auch nach einem Neustart des Servers zur Verfügung zu haben, soll der Dienste/Daemons mit dem Server mit gestartet werden, was mit nachfolgenden Befehlen realisiert werden kann:
[root@vmtest ~]# # systemctl enable grub-btrfsd Created symlink /etc/systemd/system/multi-user.target.wants/grub-btrfsd.service → /usr/lib/systemd/system/grub-btrfsd.service.
Eine Überprüfung, ob beim Neustart des Server der grub-btrfsd
-Dienst/Deamon wirklich mit gestartet wird, kann mit nachfolgendem Befehl erfolgen und sollte eine Anzeige, wie ebenfalls nachfolgend dargestellt ausgeben:
[root@vmtest ~]# systemctl list-unit-files --type service | grep grub-btrfsd grub-btrfsd.service enabled disabled
bzw.
[root@vmtest ~]# systemctl is-enabled grub-btrfsd enabled
Anschliessend kann der grub-btrfsd.service-Dienst/Daemon - grub-btrfsd
mit nachfolgendem Befehl gestartet werden:
[root@vmtest ~]# systemctl start --now grub-btrfsd.service
Eine Überprüfung ob der grub-btrfsd.service-Dienst/Daemon auch ordnungsgemäss gestartet wurde, kann durch ausführen des nachfolgenden Befehls durchgeführt werden und sollte eine Ausgabe in etwa wie nachfolgende zur Folge haben:
[root@vmtest ~]# systemctl status grub-btrfsd.service ● grub-btrfsd.service - Regenerate grub-btrfs.cfg Loaded: loaded (/usr/lib/systemd/system/grub-btrfsd.service; enabled; pres> Active: active (running) since Sun 2022-12-18 06:48:33 CET; 1s ago Main PID: 785 (grub-btrfsd) Tasks: 2 (limit: 2316) Memory: 856.0K CPU: 16ms CGroup: /system.slice/grub-btrfsd.service ├─785 /bin/sh /usr/bin/grub-btrfsd --syslog /.snapshots └─793 inotifywait -q -q -e create -e delete -e unmount -t 0 /.snap> Dec 18 06:48:33 vmtest grub-btrfsd[786]: grub-btrfsd starting up...
Abschliessend sollte mit nachfolgendem Befehl noch die „Snapshot“-Liste innerhalb des GRUB-„Bootmenüs“ einmalig manuell erzeugt werden, was mit nachfolgendem Befehl durchgeführt werden kann:
[root@vmtest ~]# grub-mkconfig -o /boot/grub/grub.cfg Generating grub configuration file ... Found linux image: /boot/vmlinuz-linux-lts Found initrd image: /boot/initramfs-linux-lts.img Found fallback initrd image(s) in /boot: initramfs-linux-lts-fallback.img Warning: os-prober will not be executed to detect other bootable partitions. Systems on them will not be added to the GRUB boot configuration. Check GRUB_DISABLE_OS_PROBER documentation entry. Adding boot menu entry for UEFI Firmware Settings ... Detecting snapshots ... Found snapshot: 2022-11-12 09:15:39 | @snapshots/1/snapshot | single | snap-pac | Found 1 snapshot(s) Unmount /tmp/grub-btrfs.WELpefJeW3 .. Success done
HINWEIS - Wichtig sind hier die nachfolgenden drei Zeilen:
Detecting snapshots ... Found snapshot: 2022-11-12 09:15:39 | @snapshots/1/snapshot | single | snap-pac | Found 1 snapshot(s)
Installation: pacman-boot-backup-hook
ACHTUNG
Aufgrund der Problematik, dass bei einem UEFI-Boot-System, die Boot-Partition KEIN Btrfs-Subvolume unter der „/“ (root)-Partition ist, sondern eine vfat-Partition ist, ist es erforderlich den Inhalt von /boot , bei einem Kernel-Update separate zu sichern! |
Aus diesem Grund, soll ein weiterer pacman
-Hook zum Einsatz kommen, welcher aus dem
- AUR-Repository
stammt und welchem mit dem Paket:
pacman-boot-backup-hook
installiert werden kann.
Nachfolgend soll das Paket manuell, ohne den Einsatz eines AUR-Helpers installiert werden
Nachfolgender Befehl installiert vorab das Programm git
, welches zum Klonen eines Paketes aus dem AUR-Repository benötigt wird, mit nachfolgendem Befehl:
[root@vmtest ~]# pacman --noconfirm -S git
Anschliessend kann nun das eigentliche Paket pacman-boot-backup-hook
in des Verzeichnis
/tmp/pacman-boot-backup-hook
aus dem AUR-Repository gecloned werden, was mit nachfolgendem Befehl durchgeführt werden kann:
[root@vmtest ~]# git clone https://aur.archlinux.org/pacman-boot-backup-hook.git /tmp/pacman-boot-backup-hook Cloning into '/tmp/pacman-boot-backup-hook'... remote: Enumerating objects: 52, done. remote: Counting objects: 100% (52/52), done. remote: Compressing objects: 100% (38/38), done. remote: Total 52 (delta 13), reused 50 (delta 13), pack-reused 0 Receiving objects: 100% (52/52), 13.09 KiB | 13.09 MiB/s, done. Resolving deltas: 100% (13/13), done.
Anschliessend kann mit nachfolgendem Befehl geprüft werden, ob das Klonen erfolgreich durchgeführt wurden, in dem eine Auflistung des Verzeichnisses /tmp/pacman-boot-backup-hook
mit nachfolgendem Befehl durchgeführt wird:
[root@vmtest ~]# ls -la /tmp/pacman-boot-backup-hook total 36 drwxr-xr-x 3 root root 233 Nov 12 10:01 . drwxrwxrwt 8 root root 192 Nov 12 10:01 .. -rw-r--r-- 1 root root 363 Nov 12 10:01 50_bootbackup.hook -rw-r--r-- 1 root root 284 Nov 12 10:01 backup-boot-partition -rw-r--r-- 1 root root 878 Nov 12 10:01 CHANGELOG drwxr-xr-x 8 root root 163 Nov 12 10:01 .git -rw-r--r-- 1 root root 1070 Nov 12 10:01 LICENSE -rw-r--r-- 1 root root 512 Nov 12 10:01 pacman-boot-backup.conf -rw-r--r-- 1 root root 546 Nov 12 10:01 pacman-boot-backup-hook.install -rw-r--r-- 1 root root 1268 Nov 12 10:01 PKGBUILD -rw-r--r-- 1 root root 700 Nov 12 10:01 .SRCINFO -rw-r--r-- 1 root root 353 Nov 12 10:01 uu_bootbackup.hook
Grundsätzlich kann der Benutzer root
den Befehl makepkg
nicht ausführen, deshalb muss dies als ein nicht privilegierter Benutzer z.B. nobody
ausgeführt werden.
Dazu ist es erforderlich, das der Benutzer nobody
- Schreibrechte bzw. hier sogar die Besitzrechte an dem Verzeichnis /tmp/pacman-boot-backup-hook
erhält, was mit nachfolgendem Befehl durchgeführt werden kann:
[root@vmtest ~]# chown -R nobody:nobody /tmp/pacman-boot-backup-hook
Zur eigentlichen Installation, muss nun aus dem Quellen und den Informationen, wie das Paket erstellt werden soll zuerst in das Verzeichnis /tmp/pacman-boot-backup-hook
mit nachfolgendem Befehl gewechselt werden:
[root@vmtest ~]# cd /tmp/pacman-boot-backup-hook
und anschliessend der Bau (build) des Paketes mit nachfolgendem Befehl durchgeführt werden:
[root@vmtest pacman-boot-backup-hook]# sudo -u nobody makepkg -s ==> Making package: pacman-boot-backup-hook 1.5-1 (Sat 12 Nov 2022 10:17:28 AM CET) ==> Checking runtime dependencies... ==> Checking buildtime dependencies... ==> Retrieving sources... -> Found LICENSE -> Found backup-boot-partition -> Found 50_bootbackup.hook -> Found uu_bootbackup.hook -> Found pacman-boot-backup.conf ==> Validating source files with md5sums... LICENSE ... Passed backup-boot-partition ... Passed 50_bootbackup.hook ... Passed uu_bootbackup.hook ... Passed pacman-boot-backup.conf ... Passed ==> Extracting sources... ==> Entering fakeroot environment... ==> Starting package()... ==> Tidying install... -> Removing libtool files... -> Purging unwanted files... -> Removing static library files... -> Stripping unneeded symbols from binaries and libraries... -> Compressing man and info pages... ==> Checking for packaging issues... ==> Creating package "pacman-boot-backup-hook"... -> Generating .PKGINFO file... -> Generating .BUILDINFO file... -> Adding changelog file... -> Adding install file... -> Generating .MTREE file... -> Compressing package... ==> Leaving fakeroot environment. ==> Finished making: pacman-boot-backup-hook 1.5-1 (Sat 12 Nov 2022 10:17:29 AM CET)
Nachfolgender Befehl listet erneut den Inhalt des Verzeichnisses /tmp/pacman-boot-backup-hook
auf worin nun eine Datei mit der Bezeichnung
pacman-boot-backup-hook-1.5-1-any.pkg.tar.zst
entstanden sein sollte:
[root@vmtest pacman-boot-backup-hook]# ls -la /tmp/pacman-boot-backup-hook total 44 drwxr-xr-x 5 nobody nobody 308 Nov 12 10:17 . drwxrwxrwt 8 root root 192 Nov 12 10:01 .. -rw-r--r-- 1 nobody nobody 363 Nov 12 10:01 50_bootbackup.hook -rw-r--r-- 1 nobody nobody 284 Nov 12 10:01 backup-boot-partition -rw-r--r-- 1 nobody nobody 878 Nov 12 10:01 CHANGELOG drwxr-xr-x 8 nobody nobody 163 Nov 12 10:01 .git -rw-r--r-- 1 nobody nobody 1070 Nov 12 10:01 LICENSE -rw-r--r-- 1 nobody nobody 512 Nov 12 10:01 pacman-boot-backup.conf -rw-r--r-- 1 nobody nobody 5844 Nov 12 10:17 pacman-boot-backup-hook-1.5-1-any.pkg.tar.zst -rw-r--r-- 1 nobody nobody 546 Nov 12 10:01 pacman-boot-backup-hook.install drwxr-xr-x 3 nobody nobody 37 Nov 12 10:17 pkg -rw-r--r-- 1 nobody nobody 1268 Nov 12 10:01 PKGBUILD drwxr-xr-x 2 nobody nobody 133 Nov 12 10:17 src -rw-r--r-- 1 nobody nobody 700 Nov 12 10:01 .SRCINFO -rw-r--r-- 1 nobody nobody 353 Nov 12 10:01 uu_bootbackup.hook
Diese so neu entstandene Datei mit der Bezeichnung pacman-boot-backup-hook-1.5-1-any.pkg.tar.zst
, kann nun wie folgt, wieder als Benutzer root
installiert werden:
[root@vmtest pacman-boot-backup-hook]# pacman --noconfirm -U /tmp/pacman-boot-backup-hook/pacman-boot-backup-hook-1.5-1-any.pkg.tar.zst
Neustart
Ein Neustart kann nun mit nachfolgendem Befehl durchgeführt werden:
root@vmtest ~ # systemctl reboot
Das GRUB-Bootmenü sollte wie folgt aussehen und die folgenden Menüpunkte beinhalten, wie auf nachfolgender Bildschirmkopie zu sehen ist:
Auf einen Snapshot zurücksetzen
Nachfolgender soll das Programm screenfatch
installiert werden und anschliessend die Installation durch starten eines vorhergehenden „Snapshot“ rückgängig gemacht werden.
Mit nachfolgendem Befehl, kann screenfetch
installiert werden:
[root@vmtest ~]# pacman --noconfirm -S screenfetch
Anhand der Ausgabe bei der Installation, kann in Erfahrung gebracht werden das zwei Snapshots erstellt wurden:
- Snapshot:
6
- Vor der Installation vonscreenfetch
- Snapshot:
7
- Nach der Installation vonscreenfetch
Dies kann auch durch Abfrage mit nachfolgendem Befehl bestätigt werden:
[root@vmtest ~]# snapper list # | Type | Pre # | Date | User | Cleanup | Description | Userdata ---+--------+-------+---------------------------------+------+---------+--------------------------------------------------------------------------+--------- 0 | single | | | root | | current | 1 | single | | Sat 12 Nov 2022 09:15:39 AM CET | root | number | snap-pac | 2 | pre | | Sat 12 Nov 2022 09:56:34 AM CET | root | number | pacman --noconfirm -S git | 3 | post | 2 | Sat 12 Nov 2022 09:56:35 AM CET | root | number | git perl-error perl-mailtools perl-timedate | 4 | pre | | Sat 12 Nov 2022 10:24:22 AM CET | root | number | pacman --noconfirm -U /tmp/pacman-boot-backup-hook/pacman-boot-backup-ho | 5 | post | 4 | Sat 12 Nov 2022 10:24:22 AM CET | root | number | pacman-boot-backup-hook | 6 | pre | | Sat 12 Nov 2022 02:03:45 PM CET | root | number | pacman --noconfirm -S screenfetch | 7 | post | 6 | Sat 12 Nov 2022 02:03:45 PM CET | root | number | bc libx11 libxau libxcb libxcomposite libxdmcp libxext libxfixes libxi l |
Eine Überprüfung, ob das Programm screenfetch
aufgerufen und ausgeführt werden kann, kann durch Aufruf des Befehls screenfetch
durchgeführt werden:
[root@vmtest ~]# screenfetch -` .o+` root@vmtest `ooo/ OS: Arch Linux `+oooo: Kernel: x86_64 Linux 5.15.77-1-lts `+oooooo: Uptime: 1m -+oooooo+: Packages: 194 `/:-:++oooo+: Shell: bash 5.1.16 `/++++/+++++++: Disk: 7.9G / 132G (7%) `/++++++++++++++: CPU: Intel Core i7-9700 @ 2x 3GHz `/+++ooooooooooooo/` GPU: Red Hat, Inc. Virtio GPU (rev 01) ./ooosssso++osssssso+` RAM: 280MiB / 1957MiB .oossssso-````/ossssss+` -osssssso. :ssssssso. :osssssss/ osssso+++. /ossssssss/ +ssssooo/- `/ossssso+/:- -:/+osssso+- `+sso+:-` `.-/+oso: `++:. `-/+/ .` `/
Um jetzt die Installation von screenfetch
rückgängig zu machen, kann nachfolgender Befehl nun angewendet werden:
<code> [root@vmtest ~]# snapper -v undochange 6..7 create:0 modify:2 delete:4319 ...
HINWEIS - Auf die Ausgabe der gesamten Liste der Rückgängigmachungen wird hier verzichtet!
Ein erneuter Aufruf des Befehls screenfetch
, sollte nun zu einer Fehlermeldung führen und anzeigen, dass das Programm nicht gefunden werden kann und somit auch nicht installiert ist:
[root@vmtest ~]# screenfetch -bash: /usr/bin/screenfetch: No such file or directory
Einen read-write Snapshot erzeugen und booten
Nachfolgend soll dargestellt werden, wie in einen „Snapshot“ gestartet (gebootet) werden kann, um z.B. ein Kernel-Update rückgängig machen zu können, falls dies einmal schief gegangen sein sollte. |
Kernel-Restore
Nach einem Kernel-Update soll auf den vorherigen Kernel zurückgesetzt werden, in dem ein read-write-„Snapshot“ erzeugt werden soll.
Nachdem es bei der Verwendung von UEFI-Boot eine separate BOOT-Partition mit dem Dateisystem vfat
gibt, kann mit Btrfs-Bordmitteln kein „Snapshot“ von /boot
erstellt werden. Hier ist der Einsatz des pacman-hooks
erforderlich, welcher unter nachfolgendem internen Link installiert wurde:
Dadurch das eine Sicherung des Inhalts des Verzeichnisses /boot
vor und nach der Kernel-Update unter /.bootbackup
erstellt im jeweiligen „Snapshot“ erzeugt wurde, worin alle zum jeweiligen kernel
passenden Teile enthalten sind, sollte dies, wie nachfolgend beschrieben, möglich sein.
WICHTIG - Zum jeweiligen kernel
müssen auch die jeweiligen Dateien
vmlinuz-linux-lts
initramfs-linux-lts-fallback.img
initramfs-linux-lts.img
im Verzeichnis /boot
passen!
Mit nachfolgenden Befehlen und einem Neustart wird aus einem read-only Snapshot wieder ein read-write Snapshot.
Nachfolgender Befehl überprüft, welcher Snapshot aktuell gemountet ist:
[root@vmtest ~]# snapper list # | Type | Pre # | Date | User | Cleanup | Description | Userdata ---+--------+-------+---------------------------------+------+---------+--------------------------------------------------------------------------+--------- 0 | single | | | root | | current | 1 | single | | Sat 12 Nov 2022 09:15:39 AM CET | root | number | snap-pac | 2 | pre | | Sat 12 Nov 2022 09:56:34 AM CET | root | number | pacman --noconfirm -S git | 3 | post | 2 | Sat 12 Nov 2022 09:56:35 AM CET | root | number | git perl-error perl-mailtools perl-timedate | 4 | pre | | Sat 12 Nov 2022 10:24:22 AM CET | root | number | pacman --noconfirm -U /tmp/pacman-boot-backup-hook/pacman-boot-backup-ho | 5 | post | 4 | Sat 12 Nov 2022 10:24:22 AM CET | root | number | pacman-boot-backup-hook | 6 | pre | | Sat 12 Nov 2022 02:03:45 PM CET | root | number | pacman --noconfirm -S screenfetch | 7 | post | 6 | Sat 12 Nov 2022 02:03:45 PM CET | root | number | bc libx11 libxau libxcb libxcomposite libxdmcp libxext libxfixes libxi l | 8 | pre | | Sat 12 Nov 2022 02:19:21 PM CET | root | number | pacman -Syu | 9 | post | 8 | Sat 12 Nov 2022 02:19:35 PM CET | root | number | archlinux-keyring btrfs-progs ca-certificates-mozilla cryptsetup device- |
HINWEIS - (Hier die Nummer 9
- letzter Eintrag in der Liste!)
Eine kurze Überprüfung, welcher kernel
aktuell in Verwendung ist, kann mit nachfolgendem Befehl durchgeführt werden:
[root@vmtest ~]# uname -r 5.15.78-1-lts
Um jetzt mit einen rollback (zurücksetzen) auch auf einen beliebigen startbaren (boot) Snapshot gehen zu können, ist es erforderlich aus dem read-only Snapshot wieder einen read-write Snapshot zu erstellen, was mit nachfolgendem Befehl durchgeführt werden kann:
[root@vmtest ~]# snapper -a classic rollback 8 Ambit is classic. Creating read-only snapshot of current system. (Snapshot 10.) Creating read-write snapshot of snapshot 8. (Snapshot 11.) Setting default subvolume to snapshot 11.
HINWEIS - Der neue „read-write“-„Snapshot“ hat die Nummer 11
!
WICHTIG - Zum jeweiligen kernel
müssen auch die jeweiligen Dateien
vmlinuz-linux-lts
initramfs-linux-lts-fallback.img
initramfs-linux-lts.img
im Verzeichnis /boot
passen!
Welche das sind, kann mit nachfolgendem Befehl ermittelt werden. Die benötigten Dateien befinden sich im Verzeichnis
/.bootbackup
und hier im Unterverzeichnis
/.bootbackup/pre
, was mit nachfolgendem Befehl aufgelistet werden kann:
[root@vmtest ~]# ls -la /.bootbackup/* /.bootbackup/post: total 75108 drwxr-xr-x 1 root root 158 Jan 1 1970 . drwxr-xr-x 1 root root 14 Nov 12 14:19 .. drwxr-xr-x 1 root root 8 Nov 6 18:25 EFI drwxr-xr-x 1 root root 140 Nov 12 14:19 grub -rwxr-xr-x 1 root root 44672101 Nov 12 14:19 initramfs-linux-lts-fallback.img -rwxr-xr-x 1 root root 21623070 Nov 12 14:19 initramfs-linux-lts.img -rwxr-xr-x 1 root root 10606976 Nov 12 14:19 vmlinuz-linux-lts /.bootbackup/pre: total 74872 drwxr-xr-x 1 root root 158 Jan 1 1970 . drwxr-xr-x 1 root root 14 Nov 12 14:19 .. drwxr-xr-x 1 root root 8 Nov 6 18:25 EFI drwxr-xr-x 1 root root 112 Nov 12 14:03 grub -rwxr-xr-x 1 root root 44545808 Nov 12 09:11 initramfs-linux-lts-fallback.img -rwxr-xr-x 1 root root 21512092 Nov 12 09:11 initramfs-linux-lts.img -rwxr-xr-x 1 root root 10608320 Nov 6 18:21 vmlinuz-linux-lts
HINWEIS - Hier ist anhand des Datum deutlich zu erkennen, welche Dateien benötigt werden
Mit nachfolgendem Befehl kann nun der gesammte Inhalt aus dem Verzeichnis
/.bootbackup/pre
nach
/boot
kopiert werden und damit die vorhandenen Dateien überschrieben werden!
[root@vmtest ~]# /usr/bin/cp -arf /.bootbackup/pre/* /boot/
HINWEIS - Bitte hier den Pfad zum binär Programm cp
angeben, da sonst Sicherheitsabfragen erfolgen!
Anschliessend ist mit dem nachfolgendem Befehl das GRUB-Bootmenü noch zu aktualisieren, damit auch in den neusten „Snapshot“ mit der Nummer11
gebootet werden kann. Dies ist hier manuell erforderlich, da auch der „Snapshot“ manuell erzeugt wurde:
[root@vmtest ~]# grub-mkconfig -o /boot/grub/grub.cfg Generating grub configuration file ... Found linux image: /boot/vmlinuz-linux-lts Found initrd image: /boot/initramfs-linux-lts.img Found fallback initrd image(s) in /boot: initramfs-linux-lts-fallback.img Warning: os-prober will not be executed to detect other bootable partitions. Systems on them will not be added to the GRUB boot configuration. Check GRUB_DISABLE_OS_PROBER documentation entry. Adding boot menu entry for UEFI Firmware Settings ... Detecting snapshots ... Found snapshot: 2022-11-12 14:58:50 | @snapshots/11/snapshot | single | writable copy of #8 | Found snapshot: 2022-11-12 14:58:49 | @snapshots/10/snapshot | single | rollback backup | Found snapshot: 2022-11-12 14:56:48 | @snapshots/9/snapshot | post | archlinux-keyring btrfs-progs ca-certificates-mozilla cryptsetup device- | Found snapshot: 2022-11-12 14:56:35 | @snapshots/8/snapshot | pre | pacman -Syu | Found snapshot: 2022-11-12 14:55:43 | @snapshots/7/snapshot | post | bc libx11 libxau libxcb libxcomposite libxdmcp libxext libxfixes libxi l | Found snapshot: 2022-11-12 14:55:42 | @snapshots/6/snapshot | pre | pacman --noconfirm -S screenfetch | Found snapshot: 2022-11-12 10:24:22 | @snapshots/5/snapshot | post | pacman-boot-backup-hook | Found snapshot: 2022-11-12 10:24:22 | @snapshots/4/snapshot | pre | pacman --noconfirm -U /tmp/pacman-boot-backup-hook/pacman-boot-backup-ho | Found snapshot: 2022-11-12 09:56:35 | @snapshots/3/snapshot | post | git perl-error perl-mailtools perl-timedate | Found snapshot: 2022-11-12 09:56:34 | @snapshots/2/snapshot | pre | pacman --noconfirm -S git | Found snapshot: 2022-11-12 09:15:39 | @snapshots/1/snapshot | single | snap-pac | Found 11 snapshot(s) Unmount /tmp/grub-btrfs.F6TQKkqCtV .. Success done
Jetzt kann wie nachfolgend dargestellt in den neu erstellten „Snapshot“ - mit der Nummer 11
gestartet (gebootet) werden.
Dazu wird mit nachfolgendem Befehl ein Neustart ausgeführt:
[root@vmtest ~]# systemctl reboot
Auswahl mit den [↓-Pfeil]-Taste auf den GRUB-Menüpunkt Arch Linux snapshots
und Bestätigung der Auswahl mit der [Enter] oder [Return]-Taste.
Auswahl mit den [↓-Pfeil]-Taste auf den ersten - GRUB - Arch Linux snapshots-Menüpunkt und Bestätigung der Auswahl mit der [Enter] oder [Return]-Taste.
Auswahl mit den [↓-Pfeil]-Taste auf den letzten - GRUB - Arch Linux snapshots-Menüpunkt und Bestätigung der Auswahl mit der [Enter] oder [Return]-Taste.
Nach dem Abschluss des erfolgreichen Neustarts, kann mit nachfolgendem Befehl wieder eine Verbindung per SSH aufgebaut werden:
[klaus@workstation ~]$ ssh -t -2 -p 22 -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null root@192.168.122.22 Warning: Permanently added '192.168.122.22' (ED25519) to the list of known hosts. root@192.168.122.22's password: Last login: Sat Nov 12 15:09:25 2022 from 192.168.122.1
Eine erneute kurze Überprüfung, welcher kernel
aktuell jetzt in Verwendung ist, kann mit nachfolgendem Befehl durchgeführt werden:
[root@vmtest ~]# uname -r 5.15.77-1-lts
Einen snapshot zu root zurücksetzen
Nachdem in einen read-write Snapshot - hier der „Snapshot“ mit der Nummer 11
, gestartet (gebootet) wurde, soll dieser wieder zum root
gemacht werden.
Nachfolgende Überprüfung mit nachfolgendem Befehl zeigt, das von einem „Snapshot“ gestartet (gebootet) wurde:
[root@vmtest ~]# snapper list # | Type | Pre # | Date | User | Cleanup | Description | Userdata ----+--------+-------+---------------------------------+------+---------+--------------------------------------------------------------------------+-------------- 0 | single | | | root | | current | 1 | single | | Sat 12 Nov 2022 09:15:39 AM CET | root | number | snap-pac | 2 | pre | | Sat 12 Nov 2022 09:56:34 AM CET | root | number | pacman --noconfirm -S git | 3 | post | 2 | Sat 12 Nov 2022 09:56:35 AM CET | root | number | git perl-error perl-mailtools perl-timedate | 4 | pre | | Sat 12 Nov 2022 10:24:22 AM CET | root | number | pacman --noconfirm -U /tmp/pacman-boot-backup-hook/pacman-boot-backup-ho | 5 | post | 4 | Sat 12 Nov 2022 10:24:22 AM CET | root | number | pacman-boot-backup-hook | 6 | pre | | Sat 12 Nov 2022 02:55:42 PM CET | root | number | pacman --noconfirm -S screenfetch | 7 | post | 6 | Sat 12 Nov 2022 02:55:43 PM CET | root | number | bc libx11 libxau libxcb libxcomposite libxdmcp libxext libxfixes libxi l | 8 | pre | | Sat 12 Nov 2022 02:56:35 PM CET | root | number | pacman -Syu | 9 | post | 8 | Sat 12 Nov 2022 02:56:48 PM CET | root | number | archlinux-keyring btrfs-progs ca-certificates-mozilla cryptsetup device- | 10 | single | | Sat 12 Nov 2022 02:58:49 PM CET | root | number | rollback backup | important=yes 11* | single | | Sat 12 Nov 2022 02:58:50 PM CET | root | | writable copy of #8 |
HINWEIS - Bitte den letzten Eintrag mit dem 11*
gekennzeichnet beachten!
Dazu soll zuerst der „alte“ Stand von root
mit nachfolgendem Befehl gelöscht werden:
[root@vmtest ~]# rm /btrfs/@root -rf
Anschliessend soll ein read-write - „Snapshot“ vom aktuellen „Snapshot“ von dem gerade gebootet wurde via snapper kopiert werden, was mit nachfolgendem Befehl durchgeführt werden soll:
[root@vmtest ~]# btrfs subvol snapshot /.snapshots/11/snapshot /btrfs Create a snapshot of '/.snapshots/11/snapshot' in '/btrfs/snapshot'
Der so erzeugte read-write Snapshot in nachfolgendem Verzeichnis mit nachfolgendem Namen
/btrfs/snapshot
muss nun noch umbenannt werden, was mit nachfolgendem Befehl durchgeführt werden soll:
[root@vmtest ~]# mv /btrfs/snapshot /btrfs/@root
Anschliessend kann wieder eine Neustart mit nachfolgendem Befehl durchgeführt werden, welcher ohne die Auswahl eines „Snapsots“ durchgeführt werden kann:
[root@vmtest ~]# systemctl reboot
Nach dem Abschluss des erneuten erfolgreichen Neustarts, kann mit nachfolgendem Befehl wieder eine Verbindung per SSH aufgebaut werden:
[klaus@workstation ~]$ ssh -t -2 -p 22 -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null root@192.168.122.22 Warning: Permanently added '192.168.122.22' (ED25519) to the list of known hosts. root@192.168.122.22's password: Last login: Sat Nov 12 15:09:25 2022 from 192.168.122.1
Eine erneute kurze Überprüfung, welcher kernel
aktuell jetzt in Verwendung ist, kann mit nachfolgendem Befehl durchgeführt werden:
[root@vmtest ~]# uname -r 5.15.77-1-lts
Nachfolgende Überprüfung mit nachfolgendem Befehl zeigt, das wieder vom Subvolume - / (root)
gestartet (gebootet) wurde:
[root@vmtest ~]# snapper list # | Type | Pre # | Date | User | Cleanup | Description | Userdata ----+--------+-------+---------------------------------+------+---------+--------------------------------------------------------------------------+-------------- 0 | single | | | root | | current | 1 | single | | Sat 12 Nov 2022 09:15:39 AM CET | root | number | snap-pac | 2 | pre | | Sat 12 Nov 2022 09:56:34 AM CET | root | number | pacman --noconfirm -S git | 3 | post | 2 | Sat 12 Nov 2022 09:56:35 AM CET | root | number | git perl-error perl-mailtools perl-timedate | 4 | pre | | Sat 12 Nov 2022 10:24:22 AM CET | root | number | pacman --noconfirm -U /tmp/pacman-boot-backup-hook/pacman-boot-backup-ho | 5 | post | 4 | Sat 12 Nov 2022 10:24:22 AM CET | root | number | pacman-boot-backup-hook | 6 | pre | | Sat 12 Nov 2022 02:55:42 PM CET | root | number | pacman --noconfirm -S screenfetch | 7 | post | 6 | Sat 12 Nov 2022 02:55:43 PM CET | root | number | bc libx11 libxau libxcb libxcomposite libxdmcp libxext libxfixes libxi l | 8 | pre | | Sat 12 Nov 2022 02:56:35 PM CET | root | number | pacman -Syu | 9 | post | 8 | Sat 12 Nov 2022 02:56:48 PM CET | root | number | archlinux-keyring btrfs-progs ca-certificates-mozilla cryptsetup device- | 10 | single | | Sat 12 Nov 2022 02:58:49 PM CET | root | number | rollback backup | important=yes 11+ | single | | Sat 12 Nov 2022 02:58:50 PM CET | root | | writable copy of #8 |
HINWEIS - Bitte den letzten Eintrag mit dem 11+
gekennzeichnet beachten!
Eine Überprüfung, ob root
gestartet (boot) wurde, kann mit nachfolgendem Befehl durchgeführt werden:
[root@vmtest ~]# mount | grep /@root /dev/mapper/archlinux-root on / type btrfs (rw,relatime,compress=zstd:3,space_cache=v2,subvolid=277,subvol=/@root)
Anschliessend soll das Subvolume - / (root)
wieder der default werden, was mit nachfolgendem Befehl durchgeführt werden kann:
[root@vmtest ~]# btrfs subvolume set-default 0 /
Zur Überprüfung kann nachfolgende Befehl verwendet werden:
[root@vmtest ~]# btrfs subvolume get-default / ID 5 (FS_TREE)
Nachfolgende Überprüfung mit nachfolgendem Befehl zeigt, das von einem „Snapshot“ gestartet (gebootet) wurde:
[root@vmtest ~]# snapper list # | Type | Pre # | Date | User | Cleanup | Description | Userdata ----+--------+-------+---------------------------------+------+---------+--------------------------------------------------------------------------+-------------- 0 | single | | | root | | current | 1 | single | | Sat 12 Nov 2022 09:15:39 AM CET | root | number | snap-pac | 2 | pre | | Sat 12 Nov 2022 09:56:34 AM CET | root | number | pacman --noconfirm -S git | 3 | post | 2 | Sat 12 Nov 2022 09:56:35 AM CET | root | number | git perl-error perl-mailtools perl-timedate | 4 | pre | | Sat 12 Nov 2022 10:24:22 AM CET | root | number | pacman --noconfirm -U /tmp/pacman-boot-backup-hook/pacman-boot-backup-ho | 5 | post | 4 | Sat 12 Nov 2022 10:24:22 AM CET | root | number | pacman-boot-backup-hook | 6 | pre | | Sat 12 Nov 2022 02:55:42 PM CET | root | number | pacman --noconfirm -S screenfetch | 7 | post | 6 | Sat 12 Nov 2022 02:55:43 PM CET | root | number | bc libx11 libxau libxcb libxcomposite libxdmcp libxext libxfixes libxi l | 8 | pre | | Sat 12 Nov 2022 02:56:35 PM CET | root | number | pacman -Syu | 9 | post | 8 | Sat 12 Nov 2022 02:56:48 PM CET | root | number | archlinux-keyring btrfs-progs ca-certificates-mozilla cryptsetup device- | 10 | single | | Sat 12 Nov 2022 02:58:49 PM CET | root | number | rollback backup | important=yes 11 | single | | Sat 12 Nov 2022 02:58:50 PM CET | root | | writable copy of #8 |
HINWEIS - Bitte den letzten Eintrag mit dem 11
gekennzeichnet beachten!
Snapshot(s) löschen
Nachfolgender Befehl ermöglicht es „Snapshots“, zu löschen, vorausgesetzt das nicht aktuell von einem dieser „Snapshots“ gestartet (gebootet) wurde.
Auflistung aller „Snapshots“
[root@vmtest ~]# snapper list # | Type | Pre # | Date | User | Cleanup | Description | Userdata ----+--------+-------+---------------------------------+------+---------+--------------------------------------------------------------------------+-------------- 0 | single | | | root | | current | 1 | single | | Sat 12 Nov 2022 09:15:39 AM CET | root | number | snap-pac | 2 | pre | | Sat 12 Nov 2022 09:56:34 AM CET | root | number | pacman --noconfirm -S git | 3 | post | 2 | Sat 12 Nov 2022 09:56:35 AM CET | root | number | git perl-error perl-mailtools perl-timedate | 4 | pre | | Sat 12 Nov 2022 10:24:22 AM CET | root | number | pacman --noconfirm -U /tmp/pacman-boot-backup-hook/pacman-boot-backup-ho | 5 | post | 4 | Sat 12 Nov 2022 10:24:22 AM CET | root | number | pacman-boot-backup-hook | 6 | pre | | Sat 12 Nov 2022 02:55:42 PM CET | root | number | pacman --noconfirm -S screenfetch | 7 | post | 6 | Sat 12 Nov 2022 02:55:43 PM CET | root | number | bc libx11 libxau libxcb libxcomposite libxdmcp libxext libxfixes libxi l | 8 | pre | | Sat 12 Nov 2022 02:56:35 PM CET | root | number | pacman -Syu | 9 | post | 8 | Sat 12 Nov 2022 02:56:48 PM CET | root | number | archlinux-keyring btrfs-progs ca-certificates-mozilla cryptsetup device- | 10 | single | | Sat 12 Nov 2022 02:58:49 PM CET | root | number | rollback backup | important=yes 11 | single | | Sat 12 Nov 2022 02:58:50 PM CET | root | | writable copy of #8 |
Nachfolgender Befehl löscht alle „Snapshots“ von Nummer 10
bis Nummer 11
:
[root@vmtest ~]# snapper delete 10-11
Nachfolgende Überprüfung mit nachfolgendem Befehl zeigt alle noch aktuell vorhandenen „Snapshots“ an:
[root@vmtest ~]# snapper list # | Type | Pre # | Date | User | Cleanup | Description | Userdata ---+--------+-------+---------------------------------+------+---------+--------------------------------------------------------------------------+--------- 0 | single | | | root | | current | 1 | single | | Sat 12 Nov 2022 09:15:39 AM CET | root | number | snap-pac | 2 | pre | | Sat 12 Nov 2022 09:56:34 AM CET | root | number | pacman --noconfirm -S git | 3 | post | 2 | Sat 12 Nov 2022 09:56:35 AM CET | root | number | git perl-error perl-mailtools perl-timedate | 4 | pre | | Sat 12 Nov 2022 10:24:22 AM CET | root | number | pacman --noconfirm -U /tmp/pacman-boot-backup-hook/pacman-boot-backup-ho | 5 | post | 4 | Sat 12 Nov 2022 10:24:22 AM CET | root | number | pacman-boot-backup-hook | 6 | pre | | Sat 12 Nov 2022 04:08:49 PM CET | root | number | pacman --noconfirm -S screenfetch | 7 | post | 6 | Sat 12 Nov 2022 04:08:50 PM CET | root | number | bc libx11 libxau libxcb libxcomposite libxdmcp libxext libxfixes libxi l | 8 | pre | | Sat 12 Nov 2022 04:10:01 PM CET | root | number | pacman -Syu | 9 | post | 8 | Sat 12 Nov 2022 04:10:15 PM CET | root | number | archlinux-keyring btrfs-progs ca-certificates-mozilla cryptsetup device- |