Come sostituire un disco rigido difettoso in un array RAID Linux

Ultimo aggiornamento: 20/02/2026
Autore: Isaac
  • Prima di intervenire su qualsiasi cosa è essenziale identificare correttamente i dischi e le partizioni RAID con strumenti come lsblk e mdadm --detail.
  • La sostituzione del disco in mdadm si basa sulla marcatura degli errori logici, sulla rimozione delle partizioni dall'array e sull'aggiunta di nuove partizioni da ricostruire.
  • In ZFS, i problemi di importazione di un pool dopo un guasto del disco richiedono estrema cautela e la priorità alla copia dei dati dal disco sano.
  • Per leggere i dischi RAID Linux da Windows è necessario prima assemblare l'array (ad esempio con WSL2 e mdadm) prima di montare il file system.

Sostituzione di un disco rigido difettoso in un array RAID Linux

Quando un disco rigido inizia a guastarsi all'interno di un Configurazione RAID in LinuxÈ facile farsi prendere dal panico: il server smette di rispondere, il sistema non si avvia o lo storage pool entra in modalità "NON DISPONIBILE". La buona notizia è che, se il RAID è configurato correttamente e si procede con cautela, è possibile sostituire il disco difettoso e ripristinare il sistema senza perdere dati.

In questo articolo vedremo, in modo molto dettagliato e con un approccio pratico, come identificare un disco rotto, come Rimuoverlo da un RAID software utilizzando mdadmCome gestire i casi più delicati, come un pool ZFS che rifiuta di importare a causa della mancanza di repliche, cosa succede quando si tenta di leggere i dischi in Windows con WSL2 e XFS e come gestire scenari in cui i dischi RAID hanno dimensioni diverse e si desidera sfruttare lo spazio rimanente.

Concetti di base: RAID software in Linux (mdadm, ZFS, tipi RAID)

Prima di iniziare a giocare, è importante chiarire alcune cose. concetti fondamentali sul RAID in LinuxIn questo modo si eviteranno sorprese ed errori irreversibili quando sarà il momento di sostituire un disco danneggiato.

La maggior parte dei server Linux tradizionali utilizza RAID software basato su mdadmQuesto sistema crea dispositivi /dev/mdX virtuali (ad esempio, /dev/md0, /dev/md1…) che vengono creati da partizioni fisiche come /dev/sda1, /dev/sdb2, ecc. Su questi dispositivi /dev/mdX vengono montati file system come ext4, XFS o altri.

Un caso diverso, sempre più diffuso, è l'uso di ZFS come file system e gestore di volumiZFS non si basa su mdadm, ma gestisce la propria ridondanza utilizzando vdev (mirror, RAIDZ, ecc.). Quando un disco si guasta in ZFS, il processo di sostituzione e ripristino viene gestito con comandi come zpool e non con mdadm.

È inoltre importante non confondere il RAID con i backup: il RAID offre ridondanza e continuità del servizioMa non sostituisce un backup. Un RAID 1 può salvarti in caso di guasto di un disco, ma non se cancelli accidentalmente dei dati o se l'intera struttura logica del file system si corrompe.

In molti fornitori (come Hetzner e altri fornitori dedicati), le immagini di sistema sono già dotate di un Software RAID1 preconfigurato su due dischi, divisi in più partizioni: swap, /boot, root / e talvolta /home, ciascuna con il suo corrispondente /dev/mdX.

Come ispezionare lo stato di un RAID software con mdadm

Quando si sospetta che uno dei dischi rigidi stia iniziando a guastarsi, la prima cosa da fare è vedere esattamente cosa sta succedendo nel RAIDPer farlo, hai a disposizione diversi strumenti di base che dovresti padroneggiare.

Un comando molto utile è lsblkQuesto comando mostra come sono organizzati i dischi, le partizioni e i dispositivi RAID sul sistema. Con un singolo comando, è possibile vedere quali dischi fisici sono presenti e come si relazionano a /dev/mdX:

