Utilizzo di mdadm 3.3
Dal mdadm
3.3 (rilasciato il 3 settembre 2013), se hai un kernel 3.2+, puoi procedere come segue:
# mdadm /dev/md0 --add /dev/sdc1
# mdadm /dev/md0 --replace /dev/sdd1 --with /dev/sdc1
sdd1
è il dispositivo che vuoi sostituire, sdc1
è il dispositivo preferito per farlo e deve essere dichiarato come riserva sull'array.
Il --with
l'opzione è facoltativa, se non specificata, verrà utilizzata qualsiasi riserva disponibile.
Versione mdadm precedente
Nota:hai ancora bisogno di un kernel 3.2+.
Innanzitutto, aggiungi una nuova unità come riserva (sostituisci md0
e sdc1
con il tuo dispositivo RAID e disco, rispettivamente):
# mdadm /dev/md0 --add /dev/sdc1
Quindi, avvia un'operazione di copia-sostituzione come questa (sdd1
essendo il dispositivo difettoso):
# echo want_replacement > /sys/block/md0/md/dev-sdd1/state
Risultato
Il sistema copierà tutti i blocchi leggibili da sdd1
a sdc1
. Se si tratta di un blocco illeggibile, lo ricostruirà dalla parità. Una volta completata l'operazione, l'ex spare (qui:sdc1
) diventerà attivo e l'unità guasta verrà contrassegnata come guasta (F) in modo da poterla rimuovere.
Nota: il merito va a frostschutz e Ansgar Esztermann che ha trovato la soluzione originale (vedi la domanda duplicata).
Kernel meno recenti
Altre risposte suggeriscono:
- Giovanni L'approccio di:convertire l'array in RAID6, "sostituire" il disco, quindi tornare in RAID5,
- Hauke Laging L'approccio di:rimuovere brevemente il disco dall'array RAID5, renderlo parte di un RAID1 (mirror) con il nuovo disco e aggiungere l'unità mirror all'array RAID5 (teorico)...
Se non ti dispiace eseguire RAID-6 (2 dischi di parità anziché 1) e se stai eseguendo mdadmin 3.1.x o versioni successive, puoi convertire il tuo array RAID-5 in RAID-6 per aggiungere un ulteriore disco di parità . Tuttavia, ciò metterà l'array sotto stress durante la ricostruzione. E ha alcune implicazioni sulle prestazioni poiché ci sono più dischi di parità da aggiornare durante le scritture.
Ma se viene completato correttamente, puoi mantenere il tuo disco in errore e quando alla fine fallisce, hai ancora la protezione della parità per l'array. Penso che tu possa riconvertire l'array da RAID6 a RAID5 se non aspetti a 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 devi contrassegnarlo come non riuscito a sostituirlo. La tua idea di dd copy potrebbe essere il modo per farlo.
Questo potrebbe essere possibile soddisfacendo i requisiti
- online
- non stressare nessun disco tranne quello che deve essere sostituito
Ma anche se quanto segue potrebbe funzionare, probabilmente non troverai alcuna raccomandazione di questo tipo "nei libri"...
Idea:
- Togli il disco OLD dall'array (per un breve momento):
mdadm --manage /dev/raid5 --fail /dev/OLD
- Crea un nuovo dispositivo md (RAID-1) dai dischi VECCHI e NUOVI:
mdadm --build /dev/md42 --level=mirror --raid-devices=2 /dev/OLD /dev/NEW
- Rimetti il RAID-1 nell'array (invece di /dev/OLD):
mdadm --manage /dev/raid5 --re-add /dev/md42
Cosa dovrebbe :-) capita:
- Il RAID-5 sincronizza /dev/md42. Questo non dovrebbe richiedere molto tempo.
- Il RAID-5 è di nuovo operativo (ma più lento).
- /dev/NEW è sincronizzato con /dev/OLD.
Guarda l'avanzamento della sincronizzazione (cat /proc/mdstat
o mdadm --monitor
). Se la sincronizzazione è terminata, rimuovere 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
Avviso: La veloce sincronizzazione RAID-5 potrebbe funzionare solo se si utilizza una bitmap. Se non ne hai uno, allora è meglio fare prima un test con un fittizio RAID-5 (senza bitmap). Oppure aggiungine uno. Almeno dovrebbe essere possibile aggiungerne uno esterno. Altrimenti potrebbe essere necessario arrestare il RAID-5 prima di cambiare i dispositivi. Se fai il boot da RAID-5, però, questo diventerebbe un po' complicato.