Btrfs: Unterschied zwischen den Versionen

Aus Xinux Wiki
Zur Navigation springen Zur Suche springen
Zeile 179: Zeile 179:


==RAID 10==
==RAID 10==
*mkfs.btrfs -m raid10 -d raid10 /dev/sdb1 /dev/sdc1 /dev/sdd1 /dev/sde1
*mkfs.btrfs -m raid10 -d raid10 /dev/sdc3 /dev/sdd3 /dev/sdc4 /dev/sdd4


==Einen RAID-Verbund mounten==
==Einen RAID-Verbund mounten==

Version vom 21. Oktober 2026, 15:27 Uhr

Btrfs (B-tree File System) ist ein modernes Copy-on-Write-Dateisystem für Linux. Es vereint Funktionen, für die unter ext4 mehrere Schichten nötig sind: Volume-Verwaltung über mehrere Platten, RAID, Snapshots, Prüfsummen und Kompression stecken im Dateisystem selbst. Dieser Artikel führt von der Installation über das Anlegen, Subvolumes, Snapshots und RAID bis zu Wartung und Fehlersuche.

Alle Beispiele verwenden feste Geräte und Pfade. /dev/sda ist die Systemplatte und wird nie angefasst – die Übungen laufen auf /dev/sdb und aufwärts, gemountet wird nach /mnt/work.

Animation zum Durchklicken: btrfs in der Praxis

Eigenschaften von Btrfs

Copy on Write

  • Geänderte Blöcke werden nicht überschrieben, sondern an neuer Stelle geschrieben; erst danach wird der Verweis umgehängt. Ein Absturz mitten im Schreiben lässt daher immer einen konsistenten Zustand zurück – den alten oder den neuen, nie eine Mischung.
  • Auf diesem Prinzip beruhen Snapshots und die günstigen Kopien (Reflinks).

Prüfsummen

  • Btrfs bildet Prüfsummen über Metadaten und Nutzdaten und erkennt so stille Datenfehler, die ext4 nicht bemerkt. Im RAID-Verbund kann es einen fehlerhaften Block aus der intakten Kopie reparieren.

Volume-Verwaltung und RAID

  • Btrfs kann mehrere Platten zu einem Dateisystem zusammenfassen und darüber RAID-Profile legen – ohne darunterliegendes mdadm oder LVM.

Subvolumes

  • Ein Subvolume ist ein eigenständig verwaltbarer Namensraum innerhalb des Dateisystems: separat mountbar, mit eigenen Snapshots und Quotas, aber ohne feste Größenaufteilung wie bei Partitionen.

Snapshots

  • Momentaufnahmen eines Subvolumes, dank CoW nahezu ohne zusätzlichen Speicher zum Zeitpunkt der Erstellung. Sie belegen erst dann Platz, wenn sich Original oder Snapshot ändern.

Kompression

  • Btrfs kann Daten transparent komprimieren (zstd, lzo, zlib) und so Platz sparen. Eingeschaltet wird sie über die Mount-Option compress=zstd; sie wirkt auf alles, was danach geschrieben wird.

Inkrementelle Übertragung

  • Mit btrfs send und receive lassen sich Snapshots übertragen, wobei nach dem ersten vollständigen Stand nur noch die Änderungen wandern. Voraussetzung sind schreibgeschützte Snapshots (-r).

Installation

Debian / Ubuntu

  • apt install btrfs-progs

Fedora

  • dnf install -y btrfs-progs

RHEL / Rocky / Alma

Red Hat hat Btrfs mit RHEL 8 aus dem Kernel entfernt; Rocky Linux und AlmaLinux übernehmen das. Auf diesen Systemen fehlt das Kernelmodul – das Werkzeugpaket allein (etwa aus EPEL) reicht nicht. Btrfs gibt es dort nur mit einem anderen Kernel. Für die Übungen eignet sich deshalb Debian, Ubuntu oder Fedora.

  • modprobe btrfs
