FS: Btrfs¶
Siehe auch
- Verwandte Artikel
- Offizielle Dokumentation
man btrfs,man mkfs.btrfs,man btrfs-subvolume,man btrfs-send,man btrfs-scrub
- Linuxfabrik
Von den drei unter Linux verbreiteten Dateisystemen Ext4, XFS und Btrfs ist Btrfs das jüngste. Es arbeitet durchgängig Copy-on-Write und bringt im Gegensatz zu Ext4 und XFS Subvolumes, native Snapshots, Prüfsummen auf Daten und Metadaten, transparente Kompression, Deduplizierung und Multi-Device-Verwaltung (ein integriertes RAID) direkt mit. Ein klassisches Block- und Metadaten-Journaling wie bei Ext4 und XFS fehlt dafür, da CoW die Konsistenz auf andere Weise sichert.
Achtung
Btrfs ist in RHEL und Rocky nicht enthalten (in RHEL 8 wurde es entfernt); das Paket btrfs-progs lässt sich dort nicht installieren. Praktisch relevant ist Btrfs damit unter Fedora, openSUSE und SLES (dort Default für das Wurzeldateisystem). Die folgenden Beispiele wurden unter Fedora geprüft.
Die Maximalgrössen stehen in der Limits-Tabelle in Filesysteme.
Dateisystem erstellen¶
mkfs.btrfs --force /dev/sdb
Standard-Geometrie: Node-Grösse 16 KiB, Sektorgrösse 4 KiB, Prüfsumme crc32c. Innerhalb eines Btrfs-Dateisystems werden die eigentlichen Datenbereiche als Subvolumes angelegt, die sich getrennt mounten und unabhängig per Snapshot sichern lassen:
mount /dev/sdb /mnt
btrfs subvolume create /mnt/data
btrfs subvolume list /mnt
Dateisystem vergrössern und verkleinern¶
Btrfs kann im laufenden Betrieb sowohl wachsen als auch schrumpfen. Die Grösse wird relativ (+/-) oder absolut angegeben, max füllt das Gerät:
# grow to fill the device
btrfs filesystem resize max /data
# grow / shrink by a relative amount
btrfs filesystem resize +10G /data
btrfs filesystem resize -5G /data
Ein Btrfs-Volume kann sich über mehrere Geräte erstrecken. Wurde ein bereits eingebundenes Gerät per Hypervisor vergrössert, muss beim Resize die Device-ID mitgegeben werden:
# add a device to the volume
btrfs device add /dev/sdc /data
# resize a specific device (devid from "btrfs filesystem show")
btrfs filesystem resize 2:max /data
Dateisystem prüfen und reparieren¶
Btrfs trennt zwei Aufgaben. scrub prüft im laufenden Betrieb alle Daten und Metadaten gegen ihre Prüfsummen und korrigiert beschädigte Blöcke automatisch, sofern eine zweite Kopie vorliegt (RAID). btrfs check prüft die strukturelle Integrität des ausgehängten Dateisystems.
# online integrity check against checksums
btrfs scrub start /data
btrfs scrub status /data
# offline structural check (unmounted), read-only
btrfs check /dev/sdb
btrfs check --repair kann ein Dateisystem zusätzlich beschädigen und gilt als letztes Mittel; davor ein Backup anlegen und die Btrfs-Dokumentation konsultieren.
Nach dem Hinzufügen von Geräten verteilt balance Daten und Metadaten gleichmässig über alle Geräte des Volumes:
btrfs filesystem balance /data
Quota¶
Btrfs hat kein User-/Group-/Project-Modell wie Ext4 und XFS, sondern begrenzt den Verbrauch je Subvolume über Quota Groups (qgroups). Die Funktion muss erst aktiviert werden:
# enable quotas (tracks usage per subvolume)
btrfs quota enable /data
# set a limit on a subvolume
btrfs qgroup limit 10G /data/subvol1
# show usage and limits
btrfs qgroup show /data
Snapshots¶
Anders als Ext4 und XFS legt Btrfs Snapshots nativ an, ohne LVM oder Stratis. Ein Snapshot ist ein Subvolume, das zum Zeitpunkt des Anlegens den Stand des Originals teilt und dank CoW erst bei Änderungen eigenen Platz belegt. Für Backups wird ein schreibgeschützter Snapshot (-r) angelegt, da nur ein solcher als Basis für btrfs send taugt:
# writable snapshot (e.g. for a quick rollback point)
btrfs subvolume snapshot /data /data/snap1
# read-only snapshot (basis for send/receive)
btrfs subvolume snapshot -r /data /data/.snapshots/backup1
Wegsichern und Restore laufen über btrfs send und btrfs receive, auch auf ein anderes Dateisystem oder über SSH auf einen anderen Host:
# full backup of a read-only snapshot to another filesystem
btrfs send /data/.snapshots/backup1 | btrfs receive /backup
# incremental backup relative to a previous snapshot
btrfs send -p /data/.snapshots/backup1 /data/.snapshots/backup2 | btrfs receive /backup
# restore: send the snapshot back from the backup
btrfs send /backup/backup2 | btrfs receive /data
Einen Snapshot entfernen:
btrfs subvolume delete /data/.snapshots/backup1
Troubleshooting¶
No space left on device, obwohldffreien Platz zeigtBtrfs alloziert Platz in Chunks für Daten und Metadaten getrennt. Sind die Metadaten-Chunks voll, schlägt das Schreiben fehl, auch wenn
dfnoch Platz meldet.btrfs filesystem usage /datazeigt die echte Belegung; einbalancegibt halbleere Chunks wieder frei. Hintergrund: SUSE KB - No space left on device und Marc Merlins - Fixing Btrfs Filesystem Full Problems.- Wann sollte balanciert werden?
Nach jedem Hinzufügen oder Entfernen von Geräten sowie bei stark gefüllten oder fragmentierten Volumes. NVIDIA - When to Rebalance BTRFS beschreibt, worauf zu achten ist.