Btrfs ist eigentlich schon länger bekannt – es wird auch schon so einige Zeit entwickelt. Grundsätzlich könnte man sagen: Btrfs ist das freie ZFS, es hat nicht ganz die Leistung von ZFS, dies ist für normale Benutzer auch nicht relevant. ZFS braucht kein normaler Benutzer am Laptop.
ZFS ist vor allem für Hochleistungsrechner gedacht – etwa für große Datenbanken.

Wir wollen uns hier nicht lange mit den Details befassen – hier ein grober Überblick:

  • Dateigröße – maximal 16 Exabyte
  • Partitionsgröße – maximal 16 Exabyte
  • Kann gut mit vielen kleinen Dateien umgehen

Jetzt wollen wir uns einmal ansehen, was man mit diesem Dateisystem so alles machen kann. Hierzu installiert man unter den meisten Linux-Distributionen (Debian, Void, Ubuntu, …) über die Paket-Verwaltung das Paket btrfs-progs. Sofern nicht anders angegeben, werden alle Befehle am Terminal mit administrativen Rechten gestartet.

Dateisystem erweitern

Nehmen wir einmal an, das Wurzel-Verzeichnis wird zu klein, es ist einfach kein Platz mehr und auch die Festplatte gibt nicht mehr her, ist einfach voll. Wir bauen eine weitere Festplatte ein – diese nennt sich im Beispiel ganz einfach /dev/sdb, die Partition darauf 1 – also /dev/sdb1. Diese Partition möchten wir jetzt zum Wurzel-Verzeichnis hinzufügen – nein, nicht einfügen –, sodass man sie dann unter „/“ mit der Bezeichnung /dev/sdb1 findet – diese wird zu einem Teil von „/“ – ganz einfach:

btrfs device add /dev/sdb1 /

Die Syntax lautet also:

btrfs device add neue_partition /

Dasselbe könnte man auch mit dem Home-Verzeichnis machen, ist die Partition zu klein, neue Festplatte rein:

btrfs device add /dev/sdb1 /home

Eine Änderung der Datei /etc/fstab ist dabei nicht nötig.

Wir können das angehängte Dateisystem auch wieder aus dem Verbund löschen:

btrfs device delete /dev/sdb1 /
btrfs device delete /dev/sdb1 /home

Dateisystem reparieren

Läuft im Dateisystem einmal etwas schief, reparieren wir dieses etwa von einem Live-System aus – denn es darf nicht eingehängt sein:

btrfs check --repair /dev/sda1

Dateisystem defragmentieren

Dateisysteme unter Linux fragmentieren kaum, wir sind hier ja nicht unter Windows. Alle paar Jahre zahlt es sich dann aber doch aus. Nehmen wir an, ich will das Verzeichnis /home defragmentieren:

btrfs filesystem defragment /home

Wir können aber auch eine komplette Partition defragmentieren – etwa /dev/sda1:

btrfs filesystem defragment /dev/sda1

Aber auch eine einzelne Datei – etwa die Datei dateiname.iso:

btrfs filesystem defragment /home/nutzername/Verzeichnis/dateiname.iso

Dateisystem vergrößern und verkleinern

Ist auf der Festplatte noch unbelegter, nicht formatierter Platz, können wir ein bestehendes Dateisystem vergrößern. Wollen wir doch gleich einmal das Wurzel-Verzeichnis/“ um 10 Gigabyte vergrößern (dies kann im laufenden Betrieb geschehen):

btrfs filesystem resize +10g /

Oder wir verkleinern dieses um dieselbe Größe:

btrfs filesystem resize -10g /

Snapshots / Backups erstellen

Hierzu installiert man sich über die Paket-Verwaltung das Paket snapper – es erleichtert den Umgang mit Snapshots ungemein.

Zu Beginn erstellen wir uns von der gewünschten Partition oder vom gewünschten Verzeichnis eine Konfiguration. Im Beispiel möchte ich das komplette System sichern:

snapper -c system create-config /

Die Syntax lautet also:

snapper -c bezeichnung create-config zu_sicherndes_subvolume

Die Konfiguration dazu legt die Software unter /etc/snapper/configs ab. Jetzt können wir die erste Sicherung anlegen:

snapper -c system create --description "Erste Systemsicherung"

Die Syntax:

snapper -c bezeichnung_der_config create --description "Bezeichnung der Sicherung"

Jetzt können wir uns alle bestehenden Sicherungen anzeigen lassen:

snapper -c system list

Die Syntax:

snapper -c bezeichnung_der_sicherung list

Liegt das Home-Verzeichnis auf der Systempartition – also direkt im Wurzel-Verzeichnis –, wird es natürlich direkt mitgesichert. Liegt das Home-Verzeichnis auf einer eigenen Partition, kann es natürlich extra gesichert werden – etwa:

snapper -c home create-config /home

Automatische Sicherungen sind aktiv

Haben Sie solche Konfigurationen erstellt, wird auch Cron (der Dienst der unter Linux Aufgaben zu bestimmten Zeiten ausführt) aktiv. Sehen wir einmal unter /etc/cron.daily und /etc/cron.hourly nach – hier liegt je eine Datei namens snapper. Snapper wird also automatisch einmal stündlich und einmal täglich eine Sicherung automatisch anlegen.

Möchten Sie Sicherungen nur manuell erstellen, öffnen Sie die erstellten Konfigurationsdateien unter /etc/snapper/configs als Administrator – etwa mit dem Shell-Editor Nano – beispielsweise:

nano /etc/snapper/configs/system

Hier finden wir unter anderem folgende Zeile:

TIMELINE_CREATE="yes"

Findet sich hier die Option yes, wird Snapper stündlich eine Sicherung anlegen – möchten Sie dies nicht, ersetzen Sie yes durch no.

TIMELINE_CLEANUP="yes"

Snapper wird natürlich bis zum letzten Ende Sicherungen (Backups) anlegen, bis die Platte voll ist (obwohl – Btrfs-Snapshots sind um vieles kleiner als normale Backups). Die Zeile oben zeigt – Snapper wird ab einer gewissen Anzahl von Sicherungen ältere löschen. Möchten Sie dies nicht, ersetzen Sie yes durch no. Ab wie vielen Snapshots Snapper ältere Sicherungen löscht, zeigt sich in den Zeilen danach:

# 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"

Die erste Zeile – TIMELINE_MIN_AGE=“1800″ – zeigt: Zu löschende Snapshots müssen mindestens 1800 Sekunden alt sein. Anschließend finden Sie in jeder Zeile die Anzahl der gespeicherten Snapshots – sind mehr Snapshots als hier 10 vorhanden, beginnt Snapper ältere zu löschen. Möchten Sie also etwa 25 stündliche Sicherungen behalten:

TIMELINE_LIMIT_HOURLY="25"

Nutzen Sie Cron überhaupt nicht, können Sie dies auch durch Systemd erledigen lassen:

systemctl enable snapper-timeline.timer --now
systemctl enable snapper-cleanup.timer --now
systemctl enable snapper-boot.timer --now

Erste Zeile aktiviert die Erstellung der Sicherungen, die zweite aktiviert die Bereinigung älterer Sicherungen, letzte Zeile erstellt einen Snapshot beim Boot-Vorgang. Jetzt können wir uns die erstellten Sicherungskonfigurationen anzeigen lassen:

snapper list-configs

Sicherungen manuell löschen

Wie wir oben schon gesehen haben – wir können uns die einzelnen Sicherungen mit folgendem Befehl anzeigen lassen:

snapper -c bezeichnung_der_sicherung list

Vor jeder Sicherung finden Sie eine Ziffer – etwa die 1. Zum manuellen Löschen von Sicherungen geben Sie einfach die Ziffer an – etwa für die 1:

snapper -c config delete 1

Statt config geben Sie natürlich die Konfiguration an. Es lassen sich natürlich auch mehrere Sicherungen gleichzeitig löschen – etwa die 1 und die 10:

snapper -c config delete 1 10

Oder die 1 bis 10:

snapper -c config delete 1-10

Es dauert ein wenig, bis der Speicherplatz auch tatsächlich freigegeben wird – möchten Sie den Speicherplatz sofort nutzen, geben Sie zusätzlich die Option „--sync“ an:

snapper -c config delete --sync 1-10

Unterschiede zwischen Snapshots anzeigen

Bevor wir uns an das Wiederherstellen von Sicherungen machen, sehen wir uns an, wie wir uns die Unterschiede zwischen solchen anzeigen lassen. Lassen wir uns noch einmal alle vorhandenen Sicherungen anzeigen:

snapper -c config list

Im Beispiel haben wir die Sicherungen 1 und 2. Wir wollen uns die Unterschiede zwischen diesen anzeigen lassen:

snapper -c system status 1..2

Eine zweite Möglichkeit:

snapper -c system diff 1..2

Hiermit werden uns die tatsächlichen Änderungen extrem genau angezeigt. Zur besseren Übersicht lässt man sich die Unterschiede in eine Datei ausgeben (diese wird natürlich automatisch erstellt), in diesem Beispiel in die Datei diff.txt:

snapper -c system diff 1..2 > diff.txt

Nun, jetzt lassen sich Unterschiede in Textdateien sehr genau anzeigen – im Beispiel möchte ich den Unterschied in der Datei /etc/passwd zwischen Snapshot 1 und 2 anzeigen lassen:

snapper -c system diff 1..2 /etc/passwd

Oder die Änderungen in einem Verzeichnis:

snapper -c system diff 1..2 /etc/

Snapshots zurückspielen

Auch hier gibt man wieder die zu unterscheidenden Snapshots (also Sicherungen) an. Ich möchte wieder den Unterschied zwischen Snapshot 1 und 2 wiederherstellen, denn zwischen diesen habe ich etwas geändert und möchte es wieder rückgängig machen. Im ersten Beispiel möchte ich die Änderungen an der Datei /etc/fstab rückgängig machen:

snapper -c system undochange 1..2 "/etc/fstab"

Dasselbe mit dem Verzeichnis /home/username/Dokumente:

snapper -c system undochange 1..2 "/home/username/Dokumente"

Geben wir keine Datei oder kein Verzeichnis an, werden alle aufgezeichneten Änderungen im kompletten System wiederhergestellt:

snapper -c system undochange 1..2

Categories:

Tags:

Schreibe einen Kommentar

3 Reaktionen

Neue Themen im Forum
Debian installieren - für Anfänge …Hallo zebolon, ich habe den Live-Installer (oder wie auch immer … Weiterlesen
Frage zu GrubDanke @juhu, das war für mich eine reine Verständnisfrage allge … Weiterlesen
Brother Drucker unter LinuxMit der Suche nach „Linux Brother HL-2030“ fand ich zur Seite htt … Weiterlesen
Kategorien im Wiki
WIKI-Beiträge des Monates

Die Beiträge des Monates finden Sie im Kalender unter den blau markierten Tageszahlen.

September 2023
M D M D F S S
 123
45678910
11121314151617
18192021222324
252627282930  
Archive