Simulatore Raid

Offline · Scenari · Score · Report

🧪 Storage & Dashboard

Array /dev/md0
Capacità utile
Fault tolerance
STATUS: —

📈 Telemetria (sim)

Temperature avg
IOPS (sim)
CRC errors
Reallocated
Cambia in base ai guasti (slow/overheat/crc/fail) e durante il rebuild.

⏱ Verifica

Time leftOFF
Score0
Hints used0
🎯 Scenario
Nessuno scenario caricato. Usa scenario list o Esercizio random.
🔑 Carica codice prova
Hai ricevuto un codice dal docente? Incollalo qui e clicca Avvia prova per caricare lo scenario pianificato.
Regola didattica: lo studente deve lavorare col terminale. Il click sui dischi è disabilitato, salvo Teacher ON.

Prova con: help · scenario list · cat /proc/mdstat · mdadm --detail /dev/md0 · smartctl -a /dev/sdX · dmesg | tail · mdadm --remove/--add/--rebuild.

💻 Terminale Linux (simulato)

Mode LAB
raidlab@dc1 fs: none exercise: off
tip: help
raidlab(OK)$
🧩 Parità RAID5 (visual)
Disponibile quando RAID5 è selezionato.
Extra: hint (penalità) · report / export · powerfail (simula blackout, interrompe rebuild) · solution (solo Teacher).

👨‍🏫 Pannello Docente — Programmazione verifiche

Configurazione personalizzata
Come funziona: configura l'array RAID esattamente come vuoi → assegna i guasti ai dischi → imposta classe/data/timer → clicca Genera codice prova. Lo studente incolla il codice nel LAB e la prova parte identica per tutti.
① Configurazione array RAID
② Guasti da assegnare ai dischi
Lascia "Nessun guasto" per i dischi che devono restare OK. Puoi assegnare guasti multipli su dischi diversi.
③ Dati verifica

🎓 Prova rapida (casuale)

Codice

Genera prova casuale

Clicca "Genera prova": otterrai un codice prova e uno scenario random. Lo studente deve consegnare il codice + il report (comando export o tasto Export report).
Tip: puoi impostare il timer nel LAB (5/10 min) e far fare una verifica "a tempo".

Dettagli prova

Scenario
Seed
Obiettivo
Consegna consigliata
1) Codice prova
2) Report (Export report o comando export)
3) Screenshot del terminale (opzionale)
Se vuoi farli lavorare "alla cieca", lascia Teacher OFF e non dare hint. Se vuoi guidarli, abilita hint oppure usa DOCUMENTAZIONE.

📚 Documentazione integrata (comandi & recovery)

Focus  mdadm + diagnosi + rebuild
Guida rapida di laboratorio
Guida completa RAID
Procedure complete
💡
Suggerimento di laboratorio
Quando si sospetta un problema RAID, il primo comando da eseguire è quasi sempre cat /proc/mdstat. Questo permette di capire immediatamente se l'array è clean, degraded oppure in fase di rebuild.

Quando si lavora con sistemi RAID su Linux, la prima abilità che deve sviluppare un amministratore di sistema è la capacità di capire rapidamente lo stato dell'array e individuare eventuali problemi. Questa guida rapida descrive il flusso logico che normalmente si segue durante una fase di diagnosi.

Esempio RAID10
Mirror 1:   A   B
              A   B

Mirror 2:   C   D
              C   D

Prima i dischi sono organizzati in mirror, poi i dati sono distribuiti tra le coppie.
1 Controllare lo stato dell'array RAID
cat /proc/mdstat

Questo comando legge il file virtuale /proc/mdstat, che viene generato dal kernel Linux e contiene informazioni sugli array RAID software gestiti dal sistema.

Gli stati più comuni che potresti vedere sono:

  • clean – l'array funziona correttamente
  • degraded – uno dei dischi non è più operativo
  • recovery / rebuild – il sistema sta ricostruendo i dati

2 Analizzare i dettagli dell'array
mdadm --detail /dev/md0

Il comando mdadm è lo strumento principale utilizzato in Linux per gestire RAID software. Con l'opzione --detail è possibile visualizzare una descrizione completa dell'array.

Questo passaggio serve soprattutto per identificare quale disco ha causato il problema e verificare se l'array è ancora in grado di garantire ridondanza.


3 Visualizzare la struttura dei dischi
lsblk

Il comando lsblk mostra la struttura dei dispositivi di storage presenti nel sistema. Guardando questo output è possibile vedere quali dischi partecipano all'array e verificare se qualche dispositivo risulta mancante.


4 Controllare i messaggi del kernel
dmesg | tail

Il comando dmesg permette di leggere i messaggi prodotti dal kernel Linux. Questi messaggi spesso contengono informazioni preziose su errori hardware, problemi di lettura o malfunzionamenti dei dischi.


5 Verificare la salute del disco
smartctl -a /dev/sdX

Il comando smartctl utilizza il sistema SMART integrato nei dischi moderni per raccogliere statistiche interne e individuare segnali di degrado prima che il dispositivo smetta completamente di funzionare.

📦 Cos'è un RAID?

RAID sta per Redundant Array of Independent Disks (in origine "Inexpensive"). È una tecnologia che combina più dischi fisici in un unico sistema logico, gestito dal sistema operativo o da un controller hardware dedicato.

