Aumenta / ridimensiona RAID quando aggiorni le dimensioni visibili dei dischi


10

Inizialmente ho creato un RAID software utilizzando un controller in grado di indirizzare solo 2 TB per disco. I dischi sono dischi da 3 TB. Funzionava bene, ma utilizzava solo i primi 2 TB di ciascun disco.

Ora ho cambiato il controller per vedere i 3 TB completi. Vorrei quindi /dev/md0utilizzare anche l'ultimo 1 TB.

Ho provato:

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

Ma come puoi vedere vede solo i 2 TB. Se provo a forzarlo più in alto:

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

Quindi in qualche modo il sistema può vedere i dischi sono 3 TB (in /proc/partitions), ma il RAID non può vederli come 3 TB.

Dettagli 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

Dimensioni del disco:

# 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

Modificare:

# 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

RAID6 utilizza i dischi completi (ovvero nessuna partizione)

Questa mattina il sistema si è bloccato. Dopo un riavvio il sistema non ha trovato il RAID (che era terribile). Tutti i dischi vengono visualizzati come pezzi di ricambio (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

Anche qui è chiaro che mdadmnon è stata trovata la dimensione di 3 TB.

Ho corso mdadm --stop /dev/md0. Rimossa la voce in /etc/mdadm/mdadm.conf. Ha funzionato mdadm -A --scan --force, il che ha reso il RAID online e ricostruito.


Stai usando 20 dischi interi per RAID6 - giusto? Non c'è partizione su ogni disco? Cosa fdisk -l /dev/sddmostra? Quale sistema operativo stai usando, qual è la versione mdadm?
Nils,

Risposte:


5

Ho dato un'occhiata / sys e mi sono avvicinato molto alla risposta.

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

Ciò concorda con ciò che abbiamo visto prima. Ma questo:

# 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

sembra spiegare perché il RAID vede la dimensione sbagliata: la maggior parte delle unità si presenta come 2 TB mentre i 2 che sono stati sostituiti si presentano come 3 TB. Tutte le unità sono dello stesso modello, quindi vediamo se possiamo modificare le dimensioni percepite:

# 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

Ecco. Component_size è ancora piccolo, sebbene:

# cat component_size
2147479552

Forse può essere cambiato da mdadm:

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

Questo purtroppo si blocca mdadme l'accesso successivo a / dev / md0 viene bloccato. E così è l'accesso a component_size:

# cat component_size   # This blocks

Fa schifo. Ma la parte buona è che in syslog dice:

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

Il filesystem su / dev / md0 era ancora in esecuzione.

Dopo un riavvio ho dovuto ripetere di nuovo 'mdadm --grow / dev / md0 --size = max'. Quindi attendere il resynccompletamento. Anche in questo caso l'accesso a / dev / md0 è stato bloccato. Quindi ancora un altro riavvio, seguito da xfs_growfs /dev/md0e quindi il ridimensionamento è stato completato.


Mi è piaciuto molto il plug parallelo (1), Ole :) Grazie per l'indagine, ho appena colpito un caso simile.
Michael Shigorin,

1
Immagino che "mdadm --update = devicesize" lo farebbe anche, vedi la pagina man: "Questo farà sì che mdadm determini la massima quantità di spazio utilizzabile su ciascun dispositivo e aggiorni il campo pertinente nei metadati".
Rudimeier

3

Penso che durante la creazione la dimensione del dispositivo sia stata registrata da qualche parte nei metadati. La modifica del controller non modifica i metadati.

Rimuovere il pezzo di ricambio da md, quindi aggiungerlo nuovamente al set RAID come nuova unità. Probabilmente devi rimuovere i metadati (controlla la pagina man per --zero-superblock o cancella l'intero disco). Se funziona per un singolo disco, ripetere la procedura anche per tutte le unità rimanenti. Quindi infine esegui --grow.

Non rimuovere dischi aggiuntivi fino al termine della sincronizzazione !!


Non mi è chiaro se hai testato che questo funziona davvero. Una ricostruzione richiede circa 1,5 giorni. La sostituzione di tutte e 20 le unità causa un degrado della durata di un mese intero. Quando scrivi "Se funziona per un singolo disco" come fai a provare che ha funzionato per il singolo disco?
Ole Tange,

No, non l'ho ancora testato, ma ho già visto alcuni problemi di md e ho la sensazione di come funziona ... e fallisce. Non ho le unità con metadati danneggiati in giro per testarlo. Sono consapevole del lungo tempo di sincronizzazione, ecco perché consiglio di utilizzare il ricambio. Hai RAID6, il che significa che 2 unità possono guastarsi e ne hai una di riserva. Ciò significa un totale di 3 unità che possono fallire prima di avere un problema. Puoi verificare con una singola unità, almeno sai se questo è il tuo problema. Ho solo informazioni limitate sulla tua configurazione. Non estrarre le unità dal tuo set RAID se non ti senti a tuo agio
jippie il

Oh, capisco la tua domanda. mdadm ti avvertirà che stai cercando di aggiungere un dispositivo molto più grande degli altri. Non si preoccupa di pochi byte, ma ti avverte quando la differenza è relativamente grande.
jippie,

1
È possibile failun'unità, quindi remove, quindi zero-superblockper rimuovere i metadati. Poiché il tuo set RAID è in uso, puoi aggiungerlo come ricambio, il che significa che non si sincronizzerà fino a quando un'altra unità si guasta (che è un comportamento normale) ma funziona solo per una singola unità OPPURE tu adde richiede una sincronizzazione. So che ci vuole un'eternità. Oppure si accetta il fatto che non è possibile aggiungere tutto lo spazio di archiviazione disponibile. Uno dei vantaggi dell'utilizzo di una tabella delle partizioni che non è stata eseguita. Non usare una tabella delle partizioni non è male, ma in questo caso particolare ti avrebbe aiutato.
jippie,

1
Vedi il mio commento sopra: "mdadm ti avvertirà che stai cercando di aggiungere un dispositivo che è molto più grande degli altri."
jippie,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.