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. 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,subvol=@,compress,autodefrag 0 1

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

 

 

 

positive Bewertung({{pro_count}})
Beitrag bewerten:
{{percentage}} % positiv
negative Bewertung({{con_count}})

DANKE für deine Bewertung!


veröffentlicht am 28.09.2015 von Bernhard
geändert am 27.07.2020 von Bernhard



Kommentare


(sortiert nach Bewertung / Datum) [alle Kommentare(neueste zuerst)]
✍anonym
erstellt am 08.05.2020 19:05
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.

✍anonym
erstellt am 21.07.2019 13:07
User: Martin 
BTRFS Fehler können mit folgendem Befehl angezeigt werden:

sudo btrfs device status

muss heißen: sudo btrfs device stats
✍Bernhard
erstellt am 21.07.2019 13:07
danke, habe ich ausgebessert

erstellt von Bernhard

✍anonym
erstellt am 02.08.2016 21:08
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.

Durch die weitere Nutzung der Seite stimmst du der Verwendung von Cookies zu. Mehr Details