Esempio di output di lsblk (semplificato):

NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
loop1 7:1 0 110.6M 1 loop /snap/core/...
sda 8:0 0 3.6T 0 disk
├─sda1 8:1 0 16G 0 part └─md0 9:0 0 16G 0 raid1
├─sda2 8:2 0 512M 0 part └─md1 9:1 0 511M 0 raid1 /boot
├─sda3 8:3 0 2T 0 part └─md2 9:2 0 2T 0 raid1 /
└─sda4 8:4 0 1.7T 0 part └─md3 9:3 0 1.7T 0 raid1 /home
sdb 8:16 0 3.6T 0 disk
├─sdb1 8:17 0 16G 0 part └─md0 9:0 0 16G 0 raid1
├─sdb2 8:18 0 512M 0 part └─md1 9:1 0 511M 0 raid1 /boot
├─sdb3 8:19 0 2T 0 part └─md2 9:2 0 2T 0 raid1 /
└─sdb4 8:20 0 1.7T 0 part └─md3 9:3 0 1.7T 0 raid1 /home

Con questa struttura, si può vedere che ci sono due dischi, sda e sdb, e che ogni partizione su sda ha il suo mirror su sdb, formando gli array md0, md1, md2 e md3. In un ambiente del genere, se uno dei dischi si guasta, l'altro dovrebbe continuare a funzionare. contenente tutte le informazioni.

Per approfondire un array specifico, puoi usare mdadm –dettaglioAd esempio, per visualizzare lo stato di /dev/md0:

mdadm --detail /dev/md0

L'output include dati come il livello RAID, la dimensione, il numero di dischi attivi e, infine, una tabella con i dispositivi che compongono l'array. Vedrai qualcosa di simile a questo:

Number Major Minor RaidDevice State
0 8 1 0 active sync /dev/sda1
1 8 17 1 active sync /dev/sdb1

In questa tabella è possibile rilevare se una partizione è contrassegnata come difettoso (difettoso), "rimosso" o se un disco è mancante. Queste informazioni sono fondamentali per sapere quale disco deve essere sostituito o quale deve essere rimosso senza danneggiare il sistema.

Rimozione di un disco sano da un RAID (ad esempio, nei server dedicati)

In alcuni casi non si verifica alcun guasto fisico del disco, ma semplicemente Vuoi liberare uno dei dischi nel RAID per dedicarlo a un altro utilizzo: archiviazione indipendente, backup, ecc. Questa soluzione è comune nei server dedicati in cui il provider installa un RAID1 di default, ma è necessario che il secondo disco sia libero.

  Come pianificare le attività con fcron e cron in Linux

L'idea è questa: contrassegnare le partizioni su quel disco come difettose in ogni array, rimuoverle dal RAID e quindi ridimensionare il numero di dispositivi in ​​modo che mdX non attenda più il secondo disco. Il sistema continuerà a funzionare con un "RAID" a disco singolo, che in realtà è uno pseudo-RAID ma evita di doverlo reinstallare.

Il processo deve essere ripetuto per ogni array mdX coinvolto (swap, /boot, /, /home…). Vediamolo passo dopo passo per md0, sapendo che bisogna fare lo stesso in md1, md2, ecc.

1. Esaminare la partizione coinvolta nell'array

Per prima cosa, controlla quali partizioni fisiche compongono /dev/md0:

mdadm -D /dev/md0

Alla fine dell'uscita vedrai qualcosa del genere:

Number Major Minor RaidDevice State
0 8 1 0 active sync /dev/sda1
1 8 17 1 active sync /dev/sdb1

Se il tuo obiettivo è rimuovere il disco sdb dal RAID, questa tabella ti mostra che Dovrai agire su /dev/sdb1 Nel caso di md0, /dev/sdb2 in md1 e così via.

2. Contrassegnare la partizione come difettosa