modprobe: FATAL: Module btrfs not found in directory /lib/modules/5.14.0-…el9.x86_64

Bei Debian, Ubuntu, Fedora und SUSE ist der Kernel-Teil vorhanden; installiert wird nur das Werkzeugpaket btrfs-progs.

Ein Dateisystem anlegen und mounten

Vorbereitung: die richtige Platte finden

Vor dem Anlegen prüfen, welches Gerät gemeint ist und dass keine wichtigen Daten darauf liegen.

  • lsblk /dev/sdb

Ein Btrfs-Dateisystem anlegen

  • mkfs.btrfs /dev/sdb1

Liegt auf der Partition bereits ein Dateisystem, verweigert mkfs.btrfs das Anlegen. Überschreiben nur bewusst mit -f:

  • mkfs.btrfs -f /dev/sdb1

Mountpunkt erstellen

  • mkdir /mnt/work

Mounten

  • mount /dev/sdb1 /mnt/work

Anzeigen

Zwei Wege: df zeigt die Belegung wie bei jedem Dateisystem, btrfs filesystem show zeigt die btrfs-Sicht mit allen zugehörigen Geräten.

  • df -h /mnt/work
  • btrfs filesystem show /mnt/work

Automatisch mounten über /etc/fstab

Die Zeile in /etc/fstab eintragen. Statt des Gerätenamens ist die UUID robuster, weil sie sich beim Umstecken nicht ändert. Die UUID liefert blkid.

  • blkid /dev/sdb1

Danach die Datei bearbeiten:

  • nano /etc/fstab

Und am Ende die Zeile einfügen (UUID durch den eigenen Wert ersetzen):

UUID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx  /mnt/work  btrfs  defaults  0 0

Mit Kompression:

UUID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx  /mnt/work  btrfs  defaults,compress=zstd  0 0

Die letzte Spalte (fsck-Durchlauf) steht bei btrfs immer auf 0: btrfs prüft nicht über fsck beim Booten.

Subvolumes

Ein Subvolume verhält sich wie ein Verzeichnis, ist aber eigenständig: separat mountbar, einzeln als Snapshot sicherbar, mit eigenen Quotas. Typische Anwendung ist, /home, /var oder /tmp in eigene Subvolumes zu legen, damit sie unabhängig verwaltet und gesnapshottet werden können.

Ein Subvolume anlegen

  • btrfs subvolume create /mnt/work/sub1

Subvolumes auflisten

  • btrfs subvolume list /mnt/work
ID 256 gen 8 top level 5 path sub1

Ein Subvolume löschen

  • btrfs subvolume delete /mnt/work/sub1

Ein Subvolume gezielt mounten

Über die Option subvol= lässt sich ein einzelnes Subvolume an einen eigenen Pfad hängen – mit eigenen Mount-Optionen.

  • mkdir /mnt/sub1
  • mount -o subvol=sub1 /dev/sdb1 /mnt/sub1

Vorteile im Überblick: getrennte Mount-Optionen je Subvolume, eigene Quotas, unabhängige Wartung und Snapshots.

Aber: Subvolumes sind keine Partitionen. Alle Subvolumes teilen sich den freien Platz und die Metadaten des Dateisystems. Läuft eines voll, ist das ganze Dateisystem voll – es sei denn, man begrenzt die Subvolumes über Quotas (btrfs quota enable, btrfs qgroup limit). Ein Schaden an den gemeinsamen Metadaten betrifft ebenfalls alle Subvolumes.

Snapshots

Ein Snapshot ist eine Momentaufnahme eines Subvolumes zu einem Zeitpunkt. Er wird selbst als Subvolume angelegt und taucht in der Subvolume-Liste auf.

Subvolume mit Daten füllen

  • cp -vr /usr/bin/ /usr/sbin/ /usr/lib /mnt/sub1

