Btrfs
Btrfs ist ein copy-on-write (CoW) Dateisystem für Linux, welches die Implementierung erweiterter Funktionen anstrebt und einen Fokus auf Fehlertoleranz, Selbsheilung und einfache Administration legt. Während es von Oracle, Red Hat, Fujitsu, Intel, SUSE, STRATO, und vielen anderen gemeinsam Entwickelt wird, ist Btrfs unter der GPL lizenziert und ist für Beiträge offen.
Merkmale
Ext4 ist sicher, stabil und kann große Dateisysteme mit Extents handhaben, also warum sollte man wechseln? Während es richtig ist, dass Btrfs immer noch als experimentell angesehen wird und dessen Stabilität noch wächst, kommt es dessen Übernahme als Standarddateisystem für Linux nahe. Manche Linuxdistributionen haben bereits angefangen, dazu zu wechseln mit deren neuesten Veröffentlichungen. Btrfs hat mit ZFS einige erweiterte Features gemeinsam, welche auch das ZFS-Dateisystem bei BSD-Distributionen und NAS-Geräten so weitverbreitet gemacht haben.
- Copy on Write (CoW) und snapshotting - Macht das erstellen eines inkrementellen Backups unproblematisch, sogar von einem stark verwendeten Dateisystem oder einer Virtuellen Maschine (VM).
- Dateilevel-Prüfsummen - Die Metadaten jeder Datei beinhalten eine Prüfsumme, die zum Erkennen und Reparieren von Fehlern verwendet wird.
- Kompression - Dateien können auf die Schnelle komprimiert und dekomprimiert werden, was die Leseperformance steigert.
- Auto-Defragmentierung - Die Dateisysteme werden von einem Thread im Hintergrund verwaltet während sie benutzt werden.
- Subvolumes - Dateisysteme können sich einen einzelnen Speicherpool teilen anstatt auf deren eigenen Partition zu sein.
- RAID - Btrfs hat dessen eigene Implementierung von RAID, also wird LVM oder mdadm nicht für RAID benötigt. Derzeit sind RAID 0, 1 und 10 unterstützt; RAID 5 und 6 werden als Instabil angesehen.
- Partitionen sind optional - Obwohl Btrfs mit Partitionen arbeitet, kann es auch direkt auf Rohlaufwerken benutzt werden (/dev/<device>).
- Datendeduplizierung - Es gibt bisher nur limitierte Unterstützung für Datendeduplizierung; jedoch wird diese eventuell eine Standardfunktion von Btrfs werden. Dies ermöglicht Btrfs Platz zu sparen, in dem Dateien per binary diffs verglichen werden.
- Quotas - Btrfs bietet Quota-Unterstützung, die eine Gruppierung von Subvolumes in Quotas ermöglicht.
Siehe die Statusseite der Upstreamwiki für eine aktuelle und ausführliche Liste der Features. Für die weitverbreitete Verwendung sind aber nicht alle Features genug ausgereift.
In der Zukunft werden geclusterte Dateisysteme für deren Objektspeicher aktiv nutzen von copy on write und anderen erweiterten Features von Btrfs machen. Ceph ist ein Beispiel eines geclusterten Dateisystem, welches sehr vielversprechend aussieht und aus Btrfs nutzen ziehen kann.
Btrfs soll ein stabiles und gut getestetes Single-Disk-Dateisystem und ext4-Ersatz sein, aber bei der Verwendung von erweiterten Funktionen wie Btrfs-RAID ist Vorsicht geboten.[1]
Vorbehalte
Btrfs kann kontraintuitiv Dateisystemoperationen mit ENOSPC fehlschlagen lassen, wenn df freien Platz aufgrund internet Fragmentierung meldet (freier Platz, der von DATA + SYSTEM Chunks gepinnt ist, aber in METADATA Chunks benötigt wird).
Außerdem kann ein einzelner 4K-Verweis auf ein 128M-Extent innerhalb von Btrfs dazu führen, dass freier Speicher vorhanden ist, aber nicht für Zuweisungen zur Verfügung steht. Dies kann auch dazu führen, dass Btrfs ENOSPC zurückgibt, wenn freier Speicherplatz von df gemeldet wird.
Die Installation von sys-fs/btrfsmaintenance und die Konfiguration der Skripte für eine regelmäßige Ausführung kann dazu beitragen, die Möglichkeit von ENOSPC-Problemen zu verringern, indem Btrfs neu ausbalanciert wird, aber es wird das Risiko von ENOSPC nicht ausschließen, wenn kein freier Speicher vorhanden ist. Bei einigen Arbeitslasten wird ENOSPC nie auftreten, bei anderen schon. Wenn das Risiko von ENOSPC in der Produktion inakzeptabel ist, sollten Sie etwas anderes verwenden. Wenn Sie Btrfs verwenden, achten Sie darauf, Konfigurationen zu vermeiden, bei denen Problemen bekannt sind.
Mit Ausnahme von ENOSPC sind Informationen über die Probleme in Btrfs in den letzten Kernelzweigen auf der Btrfs-Status-Seite verfügbar.
Installation
Kernel
Aktivieren Sie folgende Kerneloption, um Btrfs-Unterstützung einzuschalten:
File systems --->
<*> Btrfs filesystem
Emerge
Das Paket sys-fs/btrfs-progs beinhaltet die Werkzeuge, die zum Arbeiten mit dem Btrfs-Dateisystem nötig sind. Um es zu installieren:
root #
emerge --ask sys-fs/btrfs-progs
Bedienung
Consider setting up sys-fs/btrfsmaintenance to handle regular balancing, defrag, trimming, and scrubbing.
Lange Btrfs-Befehle zu tippen kann sehr schnell mühsam werden. Jeder Befehl kann (außer dem grundlegenden btrfs-Kommando) auf einen sehr kurzen Satz an Anweisungen reduziert werden. Diese Methode ist hilfreich, wenn man über die Kommandozeile arbeitet und um dort die Menge der getippten Zeichen zu reduzieren.
Zum Beispiel zeigt folgender ausgeschriebene Befehl wie das Dateisystem defragmentiert werden kann, welches unter / befindlich ist:
root #
btrfs filesystem defragment -v /
Kürzen Sie alle längeren Befehle die btrfs folgen, indem Sie alle auf deren eindeutigen, kürzesten Prefix reduzieren. In diesem Kontext wird mit eindeutig gemeint, dass es keine anderen btrfs-Befehle gibt, die sich mit dem getrimmten Befehl überschneiden. Die gekürzte Version des obenstehenden Befehls ist:
root #
btrfs fi de -v /
Kein anderer Befehl von btrfs beginnt mit fi
; filesystem
ist der Einzige. Dasselbe gilt für den Unterbefehl de
innerhalb des filesystem
-Befehls.
Erstellung
Der Befehl mkfs.btrfs zerstört unwiderruflich jeglichen Inhalt auf den Partitionen, welche zur Formatierung angegeben wurden. Bitte stellen Sie sicher, dass der richtige Datenträger und die korrekte Partition gewählt wurden bevor Sie jegliche mkfs-Befehle ausführen!
Um ein Btrfs-Dateisystem auf der Partition /dev/sdXN zu erstellen:
root #
mkfs.btrfs /dev/sdXN
Im obigen Beispiel müssen Sie lediglich N
mit der Partitionszahl und X
mit dem Laufwerksbuchstaben des Datenträgers austauschen, welches zu formatieren ist. Zum Beispiel können Sie folgenden Befehl ausführen, um den dritten Datenträger des Systems mit Btrfs zu formatieren:
root #
mkfs.btrfs /dev/sda3
Die letzte Zahl in der Datei /etc/fstab sollte für alle Btrfs-Partitionen auf
0
stehen. fsck.btrfs und btrfsck sollten nicht bei jedem Systemstart durchgeführt werden.Label
Labels können zu Btrfs-Dateisystemen hinzugefügt werden, was das Einhängen und die Organisation erleichtert.
Label sind im Allgemeinen weniger eindeutig als UUIDs, aber das Setzen von Labels wie rootfs für / und homedir für /home kann bei der Organisation helfen.
Wenn mehrere Dateisysteme mit demselben Label auf einem System existieren, wird das erste gelabelte System in der fstab oder das erste von blkid zurückgegeben wird, eingehängt. Es ist im Allgemeinen am besten, sich nicht auf dieses Verhalten zu verlassen, daher sollten eindeutige Labels verwendet werden.
Labels können zu einem Btrfs-Dateisystem hinzugefügt werden, nachdem es erstellt wurde, indem man:
root #
btrfs filesystem label /dev/sda1 rootfs
Labels können hinzugefügt werden, wenn das Btrfs-Dateisystem erstellt wird:
root #
mkfs.btrfs -L rootfs /dev/sda1
Einhängen
Nach der Erstellung können Dateisysteme auf verschiedene Weisen eingehängt werden:
- mount - Manuelles Einhängen.
- /etc/fstab - Einhängepunkte in /etc/fstab zu definieren ermöglicht das automatische Einhängen bei Systemstart.
- Removable media - Automatisches Einhängen durch Aufruf (nützlich für USB-Geräte).
- AutoFS - Automatisches Einhängen bei Zugriff auf das Dateisystem.
Konvertieren von Dateisystemen auf Basis von ext*
Es ist möglich mit dem btrfs-convert-Dienstprogramm ext2, ext3 und ext4-Dateisysteme in Btrfs zu konvertieren.
Die folgenden Anweisungen unterstützen nur die Konvertierung von uneingehängten Dateisystemen. Um das Wurzeldateisystem zu konvertieren, muss man in ein Rescuesystem booten (SystemRescueCD funktioniert hierbei gut) und von dort aus die Befehle auf die Partition anwenden, auf der das Wurzeldateisystem liegt.
Stelle zuerst sicher, dass der Einhängepunkt nicht eingehängt ist:
root #
umount <eingehängtes_gerät>
Prüfen Sie die Integrität des Dateisystems mit dessen zugehörigen fsck-Tool. Im nächsten Beispiel ist das Dateisystem ext4:
root #
fsck.ext4 -f <ausgehängtes_gerät>
Verwende btrfs-convert, um den mit ext4 formatierten Datenträger auf Btrfs zu konvertieren.
root #
btrfs-convert <ausgehängtes_gerät>
Stellen Sie sicher, dass in der Datei /etc/fstab die Spalte, die das Dateisystem angibt hinter dem gerade umformatierten Datenträger von ext4 zu Btrfs geändert wird.
<gerät> <einhängepunkt> btrfs defaults 0 0
Defragmentierung
Ein weiteres Feature von Btrfs ist die Defragmentierung während der Datenträger online ist. Um ein Wurzeldateisystem mit Btrfs zu defragmentieren, führen sie folgendes aus:
root #
btrfs filesystem defragment -r -v /
Die autodefrag
Einhängeoption setzt Online-Defragmentierung als Standardverhalten.
Defragmentieren mit den Kernelversionen < 3.9 oder ≥ 3.14-rc2 sowie auch der Linux Stable Kernel der Versionen ≥ 3.10.31, ≥ 3.12.12 oder ≥ 3.13.4 trennt die ref-links zwischen Dateien und deren CoW-Kopien[2] und kann dadurch die Speichernutzung erheblich erhöhen. Stellen Sie sicher, dass genug Speicherplatz auf dem Datenträger vorhanden ist und nicht zu viele Snapshots existieren, da volle Btrfs-Partitionen sehr langsam werden können.
Kompression
Btrfs unterstützt transparente Kompression mit den Kompressionsalgorithmen zlib, LZO und zstd (v5.1.0)[3]
Es ist auch möglich, einzelne Dateien durch die Nutzung von Dateiattributen zu komprimieren:
user $
chattr +c
Die Einhängeoption compress
schaltet das komprimieren aller neu erstellten Dateien als Standardverhalten ein. Um das gesamte Dateisystem erneut mit LZO-Kompresssion zu komprimieren, führen Sie folgenden Befehl aus:
root #
btrfs filesystem defragment -r -v -clzo /
Abhängig von der Prozessor- und Laufwerksleistung kann die Benutzung von LZO-Komprimierung den Gesamtdurchsatz verbessern.
Als Alternative zu LZO ist es auch möglich, den Kompressionsalgorithmus zlib oder zstd zu verwenden. Zlib ist langsamer, hat aber ein höheres Kompressionsverhältnis, während zstd ein gutes Verhältnis zwischen den beiden hat[4].
Um zlib-Kompression auf dem gesamten Dateisystem zu erzwingen:
root #
btrfs filesystem defragment -r -v -czlib /
Ersetzen Sie im obigen Beispiel zstd durch zlib, um die zstd-Komprimierung zu aktivieren.
Kompressionslevel
Seit der Kernelversion 4.15.0[5] kann das Kompressionslevel von zlib auf Level 1-9 gesetzt werden. Seit Kernelversion 5.1.0 kann zstd von Level 1-15 gesetzt werden. Zum Beispiel, um zlib zur Einhängezeit auf dessen maximales Kompressionslevel zu setzen:
root #
mount -o compress=zlib:9 /dev/sdXY /pfad/zum/btrfs/einhängepunkt
Oder um minimale Kompression zu setzen:
root #
mount -o compress=zlib:1 /dev/sdXY /pfad/zum/btrfs/einhängepunkt
Oder um die Kompressionsstärke anzupassen, in dem man den Datenträger neu einhängt:
root #
mount -o remount,compress=zlib:3 /pfad/zum/btrfs/einhängepunkt
Das Kompressionslevel sollte einsehbar sein unter /proc/mounts, oder in dem man den neuesten dmesg-Output mit folgendem Befehl ausliest:
root #
dmesg | grep -i btrfs
[ 0.495284] Btrfs loaded, crc32c=crc32c-intel [ 3010.727383] BTRFS: device label My Passport devid 1 transid 31 /dev/sdd1 [ 3111.930960] BTRFS info (device sdd1): disk space caching is enabled [ 3111.930973] BTRFS info (device sdd1): has skinny extents [ 9428.918325] BTRFS info (device sdd1): use zlib compression, level 3
Fstab für Komprimierung anpassen
Sobald ein Laufwerk wieder eingehängt oder für die Komprimierung von Daten angepasst wurde, müssen Sie die entsprechenden Änderungen in der Datei /etc/fstab vornehmen. In diesem Beispiel ist die zstd-Komprimierung zum Zeitpunkt des Einhängens auf die Stufe 9 eingestellt.
/dev/sdb /srv btrfs compress=zstd:9,relatime,rw 0 0
Kompressionsverhältnis und Speicherplatznutzung
Die bekannten Werkzeuge des Userspaces, um den derzeitigen Speicherplatzverbrauch und den freien Platz zu ermitteln wie etwa du und df können ungenaue Resultate auf einer Btrfs-Partition ausgeben aufgrund von grundlegenden Abweichungen wie Dateien geschrieben werden im Gegensatz zu, zum Beispiel, ext2/3/4[6].
Es wird daher empfohlen die du/df Alternativen aus dem Btrfs-Userspace Werkzeug btrfs filesystem
zu verwenden.
Zusätzlich kann das compsize Werkzeug aus dem sys-fs/compsize Paket hilfreich sein, wen es darum geht, zusätzliche Informationen über Komprimierungsraten und die Festplattennutzung komprimierter Dateien zu erhalten. Die folgenden Beispiele zeigen die Benutzung der Werkzeuge mit einer Btrfs-Partition eingehängt unter /media/drive.
user $
btrfs filesystem du -s /media/drive
Total Exclusive Set shared Filename 848.12GiB 848.12GiB 0.00B /media/drive/
user $
btrfs filesystem df /media/drive
Data, single: total=846.00GiB, used=845.61GiB System, DUP: total=8.00MiB, used=112.00KiB Metadata, DUP: total=2.00GiB, used=904.30MiB GlobalReserve, single: total=512.00MiB, used=0.00B
user $
compsize /media/drive
Processed 2262 files, 112115 regular extents (112115 refs), 174 inline. Type Perc Disk Usage Uncompressed Referenced TOTAL 99% 845G 848G 848G none 100% 844G 844G 844G zlib 16% 532M 3.2G 3.2G
Mehrere Geräte (RAID)
Btrfs kann mit mehreren Blockgeräten benutzt werden um RAIDs zu erstellen. Es ist viel leichter Btrfs zu benutzen um Dateisysteme zu erstellen, welche sich über mehrere Geräte erstrecken als sie mit mdadm, zu erstellen, da für die Erstellung keine Initialisierungszeit erforderlich ist.
Btrfs behandelt Daten und Metadaten separat. Dies ist zu beachten, wenn Mehrgerätedateisysteme verwendet werden. Es ist möglich separate Profile für Daten- und Metadatenblockgruppen zu verwenden. Zum Beispiel, könnten Metadaten über mehrere Geräte in RAID1 konfiguriert werden, während Daten auf RAID5 konfiguriert währen. Dieses Profil ist möglich, wenn drei oder mehr Blockgeräte verwendet werden, da RAID5 ein Minimum von drei Blockgeräten erfordert.
Diese Art von Profil bietet den Vorteil der Redundanz für Metadaten auf jedem Gerät und des Striping für Daten auf allen Geräten, was die Lesegeschwindigkeit erhöht. Der Nachteil dieses Profils ist, dass mehr Speicherplatz als nötig für Metadaten verwendet wird und die Schreibgeschwindigkeit für Datenblöcke reduziert wird, da RAID5 ein Paritätsbit verwendet.
Erstellung =
Die einfachste Methode ist die Verwendung der gesamten unpartitionierten Blockgeräte um ein Dateisystem über mehrere Geräte zu erstellen. Zum Beispiel, um ein Dateisystem im RAID1-Modus über zwei Geräte zu erstellen:
root #
mkfs.btrfs -m raid1 <gerät1> <gerät2> -d raid1 <gerät1> <gerät2>
Umwandlung
Konvertierung zwischen RAID-Profilen ist mit dem balance Unterbefehl möglich. Zum Beispiel, angenommen wir haben drei Blockgeräte, welche zurzeit in RAID1 konfiguriert sind und unter /srv eingehängt sind. Es ist möglich die Daten in diesem Profil von mit diesem Befehl von RAID1 zu RAID5 umzuwandeln:
root #
btrfs balance start -dconvert=raid5 --force /srv
Eine Konvertierung kann ausgeführt werden während das Dateisystem Online und in Benutzung ist. Mögliche RAID-Modi in Btrfs umfassen RAID0, RAID1, RAID5, RAID6 und RAID10. Siehe das Upstream Btrfs Wiki für weitere Informationen.
Die Verwendung der RAID5- oder RAID6-Modi ist derzeit nicht sicher[7]. RAID5- und 6-Modi haben in Linux 4.12 einige Korrekturen erfahren[8], aber der Gesamtzustand ist immer noch Instabil.[9][10]. Benutzer die RAID5- oder RAID6 Funktionen von Btrfs nutzen wollen, sind aufgefordert sich auf der Btrfs Statusseite über die Stabilitätsstatus der gewünschten Modi zu informieren, bevor diese genutzt werden.
Hinzufügen
Zusätzliche Geräte können zu existierenden Mehrgerätedateisystem hinzugefügt werden. Folgen sie dem nachstehenden Abschnitt zum Entfernen.
Eine riskantere aber schnellere Alternative um ein Gerät sicher zu entfernen ist das herunterfahren des Systems (Oder falls das System Hot-Swap-fähige Laufwerke unterstützt, hängen Sie zumindest das Dateisystem aus), das zu ersetzende Gerät physisch zu trennen und zu entfernen, das neue Gerät an seiner Stelle zu ersetzen und anzuschließen und das System (falls erforderlich) hochzufahren.
Hinweis: Bei Systemen, deren Stromzufuhr unterbrochen wird, kann das Mehrgerätedateisystem nicht eingehängt werden, da ein Gerät physisch aus dem Pool entfernt wurde.
Sobald das System hochgefahren ist, hängen Sie das Mehrgerätedateisystem mit dem Befehl mount -odegraded ein und führen Sie die folgenden Schritte zum Hinzufügen eines neues Gerätes aus.
root #
mount -odegraded /srv
root #
btrfs device add --force /dev/sdd /srv
Nachdem das Gerät wieder hinzufügt wurde ist es erforderlich das Dateisystem auszubalancieren, um sicherzustellen, dass die Daten über das neu hinzugefügte Geräte verteilt werden.
root #
btrfs balance start /srv
Entfernen
Über Gerätepfad
Blockgeräte (Festplatten) können von Mehrgerätedateisystemen mit dem btrfs device remove Unterbefehl entfernt werden.
root #
btrfs device remove /dev/sde /srv
Über Geräte ID
Nutzen Sie den usage Unterbefehl um die Geräte ID zu bestimmen.
root #
btrfs device usage /srv
/dev/sdb, ID: 3 Device size: 1.82TiB Device slack: 0.00B Data,RAID1: 25.00GiB Data,RAID5: 497.00GiB Data,RAID5: 5.00GiB Metadata,RAID5: 17.00GiB Metadata,RAID5: 352.00MiB System,RAID5: 32.00MiB Unallocated: 1.29TiB /dev/sdc, ID: 1 Device size: 1.82TiB Device slack: 0.00B Data,RAID1: 25.00GiB Data,RAID5: 497.00GiB Data,RAID5: 5.00GiB Metadata,RAID5: 17.00GiB Metadata,RAID5: 352.00MiB System,RAID5: 32.00MiB Unallocated: 1.29TiB /dev/sdd, ID: 4 Device size: 1.82TiB Device slack: 0.00B Data,RAID1: 25.00GiB Data,RAID5: 497.00GiB Data,RAID5: 5.00GiB Metadata,RAID5: 17.00GiB Metadata,RAID5: 352.00MiB System,RAID5: 32.00MiB Unallocated: 1.29TiB /dev/sde, ID: 5 Device size: 0.00B Device slack: 0.00B Data,RAID1: 75.00GiB Data,RAID5: 5.00GiB Metadata,RAID5: 352.00MiB Unallocated: 1.74TiB
Verwenden Sie als nächstes die Geräte ID um das Gerät zu entfernen. In diesem Fall wird /dev/sde entfernt:
root #
btrfs device remove 5 /srv
Größenanpassung
Btrfs-Partitionen können mit dem eingebauten resize Unterbefehl in der Größe verändert werden, während diese Online sind.
Dies hat keinen Einfluss auf die Größe der Partition selbst, sondern nur auf das Dateisystem.
Setzen der Größe des Root-Dateisystems auf 128gb:
root #
btrfs filesystem resize 128g /
Hinzufügen von 50 Gigabytes Speicherplatzes zu rootfs:
root #
btrfs filesystem resize +50g /
Dieser Befehl kann auch den gesamten verfügbaren Speicherplatz ausfüllen:
root #
btrfs filesystem resize max /
Subvolumes
Wie oben in der Merkmal-Liste erwähnt, kann Btrfs Subvolumes erstellen. Subvolumes können zur besseren Organisation und Verwaltung von Daten verwendet werden. Besonders in Verbindung mit Snapshots werden Subvolumes sehr mächtig. Es ist wichtig zwischen Subvolumes erstellt von Btrfs und Subvolumes erstellt von Logical Volume Management (LVM) zu unterscheiden. Btrfs Subvolumes sind keine Blockgeräte, es sind POSIX Datei-Namensräume.[11] Sie können an jeder Stelle im Dateisystem erstellt werden und verhalten sich wie jedes andere Verzeichnis auf dem System, mit einem Unterschied: Subvolumes können ein- und ausgehängt werden. Subvolumes sind verschachtelbar (Subvolumes können in Subvolumes erstellt werden), und sie können einfach erstellt und entfernt werden.
Ein Subvolume kann nicht über verschieden Btrfs-Dateisysteme erstellt werden. Falls /dev/sda und /dev/sdb beide separate (nicht-RAID) Btrfs-Dateisysteme enthalten, ist es nicht möglich ein Subvolume zu erstellen, welches sich über beide Dateisysteme erstreckt. Ein Snapshot kann von einem Dateisystem zu einem anderen bewegt werden, aber es kann sich nicht über beide erstrecken. Es muss auf /dev/sda oder /dev/sdb sein.
Erstellen
Um ein Subvolume zu erstellen, geben sie folgenden Befehl innerhalb des Namensraums eines Btrfs-Dateisystem ein:
root #
btrfs subvolume create <zielort>
Ersetzen Sie <zielort>
mit dem gewünschten Zielort und Subvolumename. Zum Beispiel, wenn ein Btrfs-Dateisystem unter /mnt/btrfs existiert, könnte ein Subvolume darin mit dem folgenden Befehl erstellt werden:
root #
btrfs subvolume create /mnt/btrfs/subvolume1
Auflisten
Um erstellte Subvolumes zu sehen, benutzen Sie den btrfs subvolume list
Befehl gefolgt von einer Btrfs-Dateisystemposition. Falls das aktuelle Verzeichnis in einem Btrfs-Dateisystem liegt, zeigt der folgende Befehl die Subvolumes an, die auf dem Dateisystem existieren.
root #
btrfs subvolume list .
Wenn ein Btrfs-Dateisystem mit Subvolumes unter dem im obigen Beispielbefehl erstellten Einhängepunkt existiert, sieht die Ausgabe des list Befehls ähnlich aus wie die folgende:
root #
btrfs subvolume list /mnt/btrfs
ID 309 gen 102913 top level 5 path mnt/btrfs/subvolume1
Entfernen
Alle verfügbaren Subvolume-Pfade in einem Btrfs-Dateisystem können mit dem obigen Befehl list angezeigt werden.
Subvolumes können mit dem btrfs subvolume delete
Befehl gefolgt von einem Pfad zu einem Subvolume korrekt entfernt werden:
root #
btrfs subvolume delete <subvolume-pfad>
Wie vorher, ersetzen Sie <subvolume-pfad>
mit dem Pfad des Subvolumes das entfernt werden soll. Um das Subvolume im obigen Beispiel zu entfernen, wird dieser Befehl ausgeführt:
root #
btrfs subvolume delete /mnt/btrfs/subvolume1
Delete subvolume (no-commit): '/mnt/btrfs/subvolume1'
Snapshots
Snapshots sind Subvolumes, die Daten und Metadaten mit anderen Subvolumes teilen. Dies wird durch Btrfs' Copy on Write (CoW) Fähigkeit möglich.[11] Snapshots können für verschiedenes verwendet werden, einer davon ist die Erstellung von Dateisystem-Backups zu bestimmten Zeitpunkten.
Wenn das Wurzeldateisystem Btrfs ist, ist es möglich ein Snapshot mit dem Befehl subvolume snapshot zu erstellen:
root #
mkdir -p /mnt/backup/rootfs
root #
btrfs subvolume snapshot / /mnt/backup/rootfs/
Das folgende kleine Shell-Skript kann zu einem zeitgesteuerten Cron-Job hinzugefügt werden, um eine mit einem Zeitstempel versehene Snapshot-Sicherung eines mit Btrfs formatierten Wurzeldateisystems zu erstellen. Die Zeitstempel können nach belieben des Benutzers angepasst werden.
#!/bin/bash
NOW=$(date +"%Y-%m-%d_%H:%M:%S")
if [ ! -e /mnt/backup ]; then
mkdir -p /mnt/backup
fi
cd /
/sbin/btrfs subvolume snapshot / "/mnt/backup/backup_${NOW}"
Einhängen
Ein Subvolume kann an einem anderen Speicherort als der, an dem es erstellt wurde, eingehangen werden, oder der Benutzer kann wählen, es überhaupt nicht einzuhängen. Zum Beispiel, ein Benutzer könnte ein Btrfs-Dateisystem unter /mnt/btrfs erstellen und die Subvolumes /mnt/btrfs/home und /mnt/btrfs/gentoo-repo erstellen. Die Subvolumes könnten dann als /home und /var/db/repos/gentoo eingehangen werden, ohne das Top-Level-Subvolume einzuhängen. Dies führt zu einer Konfiguration in der der relative Pfad des Top-Level-Subvolume nicht mit dem tatsächlichen Pfad übereinstimmt.
Um ein Subvolume einzuhängen, führen Sie folgenden Befehl aus, wobei <rel-pfad>
der relative Pfad des Subvolumes ausgehend vom Top-Level-Subvolume ist. Diesen erhalten sie mit dem subvolume list
Befehl:
root #
mount -o subvol=<rel-pfad> <gerät> <einhängepunkt>
In ähnlicher Weise kann die fstab aktualisiert werden, um ein Btrfs-Subvolume einzuhängen:
<gerät> <einhängepunkt> btrfs subvol=<rel-pfad> 0 2
Fehlersuche
Dateisystemüberprüfung
Bei einer defekten Festplatte oder beschädigten Daten kann es notwendig sein, eine Dateisystemüberprüfung durchzuführen. Normalerweise werden Dateisystemüberprüfungsbefehle über das fsck. Präfix abgewickelt, aber für das Btrfs-Dateisystem werden die Prüfungen über den Unterbefehl btrfs check abgewickelt:
root #
btrfs check --progress /dev/<gerät>
Die Überprüfung von Mehrgerätedateisystem erfolgt durch die Angabe eines der Geräte im Dateisystem an btrfs check. Solange alle Geräte verfügbar sind, sollte der Check laufen.
Einhängen von Mehrgerätedateisystem schlägt fehl
Nach dem ungewollten Entfernen eines oder mehrerer Geräte aus einem Mehrgerätedateisystem schlägt der Versuch, das Dateisystem einzuhängen, fehl:
root #
mnt /srv
mount: /srv: wrong fs type, bad option, bad superblock on /dev/sdb, missing codepage or helper program, or other error.
Diese Art von Einhängefehler kann durch ein oder mehrere fehlende Geräte aus des Mehrgerätedateisystem verursacht werden. Fehlende Geräte können mit dem btrfs filesystem show Befehl angezeigt werden. Im folgenden Beispiel ist /dev/sdb eins der Geräte die immer noch mit dem Mehrgerätedateisystem verbunden sind.
root #
btrfs filesystem show /dev/sdb
Label: none uuid: 9e7e9824-d66b-4a9c-a05c-c4245accabe99 Total devices 5 FS bytes used 2.50TiB devid 1 size 1.82TiB used 817.03GiB path /dev/sdc devid 3 size 1.82TiB used 817.00GiB path /dev/sdb devid 5 size 10.91TiB used 2.53TiB path /dev/sde devid 6 size 10.91TiB used 2.53TiB path /dev/sdd *** Some devices missing
Ein fehlendes Gerät kann mit folgenden Befehl aus dem Dateisystem entfernt werden:
root #
btrfs device delete missing /srv
Falls das Mehrgerätedateisystem sich RAID0-Modus befindet, kommt es zu einem Datenverlust!
Benutzung mit VM-Datenträgerdateien
Wen Btrfs mit Datenträgerdateien von virtuellen Maschinen benutzt wird, ist es am besten Copy-on-Write auf dem Festplatten-Images zu deaktivieren, um die I/O-Leistung zu beschleunigen. Dies kann nur bei neu erstellten Dateien durchgeführt werden. Es ist auch möglich CoW für alle Dateien in einem Verzeichnis zu deaktivieren. Zum Beispiel, mit dem chattr Befehl:
root #
chattr +C /var/lib/libvirt/images
Löschen der Free-Space-Cache
Es ist möglich Btrfs' Free-Space-Cache zu löschen, indem man das Dateisystem mit der clear_cache
Einhängeoption einhängt. Zum Beispiel:
root #
mount -o clear_cache /pfad/zum/gerät /pfad/zum/einhängepunkt
Btrfs frisst Arbeitsspeicher (Diskcache)
Wenn einige spezielle Funktionen von Btrfs verwendet werden (wie etwa das erstellen vieler Kopien per --reflink
oder erstellen sehr vieler Snapshots) kann viel Arbeitsspeicher beansprucht und nicht schnell genug vom inode cache des Kernels wieder freigegeben werden. Dieses Problem kann lange unentdeckt bleiben, da der für den Disk Cache verwendete Arbeitsspeicher nicht gut sichtbar ist für traditionelle Systemüberwachungswerkzeuge. Das Werkzeug slabtop, (welches Bestandteil des Pakets sys-process/procps ist), wurde spezifisch dafür gemacht, um herauszufinden wie viel Arbeitsspeicher von Kernelobjekten beansprucht wird.
root #
slabtop
Active / Total Objects (% used) : 5011373 / 5052626 (99.2%) Active / Total Slabs (% used) : 1158843 / 1158843 (100.0%) Active / Total Caches (% used) : 103 / 220 (46.8%) Active / Total Size (% used) : 3874182.66K / 3881148.34K (99.8%) Minimum / Average / Maximum Object : 0.02K / 0.77K / 4096.00K OBJS ACTIVE USE OBJ SIZE SLABS OBJ/SLAB CACHE SIZE NAME 2974761 2974485 99% 1.10K 991587 3 3966348K btrfs_inode 1501479 1496052 99% 0.19K 71499 21 285996K dentry
Wenn der inode-cache zu viel Arbeitsspeicher verbraucht, kann der Kernel manuell dazu gebracht werden den Cache aufzulösen indem man per Echo einen Integer an /proc/sys/vm/drop_caches leitet[12].
Um auf der sicheren Seite zu sein und um dem Kernel zu helfen, die maximale Menge an Arbeitsspeicher zu ermitteln, die freigegeben werden kann, stellen Sie sicher dass Sie sync vor dem Ausführen der untenstehenden echo-Befehlen ausführen:
user $
sync
Die meiste Zeit werden Btfs-Benutzer wahrscheinlich echo 2 verwenden wollen, um nur Slab-Objekte (dentries und btrfs_inodes) freizugeben:
root #
echo 2 > /proc/sys/vm/drop_caches
Um die gesamte Festplatten-Cache zu leeren (Slab-Objekte und Page-Cache) benutzen Sie stattdessen echo 3.
root #
echo 3 > /proc/sys/vm/drop_caches
Obwohl die obigen Befehle nicht destruktiv sind (solange ein sync vor ihrer Ausführung abgeschlossen wurde), können sie das System vorübergehend stark verlangsamen, während der Kernel nur die notwendigen Elemente zurück in den Speicher lädt. Überlegen Sie es zweimal, bevor Sie die obigen Befehle bei stark ausgelasteten Systemen ausführen!
Mehr Informationen über Kernel-Slabs finden Sie in diesem dedoimedo Blogeintrag.
Einhängen von Btrfs schlägt fehl mit der Meldung: unknown filesystem type 'btrfs'
Die ursprüngliche Lösung von Tim auf Stack Exchange ermutigte zu folgender Lösung: Baue den Kernel manuell anstatt mit genkernel:
#
cd /usr/src/linux
#
make menuconfig
#
make && make modules_install
#
cp arch/x86_64/boot/bzImage /boot
#
mv /boot/bzImage /boot/irgendein_kernelname
#
genkernel --install initramfs
Btrfs Wurzeldateisystem bootet nicht
Genkernel's initramfs lädt btrfs nicht so wie sie generiert wurde:
root #
genkernel --btrfs initramfs
Kompiliere die Unterstützung für Btrfs direkt in den Kernel anstatt eines Kernelmoduls oder benutze Dracut, um die initramfs zu generieren.
Siehe auch
- Btrfs/snapshots — script to make automatic snapshots with Btrfs filesystem, using btrfs subvolume list-new function to create snapshots only when files have changed, so as to create fewer snapshots.
- Btrfs/System Root Guide — one example for re-basing a Gentoo installation's root filesystem to use btrfs
- Btrfs/Native System Root Guide — alternative guide on using a subvolume in a Btrfs filesystem as the system's root
- Ext4 — ein quelloffenes Dateisystem und die neueste Version der Extended-Reihe von Dateisystemen
- Btrbk — a tool for creating incremental snapshots and remote backups of Btrfs subvolumes.
- Samba shadow copies — expose Shadow Copies as 'Previous Versions' to Windows clients.
- Snapper — a command-line program to create and manage filesystem snapshots, allowing viewing or reversion of changes.
- ZFS — a next generation filesystem created by Matthew Ahrens and Jeff Bonwick.
Externe Ressourcen
- https://wiki.debian.org/Btrfs - Beschreibung der Debian Wiki.
- https://wiki.archlinux.org/index.php/Btrfs Btrfs-Artikel - Beschreibung der Arch Linux Wiki.
- http://www.funtoo.org/BTRFS_Fun - BTRFS Fun auf der Funtoo Wiki.
- http://marc.merlins.org/perso/btrfs/post_2014-05-04_Fixing-Btrfs-Filesystem-Full-Problems.html - Tipps und Tricks, um sehr spezifische Probleme des Btrfs-Dateisystems in manchen Situationen zu beheben.
Referenzen
- ↑ Examining btrfs, Linux's perpetually half-finished filesystem
- ↑ Handbuchseite für btrfs-filesystem(8), Btrfs wiki. Letzter Zugriff 2023-04-01.
- ↑ btrfs.readthedocs.io/en/latest/Compression.html#compression-levels
- ↑ https://git.kernel.org/pub/scm/linux/kernel/git/mason/linux-btrfs.git/commit/?h=next&id=5c1aab1dd5445ed8bdcdbb575abc1b0d7ee5b2e7
- ↑ https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=f51d2b59120ff364a5e612a594ed358767e1cd09
- ↑ https://btrfs.wiki.kernel.org/index.php/Compression#How_can_I_determine_compressed_size_of_a_file.3F
- ↑ Artikel, in dem erwähnt wird, dass der Paritäts-RAID-Code mehrere schwerwiegende Datenverlust-Bugs aufweist, Btrfs Wiki. Abgerufen am 1. Januar 2017.
- ↑ Michael Larabel, Btrfs RAID5 und RAID6 "Größtenteils OK", Phoronix. 8. Juli 2017.
- ↑ btrfs: scrub: Behebung RAID56-Wiederherstellungs-Wettlaufsituation, source commit, 18. April 2017.
- ↑ GIT PULL Btrfs von Chris Mason, Linux kernel mailing list, 9. Mai 2017.
- ↑ 11.0 11.1 Abschnitt der die Unterschiede zwischen Subvolumes und Logical Volumes in LVM erläutert, Btrfs Wiki. Letzter Zugriff 2023-04-02.
- ↑ Documentation for /proc/sys/vm/*, Kernel.org. Retrieved on January 1st, 2017.