Erweitern / ändern Sie die Größe von RAID, wenn Sie die sichtbare Größe der Festplatten aktualisieren

10

Ich habe ursprünglich ein Software-RAID mit einem Controller erstellt, der nur 2 TB pro Festplatte adressieren konnte. Die Festplatten sind 3 TB-Festplatten. Es hat gut funktioniert, aber nur die ersten 2 TB jeder Festplatte verwendet.

Ich habe jetzt den Controller geändert, um die vollen 3 TB zu sehen. Ich möchte daher /dev/md0auch die letzten 1 TB verwenden.

Ich habe versucht:

# mdadm --grow /dev/md0 --size=max
mdadm: component size of /dev/md0 has been set to 2147479552K

Aber wie Sie sehen können, sieht es nur die 2 TB. Wenn ich versuche, es höher zu erzwingen:

# mdadm --grow /dev/md0 --size=2147483648
mdadm: Cannot set device size for /dev/md0: No space left on device

Das System kann also irgendwie erkennen, dass die Festplatten 3 TB (in /proc/partitions) groß sind , aber das RAID kann sie nicht als 3 TB anzeigen.

mdadm Details:

# mdadm --detail /dev/md0
/dev/md0:
    Version : 1.2
Creation Time : Fri Mar  2 15:14:46 2012
 Raid Level : raid6
 Array Size : 38654631936 (36863.93 GiB 39582.34 GB)
Used Dev Size : 2147479552 (2048.00 GiB 2199.02 GB)
Raid Devices : 20
Total Devices : 21
Persistence : Superblock is persistent

Update Time : Wed Apr 25 19:47:09 2012
      State : active
Active Devices : 20
Working Devices : 21
Failed Devices : 0
Spare Devices : 1

     Layout : left-symmetric
 Chunk Size : 4096K

       Name : node5:1
       UUID : 8603c3df:b740ba22:8c9c82fd:a18b3133
     Events : 845

Number   Major   Minor   RaidDevice State
  20      65       32        0      active sync   /dev/sds
   1      65       64        1      active sync   /dev/sdu
   2      65       80        2      active sync   /dev/sdv
   3      65       96        3      active sync   /dev/sdw
   4       8      192        4      active sync   /dev/sdm
   5       8       32        5      active sync   /dev/sdc
   6       8       48        6      active sync   /dev/sdd
   7       8       64        7      active sync   /dev/sde
   8       8       80        8      active sync   /dev/sdf
   9       8       96        9      active sync   /dev/sdg
  10       8      112       10      active sync   /dev/sdh
  11       8      128       11      active sync   /dev/sdi
  12       8      144       12      active sync   /dev/sdj
  13       8      160       13      active sync   /dev/sdk
  14       8      176       14      active sync   /dev/sdl
  15       8      208       15      active sync   /dev/sdn
  16       8      224       16      active sync   /dev/sdo
  17       8      240       17      active sync   /dev/sdp
  18      65        0       18      active sync   /dev/sdq
  19      65       16       19      active sync   /dev/sdr

  21      65       48        -      spare   /dev/sdt

Festplattengrößen:

# cat /proc/partitions |grep 2930266584
   8       48 2930266584 sdd
   8       32 2930266584 sdc
   8      112 2930266584 sdh
   8       96 2930266584 sdg
   8       80 2930266584 sdf
   8      128 2930266584 sdi
   8      176 2930266584 sdl
   8       64 2930266584 sde
  65       32 2930266584 sds
   8      192 2930266584 sdm
   8      144 2930266584 sdj
  65       80 2930266584 sdv
   8      224 2930266584 sdo
   8      208 2930266584 sdn
   8      160 2930266584 sdk
   8      240 2930266584 sdp
  65        0 2930266584 sdq
  65       64 2930266584 sdu
  65       16 2930266584 sdr
  65       48 2930266584 sdt
  65       96 2930266584 sdw

Bearbeiten:

# mdadm --version
mdadm - v3.1.4 - 31st August 2010
# uname -a
Linux lemaitre 3.2.0-0.bpo.1-amd64 #1 SMP Sat Feb 11 08:41:32 UTC 2012 x86_64 GNU/Linux

Das RAID6 verwendet die vollständigen Festplatten (dh keine Partitionen).

