Inhaltsverzeichnis
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,
- dass eine lauffähige Version von Ubuntu Server LTS mit dem Dateisystem: Btrfs vorhanden ist
- 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.
- 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.
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:
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:
Eine Rückkehr in das vorherige GRUB-Bootmenü, kann durch drücken der [Esc]-Taste erfolgen, wie nachfolgend dargestellt:
Ein abschließender Neustart des Betriebssystem, kann dann durch drücken der [Enter/Return]-Taste, wie erfolgen, wie nachfolgend dargestellt: