Btrfs/de

Btrfs ist Article description::ein copy-on-write (CoW) 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 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.
 * 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.

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.

Kernel
Aktivieren Sie folgende Kerneloption, um Btrfs-Unterstützung einzuschalten:

Emerge
Das Paket beinhaltet die Werkzeuge, die zum Arbeiten mit dem Btrfs-Dateisystem nötig sind.

Bedienung
Lange Btrfs-Befehle zu tippen kann sehr schnell mühsam werden. Jeder Befehl kann (außer dem grundlegenden -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:

Kürzen Sie alle längeren Befehle die folgen, indem Sie alle auf deren eindeutigen, kürzesten Prefix reduzieren. In diesem Kontext wird mit eindeutig gemeint, dass es keine anderen -Befehle gibt, die sich mit dem getrimmten Befehl überschneiden. Die gekürzte Version des obenstehenden Befehls ist:

Kein anderer Befehl von beginnt mit  ;   ist der Einzige. Dasselbe gilt für den Unterbefehl  innerhalb des  -Befehls.

Erstellung
Um ein Btrfs-Dateisystem auf der Partition zu erstellen:

Im obigen Beispiel müssen Sie lediglich  mit der Partitionszahl und   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:

Einhängen
Nach der Erstellung können Dateisysteme auf verschiedene Weisen eingehängt werden:


 * - Manuelles Einhängen.
 * - Einhängepunkte in zu definieren ermöglicht das automatische Einhängen bei Systemstart.
 * - Automatisches Einhängen durch Aufruf (nützlich für USB-Geräte).
 * - Automatisches Einhängen bei Zugriff auf das Dateisystem.

Konvertieren von Dateisystemen auf Basis von ext*
Es ist möglich mit dem -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:

Prüfen Sie die Integrität des Dateisystems mit dessen zugehörigen -Tool. Im nächsten Beispiel ist das Dateisystem ext4:

Verwende, um den mit ext4 formatierten Datenträger auf Btrfs zu konvertieren.

Stellen Sie sicher, dass in der Datei die Spalte, die das Dateisystem angibt hinter dem gerade umformatierten Datenträger von ext4 zu Btrfs geändert wird.

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:

Die  Einhängeoption setzt Online-Defragmentierung als Standardverhalten.

Kompression
Btrfs unterstützt transparente Kompression mit den Kompressionsalgorithmen zlib, LZO und zstd (v5.1.0)

Es ist auch möglich, einzelne Dateien durch die Nutzung von Dateiattributen zu komprimieren:

Die Einhängeoption  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:

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.

Um zlib-Kompression auf dem gesamten Dateisystem zu erzwingen:

Ersetzen Sie im obigen Beispiel zstd durch zlib, um die zstd-Komprimierung zu aktivieren.

Kompressionslevel
Seit der Kernelversion 4.15.0 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:

Oder um minimale Kompression zu setzen:

Oder um die Kompressionsstärke anzupassen, in dem man den Datenträger neu einhängt:

Das Kompressionslevel sollte einsehbar sein unter oder in dem man den neuesten -Output mit folgendem Befehl ausliest:

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 vornehmen. In diesem Beispiel ist die zstd-Komprimierung zum Zeitpunkt des Einhängens auf die Stufe 9 eingestellt.

Kompressionsverhältnis und Speicherplatznutzung
Die bekannten Werkzeuge des Userspaces, um den derzeitigen Speicherplatzverbrauch und den freien Platz zu ermitteln wie etwa und  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.

Es wird daher empfohlen die du/df Alternativen aus dem Btrfs-Userspace Werkzeug  zu verwenden. Zusätzlich kann das Werkzeug aus dem  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.

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

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 eingehängt sind. Es ist möglich die Daten in diesem Profil von mit diesem Befehl von RAID1 zu RAID5 umzuwandeln:

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.

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 ein und führen Sie die folgenden Schritte zum Hinzufügen eines neues Gerätes aus.

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.

Über Gerätepfad
Blockgeräte (Festplatten) können von Mehrgerätedateisystemen mit dem Unterbefehl entfernt werden.

Über Geräte ID
Nutzen Sie den usage Unterbefehl um die Geräte ID zu bestimmen.

Verwenden Sie als nächstes die Geräte ID um das Gerät zu entfernen. In diesem Fall wird entfernt:

Größenanpassung
Btrfs-Partitionen können mit dem eingebauten resize Unterbefehl in der Größe verändert werden, während diese Online sind. Zum Beispiel, um 50 Gigabytes Speicherplatz zum rootfs hinzufügen:

Dieser Befehl kann auch den gesamten verfügbaren Speicherplatz ausfüllen:

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. Sie können an jeder Stelle im Dateisystem erstellt werden und verhalten sich wie jedes andere Verzeichnis auf dem System, mit einer Einschränkung: 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.

Erstellen
Um ein Subvolume zu erstellen, geben sie folgenden Befehl innerhalb des Namensraums eines Btrfs-Dateisystem ein:

Ersetzen Sie  mit dem gewünschten Zielort und Subvolumename. Zum Beispiel, wenn ein Btrfs-Dateisystem unter existiert, könnte ein Subvolume darin mit dem folgenden Befehl erstellt werden:

Auflisten
Um erstellte Subvolumes zu sehen, benutzen Sie den  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.

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:

Entfernen
All available subvolume paths in a Btrfs filesystem can be seen using the list command above.

Subvolumes können mit dem  Befehl gefolgt von einem Pfad zu einem Subvolume korrekt entfernt werden:

Wie vorher, ersetzen Sie  mit dem Pfad des Subvolumes das entfernt werden soll. Um das Subvolume im obigen Beispiel zu entfernen, wird dieser Befehl ausgeführt:

Snapshots
Snapshots sind Subvolumes, die Daten und Metadaten mit anderen Subvolumes teilen. Dies wird durch Btrfs' Copy on Write (CoW) Fähigkeit möglich. 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 zu erstellen:

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.

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 erstellen und die Subvolumes  und  erstellen. Die Subvolumes könnten dann als und  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  der relative Pfad des Subvolumes ausgehend vom Top-Level-Subvolume ist. Diesen erhalten sie mit dem  Befehl:

In ähnlicher Weise kann die fstab aktualisiert werden, um ein Btrfs-Subvolume einzuhängen:

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 Präfix abgewickelt, aber für das Btrfs-Dateisystem werden die Prüfungen über den Unterbefehl  abgewickelt:

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:

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 Befehl angezeigt werden. Im folgenden Beispiel ist eins der Geräte die immer noch mit dem Mehrgerätedateisystem verbunden sind.

Ein fehlendes Gerät kann mit folgenden Befehl aus dem Dateisystem entfernt werden:

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 Befehl:

Löschen der Free-Space-Cache
Es ist möglich Btrfs' Free-Space-Cache zu löschen, indem man das Dateisystem mit der  Einhängeoption einhängt. Zum Beispiel:

Btrfs frisst Arbeitsspeicher (Diskcache)
Wenn einige spezielle Funktionen von Btrfs verwendet werden (wie etwa das erstellen vieler Kopien per  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, (welches Bestandteil des Pakets ist), wurde spezifisch dafür gemacht, um herauszufinden wie viel Arbeitsspeicher von Kernelobjekten beansprucht wird.

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 leitet.

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 vor dem Ausführen der untenstehenden -Befehlen ausführen:

Die meiste Zeit werden Btfs-Benutzer wahrscheinlich verwenden wollen, um nur Slab-Objekte (dentries und btrfs_inodes) freizugeben:

Um die gesamte Festplatten-Cache zu leeren (Slab-Objekte und Page-Cache) benutzen Sie stattdessen.

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 :

Btrfs Wurzeldateisystem bootet nicht
Genkernel's initramfs lädt btrfs nicht so wie sie generiert wurde:

Kompiliere die Unterstützung für Btrfs direkt in den Kernel anstatt eines Kernelmoduls oder benutze, um die initramfs zu generieren.

Siehe auch

 * - Benutzen von Samba um Schattenkopien als "Vorgängerversionen" auf Windowsclients anzeigen zu lassen.
 * - Benutzen von Samba um Schattenkopien als "Vorgängerversionen" auf Windowsclients anzeigen zu lassen.
 * - Benutzen von Samba um Schattenkopien als "Vorgängerversionen" auf Windowsclients anzeigen zu lassen.
 * - Benutzen von Samba um Schattenkopien als "Vorgängerversionen" auf Windowsclients anzeigen zu lassen.
 * - Benutzen von Samba um Schattenkopien als "Vorgängerversionen" auf Windowsclients anzeigen zu lassen.
 * - Benutzen von Samba um Schattenkopien als "Vorgängerversionen" auf Windowsclients anzeigen zu lassen.

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.