Heute Morgen ist das System abgestürzt. Nach einem Neustart fand das System das RAID nicht (was schrecklich war). Alle Festplatten wurden als Ersatzteile (S) angezeigt:

cat /proc/mdstat 
Personalities : 
md0 : inactive sdr[20](S) sds[21](S) sdq[18](S) sdp[17](S) sdo[16](S) sdn[15](S) sdl[14](S) sdk[13](S) sdj[12](S) sdi[11](S) sdh[10](S) sdg[9](S) sdf[8](S) sde[7](S) sdd[6](S) sdc[5](S) sdm[4](S) sdv[3](S) sdu[2](S) sdt[1](S)
      42949652460 blocks super 1.2

Auch hier ist klar, dass mdadmdie 3 TB Größe nicht gefunden wurde.

Ich rannte mdadm --stop /dev/md0. Der Eintrag in /etc/mdadm/mdadm.conf wurde entfernt. Ran mdadm -A --scan --force, wodurch das RAID online ging und neu erstellt wurde.

Ole Tange
quelle
Sie verwenden 20 ganze Festplatten für RAID6 - richtig? Es gibt keine Partition auf jeder Festplatte? Was fdisk -l /dev/sddzeigt? Welches Betriebssystem benutzt du, was ist die mdadm-Version?
Nils

Antworten:

5

Ich stöberte in / sys herum und kam der Antwort viel näher.

# cd /sys/block/md0/md
# cat component_size
2147479552

Das stimmt mit dem überein, was wir zuvor gesehen haben. Aber dieses:

# grep . dev-sd*/size
dev-sdc/size:2147482623
dev-sdd/size:2147482623
dev-sde/size:2147482623
dev-sdf/size:2930265560
dev-sdg/size:2147482623
dev-sdh/size:2147482623
dev-sdi/size:2147482623
dev-sdj/size:2147482623
dev-sdk/size:2147482623
dev-sdl/size:2147483648
dev-sdm/size:2147482623
dev-sdn/size:2147482623
dev-sdo/size:2147482623
dev-sdp/size:2147482623
dev-sdq/size:2147482623
dev-sdr/size:2147482623
dev-sds/size:2147482623
dev-sdt/size:2147482623
dev-sdu/size:2147482623
dev-sdv/size:2147482623
dev-sdw/size:2930265560

scheint zu erklären, warum das RAID die falsche Größe sieht: Die meisten Laufwerke werden als 2 TB angezeigt, während die 2, die ersetzt wurden, als 3 TB angezeigt werden. Alle Laufwerke sind das gleiche Modell. Lassen Sie uns also sehen, ob wir die wahrgenommene Größe ändern können:

# parallel echo 2930265560 \> ::: dev-sd*/size
# grep . dev-sd*/size
dev-sdc/size:2930265560
dev-sdd/size:2930265560
dev-sde/size:2930265560
dev-sdf/size:2930265560
dev-sdg/size:2930265560
dev-sdh/size:2930265560
dev-sdi/size:2930265560
dev-sdj/size:2930265560
dev-sdk/size:2930265560
dev-sdl/size:2930265560
dev-sdm/size:2930265560
dev-sdn/size:2930265560
dev-sdo/size:2930265560
dev-sdp/size:2930265560
dev-sdq/size:2930265560
dev-sdr/size:2930265560
dev-sds/size:2930265560
dev-sdt/size:2930265560
dev-sdu/size:2930265560
dev-sdv/size:2930265560
dev-sdw/size:2930265560

Voila. Component_size ist jedoch immer noch klein:

# cat component_size
2147479552

Vielleicht kann es von mdadm geändert werden:

# mdadm --grow /dev/md0 --size=max

Dies mdadmblockiert leider und der nachfolgende Zugriff auf / dev / md0 wird blockiert. Und so ist der Zugriff auf component_size:

# cat component_size   # This blocks

Saugt. Aber das Gute daran ist, dass im Syslog steht:

Apr 27 20:45:50 server kernel: [124731.725019] md0: detected capacity change from 39582343102464 to 54010589478912

Das Dateisystem unter / dev / md0 lief noch.