mdadm non consente semplicemente di rimuovere una partizione che considera integra; è necessario prima contrassegnarla come non funzionante. Questo non danneggia fisicamente il disco, ma indica semplicemente all'array di interrompere l'utilizzo di quella replica.

Esempio per md0 e sdb1:

mdadm /dev/md0 --fail /dev/sdb1

La risposta tipica sarà qualcosa del tipo "set /dev/sdb1 faulty in /dev/md0". Da quel momento in poi, l'array sa che questa replica non è più attendibile e la pone in uno stato di errore.

3. Rimuovere la partizione non riuscita dall'array

Una volta contrassegnato come difettoso puoi rimuovere la partizione RAID:

mdadm /dev/md0 --remove /dev/sdb1

Questo farà sì che mdadm "scolleghi" la partizione fisica dell'array. Logicamente, md0 continuerà a esistere, ma verrà sottoposto a backup solo da /dev/sda1.

4. Regolare il numero di dispositivi RAID

A questo punto, md0 potrebbe rimanere in uno stato degradato se ritiene ancora che ci siano due dispositivi. Affinché il sistema lo consideri stabile, è necessario... modificare il numero previsto di dischi nella matrice:

mdadm --grow /dev/md0 --raid-devices=1 --force

Sebbene la parola "crescere" possa sembrare indicare un'espansione, in questo contesto si sta in realtà modificando la configurazione interna per comunicare all'array che ora ci sarà un solo dispositivo attivo.

Dopo aver ripetuto questa procedura su tutte le unità mdX, è possibile riavviare il server. Il risultato sarà un sistema che si avvia tramite un RAID software con un singolo disco, mentre l'altro disco rimarrà inutilizzato. completamente libero di partizionare e formattare come desidera.

Sostituzione effettiva di un disco difettoso in mdadm RAID

Quando il problema non è che vuoi liberare un disco, ma che uno di essi È morto davveroLa procedura è simile ma con una differenza fondamentale: invece di tenere un solo disco, l'obiettivo è sostituire il disco danneggiato con uno nuovo e ricostruire il RAID.

In termini generali, il ciclo sarebbe:

  • Identificare il disco difettoso (smartctl, messaggi del kernel, mdadm –detail).
  • Contrassegnare le partizioni su quel disco come difettose in ogni mdX.
  • Rimuoverli dal RAID con mdadm –remove.
  • Sostituire fisicamente il disco difettoso con uno nuovo (evitare le truffe quando si acquistano dischi).
  • Partizionare il nuovo disco in modo che le sue partizioni corrispondano per dimensione e tipo a quelle del disco funzionante.
  • Aggiungere le nuove partizioni a ciascun /dev/mdX con mdadm –add e lasciare che venga ricostruito.

Con mdadm –dettaglio /dev/md0 È possibile controllare lo stato della ricostruzione e vedere quando tutti i dischi sono di nuovo attivi e sincronizzati. È anche possibile monitorare il processo con watch -n1 cat /proc/mdstatche aggiornerà la barra di avanzamento della risincronizzazione ogni secondo.

Nelle configurazioni più avanzate (come RAID 5 o RAID 6), si applica lo stesso principio, ma l'impatto della perdita di più di un disco contemporaneamente può essere catastrofico. Ecco perché la sostituzione è fondamentale. rapidamente un disco che inizia a dare errori prima che un altro fallisca.

Crea e gestisci un nuovo array RAID (ad esempio RAID6 con mdadm)

Sebbene l'obiettivo qui sia quello di sostituire i dischi guasti, è utile vedere come viene costruito un array RAID da zero per capire cosa viene modificato quando un disco viene sostituito. Un esempio tipico è la creazione di un RAID6 con più dischi utilizzando mdadm.

Il primo passo è assicurarsi che mdadm sia installato sul sistema. Su Debian/Ubuntu, questo si ottiene con:

sudo apt-get install mdadm

Nei sistemi di tipo Red Hat, il comando equivalente sarebbe:

sudo yum install mdadm

Prima di creare l'array, è consigliabile verificare che i dischi non contengano già superblocchi di vecchi RAID. Questo si fa esaminando i potenziali dischi o partizioni:

sudo mdadm -E /dev/sdb /dev/sdc /dev/sdd /dev/sde /dev/sdf

Se non è presente alcuna firma precedente, il passaggio successivo consiste nel partizionare ciascun disco utilizzando fdisk (o parted) creando una partizione RAID primaria (codice fd). La sequenza tipica in fdisk sarebbe: crea nuova partizione (n), primaria (p), scegli il numero, accetta i settori predefiniti, cambia tipo (t), seleziona (codice fd) e scrivi le modifiche (w).

  Come usare Pi-hole su un Raspberry Pi per bloccare le pubblicità

Una volta preparate tutte le partizioni, viene creato l'array:

sudo mdadm --create /dev/md0 --level=6 --raid-devices=5 /dev/sdb1 /dev/sdc1 /dev/sdd1 /dev/sde1 /dev/sdf1

Questo creerà /dev/md0 come array RAID6 utilizzando cinque partizioni. L'array inizierà automaticamente la ricostruzione e potrai monitorarne l'avanzamento con:

watch -n1 cat /proc/mdstat

Una volta che il RAID è pronto, è necessario creare il file system, ad esempio ext4:

sudo mkfs.ext4 /dev/md0

Quindi viene montato su una directory, ad esempio /mnt/Raid6:

sudo mkdir -p /mnt/Raid6
sudo mount /dev/md0 /mnt/Raid6/

Per montarlo automaticamente all'avvio, si aggiunge una voce a /etc/fstab, simile a questa:

/dev/md0 /mnt/raid6 ext4 defaults 0 0

Per evitare di perdere la configurazione dell'array, viene generato il file di configurazione mdadm:

sudo mdadm --detail --scan --verbose >> /etc/mdadm.conf

Testare il RAID provocando un guasto del disco

Prima di affidare i propri dati a un array RAID appena creato, è consigliabile verificare che In caso di guasto, si comporta davvero come ci si aspetterebbe.Il modo più sicuro per farlo è simulare il guasto di uno dei dischi utilizzando mdadm, senza toccare l'hardware fisico.

Supponiamo di avere un array RAID che include /dev/sdb1, /dev/sdc1 e un disco di riserva /dev/sdg1. È possibile forzare l'errore logico di /dev/sdc1 con:

sudo mdadm --manage --fail /dev/md0 /dev/sdc1

Quindi controlla i dettagli dell'array:

sudo mdadm --detail /dev/md0

Durante il processo di avvio, dovresti vedere che il disco contrassegnato come difettoso è stato cancellato e sostituito da quello di riserva, che inizierà la sincronizzazione. Questa è la prova migliore che il RAID risponde bene a un incidente reale.

Casi speciali: problemi con ZFS quando un disco nel pool si guasta

Negli ambienti più moderni, in particolare con hypervisor come Proxmox, ZFS viene utilizzato per gestire i dischi in pool con ridondanza nativaUn caso tipico: si ha un pool ZFS in mirror (RAID1), uno dei due dischi si guasta e improvvisamente il server smette di avviarsi perché non è possibile importare il pool root.

In tal caso, quando si tenta di importare manualmente il pool, potrebbero essere visualizzati messaggi come:

zpool import -f rpool
cannot import 'rpool': no such pool or dataset
Destroy and recreate the pool from a backup source

Oppure prova altre opzioni:

zpool import -N

Restituisce lo stato UNAVAIL e indica "repliche insufficienti" e "dispositivi o dati danneggiati". In breve, ZFS non vede abbastanza copie valide per garantire l'integrità del pool, ed è per questo che si rifiuta di importarlo nel modo standard.

