btrfs raid1 verwendet nicht alle Festplatten?

btrfs raid1 verwendet nicht alle Festplatten?

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 shzeigt 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

verwandte Informationen