Lo scopo può essere uno o più di questi obiettivi: aumentare le prestazioni distribuendo le operazioni su più dischi in parallelo, garantire la ridondanza dei dati (fault tolerance) così che il guasto di uno o più dischi non provochi perdita di informazioni, oppure entrambe le cose insieme.

Attenzione: RAID non è un backup. Protegge da guasti hardware dei dischi, non da cancellazioni accidentali, ransomware o disastri fisici che coinvolgono l'intero server. Un sistema di backup separato è sempre necessario.

🧠 Concetti fondamentali

⚡ Striping

I dati vengono suddivisi in blocchi e scritti su più dischi in parallelo. Ogni disco riceve una porzione differente del dato ("stripe").

Vantaggio: velocità di lettura e scrittura aumentata, poiché più dischi lavorano contemporaneamente.

Rischio: se un disco si guasta, tutti i dati dello stripe sono irrecuperabili (nessuna ridondanza da solo).

Esempio — 3 dischi in striping
sda
sdb
sdc
S1
A1
A2
A3
S2
B1
B2
B3
S3
C1
C2
C3

🪞 Mirroring

I dati vengono copiati in modo identico su due o più dischi. Ogni scrittura aggiorna tutti i dischi mirror in modo sincrono.

Vantaggio: alta ridondanza — finché almeno un disco del mirror funziona, i dati sono accessibili.

Svantaggio: la capacità utile è dimezzata (o ridotta al numero di copie), e le scritture sono più lente.

Esempio — mirror su 2 dischi
sda
sdb (copia)
S1
A
A
S2
B
B
S3
C
C

🔢 Parità (XOR)

Un blocco speciale di parità viene calcolato tramite l'operazione logica XOR dei blocchi dati. Non è una copia, ma un'informazione matematica che permette di ricostruire un blocco mancante.

Vantaggio: ridondanza con meno spreco di spazio rispetto al mirroring.

Esempio: A XOR B = P. Se perdo A, lo ricostruisco: B XOR P = A.

Parità distribuita — stripe con P
sda
sdb
sdc
sdd
S1
D1
D2
D3
P
S2
D4
D5
P
D6
S3
P
D7
D8
D9

📊 Livelli RAID
Dati
Parità P
Parità Q (doppia)
Copia mirror
Disco guasto / perso

RAID 0

Striping puro No ridondanza

I dati vengono distribuiti equamente su tutti i dischi senza alcuna informazione di parità o copia. Non esiste ridondanza: il guasto di qualsiasi disco causa la perdita totale dell'array.

Viene usato quando si vuole la massima velocità e la perdita dei dati è accettabile (es. cache temporanee, rendering, editing video su workstation con backup separato).

📀 Min dischi: 2 💾 Capacità: N × size 🛡 Fault tolerance: 0 ⚡ Lettura: ottima ✍ Scrittura: ottima
✅ Pro
  • Massime prestazioni in lettura e scrittura
  • Usa il 100% della capacità dei dischi
  • Semplicità di configurazione
❌ Contro
  • Zero ridondanza
  • 1 guasto = dati irrecuperabili
  • Non adatto a produzione critica
🎬 Editing video 🎮 Gaming temporaneo 🧪 Ambienti di test
RAID 0 — 4 dischi
sda
sdb
sdc
sdd
S1
A1
A2
A3
A4
S2
B1
B2
B3
B4
S3
C1
C2
C3
C4
⚠️ Se sda si guasta → stripe A1, B1, C1 persi → array FAILED

RAID 1

Mirroring puro Alta ridondanza

Ogni dato viene scritto in modo identico su tutti i dischi dell'array. Se un disco si guasta, i dati sono ancora disponibili su quello rimanente. La lettura può essere parallelizzata su più dischi aumentando le performance in read.

È il livello più semplice e affidabile per proteggere i dati. Il costo è che si sfrutta solo la capacità di un disco, indipendentemente da quanti dischi sono nell'array.

📀 Min dischi: 2 💾 Capacità: 1 × size 🛡 Fault tolerance: N-1 dischi ⚡ Lettura: buona ✍ Scrittura: normale
✅ Pro
  • Massima ridondanza
  • Recovery immediato da 1 guasto
  • Lettura veloce (multi-disk)
❌ Contro
  • Capacità utile = 1 solo disco
  • Scrittura rallentata dal sync
  • Costoso per grandi capacità
🗄 Database critici 💻 OS di boot 🏦 Dati finanziari
RAID 1 — 2 dischi
sda (originale)
sdb (copia)
S1
A
A
S2
B
B
S3
C
C
S4
D
D
✅ sda guasto → sdb ancora operativo → dati accessibili

RAID 2 ⚠ Obsoleto

Hamming ECC

RAID 2 utilizza la codifica di correzione degli errori di Hamming (ECC) distribuita su dischi dedicati. I dati vengono distribuiti bit per bit (bit-level striping), e i bit di parità ECC vengono scritti su dischi separati dedicati.

Questo livello era studiato per rilevare e correggere errori sui singoli bit direttamente a livello hardware, prima che i dischi moderni integrassero la correzione ECC internamente. Oggi non viene più utilizzato in pratica: l'ECC è gestita dall'elettronica interna di ogni disco, rendendo RAID 2 inutilmente complesso e costoso.

🏛
Contesto storico: RAID 2 era usato nei mainframe degli anni '80-'90 prima che i dischi IDE/SCSI integrassero la correzione errori. Richiedeva da 3 a 10+ dischi solo per la parità ECC.

RAID 3 ⚠ Obsoleto

Parità su disco dedicato

