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,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 ???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 ...

 

 

 

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

DANKE f√ľr deine Bewertung!

Aktualisiert: 27.07.2020 von Bernhard |ūüĒĒ


Top-Artikel in diesem Bereich


Linux Command: Neustart: Reboot oder Herunterfahren: Shutdown

Wie die gängigen Linux-Versionen ausgeschaltet oder neu gestartet werden können: Wer sich einmal auf die Linux Konsole eines Servers, PC, Tablet, Fernseher, Mediaplayer, Radio, Router oder eines anderen Gerätes auf Linux Basis verirrt, kann das System meist mit dem "reboot" Befehl neu starten.


Linux Terminal Befehle Liste - √úbersicht: Konsole

√úbersicht √ľber Linux Befehle und


Linux Ordner verwendeter Speicherplatz - Bash TreeSize

Um herauszufinden, welcher Ordner wie viel Platz ben√∂tigt, kann in Debian der Befehl ‚Äědu‚Äú verwendet werden. F√ľr einen noch besseren √úberblick gibt es das Commandline-Tool ncdu, welches √§hnlich TreeSize alle Ordner analysieren kann.


Fragen / Kommentare


(sortiert nach Bewertung / Datum) [alle Kommentare(neueste zuerst)]

‚úćanonym
08.05.2020 17:55
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
21.07.2019 11:50
User: Martin 
BTRFS Fehler können mit folgendem Befehl angezeigt werden:

sudo btrfs device status

muss heißen: sudo btrfs device stats
↳
‚úćBernhard
gepostet am 21.07.2019 11:50
danke, habe ich ausgebessert

Beitrag erstellt von Bernhard

‚úćanonym
02.08.2016 19:55
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