Agrandir / redimensionner le RAID lors de la mise à niveau de la taille visible des disques

10

J'ai à l'origine créé un RAID logiciel à l'aide d'un contrôleur qui ne pouvait traiter que 2 To par disque. Les disques sont des disques de 3 To. Cela a bien fonctionné, mais n'a utilisé que les 2 premiers To de chaque disque.

J'ai maintenant changé le contrôleur pour voir l'intégralité des 3 To. Je voudrais donc également /dev/md0utiliser les 1 derniers To.

J'ai essayé:

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

Mais comme vous pouvez le voir, il ne voit que les 2 To. Si j'essaye de le forcer plus haut:

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

Donc, d'une manière ou d'une autre, le système peut voir que les disques sont de 3 To (en /proc/partitions), mais le RAID ne peut pas les voir comme 3 To.

Détails de mdadm:

# 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

Tailles de disque:

# 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

Éditer:

# 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

Le RAID6 utilise les disques complets (c'est-à-dire pas de partitions)

Ce matin, le système s'est écrasé. Après un redémarrage, le système n'a pas trouvé le RAID (ce qui était terrible). Tous les disques sont apparus comme des pièces de rechange (S):

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

Même ici, il est clair que mdadmn'a pas trouvé la taille de 3 To.

J'ai couru mdadm --stop /dev/md0. Suppression de l'entrée dans /etc/mdadm/mdadm.conf. Ran mdadm -A --scan --force, qui a provoqué la mise en ligne et la reconstruction du RAID.

Ole Tange
la source
Vous utilisez 20 disques entiers pour RAID6 - correct? Il n'y a pas de partition sur chaque disque? Que fdisk -l /dev/sddmontre-t-on? Quel système d'exploitation utilisez-vous, quelle est la version mdadm?
Nils

Réponses:

5

J'ai fouillé / sys et me suis beaucoup plus rapproché de la réponse.

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

Cela correspond à ce que nous avons vu auparavant. Mais ça:

# 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

semble expliquer pourquoi le RAID voit la mauvaise taille: la plupart des disques apparaissent comme 2 To tandis que les 2 qui ont été remplacés apparaissent comme 3 To. Tous les disques sont du même modèle, voyons donc si nous pouvons changer la taille perçue:

# 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 est encore petit, cependant:

# cat component_size
2147479552

Peut-être que cela peut être modifié par mdadm:

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

Cela se bloque malheureusement mdadmet l'accès ultérieur à / dev / md0 est bloqué. Tout comme l'accès à component_size:

# cat component_size   # This blocks

Suce. Mais la bonne partie est que dans syslog, il est dit:

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

Le système de fichiers sur / dev / md0 fonctionnait toujours.

Après un redémarrage, j'ai dû refaire 'mdadm --grow / dev / md0 --size = max'. Attendez ensuite la resyncfin. Là encore, l'accès à / dev / md0 a été bloqué. Donc encore un autre redémarrage, suivi xfs_growfs /dev/md0puis le redimensionnement était terminé.

Ole Tange
la source
J'ai bien aimé la prise parallèle (1), Ole :) Merci pour l'enquête, venez de frapper un cas similaire.
Michael Shigorin
1
Je suppose que "mdadm --update = devicesize" le ferait aussi, voir la page de manuel: "Cela amènera mdadm à déterminer la quantité d'espace utilisable maximale sur chaque appareil et à mettre à jour le champ pertinent dans les métadonnées."
rudimeier
3

Je pense que lors de la création, la taille de l'appareil a été enregistrée quelque part dans les métadonnées. Changer le contrôleur ne change pas les métadonnées.

Retirez le disque de rechange du md, puis ajoutez-le de nouveau au jeu RAID en tant que nouveau disque. Vous devrez probablement supprimer les métadonnées (consultez la page de manuel pour --zero-superblock ou effacez le disque entier). Si cela fonctionne pour un seul disque, répétez la procédure pour tous les lecteurs restants également. Enfin, faites le --grow.

Ne retirez pas les disques supplémentaires avant la fin de la synchronisation !!

jippie
la source
Il n'est pas clair pour moi si vous avez testé que cela fonctionne réellement. Une reconstruction prend environ 1,5 jour. Le remplacement des 20 disques entraînera une dégradation de l'exécution pendant un mois complet. Lorsque vous écrivez «Si cela fonctionne pour un seul disque», comment testez-vous que cela a fonctionné pour le seul disque?
Ole Tange
Non, je n'ai pas testé cela, mais j'ai déjà vu des problèmes de md et j'ai une idée de comment cela fonctionne ... et échoue. Je n'ai pas les lecteurs avec de mauvaises métadonnées qui traînent pour le tester. Je suis conscient du long temps de synchronisation, c'est pourquoi je conseille d'utiliser le disque de rechange. Vous avez RAID6, ce qui signifie que 2 disques peuvent tomber en panne et vous avez un disque de rechange. Cela signifie un total de 3 disques qui peuvent tomber en panne avant d'avoir un problème. Vous pouvez vérifier avec un seul lecteur, au moins vous savez si c'est votre problème. Je n'ai que des informations limitées sur votre configuration. Ne tirez pas sur les disques de votre ensemble RAID si vous n'êtes pas à l'aise de le faire
jippie
Oh, je comprends votre question. mdadm vous avertira que vous essayez d'ajouter un appareil beaucoup plus grand que les autres. Cela ne vous dérange pas de quelques octets, mais il vous avertit lorsque la différence est relativement grande.
jippie
1
Vous pouvez failun lecteur, puis removeil, puis zero-superblockil pour supprimer les métadonnées. Comme votre ensemble RAID est en cours d'utilisation, vous pouvez l'ajouter en tant que pièce de rechange, ce qui signifie qu'il ne se synchronisera pas jusqu'à ce qu'un autre disque tombe en panne (c'est un comportement normal), mais il ne fonctionne que pour un seul lecteur OU vous addet cela nécessite une synchronisation. Je sais que ça prend une éternité. Ou vous acceptez le fait que vous ne pouvez pas ajouter tout le stockage disponible. L'un des avantages de l'utilisation d'une table de partition que vous n'avez pas. Ne pas utiliser une table de partition n'est pas mauvais, mais dans ce cas particulier, cela vous aurait aidé.
jippie
1
Voir mon commentaire ci-dessus: "mdadm vous avertira que vous essayez d'ajouter un appareil beaucoup plus grand que les autres."
jippie