RAID 3 usa lo striping a livello di byte (byte-level striping) con un disco dedicato esclusivamente alla parità. Tutti i dati sono distribuiti byte per byte tra i dischi dati, e la parità corrispondente viene sempre scritta sullo stesso disco fisso.

Il problema principale è che il disco di parità diventa un collo di bottiglia: ogni singola operazione di lettura/scrittura richiede un accesso a quel disco, che si deteriora prima degli altri. RAID 3 è stato largamente sostituito da RAID 5, che distribuisce la parità su tutti i dischi.

📀 Min dischi: 3 💾 Capacità: (N-1) × size 🛡 Fault tolerance: 1 disco
⚙️
Differenza con RAID 5: in RAID 3 la parità è sempre sullo stesso disco fisso. In RAID 5 la parità ruota tra tutti i dischi (distributed parity), eliminando il collo di bottiglia.

RAID 4 Raro

Block-level + parità dedicata

Simile a RAID 3 ma con striping a livello di blocco anziché byte. I dati vengono distribuiti a blocchi sui dischi dati, con un disco fisso dedicato alla parità. Permette letture parallele di blocchi indipendenti, ma le scritture soffrono ancora del collo di bottiglia del disco di parità.

RAID 4 è rimasto in uso in alcune implementazioni di storage specializzato (es. vecchi NetApp WAFL) ma oggi è quasi completamente soppiantato da RAID 5.

📀 Min dischi: 3 💾 Capacità: (N-1) × size 🛡 Fault tolerance: 1 disco

RAID 5

Parità distribuita 1 guasto tollerato

RAID 5 distribuisce i dati e la parità su tutti i dischi dell'array, eliminando il collo di bottiglia di un disco di parità dedicato. Per ogni stripe, la parità (calcolata con XOR) ruota su un disco diverso.

Con un disco guasto, tutti i dati possono essere ricostruiti matematicamente dagli altri. Questo processo si chiama rebuild e può richiedere ore o giorni per array di grandi dimensioni.

Attenzione: durante il rebuild l'array è in stato DEGRADED e un secondo guasto causerebbe la perdita totale dei dati. Per questo motivo si consiglia sempre un disco spare hot-standby.

📀 Min dischi: 3 💾 Capacità: (N-1) × size 🛡 Fault tolerance: 1 disco ⚡ Lettura: ottima ✍ Scrittura: buona
✅ Pro
  • Buon equilibrio capacità/ridondanza
  • Lettura molto veloce
  • Parità distribuita (no bottleneck)
❌ Contro
  • Solo 1 guasto tollerato
  • Rebuild lento su dischi grandi
  • Scrittura random più lenta (write penalty)
🏢 File server aziendali 🖥 NAS domestici 📁 Storage archivi
RAID 5 — 4 dischi (parità ruotante)
sda
sdb
sdc
sdd
S1
D1
D2
D3
P
S2
D4
D5
P
D6
S3
D7
P
D8
D9
S4
P
D10
D11
D12
⚠️ sdb guasto → DEGRADED, rebuild necessario. 2° guasto = FAILED.

RAID 6

Doppia parità 2 guasti tollerati

RAID 6 estende RAID 5 aggiungendo un secondo blocco di parità indipendente per ogni stripe (parità P e parità Q, calcolate con algoritmi diversi — es. Reed-Solomon). Questo permette di tollerare il guasto simultaneo di due dischi qualsiasi.

È particolarmente indicato per array con molti dischi di grande capacità, dove il rischio di un secondo guasto durante il rebuild (che dura ore o giorni) è statisticamente significativo.

📀 Min dischi: 4 💾 Capacità: (N-2) × size 🛡 Fault tolerance: 2 dischi ⚡ Lettura: ottima ✍ Scrittura: più lenta di RAID5
✅ Pro
  • Sopravvive a 2 guasti simultanei
  • Ideale per array grandi
  • Standard nei NAS enterprise
❌ Contro
  • Perdi 2 dischi di capacità
  • Scrittura più lenta (doppia parità)
  • Più CPU/controller necessario
🏭 Storage enterprise ☁️ Cloud storage 📊 Data center 🗃 Archivi a lungo termine
RAID 6 — 5 dischi (P e Q ruotanti)
sda
sdb
sdc
sdd
sde
S1
D1
D2
D3
P
Q
S2
D4
D5
P
Q
D6
S3
D7
P
Q
D8
D9
✅ 2 dischi qualsiasi guasti → DEGRADED ma operativo → rebuild possibile

RAID 10

Stripe di mirror 1 per coppia

RAID 10 (o RAID 1+0) combina mirroring e striping. I dischi vengono prima organizzati in coppie mirror, poi le coppie vengono messe in stripe. Il risultato è un array ad altissime prestazioni con ridondanza garantita per ogni coppia.

Un guasto è tollerato per ciascuna coppia mirror (fino a N/2 dischi, ma mai entrambi della stessa coppia). Se entrambi i dischi di una coppia mirror si guastano, l'array è FAILED.

È il livello preferito per database ad alto I/O e applicazioni che richiedono sia velocità che affidabilità, quando il costo di avere metà capacità non è un problema.

📀 Min dischi: 4 (pari) 💾 Capacità: (N/2) × size 🛡 Fault tolerance: 1 per coppia ⚡ Lettura: eccellente ✍ Scrittura: eccellente
✅ Pro
  • Prestazioni top in lettura e scrittura
  • Rebuild più rapido (solo mirror)
  • Ideale per database SQL
