Einstieg in BTRFS (cont'd)

Dies ist eine Fortsetzung eines BTRFS Artikels, bitte lesen Sie diesen zuerst.

Disk in einem Raid5 austauschen

[[email protected] ~]# btrfs fi show
warning, device 3 is missing  
warning devid 3 not found already  
Check tree block failed, want=11446321152, have=65536  
Check tree block failed, want=11446321152, have=65536  
read block failed check_tree_block  
Couldnt setup csum tree  
Label: none uuid: a9f0df1b-25d0-4883-9e0e-117d1c48194e  
    Total devices 3 FS bytes used 486.11MiB
    devid 1 size 8.00GiB used 1.16GiB path /dev/sdb
    devid 2 size 8.00GiB used 1.16GiB path /dev/sdc
    *** Some devices missing

Btrfs v3.17  
[[email protected] ~]# 

Sieht nicht ganz so gut aus, es warnt uns, dass Device 3 fehlt und dass es nicht gefunden werden wurde. Auch das er den Check-Tree-Block nicht lesen konnte, kein Wunder. Probieren wir es trotzdem zu mounten.

[[email protected] ~]# mount -v /dev/sdb /btrfs_mountpoint
mount: Falscher Dateisystemtyp, ungültige Optionen, der  
Superblock von /dev/sdb ist beschädigt, fehlende  
Kodierungsseite oder ein anderer Fehler

 Manchmal liefert das Systemprotokoll wertvolle Informationen –
 versuchen Sie dmesg | tail oder ähnlich
[[email protected] ~]#

Wir müssen das beschädigte Filesystem mit einer degraded Option mounten:

[[email protected] ~]# mount -v -o degraded /dev/sdb /btrfs_mountpoint/
mount: /btrfs_mountpoint enthält keine SELinux-Labels.  
 Sie haben gerade auf einem SELinux-Rechner ein Dateisystem eingehängt,
 das Labels unterstützt, aber keine enthält. Es ist wahrscheinlich, dass
 Anwendungen mit entsprechenden Einschränkungen AVC-Meldungen erzeugen und
 den Zugriff auf dieses Dateisystem verweigern. Weitere Details hierzu
 finden Sie in restorecon(8) und mount(8).
mount: /dev/sdb ist auf /btrfs_mountpoint eingehängt.  
[[email protected] ~]#

Die SE-Linux Label Warnung können wir ignorieren. Falls du trotzdem genaueres wissen willst, hier ist eine gute Quelle

Nun sehen wir nach ob es wirklich geklappt hat:

[[email protected] ~]# df -h
Dateisystem Größe Benutzt Verf. Verw% Eingehängt auf  
/dev/mapper/fedora--server-root 6,5G 1,1G 5,1G 18% /
devtmpfs 475M 0 475M 0% /dev  
tmpfs 485M 0 485M 0% /dev/shm  
tmpfs 485M 324K 485M 1% /run  
tmpfs 485M 0 485M 0% /sys/fs/cgroup  
tmpfs 485M 4,0K 485M 1% /tmp  
/dev/sda1 477M 90M 358M 21% /boot
tmpfs 97M 0 97M 0% /run/user/0  
/dev/sdb 24G 503M 16G 4% /btrfs_mountpoint
[[email protected] ~]# 

und auf dem Filesystem befinden sich noch die Daten:

[[email protected] ~]# cd /btrfs_mountpoint/
[[email protected] btrfs_mountpoint]# ls
Backup.img Large-File.bin  
[[email protected] btrfs_mountpoint]# 

Jetzt müssen wir nur noch die kaputte oder abwesende HDD wieder anbinden oder austauschen: Dazu fügen wir eine neue Disk zu dem Pool hinzu:

[[email protected] btrfs_mountpoint]# btrfs device add -f /dev/sdd /btrfs_mountpoint
[[email protected] btrfs_mountpoint]# 

einen Rebalance ausführen:

[[email protected] btrfs_mountpoint]# btrfs balance start -ddevid=3 -mdevid=3 -v .
Dumping filters: flags 0x7, state 0x0, force is off  
 DATA (flags 0x4): balancing, devid=3
 METADATA (flags 0x4): balancing, devid=3
 SYSTEM (flags 0x4): balancing, devid=3
Done, had to relocate 3 out of 3 chunks  
[[email protected] btrfs_mountpoint]# btrfs fi show
Label: none uuid: a9f0df1b-25d0-4883-9e0e-117d1c48194e  
    Total devices 4 FS bytes used 486.59MiB
    devid 1 size 8.00GiB used 1.16GiB path /dev/sdb
    devid 2 size 8.00GiB used 1.16GiB path /dev/sdc
    devid 4 size 8.00GiB used 1.16GiB path /dev/sdd
    *** Some devices missing

warning devid 3 not found already  
Btrfs v3.17  
[[email protected] btrfs_mountpoint]# btrfs balance status

und das fehlende Device löschen:

[[email protected] btrfs_mountpoint]# btrfs device delete missing .
[[email protected] btrfs_mountpoint]# btrfs fi show
Label: none uuid: a9f0df1b-25d0-4883-9e0e-117d1c48194e  
    Total devices 3 FS bytes used 486.09MiB
    devid 1 size 8.00GiB used 1.16GiB path /dev/sdb
    devid 2 size 8.00GiB used 1.16GiB path /dev/sdc
    devid 4 size 8.00GiB used 1.16GiB path /dev/sdd

Btrfs v3.17  
[[email protected] btrfs_mountpoint]# 

und alles sieht super aus 😉

Raid 5 erweitern

Ich gehe davon aus, dass Sie mit diesem Artikel mittgelert haben, deshalb kürze ich mal einiges ab:

Device hinzufügen:

[[email protected] btrfs_mountpoint]# btrfs device add /dev/sde /btrfs_mountpoint/
[[email protected] btrfs_mountpoint]# btrfs fi show
Label: none uuid: a9f0df1b-25d0-4883-9e0e-117d1c48194e  
    Total devices 4 FS bytes used 486.09MiB
    devid 1 size 8.00GiB used 1.16GiB path /dev/sdb
    devid 2 size 8.00GiB used 1.16GiB path /dev/sdc
    devid 4 size 8.00GiB used 1.16GiB path /dev/sdd
    devid 5 size 8.00GiB used 0.00B path /dev/sde

Btrfs v3.17  
[email protected] btrfs_mountpoint]# btrfs balance /btrfs_mountpoint/  
Done, had to relocate 3 out of 3 chunks  
[[email protected] btrfs_mountpoint]# 

