BTRFS-Snaphosts und Backup mit btrbk

  • Distrowahl
    Sonstiges

    In dem aktuellen "Fedora KDE 42" hat Mastertac gefragt, wie genau ich mit Debian BTRFS-Snapshot bei jedem Update automatisch anlege. Ich benutzte dafür kein Timeshift, sondern eigene, auf btrbk basierende Skripts.

    btrbk ( https://github.com/digint/btrbk ) ist ein Kommandozeilen-Tool zur Verwaltung von BTRFS-Snaphosts und Backups. Es ist selber ein einziges, wenn auch ziemlich langes Perl-Skript. Es sollte als Paket für alle größeren Distributionen verfügbar sein.

    Die folgende Beschreibung ist nicht als Anleitung gedacht! Ich schreibe nur auf, wie ich es vor 2 Jahren für mich eingerichtet habe!

    Ich habe meine Kommandos, die ich zunächst in einer VM getestet hatte, zu zwei Shell-Skripts destilliert, die man als Root ausführen müsste, möglichst kurz nach einer Debian-Installation. Voraussetzung ist natürlich, dass die Rootpartition mit BTRFS als Dateisystem formatiert ist, was man im Debian-Installer einstellen kann.

    In einer VM würde der Debian-Installer die Root-Partition auf /dev/vda3 legen und ein Subvolume @rootfs anlegen. Um später Snapshots außerhalb des im laufenden Systems sichtbaren Root-Filesystems in /mnt/anlegen zu können wird noch folgender Eintrag in /etc/fstab angelegt, hier z.B. mit /dev/vda3 als Rootpartition:

    /dev/vda3 /mnt/btr_pool   btrfs   defaults,subvolid=5 0       0

    Die Snapshots werden dann später nach /mnt/btr_pool/@snapshots geschrieben. Die btrbk-Konfiguration wird nach /etc/btrbk.conf geschrieben. Darin wird definiert, dass Snapshots von @rootfs in einem Subvolume @snapshots geschrieben werden. In APT wird noch ein Hook eingerichtet, der das btrbk-Skript vor jedem Update aufruft. Read-only Snapshots sind in der Regel nicht bootbar, weil Linux erwartet, dass es in bestimmte Verzeichnisse z.B. Logdateien schreiben kann. Theoretisch könnte man für jedes dieser Verzeichnisse einen eigenes schreibbares Subvolume anlegen, wie es andere Tools auch machen. Ich halte so eine Lösung für viel zu fragil.

    Stattdessen erzeuge ich bei Bedarf aus einem ro-Snaphsot einen rw-Snapshot. Man sollte wenigstens einen rw-Snapshot bereithalten, von dem man im Notfall booten kann (und neuere bootbare Snapshots erstellen kann).

    Ein schreibbarer Snapshot des Root-Filesystems muss natürlich noch in grub eingetragen werden. Hierzu gibt es ein weiteres Projekt auf github: Antynea/grub-btrfs Zumindest vor 2 Jahren gab es das noch nicht als fertiges .deb-Paket. Hier bin ich einfach der Beschreibung auf der Projektseite gefolgt:

    Ich benutzte btrbk auch für Backups meiner Home-Partition in einer davon unabhängigen Konfiguration. Das ist im Wesentlichen eine Kombination von btrbk und rsync.
    Auf der btrbk-Projektseite gibt es auch ein Beispiel für diese Art des Backups.

    Zotac ZBox ID91: Zorin OS 18 (GNOME) und GuideOS 0.9 Beta
    Geekom Mini IT11: Fedora 43 Silverblue (GNOME)
    Macbook Pro 2015: Fedora 42 Workstation (GNOME)

  • DenalB June 20, 2025 at 3:49 PM

    Approved the thread.
  • P.S.: Das Grub-Menü mit Auswahl des oder der bootbaren Snapshots würde dann so aussehen:

    Zotac ZBox ID91: Zorin OS 18 (GNOME) und GuideOS 0.9 Beta
    Geekom Mini IT11: Fedora 43 Silverblue (GNOME)
    Macbook Pro 2015: Fedora 42 Workstation (GNOME)

  • Um Snapshots in das Grub-Menü zu bekommen nutze ich grub-btrfs (gibt es auch für Debian).

    Und um Snapshots nach Installation von Programmen oder Updates automatisch zu erstellen. nutze ich unter Arch die beiden Programme snap-pac und snapper.

  • Meine Installation unter Arch-Derivaten, um diese Funktionen ebenfalls zu erhalten.

    Code
    yay -S snapper snapper-support snap-pac grub-btrfs btrfs-assistant btrfsmaintenance
  • Meine Installation unter Arch-Derivaten, um diese Funktionen ebenfalls zu erhalten.

    Code
    yay -S snapper snapper-support snap-pac grub-btrfs btrfs-assistant btrfsmaintenance

    GUIs habe ich weggelassen, nutze nur das Terminal.

    Wie das dann im Ernstfall gehen würde, hatte ich hier schon mal beschrieben. Kam aber nie wirklich zum Einsatz, dafür liefen Arch + Gnome einfach zu gut. ;)

  • Um Snapshots in das Grub-Menü zu bekommen nutze ich grub-btrfs (gibt es auch für Debian).

    Das ist doch dasselbe Tool, das ich auch verwende. Leider gibt es meines Wissens kein fertiges .deb Paket in den Debian-Repos, deshalb musste ich in meinem Skript add-grub-btrfs.sh das github-Repo erst klonen und dann mit make install grub-btrfs installieren.

    Zotac ZBox ID91: Zorin OS 18 (GNOME) und GuideOS 0.9 Beta
    Geekom Mini IT11: Fedora 43 Silverblue (GNOME)
    Macbook Pro 2015: Fedora 42 Workstation (GNOME)

  • Herzlichen Dank für deine Erklärung :)

    Asrock Taichi X399M | AMD Ryzen Threadripper 2950x | 2x 16 GB G.Skill Tridentz DDR4-3600 | Saphire Radeon RX 7900 XT | Cooler Master V1200 Platinum - 1200W 80+ Platinum

  • Nachtrag: die Lösung mit snapper und grub-btrfs hatte ich damals verworfen, weil Snapper wohl voraussetzt, dass man eine Reihe von Subvolumes für /var/cache, /var/lib/gdm, /var/lib/libvirt, /var/log, /var/spool, /var/tmp anlegt, damit sie vom Snapshot des Root-Filesystems ausgeschlossen werden. Zumindest /var/log und /var/lib/gdm müssen schreibbar sein, sonst scheitert das Booten und/oder das Anmelden. Andererseits macht es ja auch Sinn, die o.g. Verzeichnisse aus einem Snaphost auszunehmen. Vielleicht probiere ich die Installation von snapper+grub-btrfs mal auf meinem alten MacBook für Fedora-Workstation 42 mal aus.

    Zotac ZBox ID91: Zorin OS 18 (GNOME) und GuideOS 0.9 Beta
    Geekom Mini IT11: Fedora 43 Silverblue (GNOME)
    Macbook Pro 2015: Fedora 42 Workstation (GNOME)

  • dass man eine Reihe von Subvolumes für /var/cache, /var/lib/gdm, /var/lib/libvirt, /var/log, /var/spool, /var/tmp anlegt

    Ich habe nicht alle Subvolumes von denen und kann ohne Probleme root-Snapshots wiederherstellen und nutzen.

  • Nachtrag: die Lösung mit snapper und grub-btrfs hatte ich damals verworfen, weil Snapper wohl voraussetzt, dass man eine Reihe von Subvolumes für /var/cache, /var/lib/gdm, /var/lib/libvirt, /var/log, /var/spool, /var/tmp anlegt, damit sie vom Snapshot des Root-Filesystems ausgeschlossen werden. Zumindest /var/log und /var/lib/gdm müssen schreibbar sein, sonst scheitert das Booten und/oder das Anmelden. Andererseits macht es ja auch Sinn, die o.g. Verzeichnisse aus einem Snaphost auszunehmen. Vielleicht probiere ich die Installation von snapper+grub-btrfs mal auf meinem alten MacBook für Fedora-Workstation 42 mal aus.

    Weisst du, wie man Subvolumes anlegt ? Ich kann nämlich kein BTRFS + Ubuntu mit Timeshift nutzen, weil Timeshift meckert, es wären keine Subvolumes angelegt.

    Asrock Taichi X399M | AMD Ryzen Threadripper 2950x | 2x 16 GB G.Skill Tridentz DDR4-3600 | Saphire Radeon RX 7900 XT | Cooler Master V1200 Platinum - 1200W 80+ Platinum

  • Im laufenden Betrieb ist das glaube nicht ganz so einfach, weil man da Daten hin und her kopieren muss, wenn ich das richtig im Erinnerung habe. 🤔

    Du kennst das Problem ja selbst, soweit ich mich erinnere. Unter Arch ist der Betrieb mit Timemachine und BTRFS kein Problem. Unter Ubuntu meckert der die Subvolumes an und verweigert den Betrieb damit. Verstehen tu ich das Problem jedoch nicht.

    Asrock Taichi X399M | AMD Ryzen Threadripper 2950x | 2x 16 GB G.Skill Tridentz DDR4-3600 | Saphire Radeon RX 7900 XT | Cooler Master V1200 Platinum - 1200W 80+ Platinum

  • Unter Ubuntu meckert der die Subvolumes an und verweigert den Betrieb damit.

    Das passiert auch unter Fedora, wenn man die Subvolumes während der Installation nicht anpasst. Ob und wie das bei Ubuntu geht, weiß ich aktuell nicht (mehr). :/

  • Weisst du, wie man Subvolumes anlegt ? Ich kann nämlich kein BTRFS + Ubuntu mit Timeshift nutzen, weil Timeshift meckert, es wären keine Subvolumes angelegt.

    Timeshift verlangt, dass die Systempartitionen / /home BTRFS-Subvolumens ein festen Namensschema @ @home usw. einhalten.
    Das geht mMn sinnvollerweise nur während der Installation. Für Debian und Fedora gibt es dafür ja auch Anleitungen, z.B.:

    How to Setup Timeshift with BTRFS in Fedora? - GeeksforGeeks
    Your All-in-One Learning Portal: GeeksforGeeks is a comprehensive educational platform that empowers learners across domains-spanning computer science and…
    www.geeksforgeeks.org

    Deswegen habe ich die Nutzung von Timeshift gleich verworfen.

    Bei Snapper müsste man nur Teile der Rootpartition in Subvolumens umziehen: /var/cache, /var/lib/gdm, /var/lib/libvirt, /var/log, /var/spool, /var/tmp. Bis auf /var/lib/gdm sind das auch unkritische Teile*. Es ist möglich, ein Verzeichnis in ein BTRFS-Subvolumen umzuwandeln, indem man den Inhalt zunächst mit "mv" oder "cp -a --reflink" in ein temporäres Verzeichnis sichert, dann mit "btrfs sub create" an der entsprechenden Stelle ein Subvolume erzeugt und den Inhalt des gesicherten Verzeichnis wieder mit "mv" oder "cp -a --reflink" zurückspielt. Ich würde das dann mit Hilfe eines per USB-Stick gestarteten Live-Systems erledigen.

    *) Sofern man noch keine virtuelle Maschinen in /var/lib/libvirt gespeichert hat.

    Zotac ZBox ID91: Zorin OS 18 (GNOME) und GuideOS 0.9 Beta
    Geekom Mini IT11: Fedora 43 Silverblue (GNOME)
    Macbook Pro 2015: Fedora 42 Workstation (GNOME)

  • Ich habe jetzt auf meinem MacBook mit Fedora 42 Workstation snapper und grub-btrfs erfolgreich installiert und konguriert. Dabei habe ich die für mich relevanten Rosinen aus der Sysguides-Beschreibung BTRFS-Snaphosts und Backup mit btrbk herausgepickt.

    Für GNOME-User müssen mindestens die Verzeichnisse /var/log und /var/lib/gdm als Subvolumes konfiguriert werden, damit man von einem read-only Snapshot booten kann. Das nachträgliche Umwandeln von Systemverzeichnisse in BTRFS-Subvolumes geht nur mit einem Live-System. Für Fedora Worksation nimmt man am besten den Live-Stick, mit dem man das System installiert hat.

    Wer wie ich sein System voll verschlüsselt hat, muss vom Live-System aus die Systempartition entschlüsseln. Mit Nautilus geht das sehr bequem:

    Einfach auf das Laufwerk-Symbol mit dem kryptischen Namen unten links klicken, LUKS-Passwort eingeben. Dann wird die Systempartition als "fedora" gemountet und die beiden standardmäßig eingerichtetet BTRFS-Subvolumes root and home als Ordner dargestellt. Mit "In Konsole öffnen" kann man ein Terminal im root-Verzeichnis öffnen. Die folgenden Kommandos in einer Root-Shell (sudo bash) ausführen:

    Code
    cd /run/media/liveuser/fedora/root
    for Dir in var/cache var/lib/gdm var/log var/spool var/tmp
    do
      mv "$Dir" "${Dir}_original"
      btrfs subvolume create "$Dir"
      cp --archive --one-file-system --reflink=always "${Dir}_original/." "$Dir"
      rm -rf --one-file-system "${Dir}_original"
    done

    Anschließend neu booten und sich davon überzeugen, dass die Subvolumes tatsächlich eingerichtet sind:

    Dann folgende Kommandos ausführen, die in der Sysguides-Anleitung ausführlicher beschrieben sind:

    Ich persönlich mag keine Timeline-Snapshots, sondern nur Snapshots vor bzw. nach einer Aktualisierung oder Installation von Paketen mit dnf. Zum Testen habe ich ein neues Paket installiert, z.B: "dnf install inxi". Danach sollten die ersten Snapshots erstellt worden sein und im GRUB-Menü sichtbar sein.

    Das Booten eines Snapshots wird aber noch fehlschlagen. Die Subvolumes müssen noch als Mountpunkte in der /etc/fstab eingetragen, sonst funktioniert nur das Booten des Hauptsystems, zum Beispiel:

    Subvolume-Namen mit Slashes wie var/cache werden beim Mounten nicht akzeptiert. Stattdessen muss man die Subvol-Id angeben. Die Subvolids bekommt man mit sudo btrfs subvolume list /, siehe oben.

    Die UUIDs kann man mit dem Kommando lsblk -p -o NAME,UUID,TYPE,RO,MOUNTPOINTS ermitteln, oder aus den vorherigen Einträgen in der /etc/fstab kopieren. Änderungen in der /etc/fstab unbedingt vor dem nächsten Booten testen, also z.B. mit:

    Code
    sudo systemctl daemon-reload
    sudo mount --target /var/spool

    Zotac ZBox ID91: Zorin OS 18 (GNOME) und GuideOS 0.9 Beta
    Geekom Mini IT11: Fedora 43 Silverblue (GNOME)
    Macbook Pro 2015: Fedora 42 Workstation (GNOME)

  • Meine Installation unter Arch-Derivaten, um diese Funktionen ebenfalls zu erhalten.

    Code
    yay -S snapper snapper-support snap-pac grub-btrfs btrfs-assistant btrfsmaintenance


    Hi, geht das auch mit systemd-boot?
    Ich spekuliere auch mit rEFInd, bin mir aber nicht sicher ob die Vorteile bei meinem System Funktionieren.
    Ich habe Windows, Fedora und Cachy OS immer mit abgehängten Festplatten installiert.

    ANFÄNGER :saint:;)

    Intel Core i5-4670K | Nvidia Geforce RTX 3070 | 16 GB RAM | Tuxedo OS

    AMD Ryzen 9 5950X | Nvidia Geforce RTX 3090 | 32 GB Ram | Win 11 Simracing Only | Gaming CachyOS KDE & Bazzite KDE


  • Hi, geht das auch mit systemd-boot?
    Ich spekuliere auch mit rEFInd, bin mir aber nicht sicher ob die Vorteile bei meinem System Funktionieren.
    Ich habe Windows, Fedora und Cachy OS immer mit abgehängten Festplatten installiert.

    Da systemd-boot eine Alternative zu grub ist, kann der Ansatz mit grub-btrfs nicht funktionieren.
    systemd-boot hat eigene Boot-Konfigurationen, siehe z.B. https://www.freedesktop.org/wiki/Software/…d/systemd-boot/
    Jemand müsste also ein Tool analog zu grub-btrfs (vielleicht mit dem Namen systemd-boot-btrfs?) entwickeln. Ich möchte nicht ausschließen, das es schon so etwas gibt, kenne aber kein derartiges Tool.

    Zotac ZBox ID91: Zorin OS 18 (GNOME) und GuideOS 0.9 Beta
    Geekom Mini IT11: Fedora 43 Silverblue (GNOME)
    Macbook Pro 2015: Fedora 42 Workstation (GNOME)

  • In meinem erste Beitrag zu dem Thema habe ich noch ein selbst geschriebenen Skript vergessen, mit dem ich bootbare BTRFS-Snapshots erzeugen, auflisten und löschen kann. Das reiche ich der Vollständigkeit halber hier nach, Skript habe ich ossnap-pin genannt.:

    Zotac ZBox ID91: Zorin OS 18 (GNOME) und GuideOS 0.9 Beta
    Geekom Mini IT11: Fedora 43 Silverblue (GNOME)
    Macbook Pro 2015: Fedora 42 Workstation (GNOME)

Participate now!

Don’t have an account yet? Register yourself now and be a part of our community!