❌ Contro
  • Usa solo il 50% della capacità
  • Costoso (servono 4+ dischi)
  • Mirror pair perso = FAILED
🗄 MySQL / PostgreSQL 🚀 High-performance apps 💼 Virtualizzazione 🏥 Sistemi critici H24
RAID 10 — 4 dischi (2 mirror + stripe)
Mirror 1
sda
sdb
S1
A
A
S2
B
B
S3
C
C
Mirror 2
sdc
sdd
S1
D
D
S2
E
E
S3
F
F
Stripe: Mirror1 + Mirror2 in parallelo.
✅ sda guasto → sdb tiene il mirror
❌ sda+sdb guasti → mirror 1 perso → FAILED

📋 Confronto tra i livelli RAID
Livello Min dischi Capacità utile Fault tolerance Lettura Scrittura Uso tipico Note
RAID 0 2 N × size 0 dischi Eccellente Eccellente Cache, editing No backup = disastro
RAID 1 2 1 × size N-1 dischi Buona Normale OS, database Costoso per TB
RAID 2 3+ Variabile 1 disco Media Media Obsoleto Solo teorico
RAID 3 3 (N-1) × size 1 disco Buona seq. Bottleneck P Obsoleto Parità fissa
RAID 4 3 (N-1) × size 1 disco Buona Bottleneck P Raro Sostituito da RAID5
RAID 5 3 (N-1) × size 1 disco Eccellente Buona NAS, file server Standard di fatto
RAID 6 4 (N-2) × size 2 dischi Eccellente Più lenta di R5 Enterprise, cloud Doppia parità P+Q
RAID 10 4 (pari) (N/2) × size 1 per coppia Eccellente Eccellente DB, virtualiz. Mirror pair perso = FAILED
🎯
Come scegliere il livello giusto?
Hai bisogno di massima velocità e hai un backup? → RAID 0.
Hai 2 dischi e vuoi semplice ridondanza? → RAID 1.
Hai 3-6 dischi e vuoi il bilanciamento tipico per un NAS? → RAID 5.
Hai array grandi (8+ dischi) e temi il rebuild lungo? → RAID 6.
Hai budget, servono prestazioni max E ridondanza per un database critico? → RAID 10.

Errori non fatali — CRC / Overheat / Slow
Tipi di errore e azioni consigliate
CRC errors — Spesso indica un problema di cavo o connessione SATA, non necessariamente il disco. Prima azione: sostituire il cavo e verificare il connettore.
Overheat — Temperatura critica: rischio guasto imminente. Migliorare il raffreddamento, pianificare sostituzione preventiva.
Slow — Disco lento: degrada le prestazioni dell'intero array. Monitorare con smartctl e pianificare sostituzione.

Filesystem su RAID (simulato)
mkfs.ext4 /dev/md0
mount /dev/md0 /mnt

Una volta montato: ls /mnt, touch /mnt/file, echo "testo" > /mnt/file, cat /mnt/file, rm /mnt/file, df -h.

🔍 5.1 Diagnosi RAID

La diagnosi è il primo passo obbligatorio davanti a qualsiasi problema. Prima di toccare qualsiasi cosa, bisogna capire cos'è successo, quale disco è coinvolto e qual è lo stato attuale dell'array. Usare sempre i comandi in questo ordine.

01 cat /proc/mdstat
Diagnosi

Legge il file virtuale /proc/mdstat generato in tempo reale dal kernel Linux. Contiene lo stato di tutti gli array RAID software attivi nel sistema. È il primo comando da eseguire in qualsiasi situazione.

Sempre come primo passo: all'avvio del turno, dopo un allarme, dopo una modifica all'array, durante il rebuild per monitorare l'avanzamento.

  • Lo stato dopo status=: OK, DEGRADED, FAILED
  • I tag tra parentesi quadre: [U] = disco attivo, [_] = disco mancante, [R] = disco in rebuild
  • La riga recovery = con la percentuale durante il rebuild
md0 : active raid5 sda[U] sdb[U] sdc[U] sdd[U] status=OK blocks=3000GB [ UUUU ]
md0 : active raid5 sda[U] sdb[F] sdc[U] sdd[U] status=DEGRADED blocks=3000GB [ U_UU ]
md0 : active raid5 sda[U] sdb[R] sdc[U] sdd[U] status=DEGRADED [ U.UU ] [==>.................] recovery = 12.3% (ETA ~ 180s)
md0 : active raid5 sda[F] sdb[F] sdc[U] sdd[U] status=FAILED [ __UU ] → 2 dischi guasti in RAID5 = array FAILED (dati irrecuperabili via RAID)

02 mdadm --detail /dev/md0
Diagnosi

Mostra informazioni dettagliate sull'array: livello RAID, capacità, stato di ogni disco, numero di guasti, spare presenti e stato del rebuild. È il comando di diagnosi più completo.

Dopo cat /proc/mdstat per identificare esattamente quale disco è in stato FAILED, REBUILDING o SPARE. Necessario prima di qualsiasi operazione di recovery.

  • Colonna State per ogni disco: active sync, faulty, spare rebuilding
  • Riga State : dell'array: clean, degraded
  • Riga Failed Disks : e Spare Disks :
  • Riga Rebuild : con la percentuale se attivo
