23 Commits

Author SHA1 Message Date
AndreStork 9c029e87a0 Aggiunta versione in footer pagina index 2026-04-09 09:43:22 +02:00
AndreStork f01689a4ac Merge base di Campi 2.8 2026-04-09 09:32:34 +02:00
AndreStork 7afbfe0593 Fix contatore rebuild post-aggiornamento 2.8 2026-04-09 09:32:00 +02:00
AndreStork f354595954 Upstream con 2.8 di Campi 2026-04-09 09:23:03 +02:00
AndreStork 391a566581 Merge branch 'fix/guida' 2026-04-09 09:08:30 +02:00
AndreStork db91a7317e Aggiunto comando uptime in guida 2026-04-09 09:06:08 +02:00
AndreStork 6da6aedc8b Aggiunta comando unplug nella guida 2026-04-09 09:02:40 +02:00
AndreStork 6c36f43760 Fix nome immagine in docker compose 2026-03-26 12:56:44 +01:00
AndreStork 4dd19b1104 Fix compose per usare nome immagine corretta 2026-03-26 12:44:41 +01:00
AndreStork 3e21620d1b Merge branch 'docker' 2026-03-26 12:39:04 +01:00
AndreStork ecee75af4a Cambio porta host nel docker-compose di esempio 2026-03-26 12:38:36 +01:00
AndreStork 1233d7b441 Aggiunto docker compose di esempio 2026-03-26 12:38:12 +01:00
AndreStork 128df31840 Aggiunta dockerfile 2026-03-26 12:36:52 +01:00
AndreStork abcb6539fc Aggiunta comando uptime in testo help 2026-03-26 12:15:41 +01:00
AndreStork 06a0c2dd99 Merge funzionalità aggioramento 2.7.1 (#2) (from update/2.7 into main)
Reviewed-on: #2
2026-03-26 11:11:30 +00:00
AndreStork 078998668e Aggiunta homepage 2026-03-26 12:08:52 +01:00
AndreStork 0a4cb932c6 fix: mostra numeri a una cifra con 2 nel comando uptime 2026-03-26 12:03:44 +01:00
AndreStork b9675d03b0 fix: ora mostrata incorrettamente nel comando uptime 2026-03-26 09:43:28 +01:00
AndreStork e0fe2a53e9 Implementazione base uptime 2026-03-26 09:39:48 +01:00
AndreStork 98e15d2e6c Implementato comando echo senza redirect su file 2026-03-26 09:26:18 +01:00
AndreStork 53460bd70e Implementato contatore rebuild completati 2026-03-26 09:19:44 +01:00
AndreStork 7f083f187d Aggiunta pill contatore rebuild 2026-03-26 09:05:24 +01:00
AndreStork 20f4531ad3 Merge sorgente "di Campi" versione 2.7 2026-03-26 08:53:43 +01:00
5 changed files with 1269 additions and 22 deletions
+8
View File
@@ -0,0 +1,8 @@
FROM nginx
# Copia pagine HTML
COPY index.html /usr/share/nginx/html/index.html
COPY simulatore.html /usr/share/nginx/html/simulatore.html
COPY guida.html /usr/share/nginx/html/guida.html
EXPOSE 80
+7
View File
@@ -0,0 +1,7 @@
services:
simulator:
image: git.fiorencis.eu/eduprojects/dicampi-raid-simulator:latest
ports:
- 8080:80
restart: unless-stopped
network_mode: bridge
+250 -10
View File
@@ -328,7 +328,7 @@
<div class="label">Guida per Alunni</div>
<h1>Simulatore RAID<br>Guida Completa all'Uso</h1>
<p class="subtitle">Manuale passo passo per imparare a gestire array RAID con il terminale simulato</p>
<p class="meta">Informatica di Sistema · ITIS · Versione simulatore v2.3</p>
<p class="meta">Informatica di Sistema · ITIS · Versione simulatore v2.8</p>
</div>
<!-- INDICE -->
@@ -346,8 +346,9 @@
<li><a href="#s9">Stati dei dischi e del volume</a></li>
<li><a href="#s10">La documentazione integrata</a></li>
<li><a href="#s11">Il report finale</a></li>
<li><a href="#s12">Errori comuni da evitare</a></li>
<li><a href="#s13">Conclusione</a></li>
<li><a href="#s12">Errori non fatali: CRC, Overheat, Slow</a></li>
<li><a href="#s13">Errori comuni da evitare</a></li>
<li><a href="#s14">Conclusione</a></li>
</ol>
</div>
@@ -744,11 +745,32 @@
</div>
</div>
<div class="cmd-card">
<div class="cmd-card-head"><code>uptime</code><span class="status-badge st-info">Utilità</span></div>
<div class="cmd-card-body">
<div class="cmd-row"><div class="cmd-label">Cosa fa</div><div>Mostra il tempo trascorso dall'avvio del simulatore.</div></div>
<div class="cmd-row"><div class="cmd-label">Quando usarlo</div><div>Quando si vuole controllare il tempo di attività del simulatore.</div></div>
</div>
</div>
<div class="cmd-card">
<div class="cmd-card-head"><code>scenario list</code><span class="status-badge st-info">Scenari</span></div>
<div class="cmd-card-body">
<div class="cmd-row"><div class="cmd-label">Cosa fa</div><div>Mostra l'elenco di tutti gli scenari disponibili nel simulatore, con i loro nomi identificativi.</div></div>
<div class="cmd-row"><div class="cmd-label">Risultato atteso</div><div>Elenco di nomi come: <code>raid0_fail</code>, <code>raid1_onefail</code>, <code>raid5_1fail</code>, <code>raid5_2fail</code>, <code>raid6_2fail</code>, <code>raid10_pairfail</code>, <code>rebuild_interrupted</code>, <code>wrong_size_spare</code>, <code>crc_errors</code>, <code>overheat</code>.</div></div>
<div class="cmd-row"><div class="cmd-label">Risultato atteso</div><div>Elenco degli scenari disponibili:
<ul>
<li><code>raid0_fail</code> — RAID0: un guasto → FAILED, conclude restore da backup</li>
<li><code>raid1_onefail</code> — RAID1: sostituzione disco + rebuild</li>
<li><code>raid5_1fail</code> — RAID5: recovery con 1 disco guasto</li>
<li><code>raid5_2fail</code> — RAID5: 2 guasti → FAILED, conclude restore da backup</li>
<li><code>raid6_2fail</code> — RAID6: recovery con 2 dischi guasti (uno alla volta)</li>
<li><code>raid10_pairfail</code> — RAID10: mirror pair perso → FAILED</li>
<li><code>rebuild_interrupted</code> — rebuild interrotto da powerfail, poi riavviato</li>
<li><code>wrong_size_spare</code> — spare troppo piccolo (errore) poi corretto</li>
<li><code>crc_errors</code> — disco in stato CRC: diagnosi + replace cable o conclude</li>
<li><code>overheat</code> — disco in OVERHEAT: diagnosi + cool down o conclude</li>
</ul>
</div></div>
</div>
</div>
@@ -1014,12 +1036,56 @@ SMART overall-health: FAILED!
</div>
</div>
<div class="cmd-card">
<div class="cmd-card-head"><code>unplug</code><span class="status-badge st-warn">Simulazione</span></div>
<div class="cmd-card-body">
<div class="cmd-row"><div class="cmd-label">Cosa fa</div><div>Simula la disconnessione fisica di un disco in SPARE (non ancora rebuildato nell'array)</div></div>
<div class="cmd-row"><div class="cmd-label">Quando usarlo</div><div>Nello scenario wrong_size_spare, per rimuovere il disco della dimensione errata dall'array.</div></div>
<div class="cmd-row"><div class="cmd-label">Errori possibili</div><div>Se il disco è in rebuild oppure non è in SPARE, compare un messaggio di errore.</div></div>
</div>
</div>
<div class="cmd-card">
<div class="cmd-card-head"><code>conclude &lt;testo&gt;</code><span class="status-badge st-info">Scenari</span></div>
<div class="cmd-card-body">
<div class="cmd-row"><div class="cmd-label">Cosa fa</div><div>Registra una conclusione testuale per lo scenario corrente. Utilizzato negli scenari dove i dati sono persi (RAID0 fail, RAID5 2fail, RAID10 pairfail) e l'azione corretta è diagnosticare e concludere che serve un restore da backup.</div></div>
<div class="cmd-row"><div class="cmd-label">Esempio</div><div><code>conclude restore da backup</code></div></div>
<div class="cmd-row"><div class="cmd-label">Quando usarlo</div><div>Quando lo scenario richiede di riconoscere che l'array è FAILED e non recuperabile tramite RAID. Anche per scenari di errori non fatali come crc_errors e overheat.</div></div>
<div class="cmd-row"><div class="cmd-label">Quando usarlo</div><div>Quando lo scenario richiede di riconoscere che l'array è FAILED e non recuperabile tramite RAID. Anche per scenari di errori non fatali come crc_errors e overheat, come alternativa ai nuovi comandi hardware simulati.</div></div>
<div class="cmd-row"><div class="cmd-label">Conclusioni frequenti</div><div>
<ul>
<li><code>conclude restore da backup</code> — array FAILED, dati persi</li>
<li><code>conclude sostituire cavo SATA</code> — disco in stato CRC, causa probabile cavo</li>
<li><code>conclude migliorare raffreddamento</code> — disco in OVERHEAT</li>
<li><code>conclude monitorare e pianificare sostituzione</code> — disco SLOW</li>
</ul>
</div></div>
</div>
</div>
<div class="cmd-card">
<div class="cmd-card-head"><code>replace cable /dev/sdX</code><span class="status-badge st-warn">Simulazione</span></div>
<div class="cmd-card-body">
<div class="cmd-row"><div class="cmd-label">Cosa fa</div><div>Simula la sostituzione fisica del cavo SATA collegato al disco specificato. Azzera il contatore UDMA_CRC_Error_Count, resetta il link SATA e riporta il disco da stato CRC a OK.</div></div>
<div class="cmd-row"><div class="cmd-label">Quando usarlo</div><div>Dopo aver diagnosticato un disco in stato CRC con <code>dmesg | tail</code> e <code>smartctl</code>, se Reallocated_Sector_Ct = 0 (problema di cavo, non di disco). Nello scenario <code>crc_errors</code>.</div></div>
<div class="cmd-row"><div class="cmd-label">Esempio</div><div><code>replace cable /dev/sdd</code></div></div>
<div class="cmd-row"><div class="cmd-label">Risultato atteso</div><div>Il disco torna a stato OK. Nel terminale viene mostrato: cavo rimosso e installato, link SATA reset, CRC counter azzerato, suggerimento di monitorare nelle ore successive.</div></div>
<div class="cmd-row"><div class="cmd-label">Errori possibili</div><div>Se il disco non è in stato CRC: "replace cable: non è in stato CRC". Questo comando funziona solo su dischi con errori CRC.</div></div>
<div class="cmd-row"><div class="cmd-label">Punteggio</div><div>Nello scenario <code>crc_errors</code>: +8 punti per aver eseguito la sostituzione corretta del cavo.</div></div>
<div class="cmd-row"><div class="cmd-label">Nota importante</div><div>Se dopo la sostituzione del cavo il contatore CRC ricominciasse a crescere, il problema sarebbe nel disco o nel controller, non nel cavo. In quel caso si procederebbe con la sostituzione del disco.</div></div>
</div>
</div>
<div class="cmd-card">
<div class="cmd-card-head"><code>cool down /dev/sdX</code><span class="status-badge st-warn">Simulazione</span></div>
<div class="cmd-card-body">
<div class="cmd-row"><div class="cmd-label">Cosa fa</div><div>Simula un intervento di raffreddamento sul disco specificato: pulizia delle ventole, miglioramento dell'airflow nel case, spaziatura dei dischi. Riporta la temperatura nella zona ottimale e il disco da OVERHEAT a OK.</div></div>
<div class="cmd-row"><div class="cmd-label">Quando usarlo</div><div>Dopo aver diagnosticato un disco in stato OVERHEAT con <code>smartctl</code> e <code>dmesg | tail</code>. Nello scenario <code>overheat</code>.</div></div>
<div class="cmd-row"><div class="cmd-label">Esempio</div><div><code>cool down /dev/sdc</code></div></div>
<div class="cmd-row"><div class="cmd-label">Risultato atteso</div><div>La temperatura scende da 5862°C a ~38°C. Il disco torna a stato OK. Il throttling termico viene rimosso. Il terminale suggerisce comunque di pianificare la sostituzione preventiva.</div></div>
<div class="cmd-row"><div class="cmd-label">Errori possibili</div><div>Se il disco non è in stato OVERHEAT: "cool down: non è in stato OVERHEAT".</div></div>
<div class="cmd-row"><div class="cmd-label">Punteggio</div><div>Nello scenario <code>overheat</code>: +8 punti per aver eseguito l'intervento di raffreddamento corretto.</div></div>
<div class="cmd-row"><div class="cmd-label">Nota importante</div><div>Il raffreddamento risolve il sintomo immediato, ma un disco che ha lavorato a lungo a temperature critiche è comunque a rischio. Il consiglio è di pianificare la sostituzione preventiva con <code>mdadm --fail</code> + <code>--remove</code> + <code>--add</code> + <code>--rebuild</code>.</div></div>
</div>
</div>
@@ -1144,8 +1210,8 @@ SMART overall-health: FAILED!
<tr><td><span class="status-badge st-info">SPARE</span></td><td>Disco aggiunto con --add ma non ancora usato per il rebuild. Pronto per essere utilizzato nella ricostruzione.</td><td>Avviare il rebuild con --rebuild.</td></tr>
<tr><td><span class="status-badge st-warn">REBUILDING</span></td><td>Disco in fase di ricostruzione. I dati vengono riscritti progressivamente su questo disco. L'array è DEGRADED durante il rebuild.</td><td>Attendere il completamento. Non spegnere il sistema durante il rebuild.</td></tr>
<tr><td><span class="status-badge st-info">SLOW</span></td><td>Disco che risponde lentamente. Degrada le prestazioni dell'intero array. Non è ancora guasto, ma è a rischio.</td><td>Monitorare con smartctl. Pianificare la sostituzione.</td></tr>
<tr><td><span class="status-badge st-warn">OVERHEAT</span></td><td>Temperatura critica (sopra i 5560°C). Il disco rischia di guastarsi a breve. Il sistema segnala l'allarme termico.</td><td>Migliorare il raffreddamento. Pianificare la sostituzione preventiva. Usare conclude per registrare la diagnosi.</td></tr>
<tr><td><span class="status-badge st-purple">CRC</span></td><td>Errori CRC rilevati. Spesso indica un problema di cavo SATA o di connessione, non necessariamente del disco stesso.</td><td>Usare smartctl per controllare Reallocated_Sector_Ct. Se è 0, il problema è probabilmente il cavo. Usare conclude per registrare la diagnosi.</td></tr>
<tr><td><span class="status-badge st-warn">OVERHEAT</span></td><td>Temperatura critica (sopra i 5560°C). Il disco rischia di guastarsi a breve. Il sistema segnala l'allarme termico.</td><td>Usare <code>smartctl</code> e <code>dmesg | tail</code>. Poi: <code>cool down /dev/sdX</code> per simulare l'intervento di raffreddamento, oppure <code>conclude migliorare raffreddamento</code>. Pianificare sostituzione preventiva.</td></tr>
<tr><td><span class="status-badge st-purple">CRC</span></td><td>Errori CRC rilevati. Spesso indica un problema di cavo SATA o di connessione, non necessariamente del disco stesso.</td><td>Usare <code>dmesg | tail</code> e <code>smartctl</code>. Se Reallocated = 0: usare <code>replace cable /dev/sdX</code> per simulare la sostituzione del cavo, oppure <code>conclude sostituire cavo SATA</code>.</td></tr>
</table>
<h3>Stati del volume (array)</h3>
@@ -1214,7 +1280,175 @@ SMART overall-health: FAILED!
<!-- ══════════════════════════════════════════════════════════ -->
<h2 id="s12">Errori comuni da evitare</h2>
<hr class="section">
<!-- ══════════════════════════════════════════════════════════ -->
<h2 id="s12">Errori non fatali: CRC, Overheat, Slow</h2>
<p>Non tutti i problemi di un disco richiedono la sostituzione immediata. Il simulatore distingue tre stati di allerta che segnalano un disco in difficoltà ma ancora funzionante. Capire come gestirli — e come chiuderli correttamente — è fondamentale per l'esame.</p>
<div class="callout info">
<div class="icon">💡</div>
<div>La differenza fondamentale: CRC e Overheat non sono guasti fisici immediati. FAILED lo è. Reagire allo stesso modo a tutti e tre è un errore di metodo valutato negativamente.</div>
</div>
<h3>Griglia decisionale rapida</h3>
<table>
<tr><th>Problema</th><th>Sintomo nel simulatore</th><th>Prima azione</th><th>Decisione logica</th><th>Chiusura corretta</th></tr>
<tr>
<td><strong style="color:#5521b5">CRC errors</strong></td>
<td>Stato <code>.crc</code>, CRC counter &gt; 0</td>
<td><code>dmesg | tail</code><br><code>smartctl -a /dev/sdX</code></td>
<td>Realloc = 0 → cavo<br>Realloc &gt; 50 → disco</td>
<td><code>replace cable /dev/sdX</code><br><em>oppure</em> <code>conclude sostituire cavo SATA</code></td>
</tr>
<tr>
<td><strong style="color:#92400e">Overheat</strong></td>
<td>Stato <code>.overheat</code>, temp &gt; 55°C</td>
<td><code>smartctl -a /dev/sdX</code><br><code>dmesg | tail</code></td>
<td>Non è guasto ora, ma è imminente → non aspettare</td>
<td><code>cool down /dev/sdX</code><br><em>oppure</em> <code>conclude migliorare raffreddamento</code></td>
</tr>
<tr>
<td><strong style="color:#1a56db">Slow disk</strong></td>
<td>Stato <code>.slow</code>, IOPS ridotti</td>
<td><code>smartctl -a /dev/sdX</code><br>verifica Current_Pending_Sector</td>
<td>Pending &lt; 20 → monitora<br>Pending &gt; 20 → sostituisci</td>
<td><code>conclude monitorare e pianificare sostituzione</code></td>
</tr>
<tr>
<td><strong style="color:#9b1c1c">FAILED (array)</strong></td>
<td>Array in stato FAILED</td>
<td><code>cat /proc/mdstat</code><br><code>mdadm --detail /dev/md0</code></td>
<td>Guasti oltre la tolleranza → nessun rebuild possibile</td>
<td><code>conclude restore da backup</code></td>
</tr>
</table>
<h3>CRC errors — procedura completa</h3>
<p>Gli errori CRC (Cyclic Redundancy Check) segnalano che i dati hanno subito corruzione durante il trasferimento sul cavo SATA. <strong>Non è detto che il disco sia guasto</strong>: il problema è spesso nel cavo o nel connettore.</p>
<div class="steps">
<div class="step">
<div class="step-num">1</div>
<div class="step-content">
<strong>Leggo il log kernel</strong>
<pre><span class="prompt">raidlab(OK)$</span> dmesg | tail
<span class="warn">[04231.001] WARN: /dev/sdd: UDMA CRC errors detected</span>
[04231.100] ata4.00: exception Emask 0x0 SAct — link reset</pre>
Il kernel segnala errori di trasmissione su /dev/sdd. Non dice ancora se è il cavo o il disco.
</div>
</div>
<div class="step">
<div class="step-num">2</div>
<div class="step-content">
<strong>Analizzo i dati SMART</strong>
<pre><span class="prompt">raidlab(OK)$</span> smartctl -a /dev/sdd
SMART overall-health: <span class="ok">PASSED</span> (but CRC errors)
5 Reallocated_Sector_Ct <span class="ok">0</span> ← nessun settore danneggiato
199 UDMA_CRC_Error_Count <span class="warn">24</span> ← errori di trasmissione
194 Temperature_Celsius 35</pre>
Reallocated = 0: il disco è integro fisicamente. Il problema è nel percorso del segnale (cavo, connettore).
</div>
</div>
<div class="step">
<div class="step-num">3</div>
<div class="step-content">
<strong>NON faccio fail/remove immediato</strong>
Il disco non è guasto. Rimuoverlo sarebbe un errore di valutazione. Si interviene sul cavo.
</div>
</div>
<div class="step">
<div class="step-num">4</div>
<div class="step-content">
<strong>Sostituisco il cavo</strong>
<pre><span class="prompt">raidlab(OK)$</span> replace cable /dev/sdd
[sostituzione cavo SATA su /dev/sdd]
UDMA_CRC_Error_Count: 24 → 0 (azzerato dal reset)
Stato disco: CRC → <span class="ok">OK</span>
→ Monitorare nelle prossime ore con smartctl</pre>
Oppure, se si vuole solo registrare la decisione: <code>conclude sostituire cavo SATA</code>.
</div>
</div>
</div>
<div class="callout warn">
<div class="icon">⚠️</div>
<div><strong>Se CRC continua a crescere dopo il cambio cavo:</strong> a quel punto il problema è nel disco o nel controller. Si procede con la sequenza normale: <code>mdadm --fail</code><code>--remove</code><code>--add</code><code>--rebuild</code>.</div>
</div>
<h3>Overheat — procedura completa</h3>
<p>Un disco surriscaldato (sopra i 5560°C) non è ancora guasto, ma è un <strong>pre-failure</strong>: il guasto è imminente. Non bisogna aspettare.</p>
<table>
<tr><th>Temperatura</th><th>Stato</th><th>Azione</th></tr>
<tr><td>&lt; 45°C</td><td>Ottimale</td><td>Nessuna</td></tr>
<tr><td>4555°C</td><td>Accettabile</td><td>Monitorare</td></tr>
<tr><td>5560°C</td><td>Attenzione</td><td>Migliorare ventilazione</td></tr>
<tr><td>&gt; 60°C</td><td>Critico</td><td>Intervenire subito, pianificare sostituzione</td></tr>
</table>
<div class="steps">
<div class="step">
<div class="step-num">1</div>
<div class="step-content">
<strong>Analizzo SMART e dmesg</strong>
<pre><span class="prompt">raidlab(OK)$</span> smartctl -a /dev/sdc
SMART overall-health: <span class="warn">PASSED (but temperature high)</span>
194 Temperature_Celsius <span class="warn">61</span> ← critico: &gt;60°C
5 Reallocated_Sector_Ct 0
199 UDMA_CRC_Error_Count 0</pre>
</div>
</div>
<div class="step">
<div class="step-num">2</div>
<div class="step-content">
<strong>Non avvio rebuild con disco in overheat</strong>
Un rebuild su un disco già a 61°C lo porterebbe certamente al guasto. Prima si raffredda, poi eventualmente si sostituisce.
</div>
</div>
<div class="step">
<div class="step-num">3</div>
<div class="step-content">
<strong>Intervengo sul raffreddamento</strong>
<pre><span class="prompt">raidlab(OK)$</span> cool down /dev/sdc
[intervento di raffreddamento su /dev/sdc]
Temperatura: 61°C → <span class="ok">38°C</span> (zona ottimale)
Throttling termico: rimosso
Stato disco: OVERHEAT → <span class="ok">OK</span>
→ Pianificare sostituzione preventiva</pre>
Oppure: <code>conclude migliorare raffreddamento</code>.
</div>
</div>
</div>
<div class="callout tip">
<div class="icon">🔧</div>
<div><strong>Approccio "pro" (livello esame alto):</strong> dopo aver raffreddato, si pianifica la sostituzione preventiva prima del guasto improvviso: <code>mdadm --fail /dev/md0 /dev/sdc</code><code>--remove</code><code>--add /dev/sdf</code><code>--rebuild</code>. Così si fa il rebuild in condizioni controllate invece di subirlo d'emergenza.</div>
</div>
<h3>Slow disk — gestione</h3>
<p>Un disco lento degrada le prestazioni dell'intero array (RAID è veloce quanto il suo disco più lento). Non è ancora guasto, ma può diventarlo.</p>
<ul>
<li>Verificare con <code>smartctl -a /dev/sdX</code> il valore <strong>Current_Pending_Sector</strong>.</li>
<li>Pending &lt; 20: monitorare regolarmente. Concludere con <code>conclude monitorare e pianificare sostituzione</code>.</li>
<li>Pending &gt; 20: il rischio di FAILED è elevato. Procedere con sostituzione preventiva.</li>
</ul>
<h3>Principio fondamentale — ogni prova deve concludersi</h3>
<p>Un buon amministratore di sistema non si ferma alla diagnosi. Ogni sessione deve avere un risultato verificabile e documentato. Nel simulatore, il punteggio non è completo senza una chiusura esplicita:</p>
<ul>
<li><strong>CRC</strong> → cavo sostituito (e CRC stabile) <em>oppure</em> conclusione registrata</li>
<li><strong>Overheat</strong> → raffreddamento applicato, sostituzione pianificata <em>oppure</em> conclusione registrata</li>
<li><strong>Slow</strong> → monitoraggio documentato <em>oppure</em> rebuild preventivo completato</li>
<li><strong>FAILED</strong> → rebuild completato e array OK <em>oppure</em> restore da backup documentato</li>
</ul>
<hr class="section">
<h2 id="s13">Errori comuni da evitare</h2>
<h3>1. Confondere RAID 1 con RAID 10</h3>
<p>RAID 1 fa mirroring su tutti i dischi: con 4 dischi da 1 TB la capacità è 1 TB e la tolleranza è 3 guasti. RAID 10 divide i dischi in coppie mirror e le mette in stripe: con 4 dischi da 1 TB la capacità è 2 TB ma si tollera 1 solo guasto per coppia. Non sono la stessa cosa. In RAID 10, se si guastano entrambi i dischi della stessa coppia, l'array è FAILED anche se tutti gli altri dischi funzionano perfettamente.</p>
@@ -1240,9 +1474,15 @@ SMART overall-health: FAILED!
<h3>8. Aggiungere uno spare troppo piccolo</h3>
<p>Se si aggiunge un disco con dimensione inferiore a quella dei dischi dell'array, il rebuild fallirà con l'errore "spare too small". Prima di aggiungere un disco con --add, verificare sempre la dimensione con <code>fdisk -l</code> o con il parametro --size nel comando --add.</p>
<h3>9. Usare replace cable o cool down sul disco sbagliato</h3>
<p>Il comando <code>replace cable /dev/sdX</code> funziona <em>solo</em> su dischi in stato CRC. Se il disco è in stato FAILED, OVERHEAT o OK, il comando restituisce un errore. Analogamente, <code>cool down /dev/sdX</code> funziona solo su dischi in stato OVERHEAT. Usare questi comandi sul disco sbagliato non produce effetti e il terminale avvisa con un messaggio esplicito. Controllare sempre lo stato con <code>mdadm --detail /dev/md0</code> prima di applicare questi interventi.</p>
<h3>10. Chiudere uno scenario senza concludere</h3>
<p>Gli scenari <code>crc_errors</code> e <code>overheat</code> richiedono due checkpoint per essere completati: la diagnosi (dmesg + smartctl) e la chiusura (replace cable / cool down <em>oppure</em> conclude). Se si esegue solo la diagnosi e ci si ferma, il punteggio rimane parziale e lo scenario non viene marcato come risolto. Ogni prova deve avere una fine esplicita e verificabile.</p>
<!-- ══════════════════════════════════════════════════════════ -->
<h2 id="s13">Conclusione</h2>
<h2 id="s14">Conclusione</h2>
<p>Il simulatore RAID è uno strumento completo per imparare a gestire array RAID in modo pratico e sicuro. Attraverso l'uso del terminale simulato si acquisisce familiarità con i comandi reali di Linux e si sviluppa un metodo di lavoro ordinato e metodico.</p>
@@ -1261,7 +1501,7 @@ SMART overall-health: FAILED!
<div>Consiglio finale: non imparare solo i comandi a memoria. Capire il <em>perché</em> di ogni passaggio è molto più utile. Perché si legge prima mdstat? Perché si rimuove il disco prima di aggiungerne uno nuovo? Ragionare sul metodo, non solo eseguire meccanicamente.</div>
</div>
<p style="text-align:center;margin-top:40px;color:var(--muted);font-size:13px">— Fine della guida — Simulatore RAID v2.3 · Informatica di Sistema</p>
<p style="text-align:center;margin-top:40px;color:var(--muted);font-size:13px">— Fine della guida — Simulatore RAID v2.8 · Informatica di Sistema</p>
</body>
</html>
+59
View File
@@ -0,0 +1,59 @@
<!DOCTYPE html>
<html lang="it">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Simulatore RAID Web</title>
<style>
body {
font-family: Arial, sans-serif;
background-color: #f4f4f4;
margin: 0;
padding: 0;
display: flex;
justify-content: center;
align-items: center;
height: 100vh;
flex-direction: column;
}
h1 {
color: #333;
margin-bottom: 40px;
}
.buttons {
display: flex;
gap: 20px;
}
a {
text-decoration: none;
background-color: #007bff;
color: white;
padding: 10px 20px;
border-radius: 5px;
transition: background-color 0.3s;
}
a:hover {
background-color: #0056b3;
}
footer{
position: absolute;
bottom: 10px;
font-size: 0.8em;
color: #666;
}
</style>
</head>
<body>
<h1 style="margin-bottom: 0;">Simulatore RAID Web</h1>
<p style="margin-bottom: 0;">by Marco di Campi, forked and tweaked by Andrea Fiorencis<p>
<div class="buttons">
<a href="simulatore.html" target="_blank">Simulatore</a>
<a href="guida.html" target="_blank">Guida</a>
</div>
<footer>
<p>v2.8.0</p>
</footer>
</body>
</html>
+944 -11
View File
File diff suppressed because it is too large Load Diff