Benutzer-Werkzeuge

Webseiten-Werkzeuge


tachtler:ubuntu-_minimal_server_installation_-_snapper_-_grub-btrfs

Ubuntu Server 20.04 LTS - Minimal Server Installation - snapper - grub-btrfs

Die hier verwendete Installationsmethode ist eine Installation von einem USB-Stick. Es kommt die einzige verfügbare 64-bit-Variante von Ubuntu Server LTS in der Version 20.04 LTS 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.

Beschreibung Externer Link
Homepage https://ubuntu.com/
Dokumentation https://help.ubuntu.com/
Download https://ubuntu.com/download/server

* Quelle: Install Ubuntu 21.04 with btrfs + snapper + grub-btrfs

Ab hier werden root-Rechte zur Ausführung der nachfolgenden Befehle benötigt.

1. Möglichkeit: Um als Benutzer root agieren zu können, geben Sie bitte vor den Befehlen immer den nachfolgenden Befehl ein:

$ sudo 

2. Möglichkeit: 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, um ein Passwort für den Benutzer root zur localen Anmeldung zu erstellen:

Ubuntu 20.04.3 LTS ubuntu tty1

ubuntu login: klaus
Password:
Welcome to Ubuntu 20.04.3 LTS (GNU/Linux 5.13.0-35-generic x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/advantage

  System information as of Mon 14 Mar 2022 04:01:27 AM UTC

  System load:    0.0       Processes:               226
  Usage of /home: unknown   Users logged in:         1
  Memory usage:   2%        IPv4 address for enp1s0: 192.168.122.26
  Swap usage:     0%


55 updates can be applied immediately.
To see these additional updates run: apt list --upgradable

Your Hardware Enablement Stack (HWE) is supported until April 2025.

Last login: Mon Mar 14 04:01:13 2022
To run a command as administrator (user "root"), use "sudo <command>".
See "man sudo_root" for details.

klaus@ubuntu:~$ sudo passwd root
[sudo] password for klaus: 
New password: 
Retype new password: 
passwd: password updated successfully
klaus@ubuntu:~$ su -
Password: 
root@ubuntu:~#

Voraussetzungen

Für die nachfolgende Installation wird vorausgesetzt,

  1. dass eine lauffähige Version von Ubuntu Server LTS mit dem Dateisystem: Btrfs vorhanden ist
  2. Das Betriebssystem auf den neusten Stand „upgagraded“ ist

Die unter nachfolgenden Link beschriebene Installation von Ubuntu Server LTS wird hier als Mindestvoraussetzung angenommen:

Betriebssystem: Update und Upgrade

Mit den drei nachfolgenden verketteten Befehlen, soll bevor jegliche weitere Installationen von Pakten erfolgen soll, das Betriebssystem auf den neusten Stand „upgagraded“ werden:

root@ubuntu:~# apt-get update && apt-get dist-upgrade && apt-get autoremove
Hit:1 http://de.archive.ubuntu.com/ubuntu focal InRelease
Hit:2 http://de.archive.ubuntu.com/ubuntu focal-updates InRelease
Hit:3 http://de.archive.ubuntu.com/ubuntu focal-backports InRelease
Hit:4 http://de.archive.ubuntu.com/ubuntu focal-security InRelease
Reading package lists... Done
Reading package lists... Done
Building dependency tree       
Reading state information... Done
Calculating upgrade... Done
The following package was automatically installed and is no longer required:
  libfwupdplugin1
Use 'apt autoremove' to remove it.
The following NEW packages will be installed:
  libfwupdplugin5 libmbim-glib4 libmbim-proxy libmm-glib0 libqmi-glib5 libqmi-proxy modemmanager usb-modeswitch
  usb-modeswitch-data
The following packages will be upgraded:
  alsa-ucm-conf base-files cloud-init cloud-initramfs-copymods cloud-initramfs-dyn-netconf command-not-found fwupd
  fwupd-signed initramfs-tools initramfs-tools-bin initramfs-tools-core libasound2 libasound2-data libfwupd2
  libjcat1 libnetplan0 libpam-modules libpam-modules-bin libpam-runtime libpam0g libprocps8 libssl1.1 libudisks2-0
  linux-base motd-news-config netplan.io open-vm-tools openssl overlayroot procps python-apt-common python3-apt
  python3-commandnotfound python3-distupgrade python3-software-properties python3-update-manager rsync
  software-properties-common sosreport ubuntu-advantage-tools ubuntu-release-upgrader-core udisks2 ufw
  update-manager-core update-notifier-common wget
46 upgraded, 9 newly installed, 0 to remove and 0 not upgraded.
Need to get 11.9 MB of archives.
After this operation, 12.7 MB of additional disk space will be used.
Do you want to continue? [Y/n] Y
...
...
...
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following packages will be REMOVED:
  libfwupdplugin1
0 upgraded, 0 newly installed, 1 to remove and 0 not upgraded.
After this operation, 459 kB disk space will be freed.
Do you want to continue? [Y/n] Y
...
...
...
root@ubuntu:~#

Installation: snapper

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

Mit nachfolgendem Befehl, kann snapper installiert werden:

root@ubuntu:~# apt-get install snapper
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following additional packages will be installed:
  libboost-thread1.71.0 libbtrfs0 libsnapper4
The following NEW packages will be installed:
  libboost-thread1.71.0 libbtrfs0 libsnapper4 snapper
0 upgraded, 4 newly installed, 0 to remove and 0 not upgraded.
Need to get 1,102 kB of archives.
After this operation, 5,830 kB of additional disk space will be used.
Do you want to continue? [Y/n] Y
Get:1 http://de.archive.ubuntu.com/ubuntu focal/main amd64 libboost-thread1.71.0 amd64 1.71.0-6ubuntu6 [249 kB]
Get:2 http://de.archive.ubuntu.com/ubuntu focal/main amd64 libbtrfs0 amd64 5.4.1-2 [175 kB]
Get:3 http://de.archive.ubuntu.com/ubuntu focal/universe amd64 libsnapper4 amd64 0.8.6-1build1 [269 kB]
Get:4 http://de.archive.ubuntu.com/ubuntu focal/universe amd64 snapper amd64 0.8.6-1build1 [410 kB]
Fetched 1,102 kB in 0s (2,214 kB/s)
Selecting previously unselected package libboost-thread1.71.0:amd64.
(Reading database ... 70494 files and directories currently installed.)
Preparing to unpack .../libboost-thread1.71.0_1.71.0-6ubuntu6_amd64.deb ...
Unpacking libboost-thread1.71.0:amd64 (1.71.0-6ubuntu6) ...
Selecting previously unselected package libbtrfs0:amd64.
Preparing to unpack .../libbtrfs0_5.4.1-2_amd64.deb ...
Unpacking libbtrfs0:amd64 (5.4.1-2) ...
Selecting previously unselected package libsnapper4:amd64.
Preparing to unpack .../libsnapper4_0.8.6-1build1_amd64.deb ...
Unpacking libsnapper4:amd64 (0.8.6-1build1) ...
Selecting previously unselected package snapper.
Preparing to unpack .../snapper_0.8.6-1build1_amd64.deb ...
Unpacking snapper (0.8.6-1build1) ...
Setting up libbtrfs0:amd64 (5.4.1-2) ...
Setting up libboost-thread1.71.0:amd64 (1.71.0-6ubuntu6) ...
Setting up libsnapper4:amd64 (0.8.6-1build1) ...
Setting up snapper (0.8.6-1build1) ...
Created symlink /etc/systemd/system/timers.target.wants/snapper-boot.timer → /lib/systemd/system/snapper-boot.timer.
Created symlink /etc/systemd/system/timers.target.wants/snapper-cleanup.timer → /lib/systemd/system/snapper-cleanup.timer.
Created symlink /etc/systemd/system/timers.target.wants/snapper-timeline.timer → /lib/systemd/system/snapper-timeline.timer.
snapper-boot.service is a disabled or a static unit, not starting it.
snapper-cleanup.service is a disabled or a static unit, not starting it.
snapper-timeline.service is a disabled or a static unit, not starting it.
Processing triggers for man-db (2.9.1-1) ...
Processing triggers for dbus (1.12.16-2ubuntu2.1) ...
Processing triggers for libc-bin (2.31-0ubuntu9.7) ...
root@ubuntu:~#

Nachfolgender Befehl listete den Inhalt des installierten Pakets - snapper - auf:

root@ubuntu:~# dpkg-query -L snapper
/.
/etc
/etc/apt
/etc/apt/apt.conf.d
/etc/apt/apt.conf.d/80snapper
/etc/dbus-1
/etc/dbus-1/system.d
/etc/dbus-1/system.d/org.opensuse.Snapper.conf
/etc/default
/etc/default/snapper
/etc/logrotate.d
/etc/logrotate.d/snapper
/etc/snapper
/etc/snapper/config-templates
/etc/snapper/config-templates/default
/etc/snapper/configs
/etc/snapper/filters
/etc/snapper/filters/base.txt
/etc/snapper/filters/lvm.txt
/etc/snapper/filters/x11.txt
/lib
/lib/systemd
/lib/systemd/system
/lib/systemd/system/snapper-boot.service
/lib/systemd/system/snapper-boot.timer
/lib/systemd/system/snapper-cleanup.service
/lib/systemd/system/snapper-cleanup.timer
/lib/systemd/system/snapper-timeline.service
/lib/systemd/system/snapper-timeline.timer
/usr
/usr/bin
/usr/bin/snapper
/usr/lib
/usr/lib/snapper
/usr/lib/snapper/installation-helper
/usr/lib/snapper/systemd-helper
/usr/sbin
/usr/sbin/mksubvolume
/usr/sbin/snapperd
/usr/share
/usr/share/bash-completion
/usr/share/bash-completion/completions
/usr/share/bash-completion/completions/snapper
/usr/share/dbus-1
/usr/share/dbus-1/system-services
/usr/share/dbus-1/system-services/org.opensuse.Snapper.service
/usr/share/doc
/usr/share/doc/snapper
/usr/share/doc/snapper/AUTHORS
/usr/share/doc/snapper/copyright
/usr/share/doc/snapper/dbus-protocol.txt
/usr/share/locale
/usr/share/locale/af
/usr/share/locale/af/LC_MESSAGES
/usr/share/locale/af/LC_MESSAGES/snapper.mo
/usr/share/locale/ar
/usr/share/locale/ar/LC_MESSAGES
/usr/share/locale/ar/LC_MESSAGES/snapper.mo
/usr/share/locale/be
/usr/share/locale/be/LC_MESSAGES
/usr/share/locale/be/LC_MESSAGES/snapper.mo
/usr/share/locale/bg
/usr/share/locale/bg/LC_MESSAGES
/usr/share/locale/bg/LC_MESSAGES/snapper.mo
/usr/share/locale/bn
/usr/share/locale/bn/LC_MESSAGES
/usr/share/locale/bn/LC_MESSAGES/snapper.mo
/usr/share/locale/bs
/usr/share/locale/bs/LC_MESSAGES
/usr/share/locale/bs/LC_MESSAGES/snapper.mo
/usr/share/locale/ca
/usr/share/locale/ca/LC_MESSAGES
/usr/share/locale/ca/LC_MESSAGES/snapper.mo
/usr/share/locale/cs
/usr/share/locale/cs/LC_MESSAGES
/usr/share/locale/cs/LC_MESSAGES/snapper.mo
/usr/share/locale/cy
/usr/share/locale/cy/LC_MESSAGES
/usr/share/locale/cy/LC_MESSAGES/snapper.mo
/usr/share/locale/da
/usr/share/locale/da/LC_MESSAGES
/usr/share/locale/da/LC_MESSAGES/snapper.mo
/usr/share/locale/de
/usr/share/locale/de/LC_MESSAGES
/usr/share/locale/de/LC_MESSAGES/snapper.mo
/usr/share/locale/el
/usr/share/locale/el/LC_MESSAGES
/usr/share/locale/el/LC_MESSAGES/snapper.mo
/usr/share/locale/en_GB
/usr/share/locale/en_GB/LC_MESSAGES
/usr/share/locale/en_GB/LC_MESSAGES/snapper.mo
/usr/share/locale/en_US
/usr/share/locale/en_US/LC_MESSAGES
/usr/share/locale/en_US/LC_MESSAGES/snapper.mo
/usr/share/locale/eo
/usr/share/locale/eo/LC_MESSAGES
/usr/share/locale/eo/LC_MESSAGES/snapper.mo
/usr/share/locale/es
/usr/share/locale/es/LC_MESSAGES
/usr/share/locale/es/LC_MESSAGES/snapper.mo
/usr/share/locale/et
/usr/share/locale/et/LC_MESSAGES
/usr/share/locale/et/LC_MESSAGES/snapper.mo
/usr/share/locale/eu
/usr/share/locale/eu/LC_MESSAGES
/usr/share/locale/eu/LC_MESSAGES/snapper.mo
/usr/share/locale/fa
/usr/share/locale/fa/LC_MESSAGES
/usr/share/locale/fa/LC_MESSAGES/snapper.mo
/usr/share/locale/fi
/usr/share/locale/fi/LC_MESSAGES
/usr/share/locale/fi/LC_MESSAGES/snapper.mo
/usr/share/locale/fr
/usr/share/locale/fr/LC_MESSAGES
/usr/share/locale/fr/LC_MESSAGES/snapper.mo
/usr/share/locale/gl
/usr/share/locale/gl/LC_MESSAGES
/usr/share/locale/gl/LC_MESSAGES/snapper.mo
/usr/share/locale/gu
/usr/share/locale/gu/LC_MESSAGES
/usr/share/locale/gu/LC_MESSAGES/snapper.mo
/usr/share/locale/he
/usr/share/locale/he/LC_MESSAGES
/usr/share/locale/he/LC_MESSAGES/snapper.mo
/usr/share/locale/hi
/usr/share/locale/hi/LC_MESSAGES
/usr/share/locale/hi/LC_MESSAGES/snapper.mo
/usr/share/locale/hr
/usr/share/locale/hr/LC_MESSAGES
/usr/share/locale/hr/LC_MESSAGES/snapper.mo
/usr/share/locale/hu
/usr/share/locale/hu/LC_MESSAGES
/usr/share/locale/hu/LC_MESSAGES/snapper.mo
/usr/share/locale/id
/usr/share/locale/id/LC_MESSAGES
/usr/share/locale/id/LC_MESSAGES/snapper.mo
/usr/share/locale/it
/usr/share/locale/it/LC_MESSAGES
/usr/share/locale/it/LC_MESSAGES/snapper.mo
/usr/share/locale/ja
/usr/share/locale/ja/LC_MESSAGES
/usr/share/locale/ja/LC_MESSAGES/snapper.mo
/usr/share/locale/ka
/usr/share/locale/ka/LC_MESSAGES
/usr/share/locale/ka/LC_MESSAGES/snapper.mo
/usr/share/locale/km
/usr/share/locale/km/LC_MESSAGES
/usr/share/locale/km/LC_MESSAGES/snapper.mo
/usr/share/locale/ko
/usr/share/locale/ko/LC_MESSAGES
/usr/share/locale/ko/LC_MESSAGES/snapper.mo
/usr/share/locale/ku
/usr/share/locale/ku/LC_MESSAGES
/usr/share/locale/ku/LC_MESSAGES/snapper.mo
/usr/share/locale/lo
/usr/share/locale/lo/LC_MESSAGES
/usr/share/locale/lo/LC_MESSAGES/snapper.mo
/usr/share/locale/lt
/usr/share/locale/lt/LC_MESSAGES
/usr/share/locale/lt/LC_MESSAGES/snapper.mo
/usr/share/locale/mk
/usr/share/locale/mk/LC_MESSAGES
/usr/share/locale/mk/LC_MESSAGES/snapper.mo
/usr/share/locale/mr
/usr/share/locale/mr/LC_MESSAGES
/usr/share/locale/mr/LC_MESSAGES/snapper.mo
/usr/share/locale/nb
/usr/share/locale/nb/LC_MESSAGES
/usr/share/locale/nb/LC_MESSAGES/snapper.mo
/usr/share/locale/nds
/usr/share/locale/nds/LC_MESSAGES
/usr/share/locale/nds/LC_MESSAGES/snapper.mo
/usr/share/locale/nl
/usr/share/locale/nl/LC_MESSAGES
/usr/share/locale/nl/LC_MESSAGES/snapper.mo
/usr/share/locale/nn
/usr/share/locale/nn/LC_MESSAGES
/usr/share/locale/nn/LC_MESSAGES/snapper.mo
/usr/share/locale/pa
/usr/share/locale/pa/LC_MESSAGES
/usr/share/locale/pa/LC_MESSAGES/snapper.mo
/usr/share/locale/pl
/usr/share/locale/pl/LC_MESSAGES
/usr/share/locale/pl/LC_MESSAGES/snapper.mo
/usr/share/locale/pt
/usr/share/locale/pt/LC_MESSAGES
/usr/share/locale/pt/LC_MESSAGES/snapper.mo
/usr/share/locale/pt_BR
/usr/share/locale/pt_BR/LC_MESSAGES
/usr/share/locale/pt_BR/LC_MESSAGES/snapper.mo
/usr/share/locale/ro
/usr/share/locale/ro/LC_MESSAGES
/usr/share/locale/ro/LC_MESSAGES/snapper.mo
/usr/share/locale/ru
/usr/share/locale/ru/LC_MESSAGES
/usr/share/locale/ru/LC_MESSAGES/snapper.mo
/usr/share/locale/si
/usr/share/locale/si/LC_MESSAGES
/usr/share/locale/si/LC_MESSAGES/snapper.mo
/usr/share/locale/sk
/usr/share/locale/sk/LC_MESSAGES
/usr/share/locale/sk/LC_MESSAGES/snapper.mo
/usr/share/locale/sl
/usr/share/locale/sl/LC_MESSAGES
/usr/share/locale/sl/LC_MESSAGES/snapper.mo
/usr/share/locale/sr
/usr/share/locale/sr/LC_MESSAGES
/usr/share/locale/sr/LC_MESSAGES/snapper.mo
/usr/share/locale/sv
/usr/share/locale/sv/LC_MESSAGES
/usr/share/locale/sv/LC_MESSAGES/snapper.mo
/usr/share/locale/ta
/usr/share/locale/ta/LC_MESSAGES
/usr/share/locale/ta/LC_MESSAGES/snapper.mo
/usr/share/locale/tg
/usr/share/locale/tg/LC_MESSAGES
/usr/share/locale/tg/LC_MESSAGES/snapper.mo
/usr/share/locale/th
/usr/share/locale/th/LC_MESSAGES
/usr/share/locale/th/LC_MESSAGES/snapper.mo
/usr/share/locale/tr
/usr/share/locale/tr/LC_MESSAGES
/usr/share/locale/tr/LC_MESSAGES/snapper.mo
/usr/share/locale/uk
/usr/share/locale/uk/LC_MESSAGES
/usr/share/locale/uk/LC_MESSAGES/snapper.mo
/usr/share/locale/vi
/usr/share/locale/vi/LC_MESSAGES
/usr/share/locale/vi/LC_MESSAGES/snapper.mo
/usr/share/locale/wa
/usr/share/locale/wa/LC_MESSAGES
/usr/share/locale/wa/LC_MESSAGES/snapper.mo
/usr/share/locale/xh
/usr/share/locale/xh/LC_MESSAGES
/usr/share/locale/xh/LC_MESSAGES/snapper.mo
/usr/share/locale/zh_CN
/usr/share/locale/zh_CN/LC_MESSAGES
/usr/share/locale/zh_CN/LC_MESSAGES/snapper.mo
/usr/share/locale/zh_TW
/usr/share/locale/zh_TW/LC_MESSAGES
/usr/share/locale/zh_TW/LC_MESSAGES/snapper.mo
/usr/share/locale/zu
/usr/share/locale/zu/LC_MESSAGES
/usr/share/locale/zu/LC_MESSAGES/snapper.mo
/usr/share/man
/usr/share/man/man5
/usr/share/man/man5/snapper-configs.5.gz
/usr/share/man/man8
/usr/share/man/man8/mksubvolume.8.gz
/usr/share/man/man8/pam_snapper.8.gz
/usr/share/man/man8/snapper.8.gz
/usr/share/man/man8/snapperd.8.gz
/usr/share/doc/snapper/changelog.Debian.gz

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@ubuntu:~# 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@ubuntu:~# btrfs subvolume list /
ID 260 gen 45 top level 5 path .snapshots

Jetzt muss die Konfigurationsdatei

  • /etc/fstab

wie folgt erweitert werden, so dass das neue Verzeichnis /.snapshots auch auf das mit der ursprünglichen Installation angelegtes Btrfs: Subvolume /.snapshots (welches ein eigenes Btrfs: Unter-Subvolume ist), automatisch bei jedem Start mit gemounttet wird:

root@ubuntu:~# vim /etc/fstab
# /etc/fstab: static file system information.
# 
# Use 'blkid' to print the universally unique identifier for a
# device; this may be used with UUID= as a more robust way to name devices
# that works even if disks are added and removed. See fstab(5).
#
# <file system> <mount point>   <type>  <options>       <dump>  <pass>
/dev/disk/by-id/dm-uuid-LVM-MpbaSu8tv7gm7ZffAjQw0EJBe0Y68CFUvEuLj3lVx2mvdf3Bi8S927agHLToSbbb none swap sw 0 0
# / was on /dev/vg/root during curtin installation
/dev/disk/by-id/dm-uuid-LVM-MpbaSu8tv7gm7ZffAjQw0EJBe0Y68CFU1bkGHaI6eHtV587sdPBMKrHaVRgC5K1H / btrfs defaults 0 1
# Tachtler - NEW - /.snapshots was on /dev/vg/root 
/dev/disk/by-id/dm-uuid-LVM-MpbaSu8tv7gm7ZffAjQw0EJBe0Y68CFU1bkGHaI6eHtV587sdPBMKrHaVRgC5K1H /.snapshots btrfs defaults 0 1
# /boot was on /dev/vda2 during curtin installation
/dev/disk/by-uuid/bb9b7646-4038-4766-9191-37299b304f0b /boot btrfs defaults 0 1
# /home was on /dev/vg/home during curtin installation
/dev/disk/by-id/dm-uuid-LVM-MpbaSu8tv7gm7ZffAjQw0EJBe0Y68CFUIEN3P24xZKba8guaYyo2BW0oTrg4bZf6 /home btrfs defaults 0 1
# /var was on /dev/vg/var during curtin installation
/dev/disk/by-id/dm-uuid-LVM-MpbaSu8tv7gm7ZffAjQw0EJBe0Y68CFUxn10qyWYdImbLEKWiJhNrF4MxFYS8KQv /var xfs defaults 0 1
# /var/log was on /dev/vg/var_log during curtin installation
/dev/disk/by-id/dm-uuid-LVM-MpbaSu8tv7gm7ZffAjQw0EJBe0Y68CFUvb1zBsc31slk47eWfR72e2PAKCP4HCnc /var/log xfs defaults 0 1

*Der Eintrag bei # Tachtler - NEW - /.snapshots was on /dev/vg/root ist hinzugekommen!

Erklärung

  • # Tachtler - NEW - /.snapshots was on /dev/vg/root 
    /dev/disk/by-id/dm-uuid-LVM-MpbaSu8tv7gm7ZffAjQw0EJBe0Y68CFU1bkGHaI6eHtV587sdPBMKrHaVRgC5K1H /.snapshots btrfs defaults 0 1

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@ubuntu:~# mount /.snapshots

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

root@ubuntu:~# mount | grep /dev/mapper/
/dev/mapper/vg-root on / type btrfs (rw,relatime,space_cache,subvolid=5,subvol=/)
/dev/mapper/vg-home on /home type btrfs (rw,relatime,space_cache,subvolid=5,subvol=/)
/dev/mapper/vg-var on /var type xfs (rw,relatime,attr2,inode64,logbufs=8,logbsize=32k,noquota)
/dev/mapper/vg-var_log on /var/log type xfs (rw,relatime,attr2,inode64,logbufs=8,logbsize=32k,noquota)
/dev/mapper/vg-root on /.snapshots type btrfs (rw,relatime,space_cache,subvolid=5,subvol=/)
root@ubuntu:~#

*Der letzte Eintrag ist hinzugekommen!

Um sicher zu gehen, das snapper auch weiterhin korrekt funktioniert, kann nachfolgender Befehl verwendet werden, welche den aktuellen Status aller Snapshots auflistet:

root@ubuntu:~# snapper list
 # | Type   | Pre # | Date | User | Cleanup | Description | Userdata
---+--------+-------+------+------+---------+-------------+---------
0  | single |       |      | root |         | current     |         
root@ubuntu:~#

/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@ubuntu:~# 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 (Falls dies nicht bereits bei der Installation von snapper geschehen ist):

root@ubuntu:~# systemctl enable --now snapper-cleanup.timer
Created symlink /etc/systemd/system/timers.target.wants/snapper-cleanup.timer → /usr/lib/systemd/system/snapper-cleanup.timer.

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

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

root@ubuntu:~# systemctl list-timers
NEXT                        LEFT          LAST                        PASSED       UNIT                         ACTIV>
Mon 2022-03-14 05:54:32 UTC 39min left    n/a                         n/a          ua-timer.timer               ua-ti>
Mon 2022-03-14 06:00:00 UTC 44min left    n/a                         n/a          snapper-timeline.timer       snapp>
Mon 2022-03-14 06:09:56 UTC 54min left    Mon 2022-03-14 03:57:25 UTC 1h 17min ago apt-daily-upgrade.timer      apt-d>
Mon 2022-03-14 10:25:20 UTC 5h 10min left Mon 2022-03-14 03:57:25 UTC 1h 17min ago fwupd-refresh.timer          fwupd>
Mon 2022-03-14 14:30:15 UTC 9h left       Mon 2022-03-14 04:17:13 UTC 57min ago    motd-news.timer              motd->
Mon 2022-03-14 16:16:26 UTC 11h left      Mon 2022-03-14 03:57:25 UTC 1h 17min ago apt-daily.timer              apt-d>
Tue 2022-03-15 00:00:00 UTC 18h left      Mon 2022-03-14 03:57:25 UTC 1h 17min ago logrotate.timer              logro>
Tue 2022-03-15 00:00:00 UTC 18h left      Mon 2022-03-14 03:57:25 UTC 1h 17min ago man-db.timer                 man-d>
Tue 2022-03-15 05:09:55 UTC 23h left      Mon 2022-03-14 05:09:55 UTC 5min ago     snapper-cleanup.timer        snapp>
Tue 2022-03-15 05:14:55 UTC 23h left      Mon 2022-03-14 05:14:55 UTC 14s ago      systemd-tmpfiles-clean.timer syste>
Sun 2022-03-20 03:10:39 UTC 5 days left   Mon 2022-03-14 03:57:25 UTC 1h 17min ago e2scrub_all.timer            e2scr>
Mon 2022-03-21 00:00:00 UTC 6 days left   Mon 2022-03-14 03:57:25 UTC 1h 17min ago fstrim.timer                 fstri>
n/a                         n/a           Mon 2022-03-14 05:03:21 UTC 11min ago    snapper-boot.timer           snapp>

13 timers listed.
Pass --all to see loaded but inactive timers, too.
root@ubuntu:~#

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

  • können die Voraussetzungen für eine Installation von grub-btrfs erfüllt werden und
  • kann grub-btrfs kompiliert und installiert werden:

Voraussetzungen zur Installation von grub-btrfs installieren:

root@ubuntu:~# apt install build-essential git vim
Reading package lists... Done
Building dependency tree       
Reading state information... Done
git is already the newest version (1:2.25.1-1ubuntu3.2).
git set to manually installed.
vim is already the newest version (2:8.1.2269-1ubuntu5.7).
vim set to manually installed.
The following additional packages will be installed:
  binutils binutils-common binutils-x86-64-linux-gnu cpp cpp-9 dpkg-dev fakeroot g++ g++-9 gcc gcc-9 gcc-9-base
  libalgorithm-diff-perl libalgorithm-diff-xs-perl libalgorithm-merge-perl libasan5 libatomic1 libbinutils
  libc-dev-bin libc6-dev libcc1-0 libcrypt-dev libctf-nobfd0 libctf0 libdpkg-perl libfakeroot libfile-fcntllock-perl
  libgcc-9-dev libgomp1 libisl22 libitm1 liblsan0 libmpc3 libquadmath0 libstdc++-9-dev libtsan0 libubsan1
  linux-libc-dev make manpages-dev
Suggested packages:
  binutils-doc cpp-doc gcc-9-locales debian-keyring g++-multilib g++-9-multilib gcc-9-doc gcc-multilib autoconf
  automake libtool flex bison gdb gcc-doc gcc-9-multilib glibc-doc bzr libstdc++-9-doc make-doc
The following NEW packages will be installed:
  binutils binutils-common binutils-x86-64-linux-gnu build-essential cpp cpp-9 dpkg-dev fakeroot g++ g++-9 gcc gcc-9
  gcc-9-base libalgorithm-diff-perl libalgorithm-diff-xs-perl libalgorithm-merge-perl libasan5 libatomic1
  libbinutils libc-dev-bin libc6-dev libcc1-0 libcrypt-dev libctf-nobfd0 libctf0 libdpkg-perl libfakeroot
  libfile-fcntllock-perl libgcc-9-dev libgomp1 libisl22 libitm1 liblsan0 libmpc3 libquadmath0 libstdc++-9-dev
  libtsan0 libubsan1 linux-libc-dev make manpages-dev
0 upgraded, 41 newly installed, 0 to remove and 0 not upgraded.
Need to get 45.4 MB of archives.
After this operation, 202 MB of additional disk space will be used.
Do you want to continue? [Y/n] Y
...
...
...
root@ubuntu:~#

Code von grub-btrfs klonen:

root@ubuntu:~# git clone https://github.com/Antynea/grub-btrfs.git
Cloning into 'grub-btrfs'...
remote: Enumerating objects: 844, done.
remote: Counting objects: 100% (151/151), done.
remote: Compressing objects: 100% (125/125), done.
remote: Total 844 (delta 95), reused 42 (delta 26), pack-reused 693
Receiving objects: 100% (844/844), 257.99 KiB | 4.45 MiB/s, done.
Resolving deltas: 100% (494/494), done.
root@ubuntu:~#

In das geklonte Verzeichnis wechseln:

root@ubuntu:~# cd grub-btrfs

Kompilieren und Installieren:

root@ubuntu:~/grub-btrfs# make -d install
GNU Make 4.2.1
Built for x86_64-pc-linux-gnu
Copyright (C) 1988-2016 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
Reading makefiles...
Reading makefile 'Makefile'...
Updating makefiles....
...
...
...
Successfully remade target file 'install'.
root@ubuntu:~/grub-btrfs#

Verlassen des geklonte Verzeichnisses:

root@ubuntu:~/grub-btrfs# cd
root@ubuntu:~#

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!

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:

root@ubuntu:~# systemctl enable grub-btrfs.path
Created symlink /etc/systemd/system/\x2esnapshots.mount.wants/grub-btrfs.path → /lib/systemd/system/grub-btrfs.path.

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:

root@ubuntu:~# systemctl list-unit-files --type=service | grep grub-btrfs
grub-btrfs.service                         static          enabled

bzw.

root@ubuntu:~# systemctl is-enabled grub-btrfs
static

Abschließend kann der grub-btrfs-Dienst/Daemon - grub-btrfs.path mit nachfolgendem Befehl gestartet werden:

root@ubuntu:~# systemctl start --now grub-btrfs.path

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:

root@ubuntu:~# systemctl status grub-btrfs.path
● grub-btrfs.path - Monitors for new snapshots
     Loaded: loaded (/lib/systemd/system/grub-btrfs.path; enabled; vendor preset: enabled)
     Active: active (waiting) since Mon 2022-03-14 05:21:26 UTC; 8s ago
   Triggers: ● grub-btrfs.service

Mar 14 05:21:26 ubuntu systemd[1]: Started Monitors for new snapshots.

grub-btrfs-update.service-Dienst/Deamon einrichten

Damit nach jeder Erstellung eines updates und Neustarts auch im GRUB-Bootmenü die jeweils letzten Einträge von erstellten Snapshots zur Verfügung stehen, kann nachfolgendes systemd-Skript zum Einsatz kommen:

* Quelle: GitHub - grub-btrfs.path is started but does not generate grub-btrfs.cfg #138

Zu Erstellung eines neuen systemd-Skript, kann nachfolgender Befehl verwendet werden:

root@ubuntu:~# vim /etc/systemd/system/grub-btrfs-update.service

und mit nachfolgendem Inhalt erstellt werden:

[Unit]
Description=Update grub-btrfs.cfg before reboot/shutdown
Before=poweroff.target
 
[Service]
Type=oneshot
# Set the possible paths for `grub-mkconfig`
Environment="PATH=/sbin:/bin:/usr/sbin:/usr/bin"
# Load environment variables from the configuration
EnvironmentFile=/etc/default/grub-btrfs/config
RemainAfterExit=true
ExecStart=/bin/true
# Regenerate just '/boot/grub/grub-btrfs.cfg' if it exists and is not empty, else regenerate the whole grub menu
ExecStop=bash -c 'if [ -s "${GRUB_BTRFS_GRUB_DIRNAME:-/boot/grub}/grub-btrfs.cfg" ]; then /etc/grub.d/41_snapshots-btrfs; else ${GRUB_BTRFS_MKCONFIG:-grub-mkconfig} -o ${GRUB_BTRFS_GRUB_DIRNAME:-/boot/grub}/grub.cfg; fi' 
 
[Install]
WantedBy=multi-user.target

Anschließend muss das n eu erstellte systemd-Skript dem systemd-Dienst/Daemon noch bekannt gegeben werden, was mit nachfolgendem Befehl durchgeführt werden kann:

root@ubuntu:~# systemctl daemon-reload

Um den grub-btrfs-update.service-Dienst/Deamon auch beim Herunterfahren des Servers zur Verfügung zu haben, soll der Dienste/Daemons mit dem Server mit eingerichtet werden, was mit nachfolgenden Befehlen realisiert werden kann:

root@ubuntu:~# systemctl enable grub-btrfs-update.service
Created symlink /etc/systemd/system/multi-user.target.wants/grub-btrfs-update.service → /etc/systemd/system/grub-btrfs-update.service.

Eine Überprüfung, ob beim Herunterfahren des Server der grub-btrfs-update.service-Dienst/Deamon wirklich mit gestartet wird, kann mit nachfolgendem Befehl erfolgen und sollte eine Anzeige, wie ebenfalls nachfolgend dargestellt ausgeben:

root@ubuntu:~# systemctl list-unit-files --type=service | grep grub-btrfs-update
grub-btrfs-update.service                  enabled         enabled 

bzw.

root@ubuntu:~# systemctl is-enabled grub-btrfs-update
enabled

Grub-Konfiguration

/etc/default/grub

Damit nach dem Neustart unter Ubuntu Server LTS überhaupt das GRUB-Bootmenü zu sehen ist, müssen in der Konfigurationsdatei

  • /etc/default/grub

nachfolgende Anpassungen durchgeführt werden:

root@ubuntu:~# vim /etc/default/grub
# If you change this file, run 'update-grub' afterwards to update
# /boot/grub/grub.cfg.
# For full documentation of the options in this file, see:
#   info -f grub -n 'Simple configuration'
 
GRUB_DEFAULT=0
# Tachtler
# default: GRUB_TIMEOUT_STYLE=hidden
GRUB_TIMEOUT_STYLE=menu
# Tachtler
# default: GRUB_TIMEOUT=0
GRUB_TIMEOUT=5
GRUB_DISTRIBUTOR=`lsb_release -i -s 2> /dev/null || echo Debian`
GRUB_CMDLINE_LINUX_DEFAULT=""
GRUB_CMDLINE_LINUX=""
 
# Uncomment to enable BadRAM filtering, modify to suit your needs
# This works with Linux (no patch required) and with any kernel that obtains
# the memory map information from GRUB (GNU Mach, kernel of FreeBSD ...)
#GRUB_BADRAM="0x01234567,0xfefefefe,0x89abcdef,0xefefefef"
 
# Uncomment to disable graphical terminal (grub-pc only)
#GRUB_TERMINAL=console
 
# The resolution used on graphical terminal
# note that you can use only modes which your graphic card supports via VBE
# you can see them in real GRUB with the command `vbeinfo'
#GRUB_GFXMODE=640x480
 
# Uncomment if you don't want GRUB to pass "root=UUID=xxx" parameter to Linux
#GRUB_DISABLE_LINUX_UUID=true
 
# Uncomment to disable generation of recovery mode menu entries
#GRUB_DISABLE_RECOVERY="true"
 
# Uncomment to get a beep at grub start
#GRUB_INIT_TUNE="480 440 1"

Erklärungen:

  • GRUB_TIMEOUT_STYLE=menu

Einstellung, was bei GRUB_TIMEOUT passiweren soll. Hier die Anzeige des GRUB-Bootmenüs.

  • GRUB_TIMEOUT=5

Einstellung des GRUB_TIMEOUT auf 5 Sekunden. Dies ist die Zeit, wie lange das GRUB-Bootmenü bei einem Neustart angezeigt wird.

Damit die Änderungen auch bein nächsten Neustart wirksame werden, muss dies mit nachfolgendem Befehl in die GRUB-Konfiguration umgewandelt, bzw. eingebettet werden:

root@ubuntu:~# grub-mkconfig -o /boot/grub/grub.cfg 
Sourcing file `/etc/default/grub'
Sourcing file `/etc/default/grub.d/init-select.cfg'
Generating grub configuration file ...
Found linux image: /boot/vmlinuz-5.13.0-35-generic
Found initrd image: /boot/initrd.img-5.13.0-35-generic
Detecting snapshots ...
No snapshots found.
If you think an error has occurred, please file a bug report at "https://github.com/Antynea/grub-btrfs"
Unmount /tmp/grub-btrfs.i6H9pGknvr .. Success
done
root@ubuntu:~#

:!: HINWEIS - Alternativ, kann auch der Befehl update-grub verwendet werden!

Neustart

:!: HINWEIS - Am einfachsten ist es wenn zur Überprüfung der Einrichtung, zwei Neustarts hintereinander durchgeführt werden!

Anschließend sollte nachfolgendes GRUB-Bootmenü nach einem Neustart zum Vorschein kommen:

Ubuntu 20.04 LTS - grub-btrfs - GRUB-Bootmenü - ubuntu

Mit der nach unten [⇓]-Pfeil-Taste kann auf den GRUB-Bootmenü-Punkt Ubuntu snapshots gewechselt werden und die [Enter/Return]-Taste gedrückt werden, wonach nachfolgendes GRUB-Bootmenü zur Anzeige kommen sollte:

Ubuntu 20.04 LTS - grub-btrfs - GRUB-Bootmenü - Ubuntu snapshots

Ubuntu 20.04 LTS - grub-btrfs - GRUB-Bootmenü - Ubuntu snapshots - Liste

Eine Rückkehr in das vorherige GRUB-Bootmenü, kann durch drücken der [Esc]-Taste erfolgen, wie nachfolgend dargestellt:

Ubuntu 20.04 LTS - grub-btrfs - GRUB-Bootmenü - ubuntu

Ein abschließender Neustart des Betriebssystem, kann dann durch drücken der [Enter/Return]-Taste, wie erfolgen, wie nachfolgend dargestellt:

Ubuntu Server LTS 20.04 LTS - DVD - Installation - Fertiggestellt

Diese Website verwendet Cookies. Durch die Nutzung der Website stimmen Sie dem Speichern von Cookies auf Ihrem Computer zu. Außerdem bestätigen Sie, dass Sie unsere Datenschutzbestimmungen gelesen und verstanden haben. Wenn Sie nicht einverstanden sind, verlassen Sie die Website.Weitere Information
tachtler/ubuntu-_minimal_server_installation_-_snapper_-_grub-btrfs.txt · Zuletzt geändert: 2022/03/14 07:02 von klaus