/dev/md0: Raid Level : raid5 Array Size : 3000 GB Failed Disks : 1 Spare Disks : 0 State : degraded Number State Device 0 active sync /dev/sda 1 faulty /dev/sdb ← disco guasto 2 active sync /dev/sdc 3 active sync /dev/sdd
mdadm: cannot open /dev/md0: No such file or directory → array non esiste o non è stato creato ancora

03 lsblk
Diagnosi

Mostra la struttura ad albero di tutti i dispositivi di blocco (dischi, partizioni, array RAID, volumi LVM). Permette di vedere quali dischi fisici partecipano all'array e quali risultano mancanti o non montati.

Per verificare che tutti i dischi siano visibili al sistema e per controllare se il filesystem è montato. Utile anche per scoprire il nome corretto dei dispositivi (es. sda, sdb…).

  • La colonna TYPE: disk = disco fisico, raid5 = array RAID
  • La colonna MOUNTPOINT: se l'array è montato e dove
  • Dischi non elencati = non rilevati dal kernel (guasto hardware grave)
NAME SIZE TYPE MOUNTPOINT sda 1000G disk sdb 1000G disk (failed) sdc 1000G disk sdd 1000G disk md0 3000G raid5 /mnt
# sdb non appare nella lista → disco fisicamente non rilevato: controlla cavi SATA, connettori, alimentazione

04 dmesg | tail
Diagnosi

Mostra gli ultimi messaggi del buffer del kernel Linux. Il kernel registra in tempo reale tutto ciò che accade: errori di I/O, problemi SATA, errori CRC, temperature, eventi RAID. È la fonte più diretta di informazioni su cosa è andato storto.

Quando un disco risulta FAILED o in stato anomalo, o quando si vuole capire come e quando è avvenuto il guasto. Indispensabile per distinguere un guasto fisico del disco da un problema di cavo/connessione.

  • I/O error su un dispositivo → guasto disco o cavo
  • UDMA CRC error count increased → problema cavo SATA
  • temperature critical → disco in overheat
  • md/raid: md0: Disk failure → RAID ha marcato il disco come guasto
[12345.678] ata2.00: UDMA CRC error count increased [12346.001] ata2.00: exception Emask 0x0 SAct 0x0 → possibile problema cavo SATA su sdb
[12400.123] end_request: I/O error, dev sdb, sector 2048 [12400.200] md/raid:md0: Disk failure on sdb, disabling device. [12400.210] md/raid:md0: Operation continuing on 3 devices.
# dmesg: read kernel buffer failed: Operation not permitted → serve privilegi root: usa sudo dmesg | tail

05 smartctl -a /dev/sdX
Diagnosi

Interroga il sistema SMART (Self-Monitoring, Analysis and Reporting Technology) integrato nel disco. Legge attributi interni come settori ricollocati, temperatura, errori CRC, ore di utilizzo e test diagnostici. Permette di prevedere guasti imminenti prima che si manifestino.

Per ogni disco sospetto identificato da mdadm --detail o dmesg. Sostituire sdX con il nome del disco da analizzare (es. sda, sdb…).

  • Reallocated_Sector_Ct > 0 → settori ricollocati: disco che sta cedendo
  • Current_Pending_Sector > 0 → settori in attesa di ricollocazione
  • UDMA_CRC_Error_Count > 0 → errori di trasmissione (spesso cavo)
  • Temperature_Celsius > 55°C → overheat critico
  • Riga SMART overall-health: PASSED o FAILED!
SMART overall-health: FAILED! ID# ATTRIBUTE_NAME RAW_VALUE 5 Reallocated_Sector_Ct 214 197 Current_Pending_Sector 18 199 UDMA_CRC_Error_Count 0 194 Temperature_Celsius 38 → disco con molti settori ricollocati: sostituire subito
SMART overall-health: PASSED (but CRC errors) ID# ATTRIBUTE_NAME RAW_VALUE 5 Reallocated_Sector_Ct 0 199 UDMA_CRC_Error_Count 24 194 Temperature_Celsius 36 → disco probabilmente OK, controllare cavo SATA
smartctl: cannot open /dev/sdb: No such device → disco non rilevato dal kernel: problema hardware

🔧 5.2 Recovery RAID

Il recovery si esegue solo dopo aver completato la diagnosi. L'ordine delle operazioni è preciso e non va invertito: prima rimuovere il disco guasto, poi aggiungere il nuovo, poi avviare il rebuild. Monitorare sempre fino al completamento.

R1 mdadm /dev/md0 --fail /dev/sdX  (o: mdadm --fail /dev/md0 /dev/sdX)
Recovery

Forza il kernel a marcare un disco come FAILED all'interno dell'array RAID. Questo non rimuove il disco, ma lo disabilita logicamente. L'array entra in stato DEGRADED.

Quando un disco mostra segni di degrado (overheat, CRC, slow) ma non è ancora entrato in FAILED automaticamente. Permette di controllare la situazione prima della rimozione.

Se il disco è già in stato FAILED (marcato automaticamente dal kernel), questo comando non è necessario. Procedere direttamente con --remove.

$ mdadm /dev/md0 --fail /dev/sdb mdadm: set /dev/sdb faulty in /dev/md0 → sdb marcato FAILED, array in DEGRADED
mdadm: Cannot set device faulty: Device or resource busy → rebuild in corso, attendere il completamento

R2 mdadm /dev/md0 --remove /dev/sdX  (o: mdadm --remove /dev/md0 /dev/sdX)
Recovery

