ubuntuusers.de

FAQ Btrfs-Dateisystem

Dieser Artikel wurde für die folgenden Ubuntu-Versionen getestet:

Dieser Artikel ist mit keiner aktuell unterstützten Ubuntu-Version getestet! Bitte teste diesen Artikel für eine Ubuntu-Version, welche aktuell unterstützt wird. Dazu sind die Hinweise zum Testen von Artikeln zu beachten.

Zum Verständnis dieses Artikels sind folgende Seiten hilfreich:

btrfs_logo.png In diesem Artikel wurde alles Wissenswerte gesammelt, was den Autoren während der Erstellung und Revision der Artikelserie zum Btrfs aufgefallen war und beachtet werden sollte. Diese sind nicht direkt als Anweisung zu verstehen.

Des Weiteren werden in diesem Artikel die von den Benutzern erkannten Probleme und Erkenntnisse zusammengefasst, sofern der Sachverhalt nicht in andere Artikel passt bzw. nicht entsprechende Korrekturen eingebracht werden konnten.

Hinweise und Erkenntnisse

Nachfolgend werden einige Hinweise der Autoren gegeben, die diese während der Erstellung des Artikels und in der Testphase danach gesammelt haben.

Platzverbrauch

Unter Btrfs kann es passieren, dass für neue Daten kein Speicherblock mehr angelegt werden kann, obwohl die vorhanden Daten deutlich kleiner als der Plattenplatz sind. Mit dem Standard-df-Befehl ist das leider nicht sichtbar.

Beispiel:

sudo btrfs filesystem df / 

Data, single: total=37.00GiB, used=29.00GiB
System, single: total=32.00MiB, used=16.00KiB
Metadata, single: total=1.50GiB, used=795.77MiB
GlobalReserve, single: total=512.00MiB, used=0.00B

Hier sind die Daten nur 29 GiB groß, aber auf der Platte sind 37 GiB belegt. Das kommt daher, dass die belegten Blöcke alle nur teileweise gefüllt sind. Um das zu beheben, benutzt man den balance-Befehl:

sudo btrfs balance start -dusage=50 / 

Hierdurch werden alle Blöcke neu geschrieben, die weniger als 50% belegt sind. Die Zahl kann kontinuierlich gesteigert werden um den Platzverbrauch zu senken, 100% sind aber nicht zu empfehlen, weil dies nur dazu fuehrt, dass gleich danach wieder neue Blöcke mit geringer Nutzung angelegt werden müssen.

Bootloader

Es ist zwar uneingeschränkt möglich, von einem Btrfs-Dateisystem zu booten, jedoch gibt es Probleme mit GRUB 2-Funktionen, die ein Schreiben auf den Datenträger erfordern. Siehe dazu u.a. die Hinweise unter

Des Weiteren kann GRUB 2 die …/grub.cfg beim Booten nicht auslesen, wenn bei der Mountoption compress für die Komprimierung anstelle der Standardeinstellung zlib eine Komprimierung mit lzo verwendet wird.

RAID-Verbund

Die zur Zeit vom Btrfs-Dateisystem unterstützten Optionen für

  • die redundanten RAID-Level 1, 5, 6, 10, single oder dup und

  • das nicht-redundante RAID-Level 0

garantieren bei Ausfällen noch keinen ununterbrochenen Betrieb, wie es ein redundantes Software-RAID auf zwei oder mehr physikalisch vorhandenen Festplatten bietet. Bei einem Ausfall einer Festplatte bzw. Partition läuft das System möglicherweise nicht mehr weiter.

Dennoch sind diese RAID-Level in Bezug auf die Daten und Metadaten sehr hilfreich für die Wiederherstellung nach einem Crash. Sie erlauben es, sofern wirklich zwei oder mehr physikalische Datenträger eingesetzt wurden, einen defekten Datenträger eingeschränkt (degraded) zu starten, zu mounten sowie ohne Datenverlust zu ersetzen.

Die Installation auf einem Software-RAID (zwei oder mehr physikalische Festplatten) mit einer Btrfs-Dateisystem Formatierung zu versehen ist möglich und unterstützt die Datensicherheit in weiteren Ebenen.

Prozessorbelastung

Einige Btrfs-Befehle beanspruchen das System bis an die Grenzen, so dass ein vernünftiges paralleles Weiterarbeiten zwar (eingeschränkt) möglich ist, ohne dass es zu Konflikten mit den Daten kommt, jedoch kann es stören. Hier hilft der Einsatz des Zusatzbefehls nice bzw. cpulimit.

  • Ein Beispiel mit nice, das dem Btrfs-Befehl eine niedrigere Priorität gibt [1][2]:

    sudo nice -n 15 btrfs filesystem balance / & 
  • Alternativ mit cpulimit, dass die Prozessorauslastung durch den Befehl beschränkt (hier: auf 20 %):

    sudo btrfs filesystem balance / & sudo cpulimit -p $! -l 20 & 

Mit dem &-Zeichen am Ende der Befehlszeile werden die Befehle als Hintergrundprozesse gestartet.

Geschwindigkeiten

Starten/Bootvorgang/lfd. Betrieb

Hier wurden keine fühlbaren Unterschiede festgestellt, reale Test fielen aber mal so oder so aus.

Einspielen von Updates

Hier muss man feststellen, dass ein Update/Upgrade bei gleichem Paketumfang auf einem Btrfs-Dateisystem erheblich mehr Zeit in Anspruch genommen hat. Selbst sogenannte Tricks und Insider-Maßnahmen helfen nicht darüber hinweg. Als hilfreich hat sich ein Eintrag in der /etc/fstab erwiesen:

tmpfs  /var/cache/apt/archives   tmpfs   size=15%,defaults  0  0

Dies ist natürlich stark davon abhängig, wieviel Arbeitsspeicher man zur Verfügung hat. Siehe auch RAM-Disk erstellen (Abschnitt „Methode-1-Mit-tmpfs-Dateisystem“).

Festplattenprüfung

Eine Festplattenprüfung endet entweder mit der Meldung, dass das Dateisystem in Ordnung ist oder Fehler enthält. Eine Fehlerkorrektur findet grundsätzlich nur mit dem manuell installierten, aktuellen Paket btrfs-tools bzw. btrfs-progs (ab Ubuntu 19.10) statt! Siehe auch Empfohlene Maßnahmen am Ende des Artikels.

Es wird deshalb empfohlen, eine obligatorische Überprüfung beim Hochfahren in der /etc/fstab abzuwählen und diese Überprüfung regelmäßig im Terminal manuell auszuführen.

Insbesondere kann man eine Mehrfachprüfung vermeiden, indem man auf einer Partition bei gemeinsam abgelegten Unterlaufwerken (Subvolumes - @ und @home und ggf. weitere) zumindest das zweite (und auch weitere) Unterlaufwerk abwählt.

Backup und Replay

Dieses ist ein besonders positiv zu bewertender Punkt für das Btrfs-Dateisystem - vorausgesetzt, es werden bestimmte Grundregeln eingehalten und beachtet. Durch den regelmäßigen Einsatz von sogenannten Schnappschüssen kann man jederzeit auf einen Zustand zum Zeitpunkt der Erstellung des Schnappschusses zurücksetzen, falls man mal eine falsche Konfiguration gewählt hatte oder das System durch überflüssige Pakete nicht mehr optimal läuft.

Nach der Prüfung, ob eingespielte Updates auch lauffähig sind, kann man dann einen vorhergehenden Schnappschuss löschen und durch einen neu erstellten ersetzen. Dafür kann man das folgende Skript als Anregung nehmen und seinen Bedürfnissen angepasst, z.B. als cron-snapshot lauffähig nach (alternativ)

  • /etc/cron.daily

  • /etc/cron.weekly

ablegen - dieses Skript übernimmt dann im aktiven Rechner periodisch diese Aufgabe:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#!/bin/sh -e

snap_root () {
[ -d /mnt/r$datum ] && return
[ -d /mnt/r* ] && btrfs sub del /mnt/r* >/dev/null
btrfs sub snap /mnt/@ /mnt/r$datum >/dev/null
echo "snapshot r$datum angelegt" >> /home/.snapshot.log
}

snap_home () {
[ -d /mnt/h$datum ] && return
[ -d /mnt/h* ] && btrfs sub del /mnt/h* >/dev/null
btrfs sub snap /mnt/@home /mnt/h$datum >/dev/null
echo "snapshot h$datum angelegt" >> /home/.snapshot.log
}

file_system=btrfs
root_device=$(sed -n "/\/ $file_system /s|^\(.*\) / $file_system .*|\1|p" /proc/mounts)
root_uuid=$(blkid -t TYPE=$file_system -o value -s UUID "$root_device") >/dev/null
[ "x$root_uuid" = "x" ] && exit # kein passendes Btrfs gefunden

datum=$(date "+%Y-%W") # für wöchentlich, alternativ für monatlich -> "+%Y-%m"
[ `tail -n 1 /home/.snapshot.log | cut -d ' ' -f 2` = "r$datum" ] && exit; # Eintrag ist schon aktuell

echo "Überprüfung am `date +%d.%m.%Y`:" > /home/.snapshot.log
mount -o compress "UUID=$root_uuid" /mnt >/dev/null
[ -d /mnt/@ ] && snap_root
[ -d /mnt/@home ] && snap_home
umount /mnt

Alternativ kann man auch das Paket apt-btrfs-snapshot verwenden. Allerdings wurden dabei Probleme wie hohe CPU-Auslastung bis hin zum Einfrieren des Systems beobachtet, sodass die oben beschriebene Methode über ein geeignetes Skript vorzuziehen ist.

Empfohlene Maßnahmen

Alle Beschreibungen basieren auf dem Paket btrfs-tools bzw. btrfs-progs, das in einer Standardinstallation bereits enthalten sind. Mit diesem Paket ist u.a. eine Reparatur des Filesystemes mit dem Befehl btrfsck sowie eine erweiterte Prüfung mittels des scrub-Befehls möglich.

Um den aktuellen Befehlsumfang zu den einzelnen Befehlen zu erhalten (Optionen, Ergänzungen), sollte man den jeweiligen Befehl im Terminal[1] ohne Option (entspricht der Option --help) abfragen - die Manpages waren in der Vergangenheit teilweise fehlerhaft bzw. es fehlen Hinweise ganz!

Problembehebung

Als wichtiges Werkzeug für die Bearbeitung und auch zur Datenrettung wird das Anlegen eines USB-Sticks mit der Architektur des Basissystems (32- oder 64-Bit) empfohlen. Dazu kann man z.B. auf ein Ubuntu Live-Medium oder Parted Magic zurückgreifen. Beide beinhalten das Paket btrfs-tools bzw. btrfs-progs in der Version 0.19 oder neuer als Standardausstattung.

Intern

Extern

Diese Revision wurde am 17. Januar 2024 17:24 von Berlin_1946 erstellt.
Die folgenden Schlagworte wurden dem Artikel zugewiesen: System, Dateisystem, Btrfs, ungetestet