Guida alle tecnologie

Sostituzione e test di un disco guasto in RAID1

6 min read Linux Aggiornato 10 Oct 2025
Sostituzione disco guasto in RAID1 — guida pratica
Sostituzione disco guasto in RAID1 — guida pratica

Simula un guasto disco, copia la tabella delle partizioni dal disco sano a quello nuovo, azzera i superblocchi mdadm, aggiungi il nuovo disco all’array e aspetta la sincronizzazione. Infine reinstalla il bootloader su entrambi i dischi. Questa guida mostra i comandi e gli output più comuni e offre checklist, criteri di accettazione e strategie di troubleshooting.

Introduzione

Questa guida descrive come sostituire un disco guasto in un array RAID1 software (mdadm) su Linux. Include i comandi necessari, gli output attesi e suggerimenti pratici per il controllo e il ripristino. Definizione rapida: RAID1 replica i dati su due o più dischi per tolleranza ai guasti.

Importante: esegui queste operazioni da root o con sudo. Esegui backup regolari prima di manipolare partizioni o superblocchi.

Prerequisiti

  • Accesso come root o sudo.
  • mdadm installato e funzionante.
  • Disco di ricambio almeno della stessa capacità o più grande.
  • Familiarità con fdisk/sfdisk e grub.

1) Simulare un guasto del disco

Per testare la procedura puoi simulare il guasto di un disco. Non importa se scegli /dev/sda o /dev/sdb. Nell’esempio si assume che /dev/sdb sia il disco guasto.

Puoi rimuovere fisicamente il disco oppure rimuoverlo ‘soft’ con mdadm:

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

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

Quindi arresta la macchina se vuoi sostituire fisicamente il disco:

shutdown -h now

Sostituisci il disco guasto con il nuovo disco fisico. Se stavi simulando lo scambio tra sda e sdb, assicurati che i nomi device corrispondano alla tua configurazione attuale al riavvio.

2) Verificare che l’array sia degradato

Dopo il boot, controlla lo stato dell’array:

cat /proc/mdstat

Esempio di output atteso quando un disco è mancante:

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

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

md2 : active raid1 sda3[0]
9759360 blocks [2/1] [U_]

unused devices: 
[root@server1 ~]#

Controlla anche le partizioni e i dischi con fdisk:

fdisk -l

Esempio di output (in questo caso /dev/sdb non contiene tabella partizioni valida):

[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          25      200781   fd  Linux raid autodetect
/dev/sda2             26          90      522112+  fd  Linux raid autodetect
/dev/sda3             91        1305     9759487+  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/md2: 9993 MB, 9993584640 bytes
2 heads, 4 sectors/track, 2439840 cylinders
Units = cylinders of 8 * 512 = 4096 bytes

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

Disk /dev/md1: 534 MB, 534577152 bytes
2 heads, 4 sectors/track, 130512 cylinders
Units = cylinders of 8 * 512 = 4096 bytes

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

Disk /dev/md0: 205 MB, 205520896 bytes
2 heads, 4 sectors/track, 50176 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 a quello nuovo

Copia la tabella delle partizioni di /dev/sda su /dev/sdb con sfdisk:

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

Se ricevi un errore relativo alla firma msdos, puoi provare l’opzione –force:

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

Esempio di esecuzione e output:

[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    401624     401562  fd  Linux raid autodetect
/dev/sdb2        401625   1445849    1044225  fd  Linux raid autodetect
/dev/sdb3       1445850  20964824   19518975  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 ~]#

Nota: se i device name cambiano (es. NVMe), adegua i nomi (/dev/nvme0n1p1 etc.).

4) Azzerare eventuali superblocchi RAID residui

Prima di aggiungere le nuove partizioni all’array, rimuovi eventuali superblocchi mdadm presenti sul disco di destinazione:

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

Questo evita conflitti con identificatori RAID residui.

5) Aggiungere il nuovo disco all’array e avviare la ricostruzione

Aggiungi le partizioni appena create all’array:

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

Controlla lo stato di ricostruzione:

cat /proc/mdstat

Esempio (si vede la ricostruzione in corso sul md2):

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

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

md2 : active raid1 sdb3[2] sda3[0]
9759360 blocks [2/1] [U_]
[=======>.............]  recovery = 39.4% (3846400/9759360) finish=1.7min speed=55890K/sec

unused devices: 
[root@server1 ~]#

Attendi il completamento della sincronizzazione. Alla fine tutti gli array dovrebbero mostrare [UU]:

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

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

md2 : active raid1 sdb3[1] sda3[0]
9759360 blocks [2/2] [UU]

unused devices: 
[root@server1 ~]#

6) Reinstallare il bootloader su entrambi i dischi

Per evitare che il sistema non si avvii se uno dei dischi fallisce, installa GRUB su entrambi gli HDD. Esempio con interfaccia testuale di grub:

grub

Poi, nella shell di grub:

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

Il risultato finale: il disco è stato sostituito e l’array RAID1 è tornato completo.

Criteri di accettazione

  • L’output di cat /proc/mdstat mostra tutti gli array con stato [UU].
  • fdisk -l mostra la tabella partizioni sul nuovo disco rispecchiante il disco sano.
  • GRUB è installato su entrambi i dischi e la macchina si avvia correttamente anche con un disco rimosso.

Checklist rapida (playbook)

  • Effettuare backup recenti e verificati.
  • Simulare o identificare il disco guasto.
  • Rimuovere il disco dall’array con mdadm (fail + remove) se necessario.
  • Sostituire fisicamente il disco.
  • Copiare la tabella partizioni con sfdisk.
  • Azzerare i superblocchi mdadm sul nuovo disco.
  • Aggiungere le partizioni all’array (mdadm -a).
  • Monitorare cat /proc/mdstat fino a [UU].
  • Reinstallare GRUB su entrambi i dischi.
  • Eseguire test di boot e monitoraggio SMART sul disco sostituito.

Ruoli e responsabilità (breve)

  • Sysadmin: esegue i comandi, monitora la ricostruzione e reinstalla il bootloader.
  • Operatore di sala: sostituisce il disco fisico e aggiorna il ticket.
  • Backup owner: verifica l’integrità dei backup prima dell’intervento.

Quando questa procedura può fallire (controesempi)

  • Il nuovo disco ha settori danneggiati o SMART warning gravi.
  • I nomi dei device cambiano (es. passaggio a NVMe) e non vengono aggiornati i comandi.
  • Tabella delle partizioni non compatibile per motivi di allineamento o differenze di logica (es. GPT vs MBR).

In questi casi, considera l’uso di parted/gdisk per creare partizioni compatibili o copia manuale con sgdisk per GPT.

Alternative e varianti

  • Se usi GPT, usa sgdisk per copiare la tabella delle partizioni: sgdisk –backup=table /dev/sda; sgdisk –load-backup=table /dev/sdb.
  • Se vuoi clonar tutto byte-per-byte (attento a UUID duplicati), usa dd if=/dev/sda of=/dev/sdb bs=64K conv=noerror,sync — poi aggiorna UUID e riscrivi i superblocchi.
  • Per sistemi con LVM sopra RAID, ricontrolla che i PV/LV siano attivi dopo la ricostruzione: pvscan, vgchange -ay.

Mental model e heuristica veloce

Pensa all’array RAID1 come a coppie di dischi identificati da UUID e superblocchi. La procedura tipica è: ripristinare la struttura delle partizioni, eliminare residui di configurazioni precedenti, poi riaggiungere il disco all’array per avviare la ricostruzione.

Test di accettazione

  • Dopo il ripristino, rimuovi il disco appena aggiunto e verifica che il sistema si avvii solo dal disco rimanente.
  • Controlla i log di sistema per errori mdadm (journalctl, /var/log/messages).
  • Esegui smartctl -a /dev/sdb per confermare l’integrità SMART del disco sostituito.

Troubleshooting comune

  • Problema: sfdisk segnala ‘msdos signature’ errore.
    Soluzione: provare con –force oppure usare fdisk/parted per ricreare manualmente le partizioni seguendo gli offset del disco sano.

  • Problema: ricostruzione molto lenta.
    Soluzione: verificare I/O load, scheduler, e limiti di banda; il kernel può limitare la velocità di rebuild in base a sysctl (/proc/sys/dev/raid/speed_limit_min e speed_limit_max).

  • Problema: GRUB non si installa su un disco.
    Soluzione: controlla la tabella partizioni e la presenza della partizione BIOS/EFI corretta; su UEFI usa efibootmgr per registrare il boot manager.

Matrice dei rischi e mitigazioni (alto livello)

  • Perdita dati dovuta a errore umano — Mitigazione: backup e verifica prima delle operazioni.
  • Disco di ricambio difettoso — Mitigazione: test SMART e burn-in se possibile.
  • Doppio guasto durante la ricostruzione — Mitigazione: avere spare immediatamente disponibili o policy hot-swap per riparazioni rapide.

Note su compatibilità e migrazione

  • Se stai migrando da MBR a GPT o da dischi con diversa geometria, ricrea le partizioni con parted/gdisk e aggiorna eventuali riferimenti in /etc/fstab con UUID.
  • Su sistemi moderni con device names non persistenti (es. /dev/sdX che possono cambiare), preferisci riferimenti per UUID o LABEL in /etc/fstab e in configurazioni mdadm.

Collegamenti utili

Riepilogo

Hai imparato a simulare un guasto disco, copiare una tabella partizioni, azzerare superblocchi, aggiungere un disco a un array RAID1, monitorare la ricostruzione e reinstallare il bootloader. Segui la checklist e i criteri di accettazione prima di dichiarare l’intervento concluso.

Autore
Redazione

Materiali simili

Google Pay su Android con root: guida pratica
Android Pagamenti

Google Pay su Android con root: guida pratica

Joystick per Pokémon GO: come ottenerlo in sicurezza
Guide gioco

Joystick per Pokémon GO: come ottenerlo in sicurezza

RAID1 con LVM: creare e migrare dati
Storage

RAID1 con LVM: creare e migrare dati

Errore copia-incolla Intune: cause e soluzioni
IT Support

Errore copia-incolla Intune: cause e soluzioni

Escludere cartelle dalla ricerca di Windows
Windows Privacy

Escludere cartelle dalla ricerca di Windows

Come trasferire file tra smartphone vicini
Mobile

Come trasferire file tra smartphone vicini