Ich habe ein Btrfs-Raid1 mit 3 Festplatten auf Ubuntu 16.04. Es scheint jedoch, dass nur 2 statt aller 3 Festplatten verwendet werden. Wie kann ich das beheben?
root@one:~# btrfs fi sh
Label: none uuid: 3880b9fa-0824-4ffe-8f61-893a104f3567
Total devices 3 FS bytes used 54.77GiB
devid 1 size 2.73TiB used 56.03GiB path /dev/sda2
devid 2 size 2.73TiB used 56.03GiB path /dev/sdc2
devid 3 size 2.59TiB used 0.00B path /dev/sdb3
Ich habe versucht, einen Konvertierungsfilter auszuführen, aber /dev/sdb3 wird immer noch nicht verwendet.
root@one:~# btrfs balance start -dconvert=raid1 -mconvert=raid1 /top/raid/
Done, had to relocate 112 out of 112 chunks
root@one:~# btrfs fi df /top/raid/
Data, RAID1: total=55.00GiB, used=54.40GiB
System, RAID1: total=32.00MiB, used=16.00KiB
Metadata, RAID1: total=1.00GiB, used=373.06MiB
GlobalReserve, single: total=128.00MiB, used=0.00B
Während der Installation des Ubuntu-Servers gibt es zunächst nur 1 Festplatte. Dann habe ich eine Festplatte hinzugefügt und in RAID 1 konvertiert. Dann habe ich eine dritte Festplatte /dev/sdb3 hinzugefügt und erneut versucht, auszugleichen. Die dritte Festplatte wird nicht verwendet.
root@one:~# btrfs --version
btrfs-progs v4.4
Ich kann /dev/sdb3 problemlos mounten.
root@one:~# mount /dev/sdb3 /mnt
root@one:~# ll /mnt
total 16
drwxr-xr-x 1 root root 74 Apr 13 09:37 ./
drwxr-xr-x 1 root root 200 Apr 12 21:19 ../
drwxr-xr-x 1 root root 200 Apr 12 21:19 @/
drwxr-xr-x 1 root root 152 Apr 12 15:31 @home/
drwxrwx--t 1 root root 36 Apr 13 09:38 @samba/
root@one:~# btr fi sh
Label: none uuid: 3880b9fa-0824-4ffe-8f61-893a104f3567
Total devices 3 FS bytes used 54.82GiB
devid 1 size 2.73TiB used 56.03GiB path /dev/sda2
devid 2 size 2.73TiB used 56.03GiB path /dev/sdc2
devid 3 size 2.59TiB used 0.00B path /dev/sdb3
Antwort1
BEARBEITEN:
Beachten Sie dasHäufig gestellte Fragen zu btrfsbesagt Folgendes, wie von @jeff-schaller kommentiert (Hervorhebung von mir):
btrfs unterstützt RAID-0, RAID-1 und RAID-10. Ab Linux 3.9 unterstützt btrfs auch RAID-5 und RAID-6, obwohl dieser Code noch experimentell ist.
btrfs kombiniert zunächst alle Geräte zu einem Speicherpool und dupliziert dann die Blöcke, wenn Dateidaten erstellt werden. RAID-1 ist derzeit definiert als „2 Kopien aller Daten auf verschiedenen Geräten". Dies unterscheidet sich von MD-RAID und dmraid, da diese genau n Kopien für n Geräte erstellen. In einem btrfs RAID-1 aufdrei 1 TB-Geräte erhalten wir 1,5 TB nutzbare Daten. Weiljeder Block wird nur auf 2 Geräte kopiert, zum Schreiben eines bestimmten Blocks sind nur genau 2 Geräte erforderlich; zum Lesen ist nur eines möglich.
RAID-0 ist ähnlich definiert, wobei der Streifen auf so viele Geräte wie möglich aufgeteilt wird. 3 × 1 TB-Geräte ergeben 3 TB nutzbaren Speicherplatz, bieten aber keinerlei Redundanz.
RAID-10 basiert auf diesen Definitionen. Jeder Streifen wird auf genau 2 RAID-1-Sätze aufgeteilt und diese RAID-1-Sätze werden auf genau 2 Geräte geschrieben (also mindestens 4 Geräte). Ein btrfs RAID-10-Volume mit 6 × 1 TB-Geräten ergibt 3 TB nutzbaren Speicherplatz mit 2 Kopien aller Daten.
Ich habe im Moment keine ausreichend großen Laufwerke zur Hand, um dies zu testen, aber ich vermute einfach, dass btrfs, da Sie relativ große Laufwerke haben, die Daten bisher einfach auf die ersten beiden Laufwerke geschrieben hat. Ich gehe davon aus, dass sich dies in Zukunft ändern wird, wenn mehr Daten auf die Laufwerke geschrieben werden.
Falls Dich meine Tests mit kleineren Laufwerken interessieren:
Ich habe Ubuntu Server 16.04 LTS in einer VM mit einem einzelnen SATA-Laufwerk installiert und das Betriebssystem auf einer einzelnen Btrfs-Partition installiert.
Dann habe ich ein weiteres SATA-Laufwerk hinzugefügt, es partitioniert, ausgeführt btrfs device add /dev/sdb1 /
und dann ausgeglichen, während ich es in raid1 konvertiert habe mitbtrfs balance start -dconvert=raid1 -mconvert=raid1 /
Ich habe es für das Gerät /dev/sdc1 wiederholt. Das Ergebnis ist für mich dasselbe – ich habe ein Btrfs, das sich über drei Laufwerke erstreckt. Ich habe auch eine 2-GiB-Datei falsch zugeordnet und sie war tatsächlich von allen drei Laufwerken aus zugänglich. Mein btrfs fi sh
zeigt Folgendes:
Label: none uuid: cdfe192c-36da-4a3c-bc1a-74137abbb190
Total devices 3 FS bytes used 3.07GiB
devid 1 size 10.00GiB used 5.25GiB path /dev/sda1
devid 2 size 10.00GiB used 5.03GiB path /dev/sdb1
devid 3 size 8.00GiB used 2.28GiB path /dev/sdc1
Wie haben Sie mkfs.btrfs aufgerufen? Was ist Ihre btrfs-progs-Version?
# btrfs --version
btrfs-progs v4.4
Ich kann Ihre Situation nicht reproduzieren. Was passiert, wenn Sie versuchen, /dev/sdb3 zu mounten?
Wenn Sie über eine virtuelle Maschine oder eine Ersatzfestplatte zum Partitionieren verfügen, erstellen Sie drei Partitionen und versuchen Sie Folgendes.
Ich habe eine Ubuntu 16.04-VM erstellt und /dev/vda in drei Partitionen mit jeweils 2 GiB partitioniert.
# mkfs.btrfs -d raid1 -m raid1 /dev/vda{1..3}
Label: (null)
UUID: 0d6278f7-8830-4a73-a72f-0069cc560aaf
Node size: 16384
Sector size: 4096
Filesystem size: 6.00GiB
Block group profiles:
Data: RAID1 315.12MiB
Metadata: RAID1 315.12MiB
System: RAID1 12.00MiB
SSD detected: no
Incompat features: extref, skinny-metadata
Number of devices: 3
Devices:
ID SIZE PATH
1 2.00GiB /dev/vda1
2 2.00GiB /dev/vda2
3 2.00GiB /dev/vda3
# btrfs fi sh
Label: none uuid: 0d6278f7-8830-4a73-a72f-0069cc560aaf
Total devices 3 FS bytes used 112.00KiB
devid 1 size 2.00GiB used 614.25MiB path /dev/vda1
devid 2 size 2.00GiB used 315.12MiB path /dev/vda2
devid 3 size 2.00GiB used 315.12MiB path /dev/vda3
Versuchen Sie, /dev/vda1 zu mounten, eine Datei dorthin zu schreiben und dann stattdessen /dev/vda2 oder /dev/vda3 zu mounten und zu prüfen, ob die Datei da ist (das sollte sie auf jeden Fall sein).
PS: Ich habe dies zuerst auf Arch mit btrfs-progs Version 4.10.2 mit den gleichen Ergebnissen versucht, dachte aber, dass Ubuntu 16.04 wahrscheinlich mit einer älteren Version ausgeliefert wird, die sich möglicherweise anders verhält. Es stellte sich heraus, dass es mit v4.4 ausgeliefert wird, aber es scheint sich in Bezug auf die Erstellung und Spiegelung von Dateisystemen usw. gleich zu verhalten.
Antwort2
Das Volume verwendet jetzt alle Festplatten. Ich denke, Rabbans Spekulation dürfte richtig sein. Da die ersten beiden Festplatten größer sind als die dritte, „hat BTRFS die Daten bisher einfach auf die ersten beiden Laufwerke geschrieben“.
root@one:~# btrfs fi sh
Label: none uuid: 3880b9fa-0824-4ffe-8f61-893a104f3567
Total devices 3 FS bytes used 151.00GiB
devid 1 size 2.73TiB used 148.03GiB path /dev/sda2
devid 2 size 2.73TiB used 148.03GiB path /dev/sdc2
devid 3 size 2.59TiB used 8.00GiB path /dev/sdb3
root@one:~# btrfs dev usage /
/dev/sda2, ID: 1
Device size: 2.73TiB
Data,RAID1: 147.00GiB
Metadata,RAID1: 1.00GiB
System,RAID1: 32.00MiB
Unallocated: 2.58TiB
/dev/sdb3, ID: 3
Device size: 2.59TiB
Data,RAID1: 8.00GiB
Unallocated: 2.58TiB
/dev/sdc2, ID: 2
Device size: 2.73TiB
Data,RAID1: 147.00GiB
Metadata,RAID1: 1.00GiB
System,RAID1: 32.00MiB
Unallocated: 2.58TiB