Benutzer-Werkzeuge

Webseiten-Werkzeuge


tachtler:archlinux_-_minimal_server_installation_-_mit_btrfs_snapper

ArchLinux - Minimal Server Installation - mit Btrfs - snapper

Die hier verwendete Installationsmethode ist eine Installation von einem ISO-Image/USB-Stick. Es kommt die einzige verfügbare Variante von ArchLinux in der Version 2020.01.01 zum Einsatz.

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 mit dem Dateisystem: Btrfs vorhanden ist
  2. Das ArchLinux User-Community Repository (AUR) bereits eingebunden ist

Eine der unter nachfolgenden Links beschriebenen Installationen von ArchLinux wird hier als Mindestvoraussetzung angenommen:

Die unter nachfolgendem Link beschriebene Installation von ArchLinux User-Community Repository (AUR) wir hier ebenfalls vorausgesetzt:

Installation: snapper

Zum erstellen von Snapshots ist die Nutzung des Programms snapper erforderlich.

Mit nachfolgendem Befehl, kann snapper installiert werden:

[root@archlinux ~]# pacman -S snapper
resolving dependencies...
looking for conflicting packages...

Packages (2) boost-libs-1.72.0-2  snapper-0.8.12-1

Total Download Size:    3.28 MiB
Total Installed Size:  13.42 MiB

:: Proceed with installation? [Y/n] Y
:: Retrieving packages...
 boost-libs-1.72....     2.6 MiB  1457 KiB/s 00:02 [######################] 100%
 snapper-0.8.12-1...   734.4 KiB  1469 KiB/s 00:01 [######################] 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...

Konfiguration: snapper

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@archlinux ~]# btrfs subvolume list /
ID 257 gen 86 top level 5 path root
ID 258 gen 77 top level 5 path tmp
ID 259 gen 87 top level 5 path var_log
ID 260 gen 10 top level 5 path snapshots
ID 263 gen 25 top level 257 path var/lib/portables
ID 264 gen 26 top level 257 path var/lib/machines
ID 265 gen 85 top level 257 path .snapshots

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

Um das automatisch neu erstellte Btrfs: Unter-Subvolume - .snapshots zu löschen, kann nachfolgender Befehl verwendet werden:

[root@archlinux ~]# 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@archlinux ~]# btrfs subvolume list /
ID 257 gen 88 top level 5 path root
ID 258 gen 77 top level 5 path tmp
ID 259 gen 87 top level 5 path var_log
ID 260 gen 10 top level 5 path snapshots
ID 263 gen 25 top level 257 path var/lib/portables
ID 264 gen 26 top level 257 path var/lib/machines

Anschließend legen wir im Wurzelverzeichnis ein neues Verzeichnis mit dem Namen

  • /.snapshots

mit nachfolgendem Befehl an:

# [root@archlinux ~]# 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@archlinux ~]# vim /etc/fstab
# /dev/vda1 LABEL=ROOT
#UUID=7d67e68c-88c6-486f-b79a-506ca7aa9860	/         	btrfs     	rw,relatime,compress=lzo,space_cache=v2,subvolid=256,subvol=/root,subvol=root	0 0
 
# /dev/vda1 LABEL=ROOT
UUID=7d67e68c-88c6-486f-b79a-506ca7aa9860	/tmp      	btrfs     	rw,relatime,compress=lzo,space_cache=v2,subvol=tmp	0 0
 
# /dev/vda1 LABEL=ROOT
UUID=7d67e68c-88c6-486f-b79a-506ca7aa9860	/var/log  	btrfs     	rw,relatime,compress=lzo,space_cache=v2,subvol=var_log	0 0
 
# /dev/vda1 LABEL=ROOT
UUID=7d67e68c-88c6-486f-b79a-506ca7aa9860	/btrfs    	btrfs     	rw,relatime,compress=lzo,space_cache=v2,subvolid=5	0 0
 
# /dev/vda1 LABEL=ROOT
UUID=7d67e68c-88c6-486f-b79a-506ca7aa9860	/.snapshots	btrfs     	rw,relatime,compress=lzo,space_cache=v2,subvol=snapshots	0 0
 
# /dev/vda2 LABEL=SWAP
UUID=a3a1f6b2-6fbb-435f-8d71-b90f00701fe1	none      	swap      	defaults  	0 0

*Der vorletzte Eintrag ist hinzugekommen!

Erklärung

  • # /dev/vda1 LABEL=ROOT
    UUID=7d67e68c-88c6-486f-b79a-506ca7aa9860	/.snapshots	btrfs     	rw,relatime,compress=lzo,space_cache=v2,subvol=snapshots	0 0

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:

[root@archlinux ~]# mount /.snapshots/

Ob das mounten von Hand erfolgreich war, kann mit nachfolgendem Befehl überprüft werden:

[root@archlinux ~]# mount | grep /dev/vda
/dev/vda1 on / type btrfs (rw,relatime,space_cache=v2,subvolid=256,subvol=/root)
/dev/vda1 on /btrfs type btrfs (rw,relatime,space_cache=v2,subvolid=5,subvol=/)
/dev/vda1 on /tmp type btrfs (rw,relatime,space_cache=v2,subvolid=258,subvol=/tmp)
/dev/vda1 on /var/log type btrfs (rw,relatime,space_cache=v2,subvolid=259,subvol=/var_log)
/dev/vda1 on /.snapshots type btrfs (rw,relatime,space_cache=v2,subvolid=260,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@archlinux ~]# 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 von aufzubewahrenden Snapshots soll begrenzt werden.
  3. Die Anzahl der als wichtig gekennzeichneten Snapshots soll begrenzt werden.
[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 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:

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

* Die Angabe des Parameters –now bewirkt die sofortige Ausführung!

Ob dies korrekt funktioniert hat, kann mit nachfolgendem Befehl überprüft werden:

# systemctl list-timers
NEXT                         LEFT     LAST                         PASSED       UNIT                         ACTIVATES                     
Fri 2020-09-11 00:00:00 CEST 8h left  n/a                          n/a          man-db.timer                 man-db.service                
Fri 2020-09-11 00:00:00 CEST 8h left  Thu 2020-09-10 13:06:38 CEST 1h 55min ago shadow.timer                 shadow.service                
Fri 2020-09-11 13:22:13 CEST 22h left Thu 2020-09-10 13:22:13 CEST 1h 39min ago systemd-tmpfiles-clean.timer systemd-tmpfiles-clean.service
Fri 2020-09-11 15:00:54 CEST 23h left Thu 2020-09-10 15:00:54 CEST 1min 13s ago snapper-cleanup.timer        snapper-cleanup.service       

4 timers listed.
Pass --all to see loaded but inactive timers, too.

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 snapper installiert werden:

[root@archlinux ~]# pacman -S grub-btrfs
resolving dependencies...
looking for conflicting packages...

Packages (1) grub-btrfs-4.5-1

Total Download Size:   0.02 MiB
Total Installed Size:  0.06 MiB

:: Proceed with installation? [Y/n] Y
:: Retrieving packages...
 grub-btrfs-4.5-1-any               20.6 KiB  1029 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/2) Reloading system manager configuration...
(2/2) Arming ConditionNeedsUpdate...

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 keine erfolgen!

Installation: snap-pac

Hierbei handelt es sich um eine Reihe von pacman-„Hooks“ und ein Skript, das automatisch bewirkt, dass snapper einen Snapshot vor und nach pacman-Transaktionen durchführen.

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@archlinux ~]# pacman -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] Y
:: Retrieving packages...
 snap-pac-2.3.1-2-any   15.5 KiB  0.00   B/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.

Installation: snap-pac-grub

pacman-Hook zum Aktualisieren von GRUB-Einträgen für grub-btrfs nach snap-pac-erstellten Snapshots.

Bavor mit der Installation begonnen werden kann, muss der öffentliche PGP-Schlüssel des Erstellers zuvor importiert werden. Dies kann mit nachfolgendem Befehl durchgeführt werden:

[root@archlinux ~]# gpg --keyserver keys.openpgp.org --recv-keys EB4F9E5A60D32232BB52150C12C87A28FEAC6B20
gpg: /root/.gnupg/trustdb.gpg: trustdb created
gpg: key 12C87A28FEAC6B20: public key "Maxim Baz <pgp@maximbaz.com>" imported
gpg: Total number processed: 1
gpg:               imported: 1

Falls der Shclüssel nicht auf einem „Keyserver“ gefunden werden kann, hier der öffentliche-Schlüssel zum herunterladen:

-----BEGIN PGP PUBLIC KEY BLOCK-----

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
=Ooef
-----END PGP PUBLIC KEY BLOCK-----
[root@archlinux ~]# gpg --import EB4F9E5A60D32232BB52150C12C87A28FEAC6B20.asc

Mit nachfolgendem Befehl, kann snap-pac-grub installiert werden:

[root@archlinux ~]# pikaur -S snap-pac-grub
Reading repository package databases...
Reading local package database...
Resolving AUR dependencies...

:: AUR package will be installed:
 snap-pac-grub                                              -> 1.0.4-4

:: Proceed with installation? [Y/n] 
:: [v]iew package details   [m]anually select packages
>> Y
looking for conflicting AUR packages...
:: warning: Not showing diff for snap-pac-grub package (installing for the first time)
Do you want to edit PKGBUILD for snap-pac-grub package? [Y/n] n


:: Starting the build:
Running as unit: run-u41.service
Press ^] three times within 1s to disconnect TTY.
==> Making package: snap-pac-grub 1.0.4-4 (Thu 17 Sep 2020 11:26:36 AM CEST)
==> Checking runtime dependencies...
==> Checking buildtime dependencies...
==> Retrieving sources...
  -> Downloading snap-pac-grub-1.0.4.tar.gz...
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100   646  100   646    0     0   1993      0 --:--:-- --:--:-- --:--:--  1993
100  1129  100  1129    0     0   1251      0 --:--:-- --:--:-- --:--:--  1251
  -> Downloading snap-pac-grub-1.0.4.tar.gz.sig...
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100   650  100   650    0     0   2188      0 --:--:-- --:--:-- --:--:--  2181
100   566  100   566    0     0    681      0 --:--:-- --:--:-- --:--:--   681
==> Validating source files with sha256sums...
    snap-pac-grub-1.0.4.tar.gz ... Passed
    snap-pac-grub-1.0.4.tar.gz.sig ... Skipped
==> Verifying source file signatures with gpg...
    snap-pac-grub-1.0.4.tar.gz ... FAILED (unknown public key 011FDC52DA839335)
==> ERROR: One or more PGP signatures could not be verified!
Finished with result: exit-code
Main processes terminated with: code=exited/status=1
Service runtime: 2.328s

Command 'systemd-run --service-type=oneshot --pipe --wait --pty -p DynamicUser=yes -p CacheDirectory=pikaur -E HOME=/tmp -p WorkingDirectory=/var/cache/pikaur/build/snap-pac-grub makepkg --force' failed to execute.
:: Try recovering?
[R] retry build
[p] PGP check skip
[c] checksums skip
[i] ignore architecture
[d] delete build dir and try again
[e] edit PKGBUILD
------------------------
[s] skip building this package
[a] abort building all the packages
> p
Running as unit: run-u46.service
Press ^] three times within 1s to disconnect TTY.
==> Making package: snap-pac-grub 1.0.4-4 (Thu 17 Sep 2020 11:26:40 AM CEST)
==> Checking runtime dependencies...
==> Checking buildtime dependencies...
==> Retrieving sources...
  -> Found snap-pac-grub-1.0.4.tar.gz
  -> Found snap-pac-grub-1.0.4.tar.gz.sig
==> WARNING: Skipping verification of source file PGP signatures.
==> Validating source files with sha256sums...
    snap-pac-grub-1.0.4.tar.gz ... Passed
    snap-pac-grub-1.0.4.tar.gz.sig ... Skipped
==> Extracting sources...
  -> Extracting snap-pac-grub-1.0.4.tar.gz with bsdtar
==> 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 "snap-pac-grub"...
  -> Generating .PKGINFO file...
  -> Generating .BUILDINFO file...
  -> Generating .MTREE file...
  -> Compressing package...
==> Leaving fakeroot environment.
==> Finished making: snap-pac-grub 1.0.4-4 (Thu 17 Sep 2020 11:26:41 AM CEST)
Finished with result: success
Main processes terminated with: code=exited/status=0
Service runtime: 1.214s

loading packages...
resolving dependencies...
looking for conflicting packages...

Packages (1) snap-pac-grub-1.0.4-4

Total Installed Size:  0.00 MiB

