Guida alle tecnologie

Sostituzione e test di un disco guasto in RAID1

• 6 min read • Linux • Aggiornato 28 Sep 2025
Sostituire un disco guasto in RAID1 con mdadm
Sostituire un disco guasto in RAID1 con mdadm

Sostituisci il disco guasto in un array RAID1 usando mdadm: simula il guasto, rimuovi la vecchia unità, copia la tabella delle partizioni, azzera i superblock RAID, aggiungi il nuovo disco e aspetta la ricostruzione. Infine reinstalla GRUB su entrambi i dischi. Questa guida mostra i comandi passo passo, verifiche e procedure alternative.

Panoramica

Questa sezione descrive come simulare la rottura di un disco, sostituirlo e ricostruire un array RAID1 software (mdadm) su Linux. Gli esempi assumono un array con /dev/md0 (partizione 1) e /dev/md1 (partizione 2), e due dischi fisici: /dev/sda e /dev/sdb. Nell’esempio /dev/sdb è il disco che viene sostituito.

Importante: esegui queste operazioni con accesso root e, se possibile, in un ambiente di test prima su sistemi di produzione.

Prerequisiti

  • mdadm installato
  • Accesso root o sudo
  • Una copia recente dei dati o backup (consigliato)
  • Conoscenza dei nomi dei dispositivi (/dev/sda, /dev/sdb possono cambiare su sistemi diversi)

1. Simulare un guasto del disco

Puoi simulare la rimozione del disco fisico spegnendo la macchina e scollegando l’HDD, oppure emulare la rimozione da software con mdadm:

mdadm --manage /dev/md0 --fail /dev/sdb1
mdadm --manage /dev/md1 --fail /dev/sdb2

mdadm --manage /dev/md0 --remove /dev/sdb1
mdadm --manage /dev/md1 --remove /dev/sdb2

Dopo aver segnalato il fallimento e la rimozione, spegni il sistema se vuoi simulare lo swap fisico:

shutdown -h now

Sostituisci fisicamente il disco con uno nuovo (o riposiziona i dispositivi se stai simulando /dev/sda fallito) e riavvia. Il sistema dovrebbe avviarsi anche con l’array degradato.

2. Verificare lo stato dell’array degradato

Esegui:

cat /proc/mdstat

Dovresti vedere l’array in stato degraded (esempio):

[root@server1 ~]# cat /proc/mdstat
Personalities : [raid1]
md0 : active raid1 sda1[0]
104320 blocks [2/1] [U_]

md1 : active raid1 sda2[0]
10377920 blocks [2/1] [U_]

unused devices: 
[root@server1 ~]#

E controlla le partizioni:

fdisk -l

Esempio di output (non modificare i dispositivi reali):

[root@server1 ~]# fdisk -l

Disk /dev/sda: 10.7 GB, 10737418240 bytes
255 heads, 63 sectors/track, 1305 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *           1          13      104391   fd  Linux raid autodetect
/dev/sda2             14        1305    10377990   fd  Linux raid autodetect

Disk /dev/sdb: 10.7 GB, 10737418240 bytes
255 heads, 63 sectors/track, 1305 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

Disk /dev/sdb doesn't contain a valid partition table

Disk /dev/md1: 10.6 GB, 10626990080 bytes
2 heads, 4 sectors/track, 2594480 cylinders
Units = cylinders of 8 * 512 = 4096 bytes

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 /dev/md0 doesn't contain a valid partition table
[root@server1 ~]#

3. Copiare la tabella delle partizioni dal disco sano al disco nuovo

Copia la tabella delle partizioni da /dev/sda a /dev/sdb:

sfdisk -d /dev/sda | sfdisk /dev/sdb

Se si verifica un errore relativo alla firma msdos, prova con –force:

sfdisk -d /dev/sda | sfdisk --force /dev/sdb

Esempio di output della copia:

[root@server1 ~]# sfdisk -d /dev/sda | sfdisk /dev/sdb
Checking that no-one is using this disk right now ...
OK

Disk /dev/sdb: 1305 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  20964824   20755980  fd  Linux raid autodetect
/dev/sdb3             0         -          0   0  Empty
/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 ~]#

Nota: l’output può variare con versioni diverse di utilità e kernel.

4. Rimuovere eventuali residui RAID e aggiungere il nuovo disco

Azzerare eventuali superblock RAID residui sul nuovo disco:

mdadm --zero-superblock /dev/sdb1
mdadm --zero-superblock /dev/sdb2

Aggiungi le partizioni dell’HDD al rispettivo array RAID:

mdadm -a /dev/md0 /dev/sdb1
mdadm -a /dev/md1 /dev/sdb2

Verifica lo stato di sincronizzazione:

cat /proc/mdstat

Esempio durante la ricostruzione:

[root@server1 ~]# cat /proc/mdstat
Personalities : [raid1]
md0 : active raid1 sdb1[1] sda1[0]
104320 blocks [2/2] [UU]

md1 : active raid1 sdb2[2] sda2[0]
10377920 blocks [2/1] [U_]
[======>..............]  recovery = 32.3% (3360768/10377920) finish=1.5min speed=74238K/sec

unused devices: 
[root@server1 ~]#

Aspetta che la sincronizzazione finisca fino a quando tutte le unità mostrano [UU]:

[root@server1 ~]# cat /proc/mdstat
Personalities : [raid1]
md0 : active raid1 sdb1[1] sda1[0]
104320 blocks [2/2] [UU]

md1 : active raid1 sdb2[1] sda2[0]
10377920 blocks [2/2] [UU]

unused devices: 
[root@server1 ~]#

5. Reinstallare il bootloader (GRUB)

Per assicurarsi che il sistema sia avviabile anche se uno dei dischi si guasta, installa GRUB su entrambi i dischi fisici. Avvia l’interfaccia di grub e esegui:

grub

Quindi, nella console di grub:

root (hd0,0)
setup (hd0)
root (hd1,0)
setup (hd1)
quit

Questo installa il bootloader su entrambe le unità (hd0 e hd1) così l’array rimane avviabile se un disco si guasta.

6. Verifiche finali

  • Controlla /proc/mdstat: tutti gli array devono essere [UU]
  • Esegui mount e ls su filesystem critici per verificare l’integrità
  • Controlla dmesg/journalctl per errori sul disco
  • Se hai /etc/mdadm/mdadm.conf o /etc/mdadm.conf, aggiorna la configurazione con –detail –scan se necessario:
mdadm --detail --scan >> /etc/mdadm/mdadm.conf

Important: non sovrascrivere il file senza verificare il contenuto; meglio aggiungere e rivedere manualmente.

Controlli rapidi (cheat sheet dei comandi)

  • Simulare fail: mdadm –manage /dev/mdX –fail /dev/sdY1
  • Rimuovere: mdadm –manage /dev/mdX –remove /dev/sdY1
  • Copiare partizioni: sfdisk -d /dev/sda | sfdisk /dev/sdb
  • Azzerare superblock: mdadm –zero-superblock /dev/sdY1
  • Aggiungere al RAID: mdadm -a /dev/mdX /dev/sdY1
  • Stato: cat /proc/mdstat
  • Reinstallare GRUB: usare la shell di grub come mostrato sopra

Procedure alternative e considerazioni

  • Hot-swap: se il tuo server supporta hot-swap e il controller è compatibile, puoi sostituire il disco senza spegnere la macchina. In tal caso rileva l’unità e procedi con sfdisk e mdadm come sopra.
  • Hardware RAID: su controller hardware la procedura è differente. Spesso si usa l’interfaccia del controller per ricostruire l’array; non usare mdadm.
  • NVMe / nomi dispositivi: su sistemi moderni i dispositivi possono chiamarsi /dev/nvme0n1p1 o usare link persistenti in /dev/disk/by-id/. È più robusto usare identificatori persistenti per evitare confusioni sul riavvio.

Quando questa procedura può fallire (controesempi)

  • Tabella delle partizioni non copiabile: dispositivi con geometrie o tabelle particolari (GPT vs MBR) richiedono comandi diversi (gdisk, sgdisk).
  • Dischi con settori danneggiati: la copia delle partizioni può non funzionare se il disco sorgente ha errori fisici gravi.
  • RAID non ricostruisce: se il superblock non è coerente o i numeri di array/UUID differiscono, potrebbe essere necessario usare mdadm –assemble con –uuid o modificare manualmente mdadm.conf.

Checklist per ruolo (amministratore)

  • Verificare backup recente
  • Identificare il disco guasto via smartctl e dmesg
  • Simulare il guasto in ambiente di prova prima in produzione
  • Sostituire il disco e copiare la tabella partizioni
  • Azzerare superblock e aggiungere il disco
  • Monitorare /proc/mdstat fino a ricostruzione completa
  • Reinstallare GRUB su entrambi i dischi
  • Aggiornare mdadm.conf se necessario
  • Registrare l’operazione nel change log

SOP: playbook rapido

  1. Notifica finestra di manutenzione.
  2. Effettua backup (se non presente).
  3. Segnala il disco come failed con mdadm.
  4. Rimuovi la partizione dal sistema e sostituisci fisicamente.
  5. Copia la tabella partizioni (sfdisk).
  6. mdadm –zero-superblock sui dispositivi nuovi.
  7. mdadm -a per reintrodurre le partizioni nell’array.
  8. Verifica sincronizzazione e stato [UU].
  9. Reinstalla GRUB su entrambi i dischi.
  10. Verifica boot da ciascun disco (se possibile) e chiudi la manutenzione.

Casi di test e criteri di accettazione

  • Dopo ripristino: /proc/mdstat mostra [UU] per tutti gli array.
  • Sistema avvia correttamente con uno dei due dischi scollegato.
  • Nessun errore critico in dmesg o journalctl dopo la ricostruzione.

Note tecniche e compatibilità

  • GPT vs MBR: sfdisk lavora con tabelle DOS/MBR; per GPT usare sgdisk o parted.
  • Udev e mappature disco: dopo aver scritto la tabella partizioni, potrebbe essere necessario forzare la rilettura con partprobe o riavviare per aggiornare i nodi di dispositivo.
  • UUID e mdadm.conf: usare mdadm –detail –scan per aggiornare la configurazione e assicurarsi che gli UUID siano consistenti.

Troubleshooting rapido

  • mdadm non riconosce la partizione: controlla che il type ID sia fd (Linux RAID autodetect) e che la partizione sia stata scritta correttamente.
  • Ricostruzione lenta: può dipendere da I/O del disco, carico del sistema o limitazioni del controller.
  • GRUB non si installa: controlla che il dispositivo sia correttamente indirizzato (hd0/hd1) nella console grub e che le partizioni contengano il filesystem di /boot se presente.

Sommario

Hai appena sostituito un disco in un array RAID1 usando mdadm: simulazione del guasto, copia della tabella delle partizioni, azzeramento dei superblock, aggiunta del nuovo disco e sincronizzazione. Infine, reinstalla GRUB su entrambi i dischi per garantire l’avviabilità.

Importante: testa sempre le procedure su sistemi non produttivi e utilizza identificatori persistenti per i dispositivi quando possibile.

Link utili

Autore
Redazione

Materiali simili

Installare e usare Podman su Debian 11
DevOps

Installare e usare Podman su Debian 11

Guida rapida a apt-pinning su Debian
Linux

Guida rapida a apt-pinning su Debian

Forzare FSR 4 con OptiScaler: guida completa
Guide.

Forzare FSR 4 con OptiScaler: guida completa

Dansguardian + Squid NTLM su Debian Etch
Rete

Dansguardian + Squid NTLM su Debian Etch

Riparare errore installazione SD su Android
Android

Riparare errore installazione SD su Android

Cartelle di rete con KNetAttach e remote:/
Linux

Cartelle di rete con KNetAttach e remote:/