Btrfs

From Gentoo Wiki
Jump to:navigation Jump to:search
This page is a translated version of the page Btrfs and the translation is 100% complete.

Btrfs ist ein copy-on-write (CoW) filesystem 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 Unstabil 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.
Tip
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.

Installation

Kernel

Aktiviere folgende Kerneloption, um Btrfs-Unterstützung einzuschalten:

KERNEL Btrfs in der Kernel aktivieren
File systems  --->
    <*> Btrfs filesystem

Emerge

Das Paket sys-fs/btrfs-progs beinhaltet die Werkzeuge, die zum Arbeiten mit dem Btrfs-Dateisystem nötig sind.

root #emerge --ask sys-fs/btrfs-progs

Bedienung

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 das Einzige. Dasselbe gilt für das Subkommando de innerhalb des filesystem-Befehls.

Erstellung

Warnung
Der Befehl mkfs.btrfs zerstört unwiederruflich 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
Wichtig
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.

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.

DATEI /etc/fstabÄndern von ext4 auf Btrfs
<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.

Warnung
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[1] 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)[2]

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[3].

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[4] kann das Kompressionslevel von zlib auf Level 1-9 gesetzt werden. Seit Kernelversion 5.1.0 kann zstd von Level 1-15 gesetzt weden. 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.

DATEI /etc/fstabBtrfs-Komprimierung mit zstd
/dev/sdb                /srv            btrfs           compress=zstd:9,relatime,rw     0 0

Kompressionsverhältnis und Speicherplatznutzung

Die bekannten Werkzeuge des Benutzerbreichs, 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[5].

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 mehr Informationen.

Warnung
Die Verwendung der RAID5- oder RAID6-Modi ist derzeit nicht sicher[6]. RAID5- und 6-Modi haben in Linux 4.12 einige Korrekturen erfahren[7], aber der Gesamtzustand ist immer noch Instabil.[8][9]. 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.

Erstellung

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. Zum Beispiel, um 50 Gigabytes Speicherplatz zum rootfs hinzuzfügen:

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.[10] 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.

Notiz
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 Nameraums 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

Subvolumes können mit dem btrfs subvolume delete Befehl gefolgt von einem Pfad zu einem Subvolume korrekt entfernt werden. Alle verfügbaren Subvolume-Pfade in einem Btrfs-Dateisystem können über den list Befehl angezeigt 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/bt rfs/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.[10] 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.

DATEI btrfs_snapshot.shBtrfs Wurzeldateisystem Snapshot Cron-Job Beispiel
#!/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ängenpunkt>

In ähnlicher Weise kann man den fstab aktualisieren, um Btrfs-Subvolumes wie folgt einzuhängen:

Translations:Btrfs/115/de

DATEI /etc/fstabSubvolumes Einhä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>
Notiz
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
Warnung
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[11].

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
Warnung
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 Dracut, um die initramfs zu generieren.

Siehe auch

  • Btrfs snapshots - Skript, der Schnappschüsse erstellt sobald sich Dateien geändert haben
  • Btrfs/System Root Guide - Benutzen des Btrfs-Dateisystem als Sammlung von Subvolumes inklusive eines, welches als Wurzeldateisystem verwendet wird.
  • Btrfs native system root guide - Eine Alternativanleitung bezüglich der Nutzung eines Subvolumes auf einem Btrfs-Dateisystem als das Systemwurzeldateisystem.
  • Ext4 — an open source disk filesystem and most recent version of the extended series of filesystems.
  • Btrbk — a tool for creating incremental snapshots and remote backups of Btrfs subvolumes.
  • Samba shadow copies - Benutzen von Samba um Schattenkopien als "Vorgängeversionen" auf Windowsclients anzeigen zu lassen.
  • 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

Referenzen