Quando un array RAID perde un componente, la priorità è ripristinare la ridondanza senza trasformare un guasto controllabile in una perdita di dati. I comandi sono semplici; la parte difficile è essere certi di stare lavorando sul disco corretto.
Una sostituzione RAID non va eseguita copiando alla cieca /dev/sdb da una guida. Prima raccogliamo seriale, WWN, slot fisico, stato SMART e ruolo del componente nell’array. Solo dopo tocchiamo mdadm.
Scenario
Array: /dev/md0
Livello: RAID10
Componente problematico: /dev/sdc1
Componente sano di riferimento: /dev/sdb1
Nuovo disco fisico: /dev/sdc
I nomi sono soltanto esempi. Verifichiamoli sul sistema reale.
1. Fotografare la situazione prima di fare modifiche
cat /proc/mdstat
mdadm --detail /dev/md0
lsblk -o NAME,SIZE,MODEL,SERIAL,WWN,FSTYPE,MOUNTPOINTS
ls -l /dev/disk/by-id/ | less
Annotiamo soprattutto quale slot dell’array corrisponde al seriale fisico. Se il server ha LED di identificazione o un controller/backplane che espone lo slot, usiamolo.
2. Capire perché il disco è stato espulso
smartctl -x /dev/sdc
journalctl -k --since "-24 hours" |
grep -Ei 'sdc|ata|sas|nvme|I/O error|reset|timeout'
Un membro può essere marcato faulty per errori reali del disco, ma anche per problemi di cavo, backplane, alimentazione o controller. La vecchia abitudine di rimuovere e riaggiungere un disco “se succede solo una volta” non è una buona procedura: prima cerchiamo la causa.
3. Se il membro è ancora attivo, marcarlo failed
Se mdadm lo considera ancora un componente attivo ma abbiamo deciso di sostituirlo:
mdadm /dev/md0 --fail /dev/sdc1
mdadm --detail /dev/md0
cat /proc/mdstat
Se il disco è già segnato faulty questo passaggio non serve.
4. Rimuovere il membro dall’array
mdadm /dev/md0 --remove /dev/sdc1
mdadm --detail /dev/md0
mdadm permette di rimuovere componenti che non sono più attivi, quindi spare o failed. Un membro sano e attivo deve prima essere marcato failed oppure gestito attraverso la procedura --replace descritta più avanti.
5. Sostituire fisicamente il disco
Se chassis, controller e filesystem supportano hot-swap possiamo sostituirlo a macchina accesa seguendo la documentazione hardware. In caso contrario spegniamo il server. “SATA supporta hot-plug” non significa che qualunque alimentazione, backplane e case lo permettano in sicurezza.
Dopo l’inserimento del nuovo disco:
udevadm settle
lsblk -o NAME,SIZE,MODEL,SERIAL,WWN
smartctl -x /dev/sdc
Controlliamo ancora una volta che il seriale sia quello del disco appena installato.
6. Replicare la tabella GPT
Se il RAID usa partizioni, il nuovo disco deve avere una geometria compatibile. Con GPT possiamo replicare la tabella da un disco sano e poi generare nuovi GUID, evitando duplicati.
apt install gdisk
# ATTENZIONE:
# /dev/sdb = disco sano sorgente
# /dev/sdc = disco NUOVO destinazione
sgdisk --replicate=/dev/sdc /dev/sdb
sgdisk --randomize-guids /dev/sdc
partprobe /dev/sdc
lsblk /dev/sdc
L’ordine source/destination di sgdisk --replicate merita una seconda lettura prima di premere Invio. È uno dei passaggi in cui un typo può fare danni seri.
7. Aggiungere il nuovo membro
mdadm /dev/md0 --add /dev/sdc1
cat /proc/mdstat
mdadm --detail /dev/md0
Se l’array è degradato e il nuovo componente è compatibile, md inizia normalmente la ricostruzione.
8. Monitorare il rebuild
watch -n 5 cat /proc/mdstat
Durante il rebuild l’array è in una condizione più fragile e il carico I/O può essere elevato. Evitiamo reboot non necessari e controlliamo log kernel e SMART degli altri dischi.
journalctl -k -f
mdadm --detail /dev/md0
9. Sostituzione preventiva con –replace
Se un disco è ancora leggibile ma vogliamo sostituirlo preventivamente, mdadm offre una procedura migliore del marcarlo subito failed. Prima aggiungiamo il nuovo device come spare, quindi chiediamo di sostituire il membro mantenendo quello vecchio in servizio durante la ricostruzione.
# Prima il nuovo membro entra come spare
mdadm /dev/md0 --add /dev/sdd1
# Poi sostituiamo il vecchio usando lo spare specificato
mdadm /dev/md0 --replace /dev/sdc1 --with /dev/sdd1
Secondo la semantica di mdadm, il membro da sostituire resta in servizio durante il recovery, aumentando la resilienza rispetto a un fail immediato. Al termine viene marcato faulty e può essere rimosso.
watch -n 5 cat /proc/mdstat
mdadm --detail /dev/md0
# al termine:
mdadm /dev/md0 --remove /dev/sdc1
10. Verifiche finali
cat /proc/mdstat
mdadm --detail /dev/md0
lsblk -f
dmesg --level=err,warn | tail -100
L’array deve risultare completo e senza recovery in corso. Verifichiamo inoltre che l’applicazione o il filesystem sopra md siano realmente utilizzabili: lo stato “clean” dell’array non sostituisce un controllo del servizio.
Caso particolare: array di boot
Se il disco sostituito contiene anche partizione EFI, bootloader o partizioni non appartenenti all’array, replicare la sola membership md non basta. Dobbiamo ricreare anche la parte di boot e verificare esplicitamente che il server possa avviarsi dal nuovo disco. La procedura dipende da BIOS/UEFI, distribuzione e layout delle partizioni.
Mai normalizzare un disco che “ogni tanto cade”
Un componente che viene espulso ripetutamente non è normale. Anche se SMART non mostra subito settori riallocati, controlliamo cablaggio, alimentazione, backplane, errori SATA/SAS/NVMe e log kernel. Togliere e riaggiungere il disco cancella il sintomo dall’array, non la causa.
Per creare e testare un array senza hardware reale: Software RAID 10 su Linux con mdadm.