Nach einem Neustart musste ich 'mdadm --grow / dev / md0 --size = max' erneut ausführen. Warten Sie dann, bis der Vorgang resyncabgeschlossen ist. Wieder wurde der Zugriff auf / dev / md0 blockiert. Also noch ein Neustart, gefolgt von xfs_growfs /dev/md0und dann war die Größenänderung abgeschlossen.

Ole Tange
quelle
Der parallele (1) Stecker hat mir sehr gut gefallen, Ole :) Danke für die Untersuchung, habe gerade einen ähnlichen Fall getroffen.
Michael Shigorin
1
Ich denke, "mdadm --update = deviceize" würde es auch tun, siehe Manpage: "Dies veranlasst mdadm, die maximal nutzbare Menge an Speicherplatz auf jedem Gerät zu bestimmen und das relevante Feld in den Metadaten zu aktualisieren."
Rudimeier
3

Ich denke, während der Erstellung wurde die Größe des Geräts irgendwo in den Metadaten registriert. Durch Ändern des Controllers werden die Metadaten nicht geändert.

Entfernen Sie das Ersatzlaufwerk aus dem MD und fügen Sie es erneut als neues Laufwerk zum RAID-Set hinzu. Sie müssen wahrscheinlich die Metadaten entfernen (überprüfen Sie die Manpage auf --zero-superblock oder löschen Sie die gesamte Festplatte). Wenn dies für eine einzelne Festplatte funktioniert, wiederholen Sie den Vorgang auch für alle verbleibenden Laufwerke. Dann mach endlich das --wachsen.

Entfernen Sie keine zusätzlichen Festplatten, bis die Synchronisierung abgeschlossen ist !!

Jippie
quelle
Es ist mir unklar, ob Sie getestet haben, dass dies tatsächlich funktioniert. Ein Umbau dauert ca. 1,5 Tage. Das Ersetzen aller 20 Laufwerke führt zu einer Verschlechterung des Betriebs für einen ganzen Monat. Wenn Sie "Wenn das für eine einzelne Festplatte funktioniert" schreiben, wie testen Sie, ob es für die einzelne Festplatte funktioniert?
Ole Tange
Nein, ich habe dies nicht getestet, aber ich habe schon einige md-Probleme gesehen und ich habe ein Gefühl dafür, wie es funktioniert ... und schlägt fehl. Ich habe keine Laufwerke mit schlechten Metadaten, um sie zu testen. Ich bin mir der langen Synchronisierungszeit bewusst, deshalb empfehle ich, das Ersatzgerät zu verwenden. Sie haben RAID6, was bedeutet, dass 2 Laufwerke ausfallen können und Sie ein Ersatzlaufwerk haben. Das bedeutet insgesamt 3 Laufwerke, die ausfallen können, bevor Sie ein Problem haben. Sie könnten mit einem einzigen Laufwerk prüfen, zumindest wissen Sie, ob dies Ihr Problem ist. Ich habe nur begrenzte Informationen über Ihr Setup. Ziehen Sie keine Laufwerke aus Ihrem RAID-Set, wenn Sie dies nicht
möchten
Oh, ich verstehe deine Frage. mdadm warnt Sie, dass Sie versuchen, ein Gerät hinzuzufügen, das viel größer als die anderen ist. Es macht sich nichts aus ein paar Bytes, aber es warnt Sie, wenn der Unterschied relativ groß ist.
Jippie
1
Sie können failein Laufwerk, dann removees, dann zero-superblockes, um die Metadaten zu entfernen. Da Ihr RAID-Set verwendet wird, können Sie es entweder als Ersatz hinzufügen. Dies bedeutet, dass es erst synchronisiert wird, wenn ein anderes Laufwerk ausfällt (dies ist normal), aber es funktioniert nur für ein einzelnes Laufwerk ODER für Sie addund es erfordert eine Synchronisierung. Ich weiß, dass es ewig dauert. Oder Sie akzeptieren die Tatsache, dass Sie nicht den gesamten verfügbaren Speicher hinzufügen können. Einer der Vorteile der Verwendung einer Partitionstabelle, die Sie nicht hatten. Es ist nicht schlecht, keine Partitionstabelle zu verwenden, aber in diesem speziellen Fall hätte es Ihnen geholfen.
Jippie
1
Siehe meinen Kommentar oben: "mdadm warnt Sie, dass Sie versuchen, ein Gerät hinzuzufügen, das viel größer als die anderen ist."
Jippie