Benutzer-Werkzeuge

Webseiten-Werkzeuge


tachtler:archlinux_-_minimal_server_installation_-_mit_lvm_und_btrfs_snapper

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

tachtler:archlinux_-_minimal_server_installation_-_mit_lvm_und_btrfs_snapper [2022/07/15 12:07] – [UEFI-Boot: Einen read-write snapshot erzeugen] klaustachtler:archlinux_-_minimal_server_installation_-_mit_lvm_und_btrfs_snapper [Unbekanntes Datum] (aktuell) – gelöscht - Externe Bearbeitung (Unbekanntes Datum) 127.0.0.1
Zeile 1: Zeile 1:
-====== ArchLinux - Minimal Server Installation - mit LVM und Btrfs - snapper====== 
- 
-|   Mein besonderer Dank gilt hier an dieser Stelle [[http://unicks.eu|Nicolai Mladenoff (unicks.eu)]], welcher mich durch seine Videos auf seinem [[https://www.youtube.com|Youtube]]™-Kanal: [[https://www.youtube.com/channel/UCnZIn_CYjz0ErPs1ktH-2lQ|unicks.eu]] erst auf die Idee gebracht hat, unter [[https://www.archlinux.de/|ArchLinux]] das Dateisystem [[https://btrfs.wiki.kernel.org|Btrfs]] einzusetzen und mir auch wertvolle Verbesserungen zu meinen bisherigen [[https://www.dokuwiki.org|DokuWiki]]-Einträgen gegeben hat. **Vielen Dank noch mal an dieser Stelle!**   | 
-   
-[[tachtler:ArchLinux|{{:tachtler:index:archlinux-48x48.png }}]] Die hier verwendete Installationsmethode ist eine **Installation von einem ISO-Image/USB-Stick**. Es kommt die einzige verfügbare Variante von [[https://www.archlinux.de/|ArchLinux]] in der **Version 2020.01.01** zum Einsatz. 
- 
-[[http://snapper.io|snapper]] ist ein Werkzeug zur Verwaltung von Linux-Dateisystem-Snapshots. Abgesehen von der offensichtlichen Erstellung und Löschung von Snapshots, kann [[http://snapper.io|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%C3%BCr_Einsteiger|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: [[https://www.youtube.com/watch?v=GgGirRYAkF0|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: 
-<code> 
-$ su - 
-Password:  
-</code> 
- 
-===== Voraussetzungen ===== 
- 
-Für die nachfolgende Installation wird vorausgesetzt,  
-  - dass eine lauffähige Version von [[https://www.archlinux.de/|ArchLinux]] mit dem **Dateisystem: Btrfs** vorhanden ist 
-Eine der unter nachfolgenden Links beschriebenen Installationen von [[https://www.archlinux.de/|ArchLinux]] wird hier als Mindestvoraussetzung angenommen: 
-  * [[tachtler:archlinux_-_minimal_server_installation_-_mit_lvm_und_btrfs|ArchLinux - Minimal Server Installation - mit LVM und Btrfs]] 
- 
-===== Installation: snapper ===== 
- 
-Zum erstellen von **Snapshots** ist die Nutzung des Programms [[http://snapper.io|snapper]] erforderlich. 
- 
-Mit nachfolgendem Befehl, kann [[http://snapper.io|snapper]] installiert werden: 
-<code> 
-[root@archlinux ~]# pacman --noconfirm -S snapper 
-resolving dependencies... 
-looking for conflicting packages... 
- 
-Packages (2) boost-libs-1.72.0-4  snapper-0.8.14-1 
- 
-Total Download Size:    3.33 MiB 
-Total Installed Size:  13.81 MiB 
- 
-:: Proceed with installation? [Y/n]  
-:: Retrieving packages... 
- boost-libs-1.72....     2.6 MiB  9.95 MiB/s 00:00 [#####################] 100% 
- snapper-0.8.14-1...   756.2 KiB  12.3 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... 
-</code> 
- 
-===== Konfiguration: snapper ===== 
- 
-==== snapper: root ==== 
- 
-Nach der erfolgreichen Installation von [[http://snapper.io|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: 
-<code> 
-[root@archlinux ~]# snapper -c root create-config / 
-</code> 
- 
-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: 
-<code> 
-[root@archlinux ~]# btrfs subvolume list / 
-ID 256 gen 6 top level 5 path @tmp 
-ID 258 gen 7 top level 5 path @home 
-ID 259 gen 8 top level 5 path @var_log 
-ID 260 gen 9 top level 5 path @var_pkg 
-ID 261 gen 33 top level 5 path @root 
-ID 263 gen 20 top level 5 path @srv 
-ID 264 gen 13 top level 5 path @opt 
-ID 265 gen 20 top level 5 path @usr_local 
-ID 266 gen 15 top level 5 path @snapshots 
-ID 269 gen 23 top level 262 path @var/lib/portables 
-ID 270 gen 24 top level 262 path @var/lib/machines 
-ID 271 gen 33 top level 261 path .snapshots 
-</code> 
- 
-:!: **HINWEIS** - **Das Btrfs: __Unter__-Subvolume - ''.snapshots'' von ''root'' kann __NICHT__ verwendet werden!** 
- 
-**__Erklärung__** 
- 
-**Da bei einem möglichen Zurücksetzen auf einen vorherigen Snapshot, dann die Snapshots darin ebenfalls nicht mehr vorhanden wären! - Dafür wurde ein eigenes Btrfs: Subvolume ''/.snapshots'' angelegt. Siehe auch den nachfolgenden internen Link** 
-  * **[[tachtler:archlinux_-_minimal_server_installation_-_mit_lvm_und_btrfs#partitionierungfdisk|ArchLinux - Minimal Server Installation - mit und LVM Btrfs - Partitionierung: fdisk]]** 
- 
-Um das automatisch neu erstellte  **Btrfs: __Unter__-Subvolume - ''.snapshots''** zu löschen, kann nachfolgender Befehl verwendet werden: 
-<code> 
-[root@archlinux ~]# btrfs subvolume delete /.snapshots/ 
-Delete subvolume (no-commit): '//.snapshots' 
-</code> 
- 
-Zur Überprüfung, ob das Entfernen auch korrekt funktioniert hat, kann nachfolgender Befehl verwendet werden: 
-<code> 
-[root@archlinux ~]# btrfs subvolume list / 
-ID 256 gen 6 top level 5 path @tmp 
-ID 258 gen 7 top level 5 path @home 
-ID 259 gen 8 top level 5 path @var_log 
-ID 260 gen 9 top level 5 path @var_pkg 
-ID 261 gen 34 top level 5 path @root 
-ID 263 gen 20 top level 5 path @srv 
-ID 264 gen 13 top level 5 path @opt 
-ID 265 gen 20 top level 5 path @usr_local 
-ID 266 gen 15 top level 5 path @snapshots 
-ID 269 gen 23 top level 262 path @var/lib/portables 
-ID 270 gen 24 top level 262 path @var/lib/machines 
-</code> 
- 
-Anschließend legen wir im Wurzelverzeichnis ein neues Verzeichnis mit dem Namen  
-  * **''/.snapshots''** 
-mit nachfolgendem Befehl an: 
-<code> 
-# [root@archlinux ~]# mkdir /.snapshots 
-</code> 
- 
-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 ge**mount**tet wird: 
-<code> 
-[root@archlinux ~]# vim /etc/fstab 
-</code> 
-<code ini> 
-# /dev/mapper/archlinux-root LABEL=ROOT 
-UUID=1c250bce-9e86-4d82-b921-3eca687f8403 /          btrfs      rw,relatime,compress=zstd:3,space_cache=v2,subvol=/@root,subvol=@root 0 0 
- 
-# /dev/mapper/archlinux-tmp LABEL=TMP 
-UUID=9c21c98c-57ea-4b0d-9064-4584393cc97f /tmp      btrfs      rw,relatime,compress=zstd:3,space_cache=v2,subvolid=5,subvol=/ 0 0 
- 
-# /dev/mapper/archlinux-home LABEL=HOME 
-UUID=85d0ca9b-def5-4478-9f75-ce20b121a49d /home      btrfs      rw,relatime,compress=zstd:3,space_cache=v2,subvolid=5,subvol=/ 0 0 
- 
-# /dev/mapper/archlinux-var_log LABEL=VAR_LOG 
-UUID=3aca2eca-ab55-4655-a844-cac43f8fea6a /var/log  btrfs      rw,relatime,compress=zstd:3,space_cache=v2,subvolid=5,subvol=/ 0 0 
- 
-# /dev/mapper/archlinux-var_pkg LABEL=VAR_PKG 
-UUID=24b7d52d-ba82-4173-b730-daca60f076e8 /var/cache/pacman/pkg btrfs      rw,relatime,compress=zstd:3,space_cache=v2,subvolid=5,subvol=/ 0 0 
- 
-# /dev/mapper/archlinux-root LABEL=ROOT 
-UUID=1c250bce-9e86-4d82-b921-3eca687f8403 /srv      btrfs      rw,relatime,compress=zstd:3,space_cache=v2,subvol=/@srv,subvol=@srv 0 0 
- 
-# /dev/mapper/archlinux-root LABEL=ROOT 
-UUID=1c250bce-9e86-4d82-b921-3eca687f8403 /opt      btrfs      rw,relatime,compress=zstd:3,space_cache=v2,subvol=/@opt,subvol=@opt 0 0 
- 
-# /dev/mapper/archlinux-root LABEL=ROOT 
-UUID=1c250bce-9e86-4d82-b921-3eca687f8403 /usr/local btrfs      rw,relatime,compress=zstd:3,space_cache=v2,subvol=/@usr_local,subvol=@usr_local 0 0 
- 
-# /dev/mapper/archlinux-root LABEL=ROOT 
-UUID=1c250bce-9e86-4d82-b921-3eca687f8403 /btrfs    btrfs      rw,relatime,compress=zstd:3,space_cache=v2,subvolid=5,subvol=/ 0 0 
- 
-# /dev/mapper/archlinux-swap LABEL=SWAP 
-UUID=b76e9dd3-ffc3-483d-8e2b-fd397bf7c4a8 none      swap      defaults  0 0 
- 
-# /dev/mapper/archlinux-root LABEL=ROOT 
-UUID=1c250bce-9e86-4d82-b921-3eca687f8403 /.snapshots          btrfs      rw,relatime,compress=zstd:3,space_cache=v2,subvol=/@snapshots,subvol=@snapshots 0 0 
- 
-</code> 
-** *//Der __letzte__ Eintrag ist hinzugekommen!//** 
- 
-**__Erklärung__** 
- 
-  * <code ini># /dev/mapper/archlinux-root LABEL=ROOT 
-UUID=1c250bce-9e86-4d82-b921-3eca687f8403 /.snapshots          btrfs      rw,relatime,compress=zstd:3,space_cache=v2,subvol=/@snapshots,subvol=@snapshots 0 0</code> 
- 
-Hinzufügen eines **Mount**-Points (Einhängepunktes im Dateisystem) für das **Btrfs: Subvolume** - ''snapshots'' auf das Verzeichnis ''/.snapshots''. 
- 
-Um den in der Konfigurationsdatei ''/etc/fstab'' neu hinzugefügten Eintrag per Hand zu aktivieren, was sonst ja mit dem Starten des Betriebssystems erfolgen wird, kann nachfolgender Befehl verwendet werden: 
-<code> 
-[root@archlinux ~]# mount /.snapshots/ 
-</code>  
- 
-Ob das **mount**en von Hand erfolgreich war, kann mit nachfolgendem Befehl überprüft werden: 
-<code> 
-[root@archlinux ~]# mount | grep /dev/mapper 
-/dev/mapper/archlinux-root on / type btrfs (rw,relatime,compress=zstd:3,space_cache=v2,subvolid=261,subvol=/@root) 
-/dev/mapper/archlinux-root on /btrfs type btrfs (rw,relatime,compress=zstd:3,space_cache=v2,subvolid=5,subvol=/) 
-/dev/mapper/archlinux-root on /opt type btrfs (rw,relatime,compress=zstd:3,space_cache=v2,subvolid=264,subvol=/@opt) 
-/dev/mapper/archlinux-root on /srv type btrfs (rw,relatime,compress=zstd:3,space_cache=v2,subvolid=263,subvol=/@srv) 
-/dev/mapper/archlinux-root on /var type btrfs (rw,relatime,compress=zstd:3,space_cache=v2,subvolid=265,subvol=/@usr_local) 
-/dev/mapper/archlinux-tmp on /tmp type btrfs (rw,relatime,compress=zstd:3,space_cache=v2,subvolid=5,subvol=/) 
-/dev/mapper/archlinux-home on /home type btrfs (rw,relatime,compress=zstd:3,space_cache=v2,subvolid=5,subvol=/) 
-/dev/mapper/archlinux-var_pkg on /var/cache/pacman/pkg type btrfs (rw,relatime,compress=zstd:3,space_cache=v2,subvolid=5,subvol=/) 
-/dev/mapper/archlinux-var_log on /var/log type btrfs (rw,relatime,compress=zstd:3,space_cache=v2,subvolid=5,subvol=/) 
-/dev/mapper/archlinux-root on /.snapshots type btrfs (rw,relatime,compress=zstd:3,space_cache=v2,subvolid=266,subvol=/@snapshots) 
-</code> 
- 
-Um sicher zu gehen, das [[http://snapper.io|snapper]] auch weiterhin korrekt funktioniert, kann nachfolgender Befehl verwendet werden, welche den aktuellen Status aller **Snapshots** auflistet: 
-<code> 
-[root@archlinux ~]# snapper list 
- # | Type   | Pre # | Date | User | Cleanup | Description | Userdata 
----+--------+-------+------+------+---------+-------------+--------- 
-0  | single |            | root |         | current     | 
-</code> 
- 
-==== /etc/snapper/configs/root ==== 
- 
-Nachfolgende Einstellungen passen das Verhalten von [[http://snapper.io|snapper]] an. 
-  - Es sollen **__KEINE__ stündlichen Snapshots** durchgeführt werden. 
-  - Die **Anzahl von aufzubewahrenden Snapshots** soll begrenzt werden. 
-  - Die **Anzahl der als __wichtig__ gekennzeichneten Snapshots** soll begrenzt werden. 
-<code> 
-[root@archlinux ~]# vim /etc/snapper/configs/root 
-</code> 
- 
-<code ini> 
- 
-# 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" 
-</code> 
- 
-**__Erklärungen__**: 
- 
-  * <code ini># run daily number cleanup 
-NUMBER_CLEANUP="yes"</code> 
- 
-Falls nicht bereits auf **"yes"** gesetzt, bewrikt dies, das ab einer gewissen Anzahl ältere **Snaphots** wieder gelöscht werden 
- 
-  * <code ini># limit for number cleanup 
-# Tachtler 
-# default: NUMBER_MIN_AGE="1800" 
-NUMBER_MIN_AGE="0"</code> 
- 
-Bewrikt, das das Alter eines **Snapshats** ignoriert und nur die Anzahl entscheinden ist, da sonst ggf. unbeabsichtigt automatisch evtl. ein **Snapshot** gelöscht wird. 
- 
-  * <code ini># Tachtler 
-# default: NUMBER_LIMIT="50" 
-NUMBER_LIMIT="10"</code>  
- 
-Anzahl der zu speichernden **Snapshots**. 
- 
-  * <code ini># Tachtler 
-# default: NUMBER_LIMIT_IMPORTANT="10" 
-NUMBER_LIMIT_IMPORTANT="3"</code> 
- 
-Anzahl der zu speichernden - **__wichtigen__** - **Snapshots**. 
- 
-  * <code ini># create hourly snapshots 
-# Tachtler 
-# default: TIMELINE_CREATE="yes" 
-TIMELINE_CREATE="no"</code> 
- 
-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 Anzahl der vorhandenen **Snapshots** automatishc auch gelöscht werden können, muss mit nachfolgendem Befehl der mit der Installation mit gekommene Timer 
-  * ''/usr/lib/systemd/system/snapper-cleanup.timer'' 
-aktiviert werden: 
-<code> 
-[root@archlinux /]# systemctl enable --now snapper-cleanup.timer 
-Created symlink /etc/systemd/system/timers.target.wants/snapper-cleanup.timer → /usr/lib/systemd/system/snapper-cleanup.timer. 
-</code> 
-* //Die Angabe des Parameters ''--now'' bewirkt die __sofortige Ausführung!__// 
- 
-Ob dies korrekt funktioniert hat, kann mit nachfolgendem Befehl überprüft werden: 
-<code> 
-[root@archlinux /]# systemctl list-timers 
-NEXT                        LEFT     LAST                        PASSED   UNIT                         ACTIVATES                      
-Tue 2020-12-08 00:00:00 CET 6h left  n/a                         n/     shadow.timer                 shadow.service                 
-Tue 2020-12-08 17:10:19 CET 23h left Mon 2020-12-07 17:10:19 CET 5min ago systemd-tmpfiles-clean.timer systemd-tmpfiles-clean.service 
-Tue 2020-12-08 17:15:22 CET 23h left Mon 2020-12-07 17:15:22 CET 30s ago  snapper-cleanup.timer        snapper-cleanup.service        
- 
-3 timers listed. 
-Pass --all to see loaded but inactive timers, too. 
-</code> 
- 
-===== Installation: grub-btrfs ===== 
- 
-Damit aus dem mit [[http://snapper.io|snapper]] erstellten **Snapshots** auch **__automatisch__** - **Boot-Menü-Einträge** für [[https://www.gnu.org/software/grub/|GRUB]] erstellt werden, ist die Installation des Programms 
-  * [[https://github.com/Antynea/grub-btrfs|grub-btrfs]] 
-erforderlich. 
- 
-Mit nachfolgendem Befehl, kann [[http://snapper.io|snapper]] installiert werden: 
-<code> 
-[root@archlinux ~]# pacman --noconfirm -S grub-btrfs 
-resolving dependencies... 
-looking for conflicting packages... 
- 
-Packages (1) grub-btrfs-4.7.1-1 
- 
-Total Download Size:   0.02 MiB 
-Total Installed Size:  0.06 MiB 
- 
-:: Proceed with installation? [Y/n]  
-:: Retrieving packages... 
- grub-btrfs-4.7.1...    23.1 KiB  1155 KiB/s 00:00 [#################] 100% 
-(1/1) checking keys in keyring                     [#################] 100% 
-(1/1) checking package integrity                   [#################] 100% 
-(1/1) loading package files                         [#################] 100% 
-(1/1) checking for file conflicts                    [#################] 100% 
-(1/1) checking available disk space                [#################] 100% 
-:: Processing package changes... 
-(1/1) installing grub-btrfs                        [#################] 100% 
-Optional dependencies for grub-btrfs 
-    snapper: Snapper support [installed] 
-:: Running post-transaction hooks... 
-(1/3) Reloading system manager configuration... 
-(2/3) Arming ConditionNeedsUpdate... 
-(3/3) Updating linux initcpios... 
-==> Building image from preset: /etc/mkinitcpio.d/linux-lts.preset: 'default' 
-  -> -k /boot/vmlinuz-linux-lts -c /etc/mkinitcpio.conf -g /boot/initramfs-linux-lts.img 
-==> Starting build: 5.4.81-1-lts 
-  -> Running build hook: [base] 
-  -> Running build hook: [udev] 
-  -> Running build hook: [autodetect] 
-  -> Running build hook: [modconf] 
-  -> Running build hook: [block] 
-  -> Running build hook: [lvm2] 
-  -> Running build hook: [btrfs] 
-  -> Running build hook: [filesystems] 
-  -> Running build hook: [keymap] 
-  -> Running build hook: [keyboard] 
-==> Generating module dependencies 
-==> Creating gzip-compressed initcpio image: /boot/initramfs-linux-lts.img 
-==> Image generation successful 
-==> Building image from preset: /etc/mkinitcpio.d/linux-lts.preset: 'fallback' 
-  -> -k /boot/vmlinuz-linux-lts -c /etc/mkinitcpio.conf -g /boot/initramfs-linux-lts-fallback.img -S autodetect 
-==> Starting build: 5.4.81-1-lts 
-  -> Running build hook: [base] 
-  -> Running build hook: [udev] 
-  -> Running build hook: [modconf] 
-  -> Running build hook: [block] 
-==> WARNING: Possibly missing firmware for module: aic94xx 
-==> WARNING: Possibly missing firmware for module: wd719x 
-  -> Running build hook: [lvm2] 
-  -> Running build hook: [btrfs] 
-  -> Running build hook: [filesystems] 
-  -> Running build hook: [keymap] 
-  -> Running build hook: [keyboard] 
-==> Generating module dependencies 
-==> Creating gzip-compressed initcpio image: /boot/initramfs-linux-lts-fallback.img 
-==> Image generation successful 
-</code> 
- 
-Die Konfiguration für das Programm [[https://github.com/Antynea/grub-btrfs|grub-btrfs]] ist in nachfolgendem Verzeichnis mit nachfolgendem Namen zu finden: 
-  * ''/etc/grub.d/41_snapshots-btrfs'' 
- 
-:!: **HINWEIS** - **Anpassungen müssen hier __keine__ erfolgen!** 
- 
-===== Installation: snap-pac ===== 
- 
-Hierbei handelt es sich um eine Reihe von ''pacman''-"Hooks" und ein **Skript**, das automatisch bewirkt, dass [[http://snapper.io|snapper]] 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 [[https://github.com/wesbarnett/snap-pac|snap-pac]] installiert werden: 
-<code> 
-[root@archlinux ~]# pacman --noconfirm -S snap-pac 
-resolving dependencies... 
-looking for conflicting packages... 
- 
-Packages (1) snap-pac-2.3.1-2 
- 
-Total Download Size:   0.02 MiB 
-Total Installed Size:  0.03 MiB 
- 
-:: Proceed with installation? [Y/n]  
-:: Retrieving packages... 
- snap-pac-2.3.1-2-any   15.5 KiB   516 KiB/s 00:00 [#################] 100% 
-(1/1) checking keys in keyring                     [#################] 100% 
-(1/1) checking package integrity                   [#################] 100% 
-(1/1) loading package files                         [#################] 100% 
-(1/1) checking for file conflicts                    [#################] 100% 
-(1/1) checking available disk space                [#################] 100% 
-:: Processing package changes... 
-(1/1) installing snap-pac                          [#################] 100% 
-:: Running post-transaction hooks... 
-(1/3) Arming ConditionNeedsUpdate... 
-(2/3) Performing snapper post snapshots for the following configurations... 
-(3/3) You are installing snap-pac, so no post transaction snapshots will be taken. 
-</code> 
- 
-===== Konfiguration: grub-btrfs.path.service ===== 
- 
-Nachfolgender **''systemd''-Dienst** überwacht das **standardmässig** Verzeichnis 
-  * ''/.snapshots'' 
-auf Änderungen und erstellt daraufhin die Konfigurationsdaten für den **"Bootloader"** - **GRUB** neu. 
- 
-:!: **HINWEIS** - **Falls ein anderes Verzeichnis als ''/.snapshots'' überwacht werden soll, ist dies in einer neu zu erstellenden Konfigurationsdatei in nachfolgenden Verzeichnis mit ebenfalls nachfolgendem Namen zu erstellen:** 
-  * ''/etc/systemd/system/grub-btrfs.path.d/override.conf'' 
- 
-:!: **HINWEIS** - Eine Vorlage für den Inhalt, hält die Konfigurationsdatei ''/usr/lib/systemd/system/grub-btrfs.path'' bereit. 
- 
-:!: **ACHTUNG** - **Hier ist aktuelle keine Anpassung an der Konfigurationsdatei '''' durchzuführen! ** 
- 
-==== grub-btrfs.path.service-Dienst/Deamon einrichten ==== 
- 
-Um den **grub-btrfs.path.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: 
-<code> 
-[root@archlinux ~]# systemctl enable grub-btrfs.path 
-Created symlink /etc/systemd/system/multi-user.target.wants/grub-btrfs.path → /usr/lib/systemd/system/grub-btrfs.path. 
-</code> 
- 
-Eine Überprüfung, ob beim Neustart des Server der ''grub-btrfs.path''-Dienst/Deamon wirklich mit gestartet wird, kann mit nachfolgendem Befehl erfolgen und sollte eine Anzeige, wie ebenfalls nachfolgend dargestellt ausgeben: 
-<code> 
-[root@archlinux ~]# systemctl list-unit-files --type=service | grep grub-btrfs 
-grub-btrfs.service                         static          - 
-</code> 
-bzw. 
-<code> 
-[root@archlinux ~]# systemctl is-enabled grub-btrfs 
-static 
-</code> 
- 
-Abschließend kann der **SSH**-Dienst/Daemon - ''grub-btrfs.path'' mit nachfolgendem Befehl gestartet werden: 
-<code> 
-[root@archlinux ~]# systemctl start --now grub-btrfs.path 
-</code> 
- 
-Eine Überprüfung ob der **grub-btrfs.path.service**-Dienst/Daemon auch ordnungsgemäß gestartet wurde, kann durch ausführen des nachfolgenden Befehls durchgeführt werden und sollte eine Ausgabe in etwa wie nachfolgende zur Folge haben: 
-<code> 
-[root@archlinux ~]# systemctl status grub-btrfs.path 
-● grub-btrfs.path - Monitors for new snapshots 
-     Loaded: loaded (/usr/lib/systemd/system/grub-btrfs.path; enabled; ven> 
-     Active: active (waiting) since Mon 2020-12-07 17:36:55 CET; 26s ago 
-   Triggers: ● grub-btrfs.service 
- 
-Dec 07 17:36:55 vml010 systemd[1]: Started Monitors for new snapshots. 
-</code> 
- 
-===== Praxis ===== 
- 
-==== Auf einen snapshot zurücksetzen ==== 
- 
-Nachfolgender soll das Programm ''screenfatch'' installoert werden und anschließend die Installation durch starten eines vorhergehenden Snapshots **rückgängig** gemacht werden. 
- 
-Mit nachfolgendem Befehl, kann ''screenfetch'' installiert werden: 
-<code> 
-[root@archlinux ~]# pacman --noconfirm -S screenfetch 
-resolving dependencies... 
-looking for conflicting packages... 
- 
-Packages (18) bc-1.07.1-4  libx11-1.7.0-1  libxau-1.0.9-3  libxcb-1.14-1 
-              libxcomposite-0.4.5-3  libxdmcp-1.1.3-3  libxext-1.3.4-3 
-              libxfixes-5.0.3-4  libxi-1.7.10-3  libxinerama-1.1.4-3 
-              libxrender-0.9.10-4  libxtst-1.2.3-4  libxxf86vm-1.1.4-4 
-              xcb-proto-1.14.1-3  xorg-xdpyinfo-1.3.2-4 
-              xorg-xprop-1.2.5-1  xorgproto-2020.1-1  screenfetch-3.9.1-1 
- 
-Total Download Size:    3.95 MiB 
-Total Installed Size:  17.84 MiB 
- 
-:: Proceed with installation? [Y/n]  
-:: Retrieving packages... 
- bc-1.07.1-4-x86_64     87.8 KiB  2.14 MiB/s 00:00 [#################] 100% 
- xcb-proto-1.14.1...   108.0 KiB  3.52 MiB/s 00:00 [#################] 100% 
- libxdmcp-1.1.3-3...    27.4 KiB  0.00   B/s 00:00 [#################] 100% 
- libxau-1.0.9-3-x...    10.9 KiB  0.00   B/s 00:00 [#################] 100% 
- libxcb-1.14-1-x86_64  999.8 KiB  8.14 MiB/s 00:00 [#################] 100% 
- xorgproto-2020.1...   237.9 KiB  11.6 MiB/s 00:00 [#################] 100% 
- libx11-1.7.0-1-x...     2.1 MiB  9.42 MiB/s 00:00 [#################] 100% 
- libxext-1.3.4-3-...   107.3 KiB  10.5 MiB/s 00:00 [#################] 100% 
- libxi-1.7.10-3-x...   148.3 KiB  14.5 MiB/s 00:00 [#################] 100% 
- libxfixes-5.0.3-...     13.4 KiB  0.00   B/s 00:00 [#################] 100% 
- libxtst-1.2.3-4-...    29.5 KiB  0.00   B/s 00:00 [#################] 100% 
- libxxf86vm-1.1.4...    15.7 KiB  0.00   B/s 00:00 [#################] 100% 
- libxrender-0.9.1...    26.0 KiB  0.00   B/s 00:00 [#################] 100% 
- libxcomposite-0....    11.4 KiB  0.00   B/s 00:00 [#################] 100% 
- libxinerama-1.1....    10.1 KiB  1015 KiB/s 00:00 [#################] 100% 
- xorg-xdpyinfo-1....    16.0 KiB  0.00   B/s 00:00 [#################] 100% 
- xorg-xprop-1.2.5...    26.3 KiB  0.00   B/s 00:00 [#################] 100% 
- screenfetch-3.9....    50.9 KiB  4.97 MiB/s 00:00 [#################] 100% 
-(18/18) checking keys in keyring                   [#################] 100% 
-(18/18) checking package integrity                 [#################] 100% 
-(18/18) loading package files                       [#################] 100% 
-(18/18) checking for file conflicts                  [#################] 100% 
-(18/18) checking available disk space              [#################] 100% 
-:: Running pre-transaction hooks... 
-(1/1) Performing snapper pre snapshots for the following configurations... 
-==> root: 1 
-:: Processing package changes... 
-( 1/18) installing bc                              [#################] 100% 
-( 2/18) installing xcb-proto                       [#################] 100% 
-( 3/18) installing libxdmcp                        [#################] 100% 
-( 4/18) installing libxau                          [#################] 100% 
-( 5/18) installing libxcb                          [#################] 100% 
-( 6/18) installing xorgproto                       [#################] 100% 
-( 7/18) installing libx11                          [#################] 100% 
-( 8/18) installing libxext                         [#################] 100% 
-( 9/18) installing libxi                           [#################] 100% 
-(10/18) installing libxfixes                        [#################] 100% 
-(11/18) installing libxtst                         [#################] 100% 
-(12/18) installing libxxf86vm                      [#################] 100% 
-(13/18) installing libxrender                      [#################] 100% 
-(14/18) installing libxcomposite                   [#################] 100% 
-(15/18) installing libxinerama                     [#################] 100% 
-(16/18) installing xorg-xdpyinfo                   [#################] 100% 
-(17/18) installing xorg-xprop                      [#################] 100% 
-(18/18) installing screenfetch                     [#################] 100% 
-Optional dependencies for screenfetch 
-    scrot: to take screenshot 
-:: Running post-transaction hooks... 
-(1/3) Arming ConditionNeedsUpdate... 
-(2/3) Updating the info directory file... 
-(3/3) Performing snapper post snapshots for the following configurations... 
-==> root: 2 
-</code> 
- 
-Anhand der Ausgabe bei der Installation, kann in Erfahrung gebracht werden das **__zwei__ Snapshots** erstellt wurden: 
-  - Snapshot: ''1'' - **__Vor__** der Installation von ''screenfetch'' 
-  - Snapshot: ''2'' - **__Nach__** der Installation von ''screenfetch'' 
- 
-Dies kann auch durch Abfrage mit nachfolgendem Befehl bestätigt werden: 
-<code> 
-[root@archlinux ~]# snapper list 
- # | Type   | Pre # | Date                            | User | Cleanup | Description                                                                 | Userdata 
----+--------+-------+---------------------------------+------+---------+-----------------------------------------------------------------------------+--------- 
-0  | single |                                       | root |         | current                                                                              
-1  | pre    |       | Mon 07 Dec 2020 05:39:43 PM CET | root | number  | pacman --noconfirm -S screenfetch                                                    
-2  | post       1 | Mon 07 Dec 2020 05:39:44 PM CET | root | number  | bc libx11 libxau libxcb libxcomposite libxdmcp libxext libxfixes libxi l... | 
-</code> 
- 
-Eine Überprüfung, ob das Programm ''screenfetch'' aufgrufen und ausgeführt werden kann, kann durch Aufruf von ''screenfetch'' durchgeführt werden: 
-<code> 
-root@archlinux ~]# screenfetch 
-                   -`                  
-                  .o+`                 root@archlinux 
-                 `ooo/                 OS: Arch Linux  
-                `+oooo:                Kernel: x86_64 Linux 5.4.81-1-lts 
-               `+oooooo:               Uptime: 47m 
-               -+oooooo+:              Packages: 198 
-             `/:-:++oooo+:             Shell: bash 5.0.18 
-            `/++++/+++++++:            Disk: 13G / 228G (6%) 
-           `/++++++++++++++:           CPU: Intel Core (Skylake, IBRS) @ 2.304GHz 
-          `/+++ooooooooooooo/        GPU: Red Hat, Inc. Virtio GPU (rev 01) 
-         ./ooosssso++osssssso+`        RAM: 224MiB / 983MiB 
-        .oossssso-````/ossssss+`       
-       -osssssso.      :ssssssso.      
-      :osssssss/        osssso+++.     
-     /ossssssss/        +ssssooo/    
-   `/ossssso+/:       -:/+osssso+-   
-  `+sso+:-`                 `.-/+oso:  
- `++:                          `-/+/ 
- .`                                 `/ 
-</code> 
- 
-Um jetzt die Installation von ''screenfetch'' rückgängig machen zu können, kann nachfolgender Befehl nun angewendet werden: 
-<code> 
-[root@archlinux ~]# snapper -v undochange 1..2 
-create:0 modify:2 delete:4235 
-... 
-</code> 
- 
-Ein erneuter Aufruf von ''screenfetch'', sollte nun zu einer Fehlermeldung führen und anzeigen, dass das Programm nicht gefunden werden kann und somit auch nicht installiert ist: 
-<code> 
-[root@archlinux ~]# screenfetch  
--bash: /usr/bin/screenfetch: No such file or directory 
-</code> 
- 
-==== In einen snapshot starten (booten) ==== 
- 
-Alle möglichen **Snapshots** in die gestartet werden kann, sind in einem **Untermenü** beim Neustart in [[https://www.gnu.org/software/grub/|GRUB]] ersichtlich, wie nachfolgende Bildschirmkopien zeigen: 
- 
-{{:tachtler:virtualisierung:archlinux:archlinux-btrfs-grub-boot-arch_linux_snapshots_2020-12.png|Neustart GRUB}} 
- 
-Druch Auswahl des [[https://www.gnu.org/software/grub/|GRUB]]-Menüpunktes **Arch Linux snapshots**, sollte in etwa ein Bildschirm wie nachfolgender zum Vorschein kommen: 
- 
-{{:tachtler:virtualisierung:archlinux:archlinux-btrfs-grub-boot-arch_linux_snapshots-menu_2020-12.png|Neustart GRUB - Arch Linux snapshots}} 
- 
-Durch Auswahl des obersten Menüpunktes, sollte nun eine Anzeige wie nachfolgende erscheinen, in dem der zu startende (boot) **Kernel** ausgewählt werden kann: 
- 
-{{:tachtler:virtualisierung:archlinux:archlinux-btrfs-grub-boot-arch_linux_snapshots-menu-selected_boot_kernel_2020-12.png|Neustart GRUB - Arch Linux snapshots - Auswahl Kernel}} 
- 
-Nach einem erfolgreichen Startvorgang (booten), kann das Programm ''screenfetch'' wieder verwendet werden, wie nachfolgender Aufruf zeigt: 
-<code> 
-[root@archlinux ~]# screenfetch  
-                   -`                  
-                  .o+`                 root@archlinux 
-                 `ooo/                 OS: Arch Linux  
-                `+oooo:                Kernel: x86_64 Linux 5.4.81-1-lts 
-               `+oooooo:               Uptime: 47m 
-               -+oooooo+:              Packages: 198 
-             `/:-:++oooo+:             Shell: bash 5.0.18 
-            `/++++/+++++++:            Disk: 13G / 228G (6%) 
-           `/++++++++++++++:           CPU: Intel Core (Skylake, IBRS) @ 2.304GHz 
-          `/+++ooooooooooooo/        GPU: Red Hat, Inc. Virtio GPU (rev 01) 
-         ./ooosssso++osssssso+`        RAM: 224MiB / 983MiB 
-        .oossssso-````/ossssss+`       
-       -osssssso.      :ssssssso.      
-      :osssssss/        osssso+++.     
-     /ossssssss/        +ssssooo/    
-   `/ossssso+/:       -:/+osssso+-   
-  `+sso+:-`                 `.-/+oso:  
- `++:                          `-/+/ 
- .`                                 `/ 
-[root@archlinux ~]# 
-</code> 
- 
-:!: **ACHTUNG** - **Der gestartet Snapshot ist ein "__read-only__" Snapshot !!!** 
- 
-Der Versuch in das **Btrfs: Subvolume - ''/'' (root)** zu schreiben schlägt fehl, wie nachfolgendes Beispiel zeigt: 
-<code> 
-[root@archlinux ~]# touch /test.txt 
-touch: cannot touch '/test.txt': Read-only file system 
-</code> 
- 
-Damit wieder eine **__read-write__** **Snapshot** aus dem aktuell gestarteten **Snapshot** wird, sind nachfolgende Schritte erforderlich. 
- 
-===== Praxis: BIOS-Boot ===== 
- 
- 
-==== BIOS-Boot: Einen read-write snapshot erzeugen ==== 
- 
-Mit nachfolgenden Befehlen und einem **Neustart** wird aus einem **__read-only__** **Snapshot** wieder ein **__read-write__** **Snapshot**. 
- 
-Nachfolgender Befehl überprüft, welcher **Snapshot** aktuell ge**mount**et ist (Hier die Nummer **''4''**): 
-<code> 
-[root@archlinux ~]# mount | grep /@snapshots/ 
-/dev/mapper/archlinux-root on / type btrfs (rw,relatime,space_cache=v2,subvol=/@snapshots/2/snapshot) 
-</code> 
- 
-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: 
-<code> 
-[root@archlinux ~]# snapper -a classic rollback 2 
-Ambit is classic. 
-Creating read-only snapshot of current system. (Snapshot 3.) 
-Creating read-write snapshot of snapshot 2. (Snapshot 4.) 
-Setting default subvolume to snapshot 4. 
-</code> 
- 
-Wichtig ist hier der **Snapshot** mit der Nummer **''4''**, welcher einen startbereiten (boot) **__read-write__** **Snapshot** darstellt. 
- 
-:!: **WICHTIG** - **Leider kann nur über das editieren beim Starten via [[https://www.gnu.org/software/grub/|GRUB]] dieser Snapshot gestartet (boot) werden !!!** 
- 
-Nachfolgend ist wieder ein Neustart durchzuführen: 
- 
-<code> 
-[root@archlinux ~]# systemctl reboot 
-</code> 
- 
-{{:tachtler:virtualisierung:archlinux:archlinux-btrfs-grub-boot-arch_linux_snapshots_2020-12.png|Neustart GRUB}} 
- 
-Durch Auswahl des [[https://www.gnu.org/software/grub/|GRUB]]-Menüpunktes **Arch Linux snapshots**, sollte in etwa ein Bildschirm wie nachfolgender zum Vorschein kommen: 
- 
-{{:tachtler:virtualisierung:archlinux:archlinux-btrfs-grub-boot-arch_linux_snapshots-menu_2020-12.png|Neustart GRUB - Arch Linux snapshots}} 
- 
-Durch Auswahl des obersten Menüpunktes, sollte nun eine Anzeige wie nachfolgende erscheinen, in dem der zu startende (boot) **Kernel** ausgewählt werden kann: 
- 
-{{:tachtler:virtualisierung:archlinux:archlinux-btrfs-grub-boot-arch_linux_snapshots-menu-selected_boot_kernel_2020-12.png|Neustart GRUB - Arch Linux snapshots - Kernel Auswahl}} 
- 
-:!: **WICHTIG** - **Jetzt ist die [e]-Taste zu drücken um den [[https://www.gnu.org/software/grub/|GRUB]]-Kernel-Bootmenü-Eintrag __e__ditieren zu können !!!** 
- 
-{{:tachtler:virtualisierung:archlinux:archlinux-btrfs-grub-boot-arch_linux_snapshots-menu-selected_boot_kernel-edit_2020-12.png|Neustart GRUB - Arch Linux snapshots - Kernel Auswahl - Editiert}} 
- 
-:!: **WICHTIG** - **Ersetzen der Snapshot-Nummer ''2'' durch die Snapshot_nummer ''4'' !!!** 
- 
-:!: **WICHTIG** - **Um die Änderungen wirksam werden zu lassen, ist die [F10]-Taste oder [Ctrl-x]|[Strg-x] zu betätigen !!!** 
- 
-Jetzt kann mit nachfolgendem Befehl überprüft werden, ob der **Snapshot** mit der Nummer **''4''** gestartet (boot) wurde: 
-<code> 
-[root@archlinux ~]# mount | grep /@snapshots/ 
-/dev/mapper/archlinux-root on / type btrfs (rw,relatime,space_cache=v2,subvol=/@snapshots/4/snapshot) 
-</code> 
- 
-Und ob dieser auch ein **__read-write__** **Snapshot** ist, wie nachfolgender Befehl beweist: 
-<code> 
-[root@archlinux ~]# touch /test.txt 
-</code> 
-<code> 
-[root@archlinux ~]# ls -la /test.txt 
--rw-r--r-- 1 root root 0 Dec  7 18:14 /test.txt 
-</code> 
- 
-:!: **WICHTIG** - **Damit zukünftig von diesem Snapshot - __standardmässig__ gestartet wird, muss nachfolgender Befehl ausgeführt werden:** 
- 
-Hier wird der **Bootloader** - hier [[https://www.gnu.org/software/grub/|GRUB]] neu installiert, falls es sich um **BIOS**-Boot handelt. 
-<code> 
-[root@archlinux ~]# grub-install /dev/vda 
-Installing for i386-pc platform. 
-Installation finished. No error reported. 
-</code> 
- 
-Anschließend muss noch der **Bootloader** - hier [[https://www.gnu.org/software/grub/|GRUB]] neu konfiguriert werden: 
-<code> 
-[root@archlinux ~]# 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 
-Detecting snapshots ... 
-Info: Separate boot partition not detected  
-Info: snapper detected, using config 'root' 
-Found snapshot: 2020-12-07 18:00:31 | @snapshots/4/snapshot | single | writable copy of #2 
-Found snapshot: 2020-12-07 18:00:31 | @snapshots/3/snapshot | single | rollback backup 
-Found snapshot: 2020-12-07 17:39:44 | @snapshots/2/snapshot | post   | bc libx11 libxau libxcb libxcomposite libxdmcp libxext libxfixes libxi l... 
-Found snapshot: 2020-12-07 17:39:43 | @snapshots/1/snapshot | pre    | pacman --noconfirm -S screenfetch 
-Found 4 snapshot(s) 
-done 
-</code> 
- 
-<code> 
-[root@archlinux ~]# systemctl reboot 
-</code> 
- 
-Nach einem **erneuten Neustart** sollte jetzt der **Snapshot** mit der Nummer **''6''** der Snapshot sein, welcher auch über den **__Standardeintrag__** gestartet wird, was nachfolgende Bildschirmkopie zeigt: 
- 
-{{:tachtler:virtualisierung:archlinux:archlinux-btrfs-grub-boot-standard_2020-12.png|Neustart GRUB - Standard Kernel}} 
- 
-Eine Überprüfung, welcher **Snapshot** gestartet (boot) ist, kann nochmals mit nachfolgendem Befehl durchgeführt werden: 
-<code> 
-[root@archlinux ~]# mount | grep /@snapshots/ 
-/dev/mapper/archlinux-root on / type btrfs (rw,relatime,space_cache=v2,subvol=/@snapshots/4/snapshot) 
-</code> 
- 
- 
-===== Praxis: UEFI-Boot ===== 
- 
-==== UEFI-Boot: 05-bootbackup.hook ==== 
- 
-Nachdem es bei der Verwendung von UEFI-Boot eine separate BOOT-Partition meist mit dem Dateisystem ''vfat'' gibt, kann mit Btrfs-Bordmitteln **__keine__** Snapshot von ''/boot'' erstellt werden. Hier ist der Einsatz eine **''pacman-hook''** erforderlich. 
- 
-Dazu soll in nachfolgendem Verzeichnis, mit nachfolgendem Namen eine **''pacman-hook''** erstellt werden, welches bei jedem **''kernel''**-Installation/Update/Remove des **''pacman-hook''** ausführt. 
- 
-Dadurch wird eine Sicherung des Inhalts des Verzeichnisses ''/boot'' nach **''/.bootbackup''** erstellt, worin alle **zum jeweiligen ''kernel'' passenden Teile** enthalten sind! 
- 
-:!: **WICHTIG** - **Sonst passen z.B.** 
-  * **''vmlinuz-linux-lts''** 
-  * **''initramfs-linux-lts-fallback.img''** 
-  * **''initramfs-linux-lts.img''** 
-**nicht zum ''kernel'' !!!** 
- 
-Nachfolgender Befehl erstellt die Konfigurationsdatei für den **''pacman-hook''** 
-<code> 
-# vim /usr/share/libalpm/hooks/05-bootbackup.hook 
-</code> 
- 
-<code ini> 
-[Trigger] 
-Operation = Upgrade 
-Operation = Install 
-Operation = Remove 
-Type = Path 
-Target = usr/lib/modules/*/vmlinuz 
- 
-[Action] 
-Depends = rsync 
-Description = Backing up /boot... 
-When = PreTransaction 
-Exec = /usr/bin/rsync -a --delete /boot /.bootbackup 
-</code> 
- 
-==== UEFI-Boot: Einen read-write snapshot erzeugen ==== 
- 
-Mit nachfolgenden Befehlen und einem **Neustart** wird aus einem **__read-only__** **Snapshot** wieder ein **__read-write__** **Snapshot**. 
- 
-Nachfolgender Befehl überprüft, welcher **Snapshot** aktuell ge**mount**et ist (Hier die Nummer **''4''**): 
-<code> 
-[root@archlinux ~]# mount | grep /.snapshots 
-/dev/mapper/archlinux-root on on /.snapshots type btrfs (rw,relatime,compress=zstd:3,space_cache=v2,subvolid=261,subvol=/@snapshots) 
-</code> 
- 
-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: 
-<code> 
-[root@archlinux ~]# snapper -a classic rollback 2 
-Ambit is classic. 
-Creating read-only snapshot of current system. (Snapshot 3.) 
-Creating read-write snapshot of snapshot 2. (Snapshot 4.) 
-Setting default subvolume to snapshot 4. 
-</code> 
- 
-Wichtig ist hier der **Snapshot** mit der Nummer **''4''**, welcher einen startbereiten (boot) **__read-write__** **Snapshot** darstellt. 
- 
-:!: **WICHTIG** - **Leider kann nur über das editieren beim Starten via [[https://www.gnu.org/software/grub/|GRUB]] dieser Snapshot gestartet (boot) werden !!!** 
- 
-Nachfolgend ist wieder ein Neustart durchzuführen: 
- 
-<code> 
-[root@archlinux ~]# systemctl reboot 
-</code> 
- 
-{{:tachtler:virtualisierung:archlinux:archlinux-btrfs-grub-boot-arch_linux_snapshots_2020-12.png|Neustart GRUB}} 
- 
-Durch Auswahl des [[https://www.gnu.org/software/grub/|GRUB]]-Menüpunktes **Arch Linux snapshots**, sollte in etwa ein Bildschirm wie nachfolgender zum Vorschein kommen: 
- 
-{{:tachtler:virtualisierung:archlinux:archlinux-btrfs-grub-boot-arch_linux_snapshots-menu_2020-12.png|Neustart GRUB - Arch Linux snapshots}} 
- 
-Durch Auswahl des obersten Menüpunktes, sollte nun eine Anzeige wie nachfolgende erscheinen, in dem der zu startende (boot) **Kernel** ausgewählt werden kann: 
- 
-{{:tachtler:virtualisierung:archlinux:archlinux-btrfs-grub-boot-arch_linux_snapshots-menu-selected_boot_kernel_2020-12.png|Neustart GRUB - Arch Linux snapshots - Kernel Auswahl}} 
- 
-:!: **WICHTIG** - **Jetzt ist die [e]-Taste zu drücken um den [[https://www.gnu.org/software/grub/|GRUB]]-Kernel-Bootmenü-Eintrag __e__ditieren zu können !!!** 
- 
-{{:tachtler:virtualisierung:archlinux:archlinux-btrfs-grub-boot-arch_linux_snapshots-menu-selected_boot_kernel-edit_2020-12.png|Neustart GRUB - Arch Linux snapshots - Kernel Auswahl - Editiert}} 
- 
-:!: **WICHTIG** - **Ersetzen der Snapshot-Nummer ''2'' durch die Snapshot_nummer ''4'' !!!** 
- 
-:!: **WICHTIG** - **Um die Änderungen wirksam werden zu lassen, ist die [F10]-Taste oder [Ctrl-x]|[Strg-x] zu betätigen !!!** 
- 
-Jetzt kann mit nachfolgendem Befehl überprüft werden, ob der **Snapshot** mit der Nummer **''4''** gestartet (boot) wurde: 
-<code> 
- mount | grep /.snapshots 
-/dev/mapper/vml250-root on / type btrfs (rw,relatime,compress=zstd:3,space_cache=v2,subvolid=283,subvol=/@snapshots/4/snapshot) 
-</code> 
- 
-Und ob dieser auch ein **__read-write__** **Snapshot** ist, wie nachfolgender Befehl beweist: 
-<code> 
-[root@archlinux ~]# touch /test.txt 
-</code> 
-<code> 
-[root@archlinux ~]# ls -la /test.txt 
--rw-r--r-- 1 root root 0 Dec  7 18:14 /test.txt 
-</code> 
- 
-:!: **WICHTIG** - **Falls Fehler beim starten (booten) auftreten, werden diese durch tauschen der gesicherten ''/boot''-Partition behoben !!!** 
- 
-Nachfolgender Befehl **kopiert** die aus dem "Snapshot" gesicherte BOOT-Partition unter **''/.bootbackup''** wieder nach **''/boot''** zurück: 
-<code> 
-# cp -ar /.bootbackup/boot/* /boot/ 
-</code> 
- 
-Abschließend muss nun noch einmal das BOOT-Menü neu erzeugt werden, um keine Menü-Einträge zu verlieren: 
-<code> 
-[root@archlinux ~]# 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 
-Detecting snapshots ... 
-Info: Separate boot partition not detected  
-Info: snapper detected, using config 'root' 
-Found snapshot: 2020-12-07 18:25:56 | @root 
-Found 1 snapshot(s) 
-done 
-</code> 
- 
-Abschlißend ist wieder ein Neustart durchzuführen: 
-<code> 
-[root@archlinux ~]# systemctl reboot 
-</code> 
- 
-===== Praxis: BIOS & UEFI-Boot ===== 
- 
-==== Einen snapshot zu root zurücksetzen ==== 
- 
-Nachdem in einen **__read-write__** **Snapshot** gestartet (boot) wurde, soll dieser wieder zum **''root''** gemacht werden, damit ggf. später auch der aktuelle **Snapshot** von dem gerade gestartet (boot) wurde auch gelöscht werden kann. 
- 
-Dazu soll zuerst der **"alte"** Stand von **''root''** mit nachfolgendem Befehl gelöscht werden: 
-<code> 
-[root@archlinux ~]# rm /btrfs/@root -rf 
-</code> 
- 
-Anschließend soll ein **__read-write__** - **Snapshot** vom aktuellen **Snapshot** von dem gerade gebootet wurde via [[http://snapper.io|snapper]] **kopiert** werden, was mit nachfolgendem Befehl durchgeführt werden soll: 
-<code> 
-[root@archlinux ~]# btrfs subvol snapshot /.snapshots/4/snapshot /btrfs 
-Create a snapshot of '/.snapshots/4/snapshot' in '/btrfs/snapshot' 
-</code> 
- 
-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: 
-<code> 
-[root@archlinux ~]# mv /btrfs/snapshot /btrfs/@root 
-</code> 
- 
-Abschließend muss nun die [[https://www.gnu.org/software/grub/|GRUB]]-Konfigurationsdatei in nachfolgendem Verzeichnis mit nachfolgendem Namen 
-  * ''/boot/grub/grub.cfg'' 
-noch entsprechend angepasst werden. 
- 
-<code> 
-[root@archlinux ~]# vim /boot/grub/grub.cfg 
-</code> 
- 
-:!: **WICHTIG** - **''font="/snapshots/4/snapshot/usr/share/grub/unicode.pf2"'' muss gegen ''font="/usr/share/grub/unicode.pf2"'' ausgetauscht werden.** 
- 
-:!: **HINWEIS** - **Alle Einträge mit ''snapshots/4/snapshot'' müssen gegen ''root'' ausgetauscht werden!** 
- 
-Nachfolgend eine Liste der relevanten Stellen (**nur relevanter Ausschnitt**): 
- 
-  * <code ini>    font="/usr/share/grub/unicode.pf2"</code> 
- 
-Eine Suche im Editor nach ''font="'' findet die Stelle am schnellsten. 
- 
-  * <code ini>        linux   /@snapshots/4/snapshot/boot/vmlinuz-linux-lts root=/dev/mapper/archlinux-root rw rootflags=subvol=@snapshots/4/snapshot  loglevel=3 net.ifnames=0</code> 
- 
-**''menuentry 'Arch Linux'''** - Wichtig ist hier alle Angabe **''@snapshots/4/snapshot''**, die wie oben gezeigt, angepasst werden müssen und gegen **''@root''** ausgetauscht werden müssen. 
- 
-  * <code ini>        initrd  /@snapshots/4/snapshot/boot/initramfs-linux-lts.img</code> 
- 
-**''menuentry 'Arch Linux'''** - ''initrd'' Wichtig ist hier alle Angabe **''@snapshots/4/snapshot''**, die wie oben gezeigt, angepasst werden müssen und gegen **''@root''** ausgetauscht werden müssen. 
- 
-  * <code ini>                linux   /@snapshots/4/snapshot/boot/vmlinuz-linux-lts root=/dev/mapper/archlinux-root rw rootflags=subvol=@snapshots/4/snapshot  loglevel=3 net.ifnames=0</code> 
- 
-**''submenu 'Advanced options for Arch Linux'''** - Wichtig ist hier alle Angabe **''@snapshots/4/snapshot''**, die wie oben gezeigt, angepasst werden müssen und gegen **''@root''** ausgetauscht werden müssen. 
- 
-  * <code ini>                initrd  /@snapshots/4/snapshot/boot/initramfs-linux-lts.img</code> 
- 
-**''submenu 'Advanced options for Arch Linux'''** - ''initrd'' Wichtig ist hier alle Angabe **''@snapshots/4/snapshot''**, die wie oben gezeigt, angepasst werden müssen und gegen **''@root''** ausgetauscht werden müssen. 
- 
-  * <code ini>                linux   /@snapshots/4/snapshot/boot/vmlinuz-linux-lts root=/dev/mapper/archlinux-root rw rootflags=subvol=@snapshots/4/snapshot  loglevel=3 net.ifnames=0</code> 
- 
-**''    menuentry 'Arch Linux, with Linux linux-lts (fallback initramfs)'''** - Wichtig ist hier alle Angabe **''@snapshots/4/snapshot''**, die wie oben gezeigt, angepasst werden müssen und gegen **''@root''** ausgetauscht werden müssen. 
- 
-  * <code ini>                initrd  /@snapshots/4/snapshot/boot/initramfs-linux-lts-fallback.img</code> 
- 
-**''    menuentry 'Arch Linux, with Linux linux-lts (fallback initramfs)'''** - ''initrd'' Wichtig ist hier alle Angabe **''@snapshots/4/snapshot''**, die wie oben gezeigt, angepasst werden müssen und gegen **''@root''** ausgetauscht werden müssen. 
- 
-:!: **WICHTIG** - **Damit zukünftig von diesem Snapshot - __standardmässig__ gestartet wird, muss nachfolgender Befehl ausgeführt werden:** 
- 
-Hier wird der **Bootloader** - hier [[https://www.gnu.org/software/grub/|GRUB]] neu installiert, falls es sich um **BIOS**-Boot handelt. 
-<code> 
-[root@archlinux ~]# grub-install /dev/vda 
-Installing for i386-pc platform. 
-Installation finished. No error reported. 
-</code> 
- 
-<code> 
-[root@archlinux ~]# systemctl reboot 
-</code> 
- 
-Nach einem Neustart, sollte nun wieder **''root''** gestartet (boot) werden, was nachfolgende Bildschirmkopie zeigt: 
- 
-{{:tachtler:virtualisierung:archlinux:archlinux-btrfs-grub-boot-standard_2020-12.png|Neustart GRUB - Standard Kernel}} 
- 
-Eine Überprüfung, ob **''root''** gestartet (boot) wurde, kann mit nachfolgendem Befehl durchgeführt werden: 
-<code> 
-[root@archlinux ~]# mount | grep /@root 
-/dev/mapper/archlinux-root on / type btrfs (rw,relatime,space_cache=v2,subvol=/@root) 
-</code> 
- 
-Anschließend soll das **Subvolume** - **''/''** wieder der **default** werden, was mit nachfolgendem Befehl durchgeführt werden kann: 
-<code> 
-[root@archlinux ~]# btrfs subvolume set-default 0 / 
-</code> 
- 
-Zur Überprüfung kann nachfolgende Befehl verwendet werden: 
-<code> 
-[root@archlinux ~]# btrfs subvolume get-default / 
-ID 276 gen 100 top level 5 path @root 
-</code> 
- 
-Nun können auch beispielsweise **alle** **Snapshots** mit nachfolgendem Befehl gelöscht werden: 
-<code> 
-[root@archlinux ~]# snapper delete 4 
-[root@archlinux ~]# snapper delete 3 
-[root@archlinux ~]# snapper delete 2 
-[root@archlinux ~]# snapper delete 1 
-</code> 
- 
-Abschließend würde dann die Anzeige aller **Snapshots** wie folgt aussehen: 
-<code> 
-[root@archlinux ~]# snapper list 
- # | Type   | Pre # | Date | User | Cleanup | Description | Userdata 
----+--------+-------+------+------+---------+-------------+--------- 
-0  | single |            | root |         | current     | 
-</code> 
- 
-Auch die Anzeige des via **BtrfS** verwendeten Speicherplatzes zeigt nur die für **''root''** verwendeten daten an: 
-<code> 
-[root@archlinux ~]# df -Th | grep /dev/mapper 
-/dev/mapper/archlinux-root    btrfs      30G  1.8G   28G   6% / 
-/dev/mapper/archlinux-tmp     btrfs     1.0G  3.6M  905M   1% /tmp 
-/dev/mapper/archlinux-home    btrfs     1.0G  3.6M  905M   1% /home 
-/dev/mapper/archlinux-root    btrfs      30G  1.8G   28G   6% /.snapshots 
-/dev/mapper/archlinux-root    btrfs      30G  1.8G   28G   6% /btrfs 
-/dev/mapper/archlinux-root    btrfs      30G  1.8G   28G   6% /opt 
-/dev/mapper/archlinux-root    btrfs      30G  1.8G   28G   6% /srv 
-/dev/mapper/archlinux-root    btrfs      30G  1.8G   28G   6% /usr/local 
-/dev/mapper/archlinux-var_pkg btrfs      12G   11M   12G   1% /var/cache/pacman/pkg 
-/dev/mapper/archlinux-var_log btrfs     3.0G  3.6M  2.5G   1% /var/log 
-</code> 
-bzw. 
-<code> 
-[root@archlinux ~]# btrfs filesystem df / 
-Data, single: total=2.01GiB, used=1.54GiB 
-System, DUP: total=8.00MiB, used=16.00KiB 
-Metadata, DUP: total=256.00MiB, used=97.94MiB 
-GlobalReserve, single: total=7.11MiB, used=0.00B 
-</code> 
- 
-:!: **WICHTIG** - **Damit zukünftig von diesem Snapshot - __standardmässig__ gestartet wird, muss nachfolgender Befehl ausgeführt werden:** 
- 
-Hier wird der **Bootloader** - hier [[https://www.gnu.org/software/grub/|GRUB]] neu installiert, falls es sich um **BIOS**-Boot handelt. 
-<code> 
-[root@archlinux ~]# grub-install /dev/vda 
-Installing for i386-pc platform. 
-Installation finished. No error reported. 
-</code> 
- 
-Anschließend muss noch der **Bootloader** - hier [[https://www.gnu.org/software/grub/|GRUB]] neu konfiguriert werden: 
-<code> 
-[root@archlinux ~]# 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 
-Detecting snapshots ... 
-Info: Separate boot partition not detected  
-Info: snapper detected, using config 'root' 
-Found snapshot: 2020-12-07 18:25:56 | @root 
-Found 1 snapshot(s) 
-done 
-</code>