:: Proceed with installation? [Y/n] Y
(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%
:: Running pre-transaction hooks...
(1/1) Performing snapper pre snapshots for the following configurations...
==> root: 1
:: Processing package changes...
(1/1) installing snap-pac-grub                                   [####################################] 100%
:: Running post-transaction hooks...
(1/3) Arming ConditionNeedsUpdate...
(2/3) Performing snapper post snapshots for the following configurations...
==> root: 2
(3/3) Generate GRUB config to let grub-btrfs detect new snapshots
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
###### - Grub-btrfs: Snapshot detection started - ######
# Info: Separate boot partition not detected 
# Info: snapper detected, using config 'root'
# Found snapshot: 2020-09-17 11:26:42 | snapshots/2/snapshot | post | snap-pac-grub
# Found snapshot: 2020-09-17 11:26:42 | snapshots/1/snapshot | pre  | pacman --color=always --upgrade /var/cache/pikaur/pkg/snap-pac-grub-1.0....
# Found 2 snapshot(s)
###### - Grub-btrfs: Snapshot detection ended   - ######
done

:!: HINWEIS - Leider entspricht der aktuelle öffentliche PGP-Schlüssel nicht dem des Paketes, so das die Überprüfung des PGP-Schlüssels leider zum Erstellungszeitpunkt übersprungen werden musste, da sonst keine Installation möglich wäre!

Eine Überprüfung ob alles funktioniert hat, kann mit nachfolgendem Befehl erfolgen:

[root@archlinux ~]# snapper list
 # | Type   | Pre # | Date                             | User | Cleanup | Description                                                                 | Userdata
---+--------+-------+----------------------------------+------+---------+-----------------------------------------------------------------------------+---------
0  | single |       |                                  | root |         | current                                                                     |         
1  | pre    |       | Thu 17 Sep 2020 11:26:42 AM CEST | root | number  | pacman --color=always --upgrade /var/cache/pikaur/pkg/snap-pac-grub-1.0.... |         
2  | post   |     1 | Thu 17 Sep 2020 11:26:42 AM CEST | root | number  | snap-pac-grub

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:

[root@archlinux ~]# pacman -S screenfetch
resolving dependencies...
looking for conflicting packages...

Packages (18) bc-1.07.1-4  libx11-1.6.12-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
              xorg-xdpyinfo-1.3.2-4  xorg-xprop-1.2.4-2  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] Y
:: Retrieving packages...
 bc-1.07.1-4-x86_64                   87.8 KiB  1464 KiB/s 00:00 [####################################] 100%
 xcb-proto-1.14-1-any                108.9 KiB  1556 KiB/s 00:00 [####################################] 100%
 libxdmcp-1.1.3-3-x86_64              27.4 KiB  2.68 MiB/s 00:00 [####################################] 100%
 libxau-1.0.9-3-x86_64                10.9 KiB  0.00   B/s 00:00 [####################################] 100%
 libxcb-1.14-1-x86_64                999.8 KiB  1492 KiB/s 00:01 [####################################] 100%
 xorgproto-2020.1-1-any              237.9 KiB  1399 KiB/s 00:00 [####################################] 100%
 libx11-1.6.12-1-x86_64                2.1 MiB  1444 KiB/s 00:01 [####################################] 100%
 libxext-1.3.4-3-x86_64              107.3 KiB  1533 KiB/s 00:00 [####################################] 100%
 libxi-1.7.10-3-x86_64               148.3 KiB  1483 KiB/s 00:00 [####################################] 100%
 libxfixes-5.0.3-4-x86_64             13.4 KiB  0.00   B/s 00:00 [####################################] 100%
 libxtst-1.2.3-4-x86_64               29.5 KiB  2.89 MiB/s 00:00 [####################################] 100%
 libxxf86vm-1.1.4-4-x86_64            15.7 KiB  0.00   B/s 00:00 [####################################] 100%
 libxrender-0.9.10-4-x86_64           26.0 KiB  0.00   B/s 00:00 [####################################] 100%
 libxcomposite-0.4.5-3-x86_64         11.4 KiB  0.00   B/s 00:00 [####################################] 100%
 libxinerama-1.1.4-3-x86_64           10.1 KiB  0.00   B/s 00:00 [####################################] 100%
 xorg-xdpyinfo-1.3.2-4-x86_64         16.0 KiB  0.00   B/s 00:00 [####################################] 100%
 xorg-xprop-1.2.4-2-x86_64            25.8 KiB  2.51 MiB/s 00:00 [####################################] 100%
 screenfetch-3.9.1-1-any              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: 3
:: 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/4) Arming ConditionNeedsUpdate...
(2/4) Updating the info directory file...
(3/4) Performing snapper post snapshots for the following configurations...
==> root: 4
(4/4) Generate GRUB config to let grub-btrfs detect new snapshots
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
###### - Grub-btrfs: Snapshot detection started - ######
# Info: Separate boot partition not detected 
# Info: snapper detected, using config 'root'
# Found snapshot: 2020-09-17 11:30:13 | snapshots/4/snapshot | post | bc libx11 libxau libxcb libxcomposite libxdmcp libxext libxfixes libxi l...
# Found snapshot: 2020-09-17 11:30:12 | snapshots/3/snapshot | pre  | pacman -S screenfetch
# Found snapshot: 2020-09-17 11:26:42 | snapshots/2/snapshot | post | snap-pac-grub
# Found snapshot: 2020-09-17 11:26:42 | snapshots/1/snapshot | pre  | pacman --color=always --upgrade /var/cache/pikaur/pkg/snap-pac-grub-1.0....
# Found 4 snapshot(s)
###### - Grub-btrfs: Snapshot detection ended   - ######
done

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

  1. Snapshot: 3 - Vor der Installation von screenfetch
  2. Snapshot: 4 - Nach der Installation von screenfetch

Dies kann auch durch Abfrage mit nachfolgendem Befehl bestätigt werden:

[root@archlinux ~]# snapper list
 # | Type   | Pre # | Date                             | User | Cleanup | Description                                                                 | Userdata
---+--------+-------+----------------------------------+------+---------+-----------------------------------------------------------------------------+---------
0  | single |       |                                  | root |         | current                                                                     |         
1  | pre    |       | Thu 17 Sep 2020 11:26:42 AM CEST | root | number  | pacman --color=always --upgrade /var/cache/pikaur/pkg/snap-pac-grub-1.0.... |         
2  | post   |     1 | Thu 17 Sep 2020 11:26:42 AM CEST | root | number  | snap-pac-grub                                                               |         
3  | pre    |       | Thu 17 Sep 2020 11:30:12 AM CEST | root | number  | pacman -S screenfetch                                                       |         
4  | post   |     3 | Thu 17 Sep 2020 11:30:13 AM CEST | root | number  | bc libx11 libxau libxcb libxcomposite libxdmcp libxext libxfixes libxi l... |

Eine Überprüfung, ob das Programm screenfetch aufgrufen und ausgeführt werden kann, kann durch Aufruf von screenfetch durchgeführt werden:

root@archlinux ~]# screenfetch 
                   -`                 
                  .o+`                 root@archlinux
                 `ooo/                 OS: Arch Linux 
                `+oooo:                Kernel: x86_64 Linux 5.4.63-1-lts
               `+oooooo:               Uptime: 2h 59m
               -+oooooo+:              Packages: 186
             `/:-:++oooo+:             Shell: bash 5.0.18
            `/++++/+++++++:            Disk: 8.9G / 92G (10%)
           `/++++++++++++++:           CPU: Intel Core (Skylake, IBRS) @ 2.304GHz
          `/+++ooooooooooooo/`         GPU: Red Hat, Inc. Virtio GPU (rev 01)
         ./ooosssso++osssssso+`        RAM: 250MiB / 983MiB
        .oossssso-````/ossssss+`      
       -osssssso.      :ssssssso.     
      :osssssss/        osssso+++.    
     /ossssssss/        +ssssooo/-    
   `/ossssso+/:-        -:/+osssso+-  
  `+sso+:-`                 `.-/+oso: 
 `++:.                           `-/+/
 .`                                 `/
[root@archlinux ~]#

Um jetzt die Installation von screenfetch rückgängig machen zu können, kann nachfolgender Befehl nun angewendet werden:

[root@archlinux ~]# snapper -v undochange 3..4
create:0 modify:3 delete:4306
...

Ein erneuter Aufruf von screenfetch, sollte nun zu einer Fehlermeldung führen und anzeigen, das das Programm nicht gefunden werden kann und somit auch nicht installiert ist:

[root@archlinux ~]# screenfetch 
-bash: /usr/bin/screenfetch: No such file or directory

In einen snapshot starten (booten)

Alle möglichen Snapshots in die gestartet werden kann, sind in einem Untermenü beim Neustart in GRUB ersichtlich, wie nachfolgende Bildschirmkopien zeigen:

Neustart GRUB

Druch Auswahl des GRUB-Menüpunktes Arch Linux snapshots, sollte in etwa ein Bildschirm wie nachfolgender zum Vorschein kommen:

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:

Nach einem erfolgeichen Startvorgang (booten), kann das Programm screenfetch wieder verwendet werden, wie nachfolgender Aufruf zeigt:

[root@archlinux ~]# screenfetch 
                   -`                 
                  .o+`                 root@archlinux
                 `ooo/                 OS: Arch Linux 
                `+oooo:                Kernel: x86_64 Linux 5.4.63-1-lts
               `+oooooo:               Uptime: 8m
               -+oooooo+:              Packages: 186
             `/:-:++oooo+:             Shell: bash 5.0.18
            `/++++/+++++++:            Disk: 8.9G / 92G (10%)
           `/++++++++++++++:           CPU: Intel Core (Skylake, IBRS) @ 2.304GHz
          `/+++ooooooooooooo/`         GPU: Red Hat, Inc. Virtio GPU (rev 01)
         ./ooosssso++osssssso+`        RAM: 186MiB / 983MiB
        .oossssso-````/ossssss+`      
       -osssssso.      :ssssssso.     
      :osssssss/        osssso+++.    
     /ossssssss/        +ssssooo/-    
   `/ossssso+/:-        -:/+osssso+-  
  `+sso+:-`                 `.-/+oso: 
 `++:.                           `-/+/
 .`                                 `/
[root@archlinux ~]#

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

[root@archlinux ~]# touch /test.txt
touch: cannot touch '/test.txt': Read-only file system

Damit wieder eine read-write Snapshot aus dem aktuell gestarteten Snapshot wird, sind nachfolgende Schritte erforderlich.

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 gemountet ist (Hier die Nummer 4):

[root@archlinux ~]# mount | grep /snapshots/
/dev/vda1 on / type btrfs (rw,relatime,space_cache=v2,subvolid=269,subvol=/snapshots/4/snapshot)

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@archlinux ~]# snapper -a classic rollback 4
Ambit is classic.
Creating read-only snapshot of current system. (Snapshot 5.)
Creating read-write snapshot of snapshot 4. (Snapshot 6.)
Setting default subvolume to snapshot 6.

Wichtig ist hier der Snapshot mit der Nummer 6 welcher einen startbereiten (boot) read-write Snapshot darstellt.

:!: WICHTIG - Leider kann nur über das editieren beim Starten via GRUB dieser Snapshot gestartet (boot) werden !!!

[root@archlinux ~]# systemctl reboot

Nachfolgend ist wieder ein Neustart durchzuführen:

Neustart GRUB

Durch Auswahl des GRUB-Menüpunktes Arch Linux snapshots, sollte in etwa ein Bildschirm wie nachfolgender zum Vorschein kommen:

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:

Neustart GRUB - Arch Linux snapshots - Kernel Auswahl

:!: WICHTIG - Jetzt ist die [e]-Taste zu drücken um den GRUB-Kernel-Bootmenü-Eintrag editieren zu können !!!

Neustart GRUB - Arch Linux snapshots - Kernel Auswahl - Editiert

:!: WICHTIG - Ersetzen der Snapshot-Nummer 4 durch die Snapshot_nummer 6 !!!

:!: 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 12 gestartet (boot) wurde:

[root@archlinux ~]# mount | grep /snapshots/
/dev/vda1 on / type btrfs (rw,relatime,space_cache=v2,subvolid=271,subvol=/snapshots/6/snapshot)

Und ob dieser auch ein read-write Snapshot ist, wie nachfolgender Befehl beweist:

[root@archlinux ~]# touch /test.txt
[root@archlinux ~]# ls -la /test.txt 
-rw-r--r-- 1 root root 0 Sep 10 17:21 /test.txt

:!: WICHTIG - Damit zukünftig von diesem Snapshot - standardmässig gestartet wird, muss nachfolgender Befehl ausgeführt werden:

Hier wird der Bootloader - hier GRUB neu installiert:

[root@archlinux ~]# grub-install /dev/vda
Installing for i386-pc platform.
Installation finished. No error reported.

Anschließend muss noch der Bootloader - hier GRUB neu konfiguriert werden:

[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
###### - Grub-btrfs: Snapshot detection started - ######
# Info: Separate boot partition not detected 
# Info: snapper detected, using config 'root'
# Found snapshot: 2020-09-17 12:03:14 | snapshots/6/snapshot | single | writable copy of #4
# Found snapshot: 2020-09-17 12:03:14 | snapshots/5/snapshot | single | rollback backup
# Found snapshot: 2020-09-17 11:30:13 | snapshots/4/snapshot | post   | bc libx11 libxau libxcb libxcomposite libxdmcp libxext libxfixes libxi l...
# Found snapshot: 2020-09-17 11:30:12 | snapshots/3/snapshot | pre    | pacman -S screenfetch
# Found snapshot: 2020-09-17 11:26:42 | snapshots/2/snapshot | post   | snap-pac-grub
# Found snapshot: 2020-09-17 11:26:42 | snapshots/1/snapshot | pre    | pacman --color=always --upgrade /var/cache/pikaur/pkg/snap-pac-grub-1.0....
# Found 6 snapshot(s)
###### - Grub-btrfs: Snapshot detection ended   - ######
done
[root@archlinux ~]# systemctl reboot

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:

Neustart GRUB - Standard Kernel

Eine Überprüfung, welcher Snapshot gestartet (boot) ist, kann nochmals mit nachfolgendem Befehl durchgeführt werden:

[root@archlinux ~]# mount | grep /snapshots/
/dev/vda1 on / type btrfs (rw,relatime,space_cache=v2,subvolid=271,subvol=/snapshots/6/snapshot)

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:

[root@archlinux ~]# rm /btrfs/root -rf

Anschließend sol leine read-write - Snapshot vom aktuellen Snapshot von dem gerade gebootet wurde via snapper kopiert werden, was mit nachfolgendem Befehl durchgeführt werden soll:

[root@archlinux ~]# btrfs subvol snapshot /.snapshots/6/snapshot /btrfs
Create a snapshot of '/.snapshots/6/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@archlinux ~]# mv /btrfs/snapshot /btrfs/root

Abschließend muss nun die GRUB-Konfigurationsdatei in nachfolgendem Verzeichnis mit nachfolgendem Namen

  • /boot/grub/grub.cfg

noch entsprechend angepasst werden.

[root@archlinux ~]# vim /boot/grub/grub.cfg

:!: WICHTIG - font=„/snapshots/6/snapshot/usr/share/grub/unicode.pf2“ muss gegen font=„/usr/share/grub/unicode.pf2“ ausgetauscht werden.

:!: HINWEIS - Alle Einträge mit snapshots/6/snapshot müssen gegen /root ausgetauscht werden!

Nachfolgend eine Liste der relevanten Stellen (nur relevanter Ausschnitt):

  •     font="/usr/share/grub/unicode.pf2"

Eine Suche im Editor nach fonts=„ findet die Stelle am schnellsten.

  •     linux   /root/boot/vmlinuz-linux-lts root=UUID=7d67e68c-88c6-486f-b79a-506ca7aa9860 rw rootflags=subvol=root  loglevel=3 net.ifnames=0

menuentry 'Arch Linux' - Wichtig ist hier die Angabe subvol=, die wie oben gezeigt angepasst werden muss.

  •     initrd  /root/boot/initramfs-linux-lts.img

menuentry 'Arch Linux' - initrd muss ebenfalls ausgetauscht werden.

  •         linux   /root/boot/vmlinuz-linux-lts root=UUID=7d67e68c-88c6-486f-b79a-506ca7aa9860 rw rootflags=subvol=root  loglevel=3 net.ifnames=0

submenu 'Advanced options for Arch Linux' - Wichtig ist hier die Angabe subvol=, die wie oben gezeigt angepasst werden muss.

  •         initrd  /root/boot/initramfs-linux-lts.img

submenu 'Advanced options for Arch Linux' - initrd muss ebenfalls ausgetauscht werden.

  •         linux   /root/boot/vmlinuz-linux-lts root=UUID=7d67e68c-88c6-486f-b79a-506ca7aa9860 rw rootflags=subvol=root  loglevel=3 net.ifnames=0

menuentry 'Arch Linux, with Linux linux-lts (fallback initramfs)' - Wichtig ist hier die Angabe subvol=, die wie oben gezeigt angepasst werden muss.

  •         initrd  /root/boot/initramfs-linux-lts-fallback.img

menuentry 'Arch Linux, with Linux linux-lts (fallback initramfs)' - initrd muss ebenfalls ausgetauscht werden.

:!: WICHTIG - Damit zukünftig von diesem Snapshot - standardmässig gestartet wird, muss nachfolgender Befehl ausgeführt werden:

Hier wird der Bootloader - hier GRUB neu installiert:

[root@archlinux ~]# grub-install /dev/vda
Installing for i386-pc platform.
Installation finished. No error reported.
[root@archlinux ~]# systemctl reboot

Nach einem Neustart, sollte nun wieder root gestartet (boot) werden, was nachfolgende Bildschirmkopie zeigt:

Neustart GRUB - Standard Kernel

Eine Überprüfung, ob root gestartet (boot) wurde, kann mit nachfolgendem Befehl durchgeführt werden:

[root@archlinux ~]# mount | grep /root
/dev/vda1 on / type btrfs (rw,relatime,space_cache=v2,subvolid=272,subvol=/root)
[root@archlinux ~]#

Anschließend soll das Subvolume - / wieder der default werden, was mit nachfolgendem Befehl durchgeführt werden kann:

[root@archlinux ~]# btrfs subvolume set-default 0 /

Zur Überprüfung kann nachfolgende Befehl verwendet werden:

[root@archlinux ~]# btrfs subvolume get-default /
ID 272 gen 133 top level 5 path root

Nun können auch beispielsweise alle Snapshots mit nachfolgendem Befehl gelöscht werden:

[root@archlinux ~]# snapper delete 6
[root@archlinux ~]# snapper delete 5
[root@archlinux ~]# snapper delete 4
[root@archlinux ~]# snapper delete 3
[root@archlinux ~]# snapper delete 1

Abschließend würde dann die Anzeige aller Snapshots wie folgt aussehen:

[root@archlinux ~]# snapper list
 # | Type   | Pre # | Date | User | Cleanup | Description | Userdata
---+--------+-------+------+------+---------+-------------+---------
0  | single |       |      | root |         | current     |

Auch die Anzeige des via BtrfS verwendeten Speicherplatzes zeigt nur die für root verwendeten daten an:

[root@archlinux ~]# df -Th | grep /dev/vda
/dev/vda1      btrfs      19G  1.8G   17G  10% /
/dev/vda1      btrfs      19G  1.8G   17G  10% /btrfs
/dev/vda1      btrfs      19G  1.8G   17G  10% /.snapshots
/dev/vda1      btrfs      19G  1.8G   17G  10% /tmp
/dev/vda1      btrfs      19G  1.8G   17G  10% /var/log

bzw.

[root@archlinux ~]# btrfs filesystem df /
Data, single: total=2.01GiB, used=1.67GiB
System, DUP: total=8.00MiB, used=16.00KiB
Metadata, DUP: total=256.00MiB, used=54.36MiB
GlobalReserve, single: total=4.94MiB, used=0.00B

:!: WICHTIG - Damit zukünftig von diesem Snapshot - standardmässig gestartet wird, muss nachfolgender Befehl ausgeführt werden:

Hier wird der Bootloader - hier GRUB neu installiert:

[root@archlinux ~]# grub-install /dev/vda
Installing for i386-pc platform.
Installation finished. No error reported.

Anschließend muss noch der Bootloader - hier GRUB neu konfiguriert werden:

[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
###### - Grub-btrfs: Snapshot detection started - ######
# Info: Separate boot partition not detected 
# Info: snapper detected, using config 'root'
# Found snapshot: 2020-09-17 13:49:19 | root
# Found 1 snapshot(s)
###### - Grub-btrfs: Snapshot detection ended   - ######
done
Cookies helfen bei der Bereitstellung von Inhalten. Durch die Nutzung dieser Seiten erklären Sie sich damit einverstanden, dass Cookies auf Ihrem Rechner gespeichert werden. Weitere Information
tachtler/archlinux_-_minimal_server_installation_-_mit_btrfs_snapper.txt · Zuletzt geändert: 2020/09/17 13:52 von klaus