Prima di tutto: per quelli che credono ancora in "RAID0 non ha hot spare". Potrebbe avere un ricambio manuale, fatto da umani, che comprendono i livelli RAID e mdadm. mdadm è un software RAID, quindi potrebbe fare molte cose interessanti.
Ringraziamo Zoredache per l'idea!
Quindi, la situazione:
- hai un array RAID0 di due dischi
- si desidera sostituirne uno senza tempi di inattività dell'array
Se il tempo di inattività è accettabile, puoi sempre semplicemente fare una copia a blocchi del disco con dd e riassemblare l'array, mdadm farà OK.
Soluzione: utilizzare RAID4 come soluzione intermedia
RAID0 -> RAID4 -> RAID0
Quindi, se non ricordi RAID4, è semplice. Ha un blocco di parità, ma a differenza di RAID5 non è distribuito attraverso l'array, ma risiede su UN disco. Questo è il punto, questo è importante e questo è il motivo per cui RAID5 non funzionerà.
Cosa ti servirà: altri due dischi della stessa dimensione, come il disco che desideri sostituire.
Ambiente:
- Ubuntu 14.04 Thrusty Thar
- mdadm - v3.2.5 - 18 maggio 2012
- / dev / sdb - inizia con esso, lo sostituirà
- / dev / sdc - inizia con esso
- / dev / sdd: verrà utilizzato temporaneamente
- / dev / sde - verrà usato al posto di sdb
L'ultima guida mdadm RAID0 hot-spare;)
sudo mdadm -C /dev/md0 -l 0 -n 2 /dev/sd[bc]
md0 : active raid0 sdc[1] sdb[0]
2096128 blocks super 1.2 512k chunks
Abbiamo creato l'array raid0, sembra dolce.
sudo md5sum /dev/md0
b422ba644a3c83cdf28adfa94cb658f3 /dev/md0
Questo è il nostro punto di controllo - se anche un solo bit differirà nel risultato /dev/md0
- abbiamo fallito.
sudo mdadm /dev/md0 --grow --level=4
md0 : active raid4 sdc[1] sdb[0]
2096128 blocks super 1.2 level 4, 512k chunk, algorithm 5 [3/2] [UU_]
Quindi, abbiamo sviluppato il nostro array per essere RAID4. Non abbiamo ancora aggiunto il disco di parità, quindi facciamolo. La crescita sarà istantanea: non c'è nulla da ricalcolare o ricalcolare.
sudo mdadm /dev/md0 -a /dev/sdd
md0 : active raid4 sdd[3] sdc[1] sdb[0]
2096128 blocks super 1.2 level 4, 512k chunk, algorithm 5 [3/2] [UU_]
[===>.................] recovery = 19.7% (207784/1048064) finish=0.2min speed=51946K/sec
Abbiamo aggiunto sdd
come disco di parità. Questo è importante da ricordare: l'ordine dei dischi nella prima riga non è sincronizzato con l'immagine nella seconda riga! [UU_]
sdd
viene visualizzato per primo, ma in realtà è l'ultimo e non contiene i dati, ma la parità.
sudo mdadm /dev/md0 -f /dev/sdb
md0 : active raid4 sdd[3] sdc[1] sdb[0](F)
2096128 blocks super 1.2 level 4, 512k chunk, algorithm 5 [3/2] [_UU]
Abbiamo reso difettoso il nostro disco sdb, per rimuoverlo nei passaggi successivi.
sudo mdadm --detail /dev/md0
State : clean, degraded
Number Major Minor RaidDevice State
0 0 0 0 removed
1 8 32 1 active sync /dev/sdc
3 8 48 2 active sync /dev/sdd
0 8 16 - faulty spare /dev/sdb
I dettagli ci mostrano la rimozione del primo disco e qui possiamo vedere il vero ordine dei dischi nell'array. È importante tenere traccia del disco con parità, non dovremmo lasciarlo nell'array quando si torna a RAID0.
sudo mdadm /dev/md0 -r /dev/sdb
md0 : active raid4 sdd[3] sdc[1]
2096128 blocks super 1.2 level 4, 512k chunk, algorithm 5 [3/2] [_UU]
sdb
viene completamente rimosso, potrebbe essere rimosso.
sudo mdadm /dev/md0 -a /dev/sde
md0 : active raid4 sde[4] sdd[3] sdc[1]
2096128 blocks super 1.2 level 4, 512k chunk, algorithm 5 [3/2] [_UU]
[==>..................] recovery = 14.8% (156648/1048064) finish=0.2min speed=52216K/sec
Abbiamo aggiunto la sostituzione per il nostro disco sdb. Ed eccoci qui: ora i dati di sdb vengono recuperati usando la parità. Sweeeeet.
md0 : active raid4 sde[4] sdd[3] sdc[1]
2096128 blocks super 1.2 level 4, 512k chunk, algorithm 5 [3/3] [UUU]
Fatto. In questo momento siamo completamente al sicuro: tutti i dati di sdb vengono recuperati e ora dobbiamo rimuovere sdd (ricordate, mantiene la parità).
sudo mdadm /dev/md0 -f /dev/sdd
md0 : active raid4 sde[4] sdd[3](F) sdc[1]
2096128 blocks super 1.2 level 4, 512k chunk, algorithm 5 [3/2] [UU_]
Reso difettoso.
sudo mdadm /dev/md0 -r /dev/sdd
md0 : active raid4 sde[4] sdc[1]
2096128 blocks super 1.2 level 4, 512k chunk, algorithm 5 [3/2] [UU_]
Rimosso sdd dal nostro array. Siamo pronti a diventare di nuovo RAID0.
sudo mdadm /dev/md0 --grow --level=0 --backup-file=backup
md0 : active raid4 sde[4] sdc[1]
2096128 blocks super 1.2 level 4, 512k chunk, algorithm 5 [3/2] [UU_]
[=>...................] reshape = 7.0% (73728/1048064) finish=1.5min speed=10532K/sec
Aaaaaa e botto!
md0 : active raid0 sde[4] sdc[1]
2096128 blocks super 1.2 512k chunks
Fatto. Diamo un'occhiata al checksum md5.
sudo md5sum /dev/md0
b422ba644a3c83cdf28adfa94cb658f3 /dev/md0
Altre domande? Quindi RAID0 potrebbe avere un hot spare. Si chiama "utente";)