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