Einen Snapshot erstellen

  • btrfs subvolume snapshot /mnt/work/sub1 /mnt/work/sub1-snap1

Einen schreibgeschützten Snapshot erstellen

Das -r macht den Snapshot read-only – die richtige Wahl für Backups, weil sich der gesicherte Stand nicht mehr ändern kann.

  • btrfs subvolume snapshot -r /mnt/work/sub1 /mnt/work/sub1-ro

Prüfen:

  • btrfs property get /mnt/work/sub1-ro ro
ro=true

Snapshots anzeigen

Snapshots erscheinen wie Subvolumes in der Liste.

  • btrfs subvolume list /mnt/work

Einen ganzen Stand zurückspielen

Zuerst das aktuelle Subvolume beiseiteschieben, dann vom Snapshot einen neuen Snapshot unter dem alten Namen anlegen.

  • mv /mnt/work/sub1 /mnt/work/sub1.old
  • btrfs subvolume snapshot /mnt/work/sub1-snap1 /mnt/work/sub1

Ein Snapshot ohne -r ist immer beschreibbar – auch dann, wenn die Quelle ein schreibgeschützter Snapshot war. Man kann also ebenso von sub1-ro zurückspielen. Nicht mehr benötigte Stände anschließend löschen:

  • btrfs subvolume delete /mnt/work/sub1.old

Eine einzelne Datei aus einem Snapshot holen

In den Snapshot wechseln und die Datei zurückkopieren.

  • cp -a /mnt/work/sub1-snap1/datei.txt /mnt/work/sub1/

Was ein Snapshot nicht ist

  • Kein Backup: Der Snapshot liegt auf derselben Platte. Fällt sie aus, sind Original und Snapshot weg. Eine echte Sicherung entsteht erst mit btrfs send auf eine andere Platte:
  • btrfs send /mnt/work/sub1-ro | btrfs receive /backup/
  • Nicht rekursiv: Liegt in einem Subvolume ein weiteres Subvolume, erscheint es im Snapshot nur als leeres Verzeichnis.

Snapshots automatisieren

Ein kleines Skript legt einen Snapshot mit Zeitstempel an.

  • nano /usr/local/bin/btrfs_snapshot.sh
#!/bin/bash
ZIEL=/mnt/work/sub1_snap_$(date +%Y.%m.%d_%H:%M:%S)
btrfs subvolume snapshot -r /mnt/work/sub1 "$ZIEL"

Ausführbar machen:

  • chmod +x /usr/local/bin/btrfs_snapshot.sh

Und per Cron täglich um 2 Uhr laufen lassen:

  • crontab -e
0 2 * * * /usr/local/bin/btrfs_snapshot.sh

Das Skript räumt alte Snapshots nicht auf; sie sammeln sich an und halten Platz fest. Für den produktiven Einsatz mit Aufbewahrungsregeln lohnt sich statt eines eigenen Skripts das Werkzeug snapper, das stündliche, tägliche und monatliche Snapshots automatisch anlegt und alte wieder aufräumt.

RAID mit Btrfs

Btrfs legt RAID-Profile getrennt für Metadaten (-m) und Daten (-d) an. Die Profile lassen sich später im laufenden Betrieb umwandeln. Verteilt wird nicht über ganze Platten, sondern über Chunks: Bei RAID 1 liegt jeder Chunk auf zwei verschiedenen Platten – auch bei drei oder mehr Platten bleibt es bei zwei Kopien (drei Kopien: raid1c3).

Warnung zu RAID 5 und 6: Diese beiden Profile gelten bei Btrfs bis heute als nicht produktionsreif (Write-Hole-Problem, Risiko bei einem Stromausfall während des Schreibens). Für Redundanz nimmt man RAID 1 oder RAID 10. RAID 5/6 nur zum Ausprobieren, nie für echte Daten.

