BTRFS Dateisystem Befehle Beginner - Überblick
Aufgrund zusätzlicher Möglichkeiten, wie Snapshots und Filesystemraid, hab ich mich bei meinem Heimrechner für das Dateisystem BTRFS entschieden, siehe auch ZFS vs BTRFS - Filesystem | Deduplizierung und Snapshots. Hier eine kurze Zusammenfassung der wichtigsten Befehle
Dateisystem anlegen
Nachdem ich mit GParted zwei gleich große Partitionen, auf zwei verschiedenen Laufwerken erstellt habe, konnte ich mit folgenden Befehl das Dateisystem anlegen:
sudo mkfs.btrfs -d raid1 /dev/sdc2 /dev/sdd1 -f
WARNING! - Btrfs v3.12 IS EXPERIMENTAL
WARNING! - see http://btrfs.wiki.kernel.org before using
Turning ON incompat feature 'extref': increased hardlink limit per file to 65536
adding device /dev/sdd1 id 2
fs created label (null) on /dev/sdc2
nodesize 16384 leafsize 16384 sectorsize 4096 size 2.73TiB
Btrfs v3.12
Dateisystem anzeigen
sudo btrfs filesystem show /dev/sdc2
Label: none uuid: ????????-????-????-????-??????????
Total devices 2 FS bytes used 112.00KiB
devid 1 size 1.36TiB used 2.03GiB path /dev/sdc2
devid 2 size 1.36TiB used 2.01GiB path /dev/sdd1
Speicherplatzbelegung anzeigen
sudo btrfs filesystem usage /daten
hier ein Beispiel mit 3 unterschiedlich-großen Disken RAID1: 3TB, 4TB und 2 TB; die 2TB Disk wurde zuletzt hinzugefügt:
sudo btrfs filesystem usage /daten
Overall:
Device size: 8.19TiB
Device allocated: 5.24TiB
Device unallocated: 2.94TiB
Device missing: 0.00B
Used: 5.19TiB
Free (estimated): 1.50TiB (min: 1.50TiB)
Data ratio: 2.00
Metadata ratio: 2.00
Global reserve: 512.00MiB (used: 0.00B)
Data,RAID1: Size:2.61TiB, Used:2.58TiB
/dev/sdc 2.61TiB
/dev/sdd 2.21TiB
/dev/sde 407.00GiB
Metadata,RAID1: Size:15.00GiB, Used:13.55GiB
/dev/sdc 15.00GiB
/dev/sdd 8.00GiB
/dev/sde 7.00GiB
System,RAID1: Size:32.00MiB, Used:416.00KiB
/dev/sdc 32.00MiB
/dev/sde 32.00MiB
Unallocated:
/dev/sdc 1.02TiB
/dev/sdd 523.52GiB
/dev/sde 1.41TiB
Dateisystem mounten
sudo mkdir /daten
sudo mount /dev/sdc2 /daten
permanentes Mounten, durch Eintrag in der fstab:
UUID=??? /daten btrfs defaults,compress 0 0
Version auslesen: BTRFS Version auslesen:
btrfs fi show
Raid Level ändern:
sudo btrfs balance start -mconvert=raid1 -dconvert=raid1 /daten
Done, had to relocate 6 out of 6 chunks
Disk hinzufügen
Sollte zu wenig Platz auf dem Volume sein, kann jederzeit eine zusätzliche Disk hinzugefügt werden:
sudo btrfs device add -f /dev/sda /daten
Nach dem Hinzufügen einer zusätzlichen Disk muss ein Rebalance ausgeführt werden, damit die Daten neu verteilt werden, siehe Balance
Subvolume
Subvolume erstellen
sudo btrfs subvolume create /daten/BEZEICHNUNG
Subvolume anzeigen
sudo btrfs subvolume list /daten
Subvolume löschen
sudo btrfs subvolume delete /daten/BEZEICHNUNG
Balance
Neuaufteilen der Dateichunks nach einer Änderung der Konfig
sudo btrfs balance /daten
Ohne Filter dauert ein Balance sehr lange, der Status kann mit folgendem Befehl angezeigt werden:
sudo btrfs balance status /daten
Balance pausieren:
sudo btrfs balance pause /daten
Ein bereits gestartetes Balance wieder ausführen:
sudo btrfs balance resume /daten
Filesystem überprüfen und Fehler beheben: Scrub
Device Status
BTRFS Fehler können mit folgendem Befehl angezeigt werden:
sudo btrfs device stats /media/btrfs
Sollten hier Fehler angezeigt werden, empfiehlt es sich ein btrfs scrub auszuführen:
sudo btrfs device stats /daten
[/dev/sdc].write_io_errs 2053
[/dev/sdc].read_io_errs 377
[/dev/sdc].flush_io_errs 29
[/dev/sdc].corruption_errs 57
[/dev/sdc].generation_errs 7
[/dev/sdd].write_io_errs 0
[/dev/sdd].read_io_errs 0
[/dev/sdd].flush_io_errs 0
[/dev/sdd].corruption_errs 1667845
[/dev/sdd].generation_errs 0
[/dev/sdb].write_io_errs 1051499
[/dev/sdb].read_io_errs 131904
[/dev/sdb].flush_io_errs 0
[/dev/sdb].corruption_errs 0
[/dev/sdb].generation_errs 7378
Nur Fehler anzeigen:
btrfs device stats /daten | grep -vE ' 0$'
Scrub
Der Befehl Scrub prüft mittels Checksumme ob die Datenblöcke in Ordnung sind. Sollte die Checksumme nicht stimmen, werden bei Verwendung von Raid 1 Datenblöcke mit richtiger Checksumme für die Reparatur der defekten Datenblöcke verwendet.
sudo btrfs scrub start /media/btrfs
Der Status kann mit folgendem Befehl kontrolliert werden:
sudo btrfs scrub status /media/btrfs
Ausgabe:
scrub status for ???x
scrub started at Sun Aug 19 10:33:06 2018, running for 00:54:43
total bytes scrubbed: 1.03TiB with 7378 errors
error details: verify=7378
corrected errors: 7378, uncorrectable errors: 0, unverified errors: 0
Behobene Fehler werden unter "corrected errors" angezeigt.
Die Statusanzeige des Befehles device stats
wird nach einem scrub nicht zurückgesetzt: dazu empfiehlt es sich nach einem Scrub den Parameter -z zu verwenden:
sudo btrfs device
-z gibt den aktuellen Fehler-Zähler aus und setzt diesen wieder auf 0
Snapshots
Ursprünglich habe ich für das Erstellen der Snapshots das Skript btrfs-snaps.sh verwendet: https://github.com/jf647/btrfs-snap/blob/master/btrfs-snap
Beim Update auf 16.04 wollte das Skript aber auf Anhieb nicht mehr funktionieren, daher habe ich kurzerhand Snapper installiert.
Am einfachsten können Snapshots mittels Snapper verwaltet werden:
sudo apt-get install snapper
snapper -c root create-config /daten
sudo chmod a+rx /daten/.snapshots
Standardmässig werden 10 stündliche, 10 tägliche, 10 monatliche and 10 jährliche Snapshots behalten:
Die Konfig wird in folgendem Ordner abgelegt: /etc/snapper/configs/
Der Timer wird in systemctl hinterlegt:
systemctl list-unit-files | grep snapper
deaktivieren:
systemctl disable snapper-cleanup.timer
systemctl disable snapper-timeline.timer
einschalten
systemctl enable snapper-cleanup.timer
systemctl enable snapper-timeline.timer
siehe auch: https://wiki.archlinux.org/index.php/Snapper
Anzeigen der Snapshots - Snapper
User@Rechner ~ $ sudo snapper -c root list
[sudo] Passwort für boern:
Typ | # | Vor # | Datum | Benutzer | Bereinigen | Beschreibung | Benutzerdaten
-------+----+-------+-------------------------------+----------+------------+--------------+--------------
single | 0 | | | root | | current |
single | 1 | | Sam 29 Apr 2017 10:17:01 CEST | root | timeline | timeline |
single | 6 | | Son 30 Apr 2017 10:17:01 CEST | root | timeline | timeline |
single | 11 | | Mon 01 Mai 2017 10:17:01 CEST | root | timeline | timeline |
single | 12 | | Die 02 Mai 2017 18:17:01 CEST | root | timeline | timeline |
single | 14 | | Fre 05 Mai 2017 06:17:01 CEST | root | timeline | timeline |
single | 16 | | Fre 05 Mai 2017 08:17:01 CEST | root | timeline | timeline |
single | 17 | | Fre 05 Mai 2017 15:17:01 CEST | root | timeline | timeline |
single | 18 | | Fre 05 Mai 2017 16:17:01 CEST | root | timeline | timeline |
single | 19 | | Sam 06 Mai 2017 06:17:02 CEST | root | timeline | timeline |
single | 20 | | Sam 06 Mai 2017 07:17:01 CEST | root | timeline | timeline |
single | 21 | | Sam 06 Mai 2017 08:17:01 CEST | root | timeline | timeline |
single | 22 | | Sam 06 Mai 2017 09:17:01 CEST | root | timeline | timeline |
single | 23 | | Sam 06 Mai 2017 10:17:01 CEST | root | timeline | timeline |
single | 24 | | Sam 06 Mai 2017 20:17:01 CEST | root | timeline | timeline |
single | 25 | | Son 07 Mai 2017 10:17:02 CEST | root | timeline | timeline |
single | 26 | | Son 07 Mai 2017 11:17:01 CEST | root | timeline | timeline |
single | 27 | | Son 07 Mai 2017 12:17:01 CEST | root | timeline | timeline |
single | 28 | | Son 07 Mai 2017 13:17:01 CEST | root | timeline | timeline |
Snapshots löschen
Für das Löschen der Snapshots wird der Befehl btrfs subvolume delete
verwendet. Für alle Snapshots z.B.
sudo btrfs subvolume delete /daten/.snapshot/*
Bei Verwendung von Snapper können mehrere Snapshot gleichzeit gelöscht werden:
zuvor angelegte Konfig root:
snapper -c root delete 6 28
zuvor angelegte Konfig sync:
snapper -c sync delete 1-300
(1 bis 300)
(Falls nur ein Snapshot gelöscht werden soll, einfach die jeweilige Nummer verwenden)
Disk entfernen
Bei Umbauaktionen kann das Volume jederzeit entfernt werden, vorausgesetzt es ist genügend freier Platz vorhanden
sudo btrfs device delete /dev/sda /daten
im Fehlerfall mounten
Bei einer defekten Festplatte kann das Dateisystem mit folgenden Befehl gemountet werden:
mount -o degraded,rw /dev/sda /daten
Disk ersetzen: replace ..
Als Hilfe für die Auswahl der Disk können diese mit btrfs filesystem show angezeigt werden:
sudo btrfs filesystem show
folgender Befehl ersetzt eine defekte Platte:
sudo btrfs replace start 6 /dev/sdf1 /mnt
Sollte die neue Platte grösser als die Alte sein, kann diese mit folgendem Befehl vergrößert werden:
hinzugefügte Disk vergrössern:
btrfs filesystem resize devid:max /daten
fehlende Platten von der Konfig entfernen:
sudo btrfs device delete missing /daten
Vorausgesetzt ist ist genügend Platz vorhanden, versucht der Befehl delete missing bei eingestelltem Raid alle "Single" Datenblöcke auf alle Platten zu verteilen..
root@soxn:~# sudo btrfs filesystem usage /daten
Overall:
Device size: 5.46TiB
Device allocated: 4.70TiB
Device unallocated: 772.49GiB
Device missing: 0.00B
Used: 4.18TiB
Free (estimated): 677.66GiB (min: 660.42GiB)
Data ratio: 1.91
Metadata ratio: 1.91
Global reserve: 512.00MiB (used: 0.00B)
Data,single: Size:214.00GiB, Used:211.62GiB
/dev/sdb 214.00GiB
Data,RAID1: Size:1.97TiB, Used:1.97TiB
/dev/sdb 1.97TiB
/dev/sdc 1.36TiB
missing 633.00GiB
Data,DUP: Size:269.70GiB, Used:8.44GiB
/dev/sdb 539.39GiB
Metadata,single: Size:1.00GiB, Used:153.50MiB
/dev/sdb 1.00GiB
Metadata,RAID1: Size:8.00GiB, Used:6.08GiB
/dev/sdb 8.00GiB
/dev/sdc 8.00GiB
Metadata,DUP: Size:2.00GiB, Used:976.00KiB
/dev/sdb 4.00GiB
System,single: Size:32.00MiB, Used:16.00KiB
/dev/sdb 32.00MiB
System,RAID1: Size:32.00MiB, Used:368.00KiB
/dev/sdb 32.00MiB
/dev/sdc 32.00MiB
System,DUP: Size:32.00MiB, Used:96.00KiB
/dev/sdb 64.00MiB
Unallocated:
/dev/sdb 7.00GiB
/dev/sdc 1.37TiB
missing 16.00EiB
Crontab regelmäßig den Status überprüfen
Damit der Volume-Status regelmäßig überprüft wird, habe ich ein paar Zeilen in Crontab eingetragen:
um 0:01 Uhr wöchentlich jeden Sonntag sollte ein Email mit dem Volume-Status verschickt werden:
1 0 * * 0 btrfs device stats -z /daten | mail -s "BTRFS Device Status" email@domain.dom
um 0:03 Uhr Sonntags sollte das Volume komplett überprüft werden:
3 0 * * 0 btrfs scrub start /daten
um 6:01 Uhr Sonntags sollte das Ergebnis des Scrub-Befehles per Email verschickt werden:
1 6 * * 0 btrfs scrub status /daten | mail -s "BTRFS Scrub Status" email@domain.dom
um 6:02 Uhr Sonntags dann nochmal den Status des Volume:
2 6 * * 0 btrfs device stats -z /daten | mail -s "BTRFS Device Status" boern99@gmail.com
Zusätzlich sollte der Status täglich überprüft werden und im Fehlerfall ein Scrub angestossen werden:
3 3 * * * if [ "$(btrfs device stats /daten | grep -vE ' 0$')" != "" ];then btrfs device stats -z /daten | mail -s "BTRFS Device Status" email@domain.dom;btrfs scrub start /daten;fi
Der Befehl btrfs device stats /daten enthält in der Regel Zeilen mit 0, außer es sind Fehler aufgetreten:
[/dev/sdc].write_io_errs 0
[/dev/sdc].read_io_errs 0
[/dev/sdc].flush_io_errs 0
[/dev/sdc].corruption_errs 0
[/dev/sdc].generation_errs 0
grep -vE ' 0$' sucht nach Zeilen in denen ein ander Wert als 0 steht.
Sollten also Fehler gelistet sein, werden die Befehle innerhalb der IF-Abfrage ausgeführt:
btrfs device stats -z /daten | mail -s "BTRFS Device Status" email@domain.dom;btrfs scrub start /daten
Die Ausgabe von btrfs device stats -z /daten
wird per mail verschickt und ein btrfs scrub start /daten ausgeführt ...
{{percentage}} % positiv
DANKE für deine Bewertung!
Fragen / Kommentare
(sortiert nach Bewertung / Datum) [alle Kommentare(neueste zuerst)]
User: Moritz Hallo, unter Umständen kann es erforderlich sein das Paket btrfs-tools zu installieren, da sonst der Befehl mkfs.btrfs nicht gefunden wird. Ansonsten ist es ein sehr schöner Artikel.
User: Martin BTRFS Fehler können mit folgendem Befehl angezeigt werden: sudo btrfs device status muss heißen: sudo btrfs device stats
danke, habe ich ausgebessert
Beitrag erstellt von Bernhard
User: Robert Keine Ahnung was falsch läuft, aber die fstab optionen funktionieren bei mir auf einem aktuellem Debian jessie nicht. compress wird nur mit parameter aktzeptiert (z.B. compress=zlib) und subvol=@ geht gar nicht, wie es scheint.