Compare commits
27 Commits
51ade4d7b8
...
2.8.0
| Author | SHA1 | Date | |
|---|---|---|---|
|
9c029e87a0
|
|||
|
f01689a4ac
|
|||
|
7afbfe0593
|
|||
|
f354595954
|
|||
|
391a566581
|
|||
|
db91a7317e
|
|||
|
6da6aedc8b
|
|||
|
6c36f43760
|
|||
|
4dd19b1104
|
|||
|
3e21620d1b
|
|||
|
ecee75af4a
|
|||
|
1233d7b441
|
|||
|
128df31840
|
|||
|
abcb6539fc
|
|||
| 06a0c2dd99 | |||
|
078998668e
|
|||
|
0a4cb932c6
|
|||
| b9675d03b0 | |||
| e0fe2a53e9 | |||
| 98e15d2e6c | |||
| 53460bd70e | |||
| 7f083f187d | |||
| 20f4531ad3 | |||
| 6cf5839194 | |||
| 8519ba1854 | |||
| 12f5790afc | |||
| f34c1bed33 |
@@ -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
|
||||||
@@ -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
@@ -328,7 +328,7 @@
|
|||||||
<div class="label">Guida per Alunni</div>
|
<div class="label">Guida per Alunni</div>
|
||||||
<h1>Simulatore RAID<br>Guida Completa all'Uso</h1>
|
<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="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>
|
</div>
|
||||||
|
|
||||||
<!-- INDICE -->
|
<!-- INDICE -->
|
||||||
@@ -346,8 +346,9 @@
|
|||||||
<li><a href="#s9">Stati dei dischi e del volume</a></li>
|
<li><a href="#s9">Stati dei dischi e del volume</a></li>
|
||||||
<li><a href="#s10">La documentazione integrata</a></li>
|
<li><a href="#s10">La documentazione integrata</a></li>
|
||||||
<li><a href="#s11">Il report finale</a></li>
|
<li><a href="#s11">Il report finale</a></li>
|
||||||
<li><a href="#s12">Errori comuni da evitare</a></li>
|
<li><a href="#s12">Errori non fatali: CRC, Overheat, Slow</a></li>
|
||||||
<li><a href="#s13">Conclusione</a></li>
|
<li><a href="#s13">Errori comuni da evitare</a></li>
|
||||||
|
<li><a href="#s14">Conclusione</a></li>
|
||||||
</ol>
|
</ol>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@@ -744,11 +745,32 @@
|
|||||||
</div>
|
</div>
|
||||||
</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">
|
||||||
<div class="cmd-card-head"><code>scenario list</code><span class="status-badge st-info">Scenari</span></div>
|
<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-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">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>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@@ -1014,12 +1036,56 @@ SMART overall-health: FAILED!
|
|||||||
</div>
|
</div>
|
||||||
</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">
|
||||||
<div class="cmd-card-head"><code>conclude <testo></code><span class="status-badge st-info">Scenari</span></div>
|
<div class="cmd-card-head"><code>conclude <testo></code><span class="status-badge st-info">Scenari</span></div>
|
||||||
<div class="cmd-card-body">
|
<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">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">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 58–62°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>
|
||||||
</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-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-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-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 55–60°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-warn">OVERHEAT</span></td><td>Temperatura critica (sopra i 55–60°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 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-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>
|
</table>
|
||||||
|
|
||||||
<h3>Stati del volume (array)</h3>
|
<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 > 0</td>
|
||||||
|
<td><code>dmesg | tail</code><br><code>smartctl -a /dev/sdX</code></td>
|
||||||
|
<td>Realloc = 0 → cavo<br>Realloc > 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 > 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 < 20 → monitora<br>Pending > 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 55–60°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>< 45°C</td><td>Ottimale</td><td>Nessuna</td></tr>
|
||||||
|
<tr><td>45–55°C</td><td>Accettabile</td><td>Monitorare</td></tr>
|
||||||
|
<tr><td>55–60°C</td><td>Attenzione</td><td>Migliorare ventilazione</td></tr>
|
||||||
|
<tr><td>> 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: >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 < 20: monitorare regolarmente. Concludere con <code>conclude monitorare e pianificare sostituzione</code>.</li>
|
||||||
|
<li>Pending > 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>
|
<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>
|
<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>
|
<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>
|
<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>
|
<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>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>
|
</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>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|||||||
+59
@@ -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>
|
||||||
+963
-12
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user