Rimuove logicamente un disco FAILED dall'array RAID. Dopo questo comando il disco è in stato REMOVED e può essere fisicamente sostituito. L'array rimane DEGRADED.

Solo dopo che il disco è in stato FAILED (automatico o forzato con --fail). Non è possibile rimuovere un disco attivo senza prima marcarlo come guasto.

Sostituire fisicamente il disco (o usarne uno nuovo), poi eseguire --add per inserire il nuovo disco come spare e avviare il rebuild.

$ mdadm /dev/md0 --remove /dev/sdb mdadm: hot removed /dev/sdb from /dev/md0 → sdb rimosso, pronto per sostituzione fisica
mdadm: Cannot remove non-faulty device /dev/sdb → il disco non è in stato FAILED usa prima: mdadm /dev/md0 --fail /dev/sdb

R3 mdadm /dev/md0 --add /dev/sdY  (o: mdadm --add /dev/md0 /dev/sdY)
Recovery

Aggiunge un nuovo disco all'array come spare. Se l'array è in stato DEGRADED, il rebuild può partire automaticamente o può essere avviato manualmente. Il disco deve avere dimensione uguale o maggiore al disco originale.

Dopo aver rimosso il disco guasto e inserito fisicamente il nuovo. Il disco nuovo (sdY) deve essere un disco vuoto, non formattato, non parte di altri array.

Se il nuovo disco è più piccolo del disco originale, il rebuild fallirà con un errore di dimensione. Verificare sempre la capacità con lsblk prima di procedere.

$ mdadm /dev/md0 --add /dev/sde mdadm: added /dev/sde as spare to /dev/md0 → sde aggiunto come SPARE, rebuild avviato
mdadm: /dev/sde: device too small (500GB) for array minimum size required: 1000GB → usa un disco uguale o più grande di 1000GB
mdadm: /dev/sde is already a member of /dev/md0 → il disco è già nell'array

R4 watch cat /proc/mdstat  ⚠ non disponibile nel simulatore
Linux reale

Il comando watch esegue ripetutamente un comando (ogni 2 secondi per default) e aggiorna l'output a schermo. Usato con cat /proc/mdstat crea un monitor in tempo reale del rebuild su un sistema Linux reale, mostrando la percentuale di avanzamento e l'ETA aggiornati ogni 2 secondi.

Durante un rebuild attivo su un vero server Linux, per monitorare l'avanzamento senza dover rieseguire manualmente il comando ogni volta. Si esce con Ctrl+C.

Il comando watch non è supportato nel terminale simulato. Per monitorare il rebuild, usare ripetutamente cat /proc/mdstat. La barra di avanzamento del rebuild è visibile anche nella dashboard in tempo reale.

md0 : active raid5 sda[U] sde[R] sdc[U] sdd[U] status=DEGRADED [ U.UU ] [=====>.............] recovery = 28.4% finish=180s speed=55000K/sec
md0 : active raid5 sda[U] sde[U] sdc[U] sdd[U] status=OK blocks=3000GB [ UUUU ] → rebuild completato, array tornato clean ✅
cat /proc/mdstat ← ripetere manualmente La dashboard aggiorna la barra % in tempo reale

📋 Sequenze di recovery complete
RAID5 / RAID1 — 1 disco guasto → OK
cat /proc/mdstat → DEGRADED
mdadm --detail /dev/md0 → identifica sdb FAILED
smartctl -a /dev/sdb → conferma guasto
mdadm /dev/md0 --remove /dev/sdb
mdadm /dev/md0 --add /dev/sde → nuovo disco
mdadm /dev/md0 --rebuild
cat /proc/mdstat → attendi OK
RAID6 — 2 dischi guasti → OK
cat /proc/mdstat → DEGRADED (2 FAILED)
mdadm /dev/md0 --remove /dev/sdb
mdadm /dev/md0 --add /dev/sdg
mdadm /dev/md0 --rebuild → 1° rebuild
cat /proc/mdstat → attendi OK, poi ripeti per 2° disco
Ripeti: --remove → --add → --rebuild
cat /proc/mdstat → OK finale
Rebuild interrotto (powerfail) → riavvio
cat /proc/mdstat → DEGRADED, rebuild interrotto
mdadm --detail /dev/md0 → verifica stato spare ancora presente
mdadm /dev/md0 --rebuild → riprende dall'ultimo checkpoint
cat /proc/mdstat → attendi OK
⚠️
Array FAILED = dati irrecuperabili via RAID.
Questo accade con RAID0 (qualsiasi guasto), RAID5 con 2+ guasti, RAID6 con 3+ guasti, RAID10 con mirror pair perso. In questi casi non esiste un comando di recovery: bisogna ripristinare da backup esterno. Nel simulatore: conclude restore da backup.

⚠️ 5.3 Errori non fatali

Non tutti i problemi richiedono la sostituzione immediata del disco. Alcuni errori sono segnali di avvertimento che permettono di intervenire in modo preventivo. Ignorarli, però, può portare a un guasto definitivo. Capire la differenza è fondamentale.

CRC CRC Errors — errori di trasmissione dati
Non fatale

CRC (Cyclic Redundancy Check) è un meccanismo di controllo dell'integrità dei dati trasmessi sul cavo SATA. Un errore CRC significa che un blocco di dati è arrivato corrotto durante il trasferimento tra il disco e il controller. Non necessariamente il disco è guasto.

  • Cavo SATA danneggiato, piegato o di scarsa qualità
  • Connettore SATA allentato (disco o scheda madre)
  • Alimentazione instabile al disco
  • Solo raramente: problema interno al disco
  • 1 Eseguire dmesg | tail e smartctl -a /dev/sdX
  • 2 Se solo CRC errors alti (Reallocated=0): sostituire prima il cavo SATA
  • 3 Verificare con smartctl se il contatore si azzera o continua a crescere
  • 4 Se persiste dopo cambio cavo: pianificare sostituzione del disco
