Sostituire un disco in un Software RAID Linux con mdadm

Procedura sicura per identificare, rimuovere e sostituire un disco in un array mdadm: SMART, seriali/WWN, fail/remove, GPT, add, rebuild, --replace/--with e verifiche finali.

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.

Riferimento

mdadm(8).