In questi casi, è fondamentale non improvvisare troppi comandi casuali. Ecco alcuni suggerimenti da tenere a mente:

  • Se il mirror è stato montato correttamente, un singolo disco funzionante dovrebbe essere sufficiente per importare il pool in modalità degradata. Se ZFS segnala un numero insufficiente di mirror, potrebbe esserci un grave danneggiamento o un rilevamento dei dispositivi non ottimale.
  • Non è possibile "dire" a ZFS di sostituire direttamente un disco non funzionante con un altro se il pool non riesce a importare; non è come mdadm, dove si lavora a livello di partizione senza montare il file system.
  • La cosa prudente da fare è solitamente provare un'importazione forzato e di sola lettura Utilizzando flag avanzati (ad esempio, -F, -o readonly=on), verificare quali set di dati sono recuperabili e, se possibile, copiare i dati.
  • Se il pool non può essere importato in alcun modo, il passo successivo più sensato è quello di clonare o bloccare l'immagine del disco ancora funzionante, per preservare tale "backup" prima di ulteriori sperimentazioni.

Il grande problema in uno scenario come quello descritto (dove il disco buono è anche l'unico posto in cui si trovano i dati) è che Non esiste alcuna rete di sicurezza aggiuntivaPertanto, è consigliabile interrompere qualsiasi tentativo di riparazione aggressivo e concentrarsi innanzitutto sul salvataggio del contenuto del disco che risponde ancora, anche se si trova al di fuori di ZFS.

Leggere un RAID Linux (XFS, ext4) da Windows utilizzando WSL2

Un altro scenario molto comune è quello di qualcuno che rimuove un disco da un server Linux e vuole Leggi i tuoi dati da un PC WindowsA prima vista potrebbe sembrare semplice: si collega l'unità tramite USB, si utilizza uno strumento come Linux Reader e il gioco è fatto. Ma quando l'unità fa parte di un RAID software, le cose si complicano.

Nel caso specifico di un disco con una tabella GPT in cui tutte le partizioni appaiono come "Linux RAID", Windows e molte utility grafiche non sanno cosa farne. Ad esempio, fdisk potrebbe visualizzare qualcosa di simile a questo:

Device Start End Sectors Size Type
/dev/sdd1 1032192 5031935 3999744 1.9G Linux RAID
/dev/sdd2 5031936 9031679 3999744 1.9G Linux RAID
/dev/sdd3 30720 1032191 1001472 489M Linux RAID
/dev/sdd4 9031680 3907028991 3897997312 1.8T Linux RAID

Se all'interno di /dev/sdd4 è presente, ad esempio, un file system XFS appartenente a un array mdadm, il tentativo di montarlo direttamente solitamente produce un risultato simile a questo:

  Come montare partizioni NTFS in Windows con accesso in scrittura in Linux

mount -t xfs /dev/sdd4 /mnt/tempdisk
mount: wrong fs type, bad superblock on /dev/sdd4...

Oppure se lo provi senza specificare il tipo FS:

mount /dev/sdd4 /mnt/tempdisk
mount: unknown filesystem type 'linux_raid_member'

Questi messaggi indicano che /dev/sdd4 non è direttamente un file systemma piuttosto un membro di un array RAID. Il file system "reale" si trova su /dev/mdX, che non esiste ancora in questo contesto. Per leggere il contenuto da WSL2 (Ubuntu, ad esempio), è necessario:

  • Caricare i moduli mdadm nel kernel WSL2 se non sono già caricati.
  • Applica mdadm –esaminare sulle partizioni RAID per identificare l'array a cui appartengono.
  • Ricreare l'array mdX in modalità "assemble" (mdadm –assemble) in modo che venga visualizzato /dev/md0 (o quello che dovrebbe essere).
  • Una volta che /dev/md0 esiste, monta quel dispositivo con il tipo di FS appropriato (XFS, ext4, ecc.).

Senza passare attraverso la fase di assemblaggio RAID, Non sarà possibile montare direttamente le partizioni contrassegnate come Linux RAIDAnche se sai che al suo interno c'è un file XFS. E in Windows nativo, fatta eccezione per strumenti molto specifici (solitamente a pagamento o di sola lettura), è difficile gestire bene questi casi.

RAID con dischi di diverse dimensioni e utilizzo dello spazio rimanente

Un caso curioso, ma sempre più comune, è quello di qualcuno che imposta un RAID1 con due dischi di dimensioni molto diverseAd esempio, un NVMe da 1 TB e un SATA da 500 GB. In casi di emergenza, questa soluzione potrebbe essere accettabile, ma RAID 1 utilizzerà solo il disco più piccolo per il mirroring.

In questo scenario, il risultato tipico sarà che la "seconda metà" del disco da 1 TB rimarrà inutilizzata, semplicemente perché il RAID 1 è limitato ai primi 500 GB (la dimensione del disco più piccolo). Quella porzione non farà parte dell'array e rimarrà come spazio non allocato o su una partizione separata.

Supponiamo che ora tu decida di fare le cose per bene e desideri sostituire il disco piccolo con un altro disco da 1 TB Identica alla prima. La procedura di sostituzione del disco in mdadm è simile a quella già descritta: il vecchio disco viene contrassegnato come difettoso, rimosso dall'array, il nuovo disco viene inserito, vengono create le partizioni equivalenti e aggiunto al RAID per essere ricostruito.

La domanda allora sorge spontanea: come sfruttare lo spazio extra Quanto spazio hai attualmente su entrambi i dischi per espandere, ad esempio, la partizione root / di circa 500 GB? In generale, i passaggi solitamente seguiti sono:

  • Ridimensionare le partizioni RAID su entrambi i dischi per occupare lo spazio extra (utilizzando strumenti come parted o fdisk, e sempre con estrema attenzione).
  • Applica mdadm – crescere sull'array mdX per comunicargli che la sua dimensione effettiva è ora maggiore.
  • Una volta che il dispositivo RAID ha più capacità, ridimensionare il file system in alto (ad esempio, estendere ext4 con resize2fs; vedere Come liberare spazio su disco in Linux).

Questi tipi di operazioni, in particolare sulla partizione root e con UEFI/EFI, swap e altre funzionalità, comportano la modifica della tabella delle partizioni, dell'array RAID e dei file system. Si consiglia vivamente di backup recentie capire come sono configurate le partizioni EFI e lo swap in modo da non rendere il sistema non avviabile.

Se tutto viene eseguito correttamente, né la partizione di swap né quella EFI dovrebbero risultare configurate in modo errato, ma eventuali errori nei numeri di settore, nell'ordine delle partizioni o nei dispositivi registrati in /etc/fstab e nel boot loader possono lasciare il sistema in modalità "rescue" richiedendo riparazioni manuali.

In sintesi, l'utilizzo di dischi di dimensioni diverse in RAID1 è fattibile nel breve termine ma non è consigliato nel medio-lungo termine, perché Ciò complica notevolmente la futura gestione dello spazio. quando si cerca di standardizzare l'hardware.

Dopo tutto questo, la conclusione fondamentale è che sostituire un disco guasto in un RAID Linux non è una magia, ma richiede un approccio metodico: innanzitutto, comprendere la topologia RAID (mdadm o ZFS); poi, identificare con certezza quale disco o partizione deve essere riparato; e infine, eseguire i comandi appropriati (mdadm –fail, –remove, –add, zpool import, ecc.) con calma. Con una strategia ben organizzata, buoni backup e un approccio paziente, è possibile gestire con successo la maggior parte delle situazioni, dalla liberazione di un disco su un server dedicato al ripristino di un pool ZFS non autorizzato o al tentativo di recuperare dati da Windows tramite WSL2.

Gestisci le partizioni del disco senza perdere dati in GParted
Articolo correlato:
Come gestire le partizioni del disco senza perdere dati in GParted