[04231.001] ata2.00: UDMA CRC error count increased [04231.100] ata2.00: exception Emask 0x0 SAct [04231.200] ata2.00: cmd 60/08:00:... failed → probabile problema cavo su /dev/sdb
SMART overall-health: PASSED 5 Reallocated_Sector_Ct 0 199 UDMA_CRC_Error_Count 24 194 Temperature_Celsius 35 → disco OK, solo CRC errors → cambia cavo SATA
💡
Regola pratica: CRC alto + Reallocated=0 = cavo. CRC alto + Reallocated>50 = disco da sostituire.

🌡 Overheat — temperatura critica
Urgente

Un disco funziona in modo ottimale tra 20°C e 50°C. Sopra i 55°C entra in zona di rischio; sopra i 60°C può registrare errori di lettura/scrittura o ridurre la propria affidabilità in modo permanente. L'overheat è un segnale di rischio imminente ma non è ancora un guasto.

  • Ventola del case guasta o ostruita
  • Dischi troppo vicini senza airflow
  • Temperatura ambiente elevata (estate, locali non climatizzati)
  • Carico eccessivo su disco in fase di rebuild
  • Verificare temperatura con smartctl -a /dev/sdX → attributo 194 Temperature_Celsius
  • Migliorare il raffreddamento del case (ventole, spaziatura dischi)
  • Se temperatura >60°C: pianificare sostituzione preventiva prima del guasto
  • Non avviare rebuild con un disco in overheat: rallenta e rischia di peggiorare
SMART overall-health: PASSED (but temperature high) 5 Reallocated_Sector_Ct 0 194 Temperature_Celsius 61 ← critico 199 UDMA_CRC_Error_Count 0 → raffreddare subito, pianificare sostituzione
[09821.400] ata3.00: temperature critical [09821.500] ata3.00: device reported high temperature → kernel avverte del rischio termico
Soglie di temperatura HDD/SSD:
<45°C = ottimale · 45-55°C = accettabile · 55-60°C = attenzione · >60°C = sostituire

🐢 Slow disk — disco lento
Da monitorare

Un disco lento non ha ancora smesso di funzionare, ma risponde ai comandi in modo più lento del normale. Questo degrada le prestazioni dell'intero array, poiché tutte le operazioni devono aspettare il disco più lento (in RAID, l'array è veloce quanto il disco più lento).

  • Settori in fase di ricollocazione (Current_Pending_Sector > 0)
  • Disco meccanico (HDD) in fase di degrado meccanico
  • Overheat che limita le prestazioni come misura di protezione
  • Carico I/O eccessivo combinato con altri processi
  • IOPS dell'intero array ridotti del 30-50%
  • Latenze elevate su tutte le operazioni
  • Se il disco rallenta ulteriormente, il kernel può marcarlo FAILED

Monitorare con smartctl, verificare Current_Pending_Sector. Se il contatore cresce: pianificare sostituzione preventiva prima che il disco passi a FAILED.

SMART overall-health: PASSED (but performance degraded) 5 Reallocated_Sector_Ct 8 197 Current_Pending_Sector 6 ← attenzione 199 UDMA_CRC_Error_Count 2 194 Temperature_Celsius 42 → settori in pending: monitorare, probabile degrado
IOPS nominali RAID5 (4 dischi): ~1200 IOPS con 1 disco SLOW: ~720 (-40%) IOPS con rebuild attivo: ~550 (-55%) → pianificare manutenzione in orario bassa attività
📊
Current_Pending_Sector è l'attributo più importante: indica settori che il disco non riesce più a leggere correttamente ma non ha ancora sostituito. Se supera 20, il rischio di FAILED cresce rapidamente.

💾 5.4 Filesystem su RAID

Il RAID gestisce la ridondanza e la distribuzione dei dati a livello fisico, ma da solo non basta per usare un disco. Sopra il RAID bisogna creare un filesystem (es. ext4) e montarlo in una directory. Solo a quel punto è possibile leggere e scrivere file.

Struttura a strati — dal fisico al file
📂 /mnt/data/file.txt     ← file visibile all'utente
↑ montaggio (mount)
📁 Filesystem ext4        ← gestisce directory, permessi, inode
↑ creazione (mkfs.ext4)
🔧 /dev/md0 — Array RAID5   ← gestisce ridondanza e striping
↑ costruito da
💿 sda   sdb   sdc   sdd      ← dischi fisici
F1 mkfs.ext4 /dev/md0
Filesystem

Crea un filesystem ext4 sull'array RAID. Formatta il volume logico /dev/md0 scrivendo le strutture dati del filesystem (superblock, inode table, bitmap). Operazione distruttiva: cancella tutti i dati esistenti.

Una sola volta, dopo aver creato l'array RAID per la prima volta. Non va eseguito dopo un rebuild (i dati sono già presenti sul filesystem).

  • Array RAID creato e in stato OK (non FAILED, non DEGRADED)
  • Nessun filesystem già presente (o si accetta di sovrascrivere tutto)
