Benutzer-Werkzeuge

Webseiten-Werkzeuge


tachtler:archlinux_-_minimal_server_installation_-_uefi-boot_grub2_lvm_mit_btrfs_mit_snapper_und_xfs_-_snapper

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.

* 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,

  1. 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.

  1. Es sollen KEINE stündlichen Snapshots durchgeführt werden.
  2. Die Anzahl der aufzubewahrenden Snapshots soll begrenzt werden.
  3. 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

Installationsverlauf

Mit nachfolgendem Befehl, muss eine weitere Abhängigkeit zu grub-btrfs installiert werden:

[root@vmtest ~]# pacman --noconfirm -S inotify-tools

Installationsverlauf

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

Installationsverlauf

:!: 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

Installationsverlauf

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

Installationsverlauf

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:

Archlinux - Installation - UEFI-Boot mit Snapshot Menü

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

Installationsverlauf

Anhand der Ausgabe bei der Installation, kann in Erfahrung gebracht werden das zwei Snapshots erstellt wurden:

  1. Snapshot: 6 - Vor der Installation von screenfetch
  2. Snapshot: 7 - Nach der Installation von screenfetch

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

Archlinux - Install - UEFI-Boot with Snapshot - first boot screen

Auswahl mit den [↓-Pfeil]-Taste auf den GRUB-Menüpunkt Arch Linux snapshots und Bestätigung der Auswahl mit der [Enter] oder [Return]-Taste.

Archlinux - Install - UEFI-Boot with Snapshot - Arch Linux snapshots menu

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.

Archlinux - Install - UEFI-Boot with Snapshot - Arch Linux snapshots menu entry

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- | 
Diese Website verwendet Cookies. Durch die Nutzung der Website stimmen Sie dem Speichern von Cookies auf Ihrem Computer zu. Außerdem bestätigen Sie, dass Sie unsere Datenschutzbestimmungen gelesen und verstanden haben. Wenn Sie nicht einverstanden sind, verlassen Sie die Website.Weitere Information
tachtler/archlinux_-_minimal_server_installation_-_uefi-boot_grub2_lvm_mit_btrfs_mit_snapper_und_xfs_-_snapper.txt · Zuletzt geändert: 2022/12/18 06:49 von klaus