Sostituire un disco in RAID1 e testare la ricostruzione
Testare la sostituzione di un disco in un array RAID1 consiste nel simulare il guasto, rimuovere il disco guasto, clonare la tabella delle partizioni sul nuovo disco, aggiungerlo all’array e attendere la ricostruzione. Alla fine bisogna reinstallare GRUB su entrambi i dischi per garantire l’avvio.
Scopo e varianti di ricerca
Sostituire disco RAID1 è la procedura principale trattata qui. Varianti correlate: simulare guasto disco, riparare RAID1 con mdadm, clonare tabella partizioni con sfdisk, reinstallare GRUB su RAID.
Prerequisiti
- Accesso root o sudo sul server.
- mdadm, sfdisk e grub disponibili sul sistema.
- Un disco di ricambio con almeno la stessa capacità del disco guasto.
Importante: questa guida assume un array RAID1 a 2 dischi e usa /dev/sda e /dev/sdb come esempi. Adatta i nomi dei dispositivi al tuo sistema.
1) Simulare il guasto del disco
Non importa se scegli /dev/sda o /dev/sdb. Nell’esempio si assume che /dev/sdb sia quello guasto. Puoi rimuovere fisicamente il disco o marcarlo come guasto da software:
mdadm --manage /dev/md0 --fail /dev/sdb1
mdadm --manage /dev/md1 --fail /dev/sdb2
mdadm --manage /dev/md2 --fail /dev/sdb3
Quindi rimuovilo dall’array:
mdadm --manage /dev/md0 --remove /dev/sdb1
mdadm --manage /dev/md1 --remove /dev/sdb2
mdadm --manage /dev/md2 --remove /dev/sdb3
Per spegnere la macchina:
shutdown -h now
Sostituisci il disco fisico guasto con un nuovo HDD/SSD. Se hai simulato il guasto di /dev/sda, inserisci ora il disco come /dev/sda o collega il nuovo HDD come /dev/sdb seguendo la tua configurazione hardware. Avvia il sistema; dovrebbe partire normalmente anche con un array degradato.
2) Verifica che l’array sia degradato
Controlla lo stato dell’array:
cat /proc/mdstat
Esempio di output quando un membro è mancante:
[root@server1 ~]# cat /proc/mdstat
Personalities : [raid1] [raid6] [raid5] [raid4]
md0 : active raid1 sda1[0]
104320 blocks [2/1] [U_]
md1 : active raid1 sda2[0]
513984 blocks [2/1] [U_]
md2 : active raid1 sda3[0]
4618560 blocks [2/1] [U_]
unused devices:
[root@server1 ~]#
E controlla le partizioni/dischi con fdisk:
fdisk -l
Esempio di output (mostra che /dev/sdb non ha tabella partizioni valida):
[root@server1 ~]# fdisk -l
Disk /dev/sda: 5368 MB, 5368709120 bytes
255 heads, 63 sectors/track, 652 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Disk identifier: 0x0007b217
Device Boot Start End Blocks Id System
/dev/sda1 * 1 13 104391 fd Linux raid autodetect
/dev/sda2 14 77 514080 fd Linux raid autodetect
/dev/sda3 78 652 4618687+ fd Linux raid autodetect
Disk /dev/sdb: 5368 MB, 5368709120 bytes
255 heads, 63 sectors/track, 652 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Disk identifier: 0x00000000
Disk /dev/sdb doesn't contain a valid partition table
Disk /dev/md2: 4729 MB, 4729405440 bytes
2 heads, 4 sectors/track, 1154640 cylinders
Units = cylinders of 8 * 512 = 4096 bytes
Disk identifier: 0x00000000
Disk /dev/md2 doesn't contain a valid partition table
Disk /dev/md1: 526 MB, 526319616 bytes
2 heads, 4 sectors/track, 128496 cylinders
Units = cylinders of 8 * 512 = 4096 bytes
Disk identifier: 0x00000000
Disk /dev/md1 doesn't contain a valid partition table
Disk /dev/md0: 106 MB, 106823680 bytes
2 heads, 4 sectors/track, 26080 cylinders
Units = cylinders of 8 * 512 = 4096 bytes
Disk identifier: 0x00000000
Disk /dev/md0 doesn't contain a valid partition table
[root@server1 ~]#
3) Copiare la tabella delle partizioni dal disco sano al nuovo disco
Clona la tabella delle partizioni di /dev/sda su /dev/sdb con sfdisk:
sfdisk -d /dev/sda | sfdisk /dev/sdb
Se compare un errore sulla signature, puoi forzare l’operazione:
sfdisk -d /dev/sda | sfdisk --force /dev/sdb
Esempio di output di sfdisk che descrive la scrittura della nuova tabella:
[root@server1 #] sfdisk -d /dev/sda | sfdisk /dev/sdb
Checking that no-one is using this disk right now ...
OK
Disk /dev/sdb: 652 cylinders, 255 heads, 63 sectors/track
sfdisk: ERROR: sector 0 does not have an msdos signature
/dev/sdb: unrecognized partition table type
Old situation:
No partitions found
New situation:
Units = sectors of 512 bytes, counting from 0
Device Boot Start End #sectors Id System
/dev/sdb1 * 63 208844 208782 fd Linux raid autodetect
/dev/sdb2 208845 1237004 1028160 fd Linux raid autodetect
/dev/sdb3 1237005 10474379 9237375 fd Linux raid autodetect
/dev/sdb4 0 - 0 0 Empty
Successfully wrote the new partition table
Re-reading the partition table ...
If you created or changed a DOS partition, /dev/foo7, say, then use dd(1)
to zero the first 512 bytes: dd if=/dev/zero of=/dev/foo7 bs=512 count=1
(See fdisk(8).)
[root@server1 ~]#
4) Pulire eventuali superblock RAID precedenti e aggiungere il disco all’array
Rimuovi le tracce di eventuali array RAID precedenti:
mdadm --zero-superblock /dev/sdb1
mdadm --zero-superblock /dev/sdb2
mdadm --zero-superblock /dev/sdb3
Aggiungi le partizioni appena create all’array RAID:
mdadm -a /dev/md0 /dev/sdb1
mdadm -a /dev/md1 /dev/sdb2
mdadm -a /dev/md2 /dev/sdb3
Controlla lo stato di sincronizzazione:
cat /proc/mdstat
Esempio mentre uno dei dispositivi si sta ricostruendo:
[root@server1 ~]# cat /proc/mdstat
Personalities : [raid1] [raid6] [raid5] [raid4]
md0 : active raid1 sdb1[1] sda1[0]
104320 blocks [2/2] [UU]
md1 : active raid1 sdb2[1] sda2[0]
513984 blocks [2/2] [UU]
md2 : active raid1 sdb3[2] sda3[0]
4618560 blocks [2/1] [U_]
[===>.................] recovery = 15.4% (715584/4618560) finish=4.9min speed=13222K/sec
unused devices:
[root@server1 ~]#
Attendi il completamento della ricostruzione:
[root@server1 ~]# cat /proc/mdstat
Personalities : [raid1] [raid6] [raid5] [raid4]
md0 : active raid1 sdb1[1] sda1[0]
104320 blocks [2/2] [UU]
md1 : active raid1 sdb2[1] sda2[0]
513984 blocks [2/2] [UU]
md2 : active raid1 sdb3[1] sda3[0]
4618560 blocks [2/2] [UU]
unused devices:
[root@server1 ~]#
5) Reinstallare il bootloader su entrambi i dischi
Per garantire che il sistema sia avviabile anche se un disco fallisce, installa GRUB su entrambi i dischi. Avvia il comando grub (o grub-install secondo la versione) e usa i comandi del prompt GRUB come nell’esempio:
grub
Quindi, al prompt GRUB:
root (hd0,0)
setup (hd0)
root (hd1,0)
setup (hd1)
quit
Su sistemi moderni usa invece grub-install su ciascun dispositivo, ad esempio:
grub-install /dev/sda
grub-install /dev/sdb
Nota: la sintassi dipende dalla versione di GRUB presente sulla tua distribuzione.
Criteri di verifica finali
- cat /proc/mdstat mostra tutti i dispositivi come [UU] per ogni mdX.
- fdisk -l mostra le partizioni del nuovo disco corrispondenti a quelle del disco sano.
- Entrambi i dischi hanno il bootloader installato (testare l’avvio con un disco rimosso se possibile in ambiente di test).
Checklist rapida per il responsabile operativo
- Backup recente verificato.
- Nuovo disco disponibile e identificato (/dev/sdb o altro).
- Tabella partizioni clonata con sfdisk.
- Superblock azzerati (mdadm –zero-superblock).
- Disco aggiunto all’array (mdadm -a).
- Ricostruzione completata (cat /proc/mdstat).
- GRUB reinstallato su entrambi i dischi.
Errori comuni e rimedi
- sfdisk segnala mancante signature: usare –force se sei sicuro del disco.
- mdadm non aggiunge la partizione: assicurati che la partizione sia del tipo RAID (Id fd).
- Ricostruzione lenta: verifica I/O, load del sistema e cavi/SATA.
Mini-metodologia (che cosa fare in produzione)
- Notifica downtime o esegui in manutenzione programmata.
- Verifica backup e snapshot.
- Segui i passaggi sopra in ambiente controllato.
- Monitora la ricostruzione e il log di sistema.
- Documenta la sostituzione nel change log.
Link utili
- The Software-RAID Howto: http://tldp.org/HOWTO/Software-RAID-HOWTO.html
- Fedora: http://fedoraproject.org
Riepilogo
Hai simulato il guasto di un disco, clonato la tabella delle partizioni, aggiunto il nuovo disco all’array e atteso la ricostruzione. Infine hai reinstallato il bootloader per assicurare l’avvio da entrambi i dischi.
Materiali simili

Musica di sottofondo per app Android (guida Tasker)

Previsioni di vendita accurate: guida pratica

Controller fisico su Android: Wiimote e MOGA

Eliminare il lag della fotocamera su Android