$ mkfs.ext4 /dev/md0 mke2fs 1.47.0 Creating filesystem with 786432 4k blocks... Allocating group tables: done Writing inode tables: done Creating journal: done Writing superblocks: done → filesystem ext4 creato su /dev/md0 ✅
mkfs.ext4: I/O error: volume FAILED → array FAILED, impossibile creare filesystem risolvere prima il problema RAID

F2 mount /dev/md0 /mnt
Filesystem

Monta il filesystem dell'array RAID nella directory /mnt (o qualsiasi altra directory esistente). Dopo il mount, tutti i file dell'array diventano accessibili tramite quella directory.

Dopo aver creato il filesystem con mkfs.ext4. Deve essere eseguito ad ogni riavvio del sistema (oppure aggiunto a /etc/fstab per il mount automatico).

umount /mnt

Smonta il filesystem in modo sicuro. Attendere che tutte le operazioni di I/O siano concluse prima di smontare.

$ mount /dev/md0 /mnt # nessun output = successo $ df -h Filesystem Size Used Avail Use% Mounted on /dev/md0 3.0T 1.1G 2.9T 1% /mnt → array montato e accessibile ✅
mount: /mnt: can't read superblock from /dev/md0 → filesystem non creato: esegui mkfs.ext4 prima

📁 Lettura, scrittura e verifica del volume
F3 df -h
Verifica

Mostra l'utilizzo del disco in formato leggibile. Permette di verificare capacità totale, spazio usato e spazio disponibile. Mostra anche il punto di mount.

Filesystem Size Used Avail Use% Mounted on /dev/md0 3.0T 48G 2.9T 2% /mnt
F4 ls /mnt
Lettura

Lista il contenuto della directory montata. Se restituisce una lista vuota o (vuoto) significa che il filesystem è montato ma non contiene file.

$ ls /mnt documento.txt backup.tar logs/ # oppure: (vuoto) se appena formattato
F5 touch /mnt/file
Scrittura

Crea un file vuoto. Test minimale per verificare che il filesystem sia scrivibile. Se fallisce con I/O error, l'array ha un problema.

$ touch /mnt/test.txt # successo = nessun output
F6 echo / cat / rm
Test completo

Test completo di scrittura, lettura e cancellazione su file. Sequenza consigliata per verificare la funzionalità del volume dopo un rebuild o una riparazione.

$ echo "test RAID OK" > /mnt/verifica.txt $ cat /mnt/verifica.txt test RAID OK $ rm /mnt/verifica.txt # volume funzionante ✅
echo: I/O error: volume FAILED → array non accessibile, dati non scrivibili

🔧 Comandi facoltativi ma utili
Diagnostica avanzata

mdadm --examine /dev/sdX

Legge i metadati RAID scritti sul disco, anche se non è più parte di un array attivo. Utile per recuperare informazioni su array distrutti o disco rimosso accidentalmente.

Controllo filesystem

fsck /dev/md0

Controlla e ripara il filesystem ext4 sopra l'array RAID. Va eseguito solo con il filesystem smontato. Utile dopo crash di sistema o powerfail durante scrittura.

Identificazione

blkid

Mostra UUID, tipo di filesystem e label di tutti i dispositivi. Utile per identificare il volume RAID nel file /etc/fstab per il mount automatico al boot.

Layout dischi

fdisk -l

Elenca tutti i dischi e le partizioni con dimensioni. Permette di verificare la dimensione esatta di ogni disco prima di usarlo come spare, evitando l'errore "spare too small".


📋 Tutti i comandi disponibili nel simulatore
Comando Categoria Funzione Disponibile
cat /proc/mdstatDiagnosiStato array RAID in tempo reale✅ Sì
mdadm --detail /dev/md0DiagnosiDettaglio completo array e dischi✅ Sì
lsblkDiagnosiStruttura dispositivi di blocco✅ Sì
dmesg | tailDiagnosiMessaggi kernel recenti✅ Sì
smartctl -a /dev/sdXDiagnosiStato SMART del disco✅ Sì
mdadm /dev/md0 --fail /dev/sdXRecoveryMarca disco come FAILED✅ Sì
mdadm /dev/md0 --remove /dev/sdXRecoveryRimuove disco FAILED dall'array✅ Sì
mdadm /dev/md0 --add /dev/sdYRecoveryAggiunge nuovo disco come spare✅ Sì
mdadm /dev/md0 --rebuildRecoveryAvvia il rebuild dell'array✅ Sì
mdadm --stop-rebuild /dev/md0RecoveryInterrompe il rebuild✅ Sì
powerfailSimulazioneSimula blackout, interrompe rebuild✅ Sì
mkfs.ext4 /dev/md0FilesystemCrea filesystem ext4 sull'array✅ Sì
mount /dev/md0 /mntFilesystemMonta il filesystem✅ Sì
umount /mntFilesystemSmonta il filesystem✅ Sì
df -hFilesystemSpazio disco utilizzato✅ Sì
ls / touch / echo / cat / rmFilesystemOperazioni su file✅ Sì
blkidExtraUUID e tipo filesystem✅ Sì
fdisk -lExtraLayout completo dischi✅ Sì
watch cat /proc/mdstatLinux realeMonitor continuo (Linux reale, ogni 2s)❌ Non nel simulatore — usa cat
mdadm --examine /dev/sdXAvanzatoMetadati RAID su disco❌ Non disponibile
fsck /dev/md0AvanzatoControllo/riparazione filesystem❌ Non disponibile