Btrfs RAID1 mit mehr als 2 Platten im Ausfalltest

Datum

Nachdem ich den Testaufbau eingerichtet hatte, wollte ich noch testen ob die Daten im Pool wirklich einen Festplattenausfall überstehen.

Für den Aufbau wurde Ubuntu 16.04.04 genutzt mit HWE Kernel.
Die Btrfs Version ist die 4.4, welche der aktuellen aus den Repositorys entspricht.
Die Festplatten sind 3× 32GiB virtuelle Disks im Format RAW unter Proxmox.

Dafür habe ich den Pool mit Bildern in JPEG sowie RAW gefüllt. Später wurde der Datenbestand um eine .iso erweiter.

Hash erstellen

Für jede Datei wird nun ein MD5 Hash gezogen um nach dem Ausfall zu überprüfen, ob sich die Datei geändert hat.
Die Datei mit den Hashwerten, wird unter /tmp gespeichert, damit diese sich nich selbst ein Hash verpasst. Da dieser im Anschluss in die Datei geschrieben wird und der Hash für die Datei nichtmehr passt.

find . -type f -print0 | xargs -0 md5sum > /tmp/MD5SUM

Ausfall herbeiführen

root@testsystem:~# btrfs fi show
Label: 'storage'  uuid: 2501b7ad-0bdb-427a-a969-8d07fbe67070
        Total devices 3 FS bytes used 7.53GiB
        devid    1 size 32.00GiB used 6.00GiB path /dev/vdb
        devid    2 size 32.00GiB used 6.01GiB path /dev/vdc
        devid    3 size 32.00GiB used 6.01GiB path /dev/vdd

Die Platte habe ich im laufenden Betrieb, in Proxmox von der VM detatcht.

Der Ausfall ist auch sofort sichtbar.

root@testsystem:/mnt# btrfs fi show
Label: 'storage'  uuid: 2501b7ad-0bdb-427a-a969-8d07fbe67070
        Total devices 3 FS bytes used 7.53GiB
        devid    1 size 32.00GiB used 6.00GiB path /dev/vdb
        devid    3 size 32.00GiB used 6.01GiB path /dev/vdd
        *** Some devices missing

Anscheinend werden fehlende Devices aber nicht in jedem Fenster angezeigt.

root@testsystem:/mnt# btrfs fi usage /mnt
Overall:
    Device size:                  96.00GiB
    Device allocated:             18.02GiB
    Device unallocated:           77.98GiB
    Device missing:               32.00GiB
    Used:                         15.06GiB
    Free (estimated):             39.47GiB      (min: 39.47GiB)
    Data ratio:                       2.00
    Metadata ratio:                   2.00
    Global reserve:               16.00MiB      (used: 0.00B)
Data,RAID1: Size:8.00GiB, Used:7.52GiB
   /dev/vdb        5.00GiB
   /dev/vdc        6.00GiB
   /dev/vdd        5.00GiB
Metadata,RAID1: Size:1.00GiB, Used:8.69MiB
   /dev/vdb        1.00GiB
   /dev/vdd        1.00GiB
System,RAID1: Size:8.00MiB, Used:16.00KiB
   /dev/vdc        8.00MiB
   /dev/vdd        8.00MiB
Unallocated:
   /dev/vdb       26.00GiB
   /dev/vdc       25.99GiB
   /dev/vdd       25.99GiB

Um den Fall noch realistischer zu gestalten, kommen zu dem Pool aber noch Dateien hinzu. Im produktiven Einsatz kommen auch neue Dateien hinzu, ehe die defekte Platte ausgetauscht werden konnte.

Hier wurde ein Hash erzeugt, bevor die Datei auf den Pool geladen wurde.

md5sum <Datei> > MD5SUM

Nach der Übertragung der erste Vergleich.

vorher: 6cb5a4144f81cc6308a4e7c64c2d3eeb
nachher: 6cb5a4144f81cc6308a4e7c64c2d3eeb

Das Speichern von einer Datei auf dem degraded Pool sorgt schonmal für keine Schwierigkeiten.

Um die Sache noch etwas interessanter zu gestalten wurde die Maschine noch hart ausgeschalten um zb. einen Fehler in der Stromversorgung zu simulieren.

Gleichzeitig nutze ich die Downtime um der VM die neue Platte mit zugeben.

Plattenaustausch

Nachdem die Maschine wieder gestartet ist, wurde die fehlende Platte durch eine neue ersetzt. Diese besitzt eine Größe von 60GiB, um den Fall zu testen, dass keine kleineren Festplatten mehr greifbar sind.

Durch den Neustart der Maschine ist die Platte, welche ehemals vdd war, nun vdc. Die nach dem Start eingehangene 60GiB Festplatte wird nun als vdd adressiert.

Btrfs scheint dieses Wechselspiel nicht zu stören. Da die Platten über eine Sub-UUID, welche von Btrfs vergeben wird, adressiert werden.

/dev/vdb: LABEL="storage" UUID="2501b7ad-0bdb-427a-a969-8d07fbe67070" UUID_SUB="7303d213-b68c-4d03-be31-1cf10e23522e" TYPE="btrfs"
/dev/vdc: LABEL="storage" UUID="2501b7ad-0bdb-427a-a969-8d07fbe67070" UUID_SUB="ed217b2f-55a5-4aa6-bbba-83458f328ef9" TYPE="btrfs"
root@testsystem:/mnt# lsblk
NAME                      MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
vdd                       252:48   0   60G  0 disk
vdb                       252:16   0   32G  0 disk /mnt
sr0                        11:0    1  829M  0 rom
vdc                       252:32   0   32G  0 disk
vda                       252:0    0   32G  0 disk
├─vda2                    252:2    0    1K  0 part
├─vda5                    252:5    0 31.5G  0 part
│ ├─testsystem--vg-swap_1 253:1    0    2G  0 lvm  [SWAP]
│ └─testsystem--vg-root   253:0    0 29.5G  0 lvm  /
└─vda1                    252:1    0  487M  0 part /boot

Die fehlende Festplatte konnte nun einfach ausgetauscht werden.

Die Übersicht sieht hiernach auch wieder sauber aus. Wenn auch nicht ganz synchron verteilt.

root@testsystem:~# btrfs fi show
Label: 'storage'  uuid: 2501b7ad-0bdb-427a-a969-8d07fbe67070
        Total devices 3 FS bytes used 8.04GiB
        devid    1 size 32.00GiB used 6.03GiB path /dev/vdb
        devid    2 size 32.00GiB used 7.03GiB path /dev/vdc
        devid    3 size 32.00GiB used 7.00GiB path /dev/vdd

Hash Auswertung

Die beiden Dateien vor und nach dem Test sind bis darauf, dass die eine Datei hinzugekommen ist, identisch.
Da sich die Hashwerte nicht verändert haben, dürften die Daten auch nichts an Intigrität verloren haben.

Autor
Kategorien Dateisysteme, Btrfs

PRTG Map