und wir führen einen balance aus, um die Daten besser neu zu verteilen:

[[email protected] btrfs_mountpoint]# btrfs fi show
Label: none uuid: a9f0df1b-25d0-4883-9e0e-117d1c48194e  
    Total devices 4 FS bytes used 486.36MiB
[[email protected] btrfs_mountpoint]# 
    devid 2 size 8.00GiB used 1.12GiB path /dev/sdc
    devid 4 size 8.00GiB used 1.12GiB path /dev/sdd
    devid 5 size 8.00GiB used 1.12GiB path /dev/sde

Btrfs v3.17  

Somit haben wir ein Raid5 erweitert. Ein balance ist eine sehr sehr teure operation und wir Ihre HDDs oder SSDs sehr beanspruchen.

BTRFS Snapshots

Einen Snapshot zu erstellen geht bei einem Copy on Wirte System sehr schnell - Instantan um genau zu sein:

btrfs subvolume snapshot /path/to/subvolume /path/to/subvolume/snapshot_name  

um bei einem Notfall auf den Snapshot zugreifen zu können kannst du den Snapshot mit der Option -o subvol=<snapshot name> oder -o subvolid=<snapshotid> die Snapshot ID findest du mittels btrfs subvolume list /path/to/subvolume

BTFS Gotchas / Probleme:

Hier die Gotchas - die Hauptprobleme sind immer noch, dass der Algorithmus immer noch die Platten in manchen Fällen zumüllen. Speziell bei Firefox, Chromium, Gnome und meinem Apache Log fällt es sehr auf. Auch bei VirtualMachine Images kann es auch sehr gehäuft auftreten. Raid5/6 sind noch nicht voll implementiert. In seltenen Fällen kann beim hinzufügen oder neu mounten ein Datenverlust auftreten.

Benchmarks:

Ich konnte leider keinen Benchmark noch selbst erstellen und testen, aber es steht auf meiner ToDo Liste. Aber Michael Larabel hat einen guten Benchmark auf Phoronix gepostet. Link