Liegt auf den Partitionen schon ein Dateisystem, braucht mkfs.btrfs jeweils -f (siehe oben).

RAID 0 (Striping, keine Redundanz)

  • mkfs.btrfs -m raid0 -d raid0 /dev/sdc1 /dev/sdd1

RAID 1 (Spiegelung)

  • mkfs.btrfs -m raid1 -d raid1 /dev/sdc2 /dev/sdd2

RAID 10

  • mkfs.btrfs -m raid10 -d raid10 /dev/sdc3 /dev/sdd3 /dev/sdc4 /dev/sdd4

Einen RAID-Verbund mounten

Es genügt, ein beliebiges Mitglied anzugeben – btrfs findet die übrigen selbst.

  • mount /dev/sdb1 /mnt/work

Den Verbund prüfen

Zeigt alle Geräte des Verbunds und ihre Belegung.

  • btrfs filesystem show /mnt/work

Eine Platte hinzufügen

Wenn der Platz knapp wird, lässt sich im laufenden Betrieb eine weitere Platte aufnehmen. Danach neu ausbalancieren, damit die Daten verteilt werden. Ein Balance ohne Filter dauert auf großen Dateisystemen lange; neuere btrfs-progs warten deshalb zehn Sekunden, bevor sie anfangen, außer man gibt --full-balance an.

  • btrfs device add /dev/sdf1 /mnt/work
  • btrfs balance start --full-balance /mnt/work

Eine Platte ist ausgefallen

Fehlt eine Platte eines RAID 1, mountet btrfs das Dateisystem nicht automatisch. Man hängt es bewusst im Notbetrieb ein und ersetzt die Platte (hier die ausgefallene devid 2 durch /dev/sde1):

  • mount -o degraded /dev/sdb1 /mnt/work
  • btrfs replace start 2 /dev/sde1 /mnt/work

Die devid der fehlenden Platte zeigt btrfs filesystem show.

Ein RAID auflösen

Auflösen heißt: erst das Profil umwandeln, dann die überzähligen Geräte entfernen. Dafür muss auf den verbleibenden Geräten genug freier Platz vorhanden sein.

Daten-Layout auf single:

  • btrfs balance start -dconvert=single /mnt/work

Metadaten-Layout umwandeln. Weil dabei die Redundanz der Metadaten sinkt, verlangt btrfs -f. Bleibt nur eine Platte übrig, ist dup (zwei Kopien auf derselben Platte) besser als single:

  • btrfs balance start -f -mconvert=dup /mnt/work

Dann die Geräte entfernen. Die Reihenfolge spielt keine Rolle; btrfs verschiebt die Daten vorher auf die verbleibenden Platten:

  • btrfs device remove /dev/sdc1 /mnt/work

Wartung und Fehlersuche

Scrub: Prüfsummen verifizieren

scrub liest alle Blöcke, vergleicht sie mit den Prüfsummen und repariert Fehler aus einer intakten Kopie, sofern Redundanz vorhanden ist. Ohne Redundanz meldet es die Fehler nur. Das ist die btrfs-eigene Vorsorge gegen stille Datenfehler und sollte regelmäßig laufen, etwa monatlich.

  • btrfs scrub start /mnt/work

Status abfragen:

  • btrfs scrub status /mnt/work

Balance: Daten neu verteilen

Verteilt belegte Chunks neu – nötig nach dem Hinzufügen einer Platte oder einem Profilwechsel.

  • btrfs balance start --full-balance /mnt/work

Defragmentieren

Ordnet fragmentierte Dateien neu. Achtung: auf Dateien mit vielen Snapshots kann das den Speicherverbrauch erhöhen, weil geteilte Blöcke dabei aufgetrennt werden.

  • btrfs filesystem defragment -r /mnt/work

Gerätefehler-Zähler anzeigen

Zeigt, ob eine Platte Lese-, Schreib- oder Prüfsummenfehler gemeldet hat. Nach dem Tausch einer Platte setzt -z die Zähler zurück.

  • btrfs device stats /mnt/work

