Btrfs RAID1 mit mehr als 2 Platten

Datum

Ein RAID1 mir mehr als 2 Platten bietet meist nur eine höhere Ausfallsicherheit, da auf mehr Platten gespiegelt wird oder die anderen als Hotspare sofort für ein Rebuild einspringen können.

Btrfs bietet dagegen die Möglichkeit, mit dem hinzufügen von weiteren Platten den verfügbaren Speicherplatz zu vergrößern.
Hierbei bleibt trotzdem eine einfache Parität. Der Pool besitzt daher mehr Speicher als eine einzelne Platte und es kann trotzdem eine Festplatte ausfallen.

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.

Pool erstellen

Zum Erstellen des Pools reicht der normale Btrfs erstellen Befehl. Hier wurde für Meta sowie Daten jeweils raid1 genutzt.

mkfs.btrfs -L <Pool Label> -m <Metadata RAIDlevel> -d <Data RAIDlevel> <Device1> <Device2> <Device3> 

Nun kann der Pool gemounted werden.

mount /dev/disk/by-label/storage /mnt

Nachdem man nun den Mountpoint hat, kann man sich nähere Informationen zu dem Pool anzeigen lassen:

root@testsystem:~# btrfs fi usage -h /mnt/
Overall:
    Device size:                  96.00GiB
    Device allocated:              4.02GiB
    Device unallocated:           91.98GiB
    Device missing:                  0.00B
    Used:                          1.25MiB
    Free (estimated):             46.99GiB      (min: 46.99GiB)
    Data ratio:                       2.00
    Metadata ratio:                   2.00
    Global reserve:               16.00MiB      (used: 0.00B)
Data,RAID1: Size:1.00GiB, Used:512.00KiB
   /dev/vdb        1.00GiB
   /dev/vdc        1.00GiB
Metadata,RAID1: Size:1.00GiB, Used:112.00KiB
   /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       30.00GiB
   /dev/vdc       30.99GiB
   /dev/vdd       30.99GiB

h4 Speicherplatz

3×32GiB Platten im RAID1 ergeben ca 47GB Speicherplatz. Die Erklärung hierfür findet sich in den FAQ

btrfs combines all the devices into a storage pool first, and then duplicates the chunks as file data is created. RAID-1 is defined currently as „2 copies of all the data on different devices“. This differs from MD-RAID and dmraid, in that those make exactly n copies for n devices. In a btrfs RAID-1 on three 1 TB devices we get 1.5 TB of usable data. Because each block is only copied to 2 devices, writing a given block only requires exactly 2 devices to be written to; reading can be made from only one.

Daher addiert Btrfs alle Platten zu einem Pool und dubliziert dann die Daten, sodass diese weiterhin einen beliebigen Diskausfall überleben.

Füllt man den Pool mit Daten, zeigt sich auch, dass die Verteilung nicht ganz gleichmäßig stattfindet.

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 7.03GiB path /dev/vdb
        devid    2 size 32.00GiB used 6.00GiB path /dev/vdc
        devid    3 size 32.00GiB used 7.04GiB path /dev/vdd

Autor
Kategorien Dateisysteme, Btrfs

PRTG Map