Questa guida mostra come rimuovere un disco rigido guasto da un array RAID1 Linux (RAID software) e come aggiungere un nuovo disco rigido all'array RAID1 senza perdere dati. Userò gdisk per copiare lo schema di partizione, quindi funzionerà anche con dischi rigidi di grandi dimensioni con GPT (GUID Partition Table).
1 Nota preliminare
In questo esempio ho due dischi rigidi, /dev/sda e /dev/sdb, con le partizioni /dev/sda1 e /dev/sda2 così come /dev/sdb1 e /dev/sdb2.
/dev/sda1 e /dev/sdb1 costituiscono l'array RAID1 /dev/md0.
/dev/sda2 e /dev/sdb2 costituiscono l'array RAID1 /dev/md1.
/dev/sda1 + /dev/sdb1 = /dev/md0
/dev/sda2 + /dev/sdb2 = /dev/md1
/dev/sdb non è riuscito e vogliamo sostituirlo.
2 Come faccio a sapere se un disco rigido è guasto?
Se un disco è guasto, probabilmente troverai molti messaggi di errore nei file di registro, ad es. /var/log/messages o /var/log/syslog.
Puoi anche correre
cat /proc/mdstat
e invece della stringa [UU] vedrai [U_] se hai un array RAID1 degradato.
3 Rimozione del disco guasto
Per rimuovere /dev/sdb, contrassegneremo /dev/sdb1 e /dev/sdb2 come non riusciti e li rimuoveremo dai rispettivi array RAID (/dev/md0 e /dev/md1).
Per prima cosa contrassegniamo /dev/sdb1 come non riuscito:
mdadm --manage /dev/md0 --fail /dev/sdb1
L'output di
cat /proc/mdstat
dovrebbe assomigliare a questo:
server1:~# cat /proc/mdstat
Personalities : [linear] [multipath] [raid0] [raid1] [raid5] [raid4] [raid6] [raid10]
md0 : active raid1 sda1[0] sdb1[2](F)
24418688 blocks [2/1] [U_]
md1 : active raid1 sda2[0] sdb2[1]
24418688 blocks [2/2] [UU]
unused devices: <none>
Quindi rimuoviamo /dev/sdb1 da /dev/md0:
mdadm --manage /dev/md0 --remove /dev/sdb1
L'output dovrebbe essere questo:
server1:~# mdadm --manage /dev/md0 --remove /dev/sdb1
mdadm: hot removed /dev/sdb1
E
cat /proc/mdstat
dovrebbe mostrare questo:
server1:~# cat /proc/mdstat
Personalities : [linear] [multipath] [raid0] [raid1] [raid5] [raid4] [raid6] [raid10]
md0 : active raid1 sda1[0]
24418688 blocks [2/1] [U_]
md1 : active raid1 sda2[0] sdb2[1]
24418688 blocks [2/2] [UU]
unused devices: <none>
Ora eseguiamo di nuovo gli stessi passaggi per /dev/sdb2 (che fa parte di /dev/md1):
mdadm --manage /dev/md1 --fail /dev/sdb2
cat /proc/mdstat
server1:~# cat /proc/mdstat
Personalities : [linear] [multipath] [raid0] [raid1] [raid5] [raid4] [raid6] [raid10]
md0 : active raid1 sda1[0]
24418688 blocks [2/1] [U_]
md1 : active raid1 sda2[0] sdb2[2](F)
24418688 blocks [2/1] [U_]
unused devices: <none>
mdadm --manage /dev/md1 --remove /dev/sdb2
server1:~# mdadm --manage /dev/md1 --remove /dev/sdb2
mdadm: hot removed /dev/sdb2
cat /proc/mdstat
server1:~# cat /proc/mdstat
Personalities : [linear] [multipath] [raid0] [raid1] [raid5] [raid4] [raid6] [raid10]
md0 : active raid1 sda1[0]
24418688 blocks [2/1] [U_]
md1 : active raid1 sda2[0]
24418688 blocks [2/1] [U_]
unused devices: <none>
Quindi spegni il sistema:
shutdown -h now
e sostituisci il vecchio disco rigido /dev/sdb con uno nuovo (deve avere almeno le stesse dimensioni di quello vecchio - se è solo qualche MB più piccolo di quello vecchio, la ricostruzione degli array fallirà).
4 Aggiunta del nuovo disco rigido
Dopo aver modificato il disco rigido /dev/sdb, avvia il sistema.
La prima cosa che dobbiamo fare ora è creare lo stesso partizionamento di /dev/sda. Possiamo farlo con il comando sgdisk dal pacchetto gdisk. Se non hai ancora installato gdisk, esegui questo comando per installarlo su Debian e Ubuntu:
apt-get install gdisk
Per le distribuzioni Linux basate su RedHat come CentOS usa:
yum install gdisk
e per l'uso di OpenSuSE:
yast install gdisk
Il passaggio successivo è facoltativo ma consigliato. Per assicurarti di avere un backup dello schema di partizione, puoi usare sgdisk per scrivere gli schemi di partizione di entrambi i dischi in un file. Memorizzerò il backup nella cartella /root.
sgdisk --backup=/root/sda.partitiontable /dev/sda
sgdisk --backup=/root/sdb.partitiontable /dev/sdb
In caso di errore puoi ripristinare le tabelle delle partizioni con l'opzione --load-backup del comando sgdisk.
Ora copia lo schema di partizione da /dev/sda a /dev/sdb run:
sgdisk -R /dev/sdb /dev/sda
in seguito, devi randomizzare il GUID sul nuovo disco rigido per assicurarti che siano univoci
sgdisk -G /dev/sdb
Puoi correre
sgdisk -p /dev/sda
sgdisk -p /dev/sdb
per verificare se entrambi i dischi rigidi hanno ora lo stesso partizionamento.
Quindi aggiungiamo /dev/sdb1 a /dev/md0 e /dev/sdb2 a /dev/md1:
mdadm --manage /dev/md0 --add /dev/sdb1
server1:~# mdadm --manage /dev/md0 --add /dev/sdb1
mdadm: re-added /dev/sdb1
mdadm --manage /dev/md1 --add /dev/sdb2
server1:~# mdadm --manage /dev/md1 --add /dev/sdb2
mdadm: re-added /dev/sdb2
Ora entrambi gli aray (/dev/md0 e /dev/md1) saranno sincronizzati. Corri
cat /proc/mdstat
per vedere quando è finito.
Durante la sincronizzazione l'output sarà simile a questo:
server1:~# cat /proc/mdstat
Personalities : [linear] [multipath] [raid0] [raid1] [raid5] [raid4] [raid6] [raid10]
md0 : active raid1 sda1[0] sdb1[1]
24418688 blocks [2/1] [U_]
[=>...................] recovery = 9.9% (2423168/24418688) finish=2.8min speed=127535K/sec
md1 : active raid1 sda2[0] sdb2[1]
24418688 blocks [2/1] [U_]
[=>...................] recovery = 6.4% (1572096/24418688) finish=1.9min speed=196512K/sec
unused devices: <none>
Al termine della sincronizzazione, l'output sarà simile al seguente:
server1:~# cat /proc/mdstat
Personalities : [linear] [multipath] [raid0] [raid1] [raid5] [raid4] [raid6] [raid10]
md0 : active raid1 sda1[0] sdb1[1]
24418688 blocks [2/2] [UU]
md1 : active raid1 sda2[0] sdb2[1]
24418688 blocks [2/2] [UU]
unused devices: <none>
Ecco fatto, hai sostituito con successo /dev/sdb!