Dateisystem prüfen

btrfs check prüft das Dateisystem offline. Nur im ausgehängten Zustand und mit Vorsicht: Ohne Optionen liest es nur. Eine Reparatur (--repair) kann Daten beschädigen und ist das letzte Mittel, nicht der erste Griff.

  • umount /mnt/work
  • btrfs check /dev/sdb1

Im Ernstfall zuerst die Daten retten, indem man schreibgeschützt mit Rettungsoptionen mountet und kopiert:

  • mount -o ro,rescue=all /dev/sdb1 /mnt/rescue

Belegung realistisch anzeigen

df täuscht bei btrfs, weil Metadaten und Redundanz nicht sichtbar sind. Die ehrliche Sicht liefert:

  • btrfs filesystem usage /mnt/work

Informationen auslesen

Alle Btrfs-Dateisysteme anzeigen

  • btrfs filesystem show

Superblock eines Geräts anzeigen

  • btrfs inspect-internal dump-super /dev/sdb1

Metadatenbaum ausgeben (Debugging)

Sehr ausführlich, nur zur Fehlersuche.

  • btrfs inspect-internal dump-tree /dev/sdb1

Kernelmeldungen prüfen

Bei Hardware- oder Dateisystemfehlern hilft der Blick ins Kernel-Log.

  • dmesg | grep -i btrfs

Aufgaben

Vorbereitung: mehrere leere Datenpartitionen auf /dev/sdb und aufwärts. /dev/sda bleibt unberührt. Immer die Partition ansprechen, nie die ganze OS-Platte. Die Aufgaben laufen auf Debian, Ubuntu oder Fedora – nicht auf Rocky/RHEL (kein Btrfs im Kernel).

Anlegen und Mounten

  • Erstellen Sie ein Btrfs-Dateisystem auf /dev/sdb1.
  • Erstellen Sie das Verzeichnis /mnt/work und mounten Sie das Dateisystem dorthin.
  • Tragen Sie das Dateisystem über seine UUID in /etc/fstab ein, damit es beim Start gemountet wird.

Subvolumes

  • Erstellen Sie ein Subvolume namens sub1.
  • Listen Sie die vorhandenen Subvolumes auf.
  • Löschen Sie das Subvolume sub1 und legen Sie es anschließend neu an.

Snapshots

  • Erstellen Sie einen Snapshot von sub1 mit Namen sub1-snap1.
  • Erstellen Sie einen schreibgeschützten Snapshot von sub1 mit Namen sub1-ro.
  • Schieben Sie sub1 beiseite und spielen Sie sub1-snap1 unter dem Namen sub1 zurück.

RAID

Hinweis: Vor jedem neuen RAID das Dateisystem aushängen (umount /mnt/work). Weil auf den Partitionen schon ein Dateisystem liegt, braucht mkfs.btrfs jeweils -f.

  • Erstellen Sie ein RAID 0 aus /dev/sdb1 und /dev/sdc1.
  • Erstellen Sie ein RAID 1 aus /dev/sdb1 und /dev/sdc1.
  • Erstellen Sie ein RAID 10 aus /dev/sdb1, /dev/sdc1, /dev/sdd1 und /dev/sde1.
  • Lösen Sie das RAID auf: Daten auf single, Metadaten auf dup umwandeln und die überzähligen Platten entfernen.

Wartung

  • Starten Sie einen Scrub auf /mnt/work und fragen Sie danach den Status ab.
  • Balancieren Sie das Dateisystem aus.
  • Zeigen Sie die realistische Belegung an.
  • Hängen Sie /mnt/work aus und prüfen Sie das Dateisystem auf /dev/sdb1.
  • Zeigen Sie die Gerätefehler-Zähler an.
  • Prüfen Sie die Kernelmeldungen auf btrfs-Fehler.