Come sostituire in modo sicuro un disco non ancora guasto in un array RAID5 Linux?


26

Ho un array RAID5 software (Linux md) su 4 dischi.

Vorrei sostituire uno dei dischi con uno nuovo, senza mettere l'array in uno stato degradato e, se possibile, online. Come sarebbe possibile?

È importante perché non voglio:

  • correre il rischio di stressare gli altri dischi in modo che uno possa bloccarsi durante la ricostruzione,
  • correre il rischio di trovarmi in uno "stato di non parità", quindi non ho una rete di sicurezza da un po 'di tempo.

Suppongo che farlo online sia troppo chiedendo e dovrei semplicemente copiare ( dd) i dati del vecchio disco nel nuovo disco offline e poi sostituirli, ma penso che sia teoricamente possibile ...

Un po 'di contesto : quei dischi girano quasi continuamente da oltre 5,5 anni. Funzionano ancora perfettamente per il momento e tutti superano il (lungo) autotest SMART. Tuttavia, ho motivi per pensare che uno di quei 4 dischi non durerà più a lungo (supposto fallimento predittivo).

Risposte:


36

Usare mdadm 3.3

Da mdadm3.3 (rilasciato il 2013, 3 settembre), se si dispone di un kernel 3.2+ , è possibile procedere come segue:

# mdadm /dev/md0 --add /dev/sdc1
# mdadm /dev/md0 --replace /dev/sdd1 --with /dev/sdc1

sdd1è il dispositivo che si desidera sostituire, sdc1è il dispositivo preferito per farlo e deve essere dichiarato di riserva sull'array.

L' --withopzione è facoltativa, se non specificata, verranno utilizzati tutti i pezzi di ricambio disponibili.

Versione mdadm precedente

Nota: è ancora necessario un kernel 3.2+ .

Innanzitutto, aggiungi una nuova unità come riserva (sostituisci md0e sdc1con il tuo RAID e dispositivo disco, rispettivamente):

# mdadm /dev/md0 --add /dev/sdc1

Quindi, avvia un'operazione di sostituzione copia come questa ( sdd1essendo il dispositivo in errore):

# echo want_replacement > /sys/block/md0/md/dev-sdd1/state 

Risultato

Il sistema copierà tutti i blocchi leggibili da sdd1a sdc1. Se si tratta di un blocco illeggibile, lo ricostruirà dalla parità. Una volta completata l'operazione, la precedente unità di riserva (qui sdc1:) diventerà attiva e l'unità guasta verrà contrassegnata come guasta (F) in modo da poterla rimuovere.

Nota: il merito va a frostschutz e Ansgar Esztermann che hanno trovato la soluzione originale (vedere la domanda duplicata ).

Gherigli più vecchi

Altre risposte suggeriscono:

  • L' approccio di Johnny : convertire l'array in RAID6, "sostituire" il disco, quindi tornare a RAID5,
  • L' approccio di Hauke ​​Laging : rimuovere brevemente il disco dall'array RAID5, renderlo parte di un RAID1 (mirror) con il nuovo disco e aggiungere quell'unità mirror all'array RAID5 (teorico) ...

2
mdadm --addè ancora necessario prima --replacefunzionerà. ( mdadm3.3, Ubuntu 15.10). Se esegui le operazioni --addsuccessive --replace, la copia inizierà non appena viene aggiunto un pezzo di ricambio. (Il dispositivo rimane contrassegnato come "in sostituzione").
Peter Cordes,

3

Questo potrebbe essere possibile soddisfare i requisiti

  1. in linea
  2. non sollecitare alcun disco tranne quello che deve essere sostituito

Ma anche se i seguenti potrebbero funzionare, probabilmente non troverai alcuna raccomandazione del genere "nei libri" ...

Idea:

  1. Porta il disco OLD fuori dall'array (per un breve momento): mdadm --manage /dev/raid5 --fail /dev/OLD
  2. Crea un nuovo dispositivo md (RAID-1) dai dischi VECCHIO e NUOVO: mdadm --build /dev/md42 --level=mirror --raid-devices=2 /dev/OLD /dev/NEW
  3. Metti il ​​RAID-1 nell'array (invece di / dev / OLD): mdadm --manage /dev/raid5 --re-add /dev/md42

Cosa dovrebbe :-) accadere:

  1. Il RAID-5 sincronizza / dev / md42. Questo non dovrebbe richiedere molto tempo.
  2. Il RAID-5 è normalmente nuovamente operativo (ma più lento).
  3. / dev / NEW è sincronizzato con / dev / OLD.

Guarda l'avanzamento della sincronizzazione ( cat /proc/mdstato mdadm --monitor). Al termine della sincronizzazione, estrarre RAID-1 da RAID-5, arrestare RAID-1, aggiungere nuovamente / dev / NEW a RAID-5. Se tutto va bene, sovrascrivi i superblocchi mdraid su / dev / OLD per evitare problemi:mdadm --zero-superblock

Avvertenza: la sincronizzazione RAID-5 veloce può funzionare solo se si utilizza una bitmap. Se non ne hai uno, fai prima un test con un RAID-5 fittizio (senza bitmap). O aggiungine uno. Almeno aggiungerne uno esterno dovrebbe essere possibile. Altrimenti potrebbe essere necessario arrestare il RAID-5 prima di cambiare i dispositivi. Se si avvia da RAID-5, questo potrebbe diventare un po 'complicato.


3

Se non ti dispiace eseguire RAID-6 (2 dischi di parità anziché 1) e se stai eseguendo mdadmin 3.1.xo versioni successive, puoi convertire l'array RAID-5 in RAID-6 per aggiungere un disco di parità aggiuntivo . Questo metterà sotto stress la matrice durante la ricostruzione. E ha alcune implicazioni sulle prestazioni poiché ci sono più dischi di parità da aggiornare durante le scritture.

Ma se si completa correttamente, puoi mantenere il tuo disco guasto in posizione e quando alla fine si guasta, hai ancora la protezione di parità per l'array. Penso che puoi convertire l'array da RAID6 a RAID5 se non aspetti di mantenerlo come RAID6.

Non conosco un modo online per mantenere l'array come RAID-5 e sostituire il disco senza mettere l'array in modalità degradata, poiché penso che sia necessario contrassegnarlo come non riuscito a sostituirlo. La tua idea di copia dd potrebbe essere il modo per farlo.


@haukelaging FYI è ora possibile dal kernel 3.2, vedi la mia risposta .
Totor
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.