Btrfs: Unterschied zwischen den Versionen

Aus Xinux Wiki
Zur Navigation springen Zur Suche springen
(Die Seite wurde neu angelegt: „*Einführung in Btrfs *Brtfs Installation *Erstellen eines Btrfs-Dateisystems auf einer leeren Festplatte *Erstellen und Verwalten von Subvolumes…“)
 
 
(11 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 1: Zeile 1:
 +
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. '''<code>/dev/sda</code> ist die Systemplatte und wird nie angefasst''' – die Übungen laufen auf <code>/dev/sdb</code> und aufwärts, gemountet wird nach <code>/mnt/work</code>.
 +
 +
=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 Altzustand zurück.
 +
*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.
 +
 +
==Inkrementelle Übertragung==
 +
*Mit <code>btrfs send</code> und <code>receive</code> lassen sich Snapshots übertragen, wobei nach dem ersten vollständigen Stand nur noch die Änderungen wandern.
 +
 +
=Installation=
 +
 +
==Debian / Ubuntu==
 +
*apt install btrfs-progs
 +
 +
==Fedora / Rocky==
 +
*dnf install btrfs-progs
 +
 +
Der Kernel-Teil ist überall vorhanden; installiert wird nur das Werkzeugpaket <code>btrfs-progs</code>.
 +
 +
=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
 +
 +
==Mountpunkt erstellen==
 +
*mkdir /mnt/work
 +
 +
==Mounten==
 +
*mount /dev/sdb1 /mnt/work
 +
 +
==Anzeigen==
 +
Zwei Wege: <code>df</code> zeigt die Belegung wie bei jedem Dateisystem, <code>btrfs filesystem show</code> 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 <code>/etc/fstab</code> eintragen. Statt des Gerätenamens ist die UUID robuster, weil sie sich beim Umstecken nicht ändert. Die UUID liefert <code>blkid</code>.
 +
*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
 +
 +
Die letzte Spalte (fsck-Durchlauf) steht bei btrfs immer auf <code>0</code>: btrfs prüft nicht über <code>fsck</code> 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, <code>/home</code>, <code>/var</code> oder <code>/tmp</code> 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 <code>subvol=</code> lässt sich ein einzelnes Subvolume an einen eigenen Pfad hängen – mit eigenen Mount-Optionen.
 +
*mount -o subvol=sub1 /dev/sdb1 /mnt/sub1
 +
 +
'''Vorteile im Überblick:''' getrennte Mount-Optionen je Subvolume, eigene Quotas, unabhängige Wartung und Snapshots, und Fehlerisolation – ein vollgelaufenes oder beschädigtes Subvolume zieht die anderen nicht mit.
 +
 +
=Snapshots=
 +
 +
Ein Snapshot ist eine Momentaufnahme eines Subvolumes zu einem Zeitpunkt. Er wird selbst als Subvolume angelegt und taucht in der Subvolume-Liste auf.
 +
 +
==Einen Snapshot erstellen==
 +
*btrfs subvolume snapshot /mnt/work/sub1 /mnt/work/sub1-snap1
 +
 +
==Einen schreibgeschützten Snapshot erstellen==
 +
Das <code>-r</code> 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
 +
 +
==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 den Snapshot unter dem alten Namen als neues Subvolume anlegen.
 +
*mv /mnt/work/sub1 /mnt/work/sub1.old
 +
 +
*btrfs subvolume snapshot /mnt/work/sub1-snap1 /mnt/work/sub1
 +
 +
War der Snapshot schreibgeschützt (<code>-r</code>), ist auch die Kopie zunächst read-only. Beschreibbar machen:
 +
*btrfs property set /mnt/work/sub1 ro false
 +
 +
==Eine einzelne Datei aus einem Snapshot holen==
 +
In den Snapshot wechseln und die Datei zurückkopieren.
 +
*cp /mnt/work/sub1-snap1/datei.txt /mnt/work/sub1/
 +
 +
==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 /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
 +
 +
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 (<code>-m</code>) und Daten (<code>-d</code>) an. Die Profile lassen sich später im laufenden Betrieb umwandeln.
 +
 +
'''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.
 +
 +
==RAID 0 (Striping, keine Redundanz)==
 +
*mkfs.btrfs -m raid0 -d raid0 /dev/sdb1 /dev/sdc1
 +
 +
==RAID 1 (Spiegelung)==
 +
*mkfs.btrfs -m raid1 -d raid1 /dev/sdb1 /dev/sdc1
 +
 +
==RAID 10==
 +
*mkfs.btrfs -m raid10 -d raid10 /dev/sdb1 /dev/sdc1 /dev/sdd1 /dev/sde1
 +
 +
==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.
 +
*btrfs device add /dev/sdf1 /mnt/work
 +
 +
*btrfs balance start /mnt/work
 +
 +
==Ein RAID auflösen==
 +
Auflösen heißt: erst das Profil auf <code>single</code> umwandeln, dann die überzähligen Geräte entfernen. Dafür muss genug freier Platz vorhanden sein, um die Redundanz aufzuheben.
 +
 +
Daten-Layout auf single:
 +
*btrfs balance start -dconvert=single /mnt/work
 +
 +
Metadaten-Layout auf single:
 +
*btrfs balance start -mconvert=single /mnt/work
 +
 +
Dann Geräte entfernen (zuletzt hinzugefügtes zuerst):
 +
*btrfs device delete /dev/sdc1 /mnt/work
 +
 +
=Wartung und Fehlersuche=
 +
 +
==Scrub: Prüfsummen verifizieren==
 +
<code>scrub</code> liest alle Blöcke, vergleicht sie mit den Prüfsummen und repariert Fehler aus einer intakten Kopie, sofern Redundanz vorhanden ist. Das ist die btrfs-eigene Vorsorge gegen stille Datenfehler und sollte regelmäßig laufen.
 +
*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 /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.
 +
*btrfs device stats /mnt/work
 +
 +
==Dateisystem prüfen==
 +
<code>btrfs check</code> prüft das Dateisystem offline. '''Nur im ausgehängten Zustand''' und mit Vorsicht: eine Reparatur (<code>--repair</code>) kann Daten beschädigen und ist das letzte Mittel, nicht der erste Griff.
 +
*umount /mnt/work
 +
 +
*btrfs check /dev/sdb1
 +
 +
==Belegung realistisch anzeigen==
 +
<code>df</code> 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 <code>/dev/sdb</code> und aufwärts. '''<code>/dev/sda</code> bleibt unberührt.''' Immer die Partition ansprechen, nie die ganze OS-Platte.
 +
 +
==Anlegen und Mounten==
 +
 +
* Erstellen Sie ein Btrfs-Dateisystem auf /dev/sdb1.
 +
<!-- Lösung: mkfs.btrfs /dev/sdb1 -->
 +
 +
* Erstellen Sie das Verzeichnis /mnt/work und mounten Sie das Dateisystem dorthin.
 +
<!-- Lösung:
 +
mkdir /mnt/work
 +
mount /dev/sdb1 /mnt/work
 +
-->
 +
 +
* Tragen Sie das Dateisystem über seine UUID in /etc/fstab ein, damit es beim Start gemountet wird.
 +
<!-- Lösung: UUID mit  blkid /dev/sdb1  ermitteln, dann in /etc/fstab:
 +
UUID=... /mnt/work btrfs defaults 0 0 -->
 +
 +
==Subvolumes==
 +
 +
* Erstellen Sie ein Subvolume namens sub1.
 +
<!-- Lösung: btrfs subvolume create /mnt/work/sub1 -->
 +
 +
* Listen Sie die vorhandenen Subvolumes auf.
 +
<!-- Lösung: btrfs subvolume list /mnt/work -->
 +
 +
* Löschen Sie das Subvolume sub1 und legen Sie es anschließend neu an.
 +
<!-- Lösung:
 +
btrfs subvolume delete /mnt/work/sub1
 +
btrfs subvolume create /mnt/work/sub1
 +
-->
 +
 +
==Snapshots==
 +
 +
* Erstellen Sie einen Snapshot von sub1 mit Namen sub1-snap1.
 +
<!-- Lösung: btrfs subvolume snapshot /mnt/work/sub1 /mnt/work/sub1-snap1 -->
 +
 +
* Erstellen Sie einen schreibgeschützten Snapshot von sub1 mit Namen sub1-ro.
 +
<!-- Lösung: btrfs subvolume snapshot -r /mnt/work/sub1 /mnt/work/sub1-ro -->
 +
 +
* Schieben Sie sub1 beiseite und spielen Sie sub1-snap1 unter dem Namen sub1 zurück.
 +
<!-- Lösung:
 +
mv /mnt/work/sub1 /mnt/work/sub1.old
 +
btrfs subvolume snapshot /mnt/work/sub1-snap1 /mnt/work/sub1
 +
-->
 +
 +
==RAID==
 +
 +
* Erstellen Sie ein RAID 0 aus /dev/sdb1 und /dev/sdc1.
 +
<!-- Lösung: mkfs.btrfs -m raid0 -d raid0 /dev/sdb1 /dev/sdc1 -->
 +
 +
* Erstellen Sie ein RAID 1 aus /dev/sdb1 und /dev/sdc1.
 +
<!-- Lösung: mkfs.btrfs -m raid1 -d raid1 /dev/sdb1 /dev/sdc1 -->
 +
 +
* Erstellen Sie ein RAID 10 aus /dev/sdb1, /dev/sdc1, /dev/sdd1 und /dev/sde1.
 +
<!-- Lösung: mkfs.btrfs -m raid10 -d raid10 /dev/sdb1 /dev/sdc1 /dev/sdd1 /dev/sde1 -->
 +
 +
* Lösen Sie das RAID auf: Daten- und Metadaten-Layout auf single umwandeln.
 +
<!-- Lösung:
 +
btrfs balance start -dconvert=single /mnt/work
 +
btrfs balance start -mconvert=single /mnt/work
 +
-->
 +
 +
==Wartung==
 +
 +
* Starten Sie einen Scrub auf /mnt/work und fragen Sie danach den Status ab.
 +
<!-- Lösung:
 +
btrfs scrub start /mnt/work
 +
btrfs scrub status /mnt/work
 +
-->
 +
 +
* Balancieren Sie das Dateisystem aus.
 +
<!-- Lösung: btrfs balance start /mnt/work -->
 +
 +
* Zeigen Sie die realistische Belegung an.
 +
<!-- Lösung: btrfs filesystem usage /mnt/work -->
 +
 +
* Hängen Sie /mnt/work aus und prüfen Sie das Dateisystem auf /dev/sdb1.
 +
<!-- Lösung:
 +
umount /mnt/work
 +
btrfs check /dev/sdb1
 +
-->
 +
 +
* Zeigen Sie die Gerätefehler-Zähler an.
 +
<!-- Lösung: btrfs device stats /mnt/work -->
 +
 +
* Prüfen Sie die Kernelmeldungen auf btrfs-Fehler.
 +
<!-- Lösung: dmesg | grep -i btrfs -->
 +
<!---
 
*[[Einführung in Btrfs]]
 
*[[Einführung in Btrfs]]
*[[Brtfs Installation]]
+
*[[Btrfs Installation]]
 
*[[Erstellen eines Btrfs-Dateisystems auf einer leeren Festplatte]]
 
*[[Erstellen eines Btrfs-Dateisystems auf einer leeren Festplatte]]
 +
*[[Vorteile von Subvolumes]]
 
*[[Erstellen und Verwalten von Subvolumes]]
 
*[[Erstellen und Verwalten von Subvolumes]]
*[[Verwaltung von Btrfs-Snapshots]]
+
*[[Btrfs-Snapshots]]
*[[Brtfs RAID und Redundanz]]
+
*[[Btrfs RAID und Redundanz]]
*[[Brtfs Wartung und Fehlersuche]]
+
*[[Btrfs Wartung und Fehlersuche]]
*[[Aufgaben Brtfs]]
+
*[[Btrfs Infos]]
 +
*[[Btrfs Handling]]
 +
*[[Aufgaben Btrfs]]
 +
--->

Aktuelle Version vom 19. August 2026, 17:25 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.

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 Altzustand zurück.
  • 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.

Inkrementelle Übertragung

  • Mit btrfs send und receive lassen sich Snapshots übertragen, wobei nach dem ersten vollständigen Stand nur noch die Änderungen wandern.

Installation

Debian / Ubuntu

  • apt install btrfs-progs

Fedora / Rocky

  • dnf install btrfs-progs

Der Kernel-Teil ist überall 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

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

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.

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

Vorteile im Überblick: getrennte Mount-Optionen je Subvolume, eigene Quotas, unabhängige Wartung und Snapshots, und Fehlerisolation – ein vollgelaufenes oder beschädigtes Subvolume zieht die anderen nicht mit.

Snapshots

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

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

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 den Snapshot unter dem alten Namen als neues Subvolume anlegen.

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

War der Snapshot schreibgeschützt (-r), ist auch die Kopie zunächst read-only. Beschreibbar machen:

  • btrfs property set /mnt/work/sub1 ro false

Eine einzelne Datei aus einem Snapshot holen

In den Snapshot wechseln und die Datei zurückkopieren.

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

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 /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

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.

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.

RAID 0 (Striping, keine Redundanz)

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

RAID 1 (Spiegelung)

  • mkfs.btrfs -m raid1 -d raid1 /dev/sdb1 /dev/sdc1

RAID 10

  • mkfs.btrfs -m raid10 -d raid10 /dev/sdb1 /dev/sdc1 /dev/sdd1 /dev/sde1

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.

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

Ein RAID auflösen

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

Daten-Layout auf single:

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

Metadaten-Layout auf single:

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

Dann Geräte entfernen (zuletzt hinzugefügtes zuerst):

  • btrfs device delete /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. Das ist die btrfs-eigene Vorsorge gegen stille Datenfehler und sollte regelmäßig laufen.

  • 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 /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.

  • btrfs device stats /mnt/work

Dateisystem prüfen

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

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

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.

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

  • 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- und Metadaten-Layout auf single umwandeln.

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.