RAID: Redundant Array of Indipendent Disks: differenze tra le versioni

m
nessun oggetto della modifica
mNessun oggetto della modifica
(19 versioni intermedie di uno stesso utente non sono mostrate)
Riga 17: Riga 17:
* RAID '''10''' (non dieci, ma 1+0), garantisce sul piano teorico un incremento di prestazioni pari a quello di un raid 0 e l'affidabilità di un raid 1. Richiede un minimo di quattro dischi. Scegliere sempre questa modalità al posto di 0+1.
* RAID '''10''' (non dieci, ma 1+0), garantisce sul piano teorico un incremento di prestazioni pari a quello di un raid 0 e l'affidabilità di un raid 1. Richiede un minimo di quattro dischi. Scegliere sempre questa modalità al posto di 0+1.
{{Box|Nota|
{{Box|Nota|
* Le partizioni che andranno a formare un certo volume raid '''DEVONO''' avere tutte la stessa dimensione.
* Le partizioni o i dischi che andranno a formare un certo volume raid '''DEVONO''' avere tutti la stessa dimensione, pena lo spreco di spazio nel disco/partizione di dimensioni maggiori.
* In un ambiente domestico e/o soho generalmente l'incremento di prestazioni dovute ad un raid 0 e/o 10 risulta apprezzabile solo quando si hanno a che fare con grossi file
* In un ambiente domestico e/o soho generalmente l'incremento di prestazioni dovute ad un raid 0 e/o 10 risulta apprezzabile solo quando si hanno a che fare con grossi file
}}
}}
Per chi intendesse approfondire maggiormente l'argomento può iniziare consultando [[#Approfondimenti | wikipedia]].<br />
Per chi intendesse approfondire maggiormente l'argomento può iniziare consultando [[#Approfondimenti | wikipedia]].<br />


=== RAID Hardware, Software e Fake ===
=== RAID Hardware e Software ===
 
Esistono due modi per creare e gestire un volume raid: attraverso la mediazione di controller hardware dedicati oppure via software.<br />
Esistono due modi per creare e gestire un volume raid: attraverso la mediazione di controller hardware dedicati oppure via software direttamente dal sistema operativo.<br />
* La prima soluzione è più costosa e richiede attenzione nello scegliere prodotti che siano effettivamente compatibili con linux, ma comporta un minor consumo di risorse macchina (per esempio un ridotto impegno della CPU).<br />
La prima soluzione è più costosa e richiede attenzione nello scegliere prodotti che siano effettivamente compatibili con linux, ma comporta un minor consumo di risorse macchina (per esempio un ridotto impegno della CPU).<br />
* La seconda non richiede hardware dedicato e quindi non presenta costi aggiuntivi, ma come già detto comporta un maggior consumo di risorse macchina. Ci sono due sottocategorie: raid software puro e ''fake raid''.
La seconda non richiede hardware dedicato e quindi non presenta costi aggiuntivi, ma come già detto comporta un maggior consumo di risorse macchina. In debian il programma deputato a creare e gestire i volumi raid si chiama ''mdadm''.<br/>
** In debian il programma deputato a creare e gestire i volumi raid software puri si chiama <code>mdadm</code>.
Esiste una terza via, molto simile come concetto al raid software, ovvero i "fake raid" (falsi raid hardware). Tipico esempio di questa classe sono i controller RAID integrati nelle schede madri che non essendo di norma veri controller hardware si devono appoggiare completamente alla capacità di calcolo della macchina proprio come un raid software, garantendo quindi gli stessi (s)vantaggi prestazionali. Data questa premessa è pratica comune ignorare in linux eventuali controller integrati ed implementare tutto via software evitando in tal modo possibili problemi di compatibilità.<br/>
** Il "fake raid", ovvero falso raid hardware, è tipicamente un controller RAID integrato nella scheda madre che per funzionare deve appoggiarsi completamente alla capacità di calcolo della macchina stessa, proprio come un raid software puro. Unisce quindi tipicamente gli svantaggi di un raid software puro (consumo risorse macchina) a quelli di un raid hardware (driver proprietari), pertanto in linux è pratica comune ignorare eventuali controller integrati ed implementare tutto via software evitando in tal modo possibili problemi di compatibilità. Se si intende comunque adottare questa soluzione il software da usare è <code>dmraid</code>.
Si noti che purtroppo il raid software linux non è supportato da windows (e probabilmente anche da altri SO non linux), quindi in caso di dual boot tale soluzione è assolutamente da scartare; in tale circostanza se non si vuole rinunciare al raid e a windows, oppure a linux, è possibile usare <code>dmraid</code> per implementare anche sotto linux soluzioni fake raid.
{{Cautionbox|<code>mdadm</code> '''NON''' è supportato da windows, quindi in caso di dual boot tale soluzione è assolutamente da scartare. Se non si vuole rinunciare al raid e a windows, oppure a linux, l'unica opzione è <code>dmraid</code>.}}


== Installare debian su RAID software ==
== Installare debian su RAID software ==
Riga 40: Riga 40:
<pre># aptitude install mdadm</pre>
<pre># aptitude install mdadm</pre>


=== Utilizzo ===
== Principali comandi ==
 
{{Warningbox|<code>mdadm</code> richiede che l'utente abbia già provveduto a creare le partizioni da mettere in raid. Strumenti come [[Guida alla formattazione dei dischi con fdisk | fdisk]], ''parted'', ecc. vanno tutti bene.}}
 
{{Cautionbox|È utile notare che attualmente (v.4.2-5) <code>mdadm</code> attribuisce come nome di default agli array <code>nome_host_pc:numero progressivo</code>, ottenendo quindi qualcosa di simile a <code>pippo:0</code> per quanto riguarda <code>md0</code>. Sfortunatamente il carattere <code>:</code> non è POSIX compatibile col risultato che il sistema stamperà a video anche un messaggio di avvertenza simile a <code>mdadm Value: "pippo:0" cannot be set as devname. Reason: not POSIX compatible. Value ignored.</code>. Un simile messaggio NON deve evidentemente essere aggiunto a <code>/etc/mdadm/mdadm.conf</code>. In concreto questo significa che nella directory <code>/dev/md/</code> non sarà presente un collegamento simbolico a <code>/dev/md0</code> di nome <code>/dev/md/pippo:0</code>, ma più semplicemente <code>/dev/md/0</code>.}}
 
{{Box|Nota|È possibile mettere in raid sia interi dischi che singole partizioni.}}
 
=== Creare nuovi volumi ===
* Creare un volume composto da due partizioni attive (<code>-C</code> = <code>--create</code>)
<pre>
# mdadm -C /dev/md0 -l 1 -n 2 /dev/sde1 /dev/sde1
</pre>
* Creare un volume degradato (cioè composto da una sola partizione attiva)
<pre>
# mdadm -C /dev/md0 -l 1 -n 2 /dev/sde1 missing
</pre>
Come già scritto nella prima parte di questa guida quando si dichiara il numero di dischi che compongono il raid il numero delle partizioni dichiarate deve essere pari alla somma di <code>n+x</code>, ecco perché oltre a <code>/dev/sde1</code> viene dichiarato anche <code>missing</code>.<br/>
Un volume composto da un solo elemento attivo è inutile, generalmente questa soluzione viene adottata perché sulla seconda partizione che si intende usare sono presenti dati che si vuole includere nel volume raid. In sintesi prima si crea un volume raid composto da un solo disco su cui copiare i dati di interesse e poi si aggiunge la seconda partizione al volume appena creato (il punto è che aggiungere una partizione ad un volume raid comporta la perdita di tutti i dati che contiene).
 
=== Avviare i volumi ===
* Avviare un volume quando NON esiste il file mdadm.conf (<code>-A</code> = <code>--assemble</code>):
<pre>
# mdadm -A /dev/md0
</pre>
* Avviare un volume quando ESISTE il file mdadm.conf (<code>-As</code> = <code>--assemble --scan</code>):
<pre>
# mdadm -As /dev/md0
</pre>
 
=== Ottenere informazioni ===
* Mostrare i dettagli dell'array '''md0''' (<code>-D</code> = <code>--detail</code>)
<pre>
# mdadm -D /dev/md0
</pre>
* Mostrare i dettagli di tutti i volumi esistenti (<code>-s</code> = <code>--scan</code>)
<pre># mdadm -Ds</pre>
* Mostrare i metadati dell'array salvati nella partizione '''/dev/sde1''' (<code>-E</code> = <code>--examine</code>):
<pre>
# mdadm -E /dev/sde1
</pre>
* Ottenere informazioni sugli array in esecuzione:
<pre>
# cat /proc/mdstat
</pre>
* Monitorare il volume '''md0''' (<code>-F</code> = <code>--follow</code> = <code>--monitor</code>) ogni 5 minuti (<code>-d</code> = <code>--delay</code>):
<pre>
# mdadm -F -d=300 /dev/md0
</pre>
 
=== Aggiungere una nuova partizione a volumi esistenti ===
* Aggiungere la partizione <code>/dev/sdh1</code> all'array '''md0''' (<code>-a</code> = <code>--add</code>):
<pre>
# mdadm /dev/md0 -a /dev/sdh1
</pre>
 
=== Rimuovere una partizione da volumi esistenti ===
* Rimuovere (<code>-r</code> = <code>--remove</code>) un disco già identificato come danneggiato (''failed'') oppure di riserva (''spare'') dall'array '''md0''':
<pre>
# mdadm /dev/md0 -r /dev/sdh1
</pre>
* Rimuovere una partizione attiva dall'array '''md0''' (<code>-f</code> = <code>--fail</code>):
<pre>
# mdadm /dev/md0 -f /dev/sdh1 -r /dev/sdh1
</pre>
In sintesi è prima necessario contrassegnare il disco da rimuovere come danneggiato (<code>-f</code> = <code>--fail</code>) anche se in realtà è perfettamente funzionante.<br/><br/>
 
=== Fermare volumi ===
* Fermare un volume (<code>-S</code> = <code>--stop</code>):
<pre>
# mdadm -S /dev/md0
</pre>
* Fermare tutti gli array:
<pre>
# mdadm -Ss
</pre>
 
=== Sincronizzare nuovamente un volume ===
Se il comando <code>cat /proc/mdstat</code> restituisce:
<pre>
md0 : active (auto-read-only) raid1 sda1[0] sdb1[1]
2000000 blocks [2/2] [UU]
resync=PENDING</pre>
occorre dare il comando:
<pre>
# mdadm --readwrite /dev/mdX
</pre>e la sincronizzazione ripartirà:<pre>
[===>...] resync = 16.2% (324736/2000000) finish=0.6min speed=46390K/sec
</pre>
 
== /etc/mdadm/mdadm.conf ==
Questo file viene principalmente usato per assemblare in automatico ad ogni avvio i volumi raid creati in precedenza. Per esempio è possibile aggiungere tutti i volumi raid esistenti col seguente comando:
<pre># mdadm -Ds >> /etc/mdadm/mdadm.conf</pre>
{{Warningbox|Come scritto sopra il comando <code>mdadm -Ds</code> può generare anche messaggi di varia natura che '''NON''' devono essere inclusi in <code>/etc/mdadm/mdadm.conf</code>, pertanto è onere dell'utente eliminare i suddetti messaggi da <code>mdadm.conf</code>. In linea di principio devono essere incluse solo le righe che iniziano con <code>ARRAY ...</code>}}
 
== Esempi ==
 
=== Creazione di un volume raid che include due partizioni ===


==== Preparazione dischi ====
{{Box|Nota|È possibile mettere in raid sia interi dischi che singole partizioni. In questa guida sarà esaminato il caso di singola partizione e pertanto il termine ''volume raid'' sarà effettivamente sinonimo di ''partizione raid''.}}
La prima cosa da sottolineare è che mdadm richiede che l'utente abbia già provveduto a creare le partizioni da mettere in raid. Strumenti come ''fdisk'', ''parted'', ecc. vanno tutti bene.
===== Esempio con fdisk =====
===== Esempio con fdisk =====
Supponendo per esempio di usaree l'utilità ''fdisk'' (ma qualsiasi altro tool come ''parted'' o altri andrebbe egualmente bene) e di usare un disco identificato come <code>/dev/sde</code> digitare da terminale:
Supponendo per esempio di usaree l'utilità ''fdisk'' (ma qualsiasi altro tool come ''parted'' o altri andrebbe egualmente bene) e di usare un disco identificato come <code>/dev/sde</code> digitare da terminale:
Riga 60: Riga 154:
Ripetere le precedenti operazioni per tutti gli altri dischi che concorreranno alla formazione dei volumi raid con una o più partizioni.
Ripetere le precedenti operazioni per tutti gli altri dischi che concorreranno alla formazione dei volumi raid con una o più partizioni.


==== Creazione di un volume RAID ====
==== Creazione del volume RAID con ''mdadm'' ====


Posto di volere creare un volume raid1 di nome ''md0'' comprendente le partizioni '''sde1''' ed '''sdf1''' digitare da terminale:
Posto di volere creare un volume raid1 di nome ''md0'' comprendente le partizioni '''sde1''' ed '''sdf1''' digitare da terminale:
Riga 89: Riga 183:
<pre># mdadm --detail --scan</pre>
<pre># mdadm --detail --scan</pre>
Tutte le righe che iniziano con <code>ARRAY ...</code> possono essere aggiunte in coda al file <code>/etc/mdadm/mdadm.conf</code>.
Tutte le righe che iniziano con <code>ARRAY ...</code> possono essere aggiunte in coda al file <code>/etc/mdadm/mdadm.conf</code>.
È utile notare che attualmente (v.4.2-5) <code>mdadm</code> attribuisce come nome di default agli array <code>nome_host_pc:numero progressivo</code>, ottenendo quindi qualcosa di simile a <code>pippo:0</code> per quanto riguarda <code>md0</code>. Sfortunatamente il carattere <code>:</code> non è POSIX compatibile col risultato che il sistema stamperà a video anche un messaggio di avvertenza simile a <code>mdadm Value: "pippo:0" cannot be set as devname. Reason: not POSIX compatible. Value ignored.</code>. Un simile messaggio NON deve evidentemente essere aggiunto a <code>/etc/mdadm/mdadm.conf</code>. In concreto questo significa che nella directory <code>/dev/md/</code> non sarà presente un collegamento simbolico a <code>/dev/md0</code> di nome <code>/dev/md/pippo:0</code>, ma più semplicemente <code>/dev/md/0</code>.


La predetta procedura può anche essere ridotta ad un solo comando digitando:
La predetta procedura può anche essere ridotta ad un solo comando digitando:
Riga 117: Riga 209:
<pre>blkid /dev/md0</pre>
<pre>blkid /dev/md0</pre>


==== Eliminare un volume RAID ====
=== Eliminare un volume RAID ===


Si supponga di voler eliminare il volume <code>mdX</code>.
Si supponga di voler eliminare il volume <code>mdX</code>.
Riga 143: Riga 235:
# blkdiscard /dev/sdY</pre>
# blkdiscard /dev/sdY</pre>
Da notare che questo comando non elimina realmente i dati, ma li rende inaccessibili facendo semplicemente apparire i dischi come vuoti (non è quindi una cancellazione sicura). Ad entrambi i precedenti comandi deve essere aggiutna l'opzione <code>-f</code> altrimenti il sistema si limiterà a stampare a video un messaggio di avvertimento relativo alla perdita dei dati sui dischi specificati.
Da notare che questo comando non elimina realmente i dati, ma li rende inaccessibili facendo semplicemente apparire i dischi come vuoti (non è quindi una cancellazione sicura). Ad entrambi i precedenti comandi deve essere aggiutna l'opzione <code>-f</code> altrimenti il sistema si limiterà a stampare a video un messaggio di avvertimento relativo alla perdita dei dati sui dischi specificati.
== Principali comandi ==
Creare un volume degradato (cioè composto da un solo disco attivo)
<pre>
# mdadm -C /dev/md0 -l 1 -n 2 /dev/sde1 missing
</pre>
Come già scritto nella prima parte di questa guida quando si dichiara il numero di dischi che compongono il raid il numero delle partizioni dichiarate deve essere pari alla somma di <code>n+x</code>, ecco perché oltre a <code>/dev/sde1</code> viene dichiarato anche <code>missing</code><br/><br/>
Avviare un volume quando NON esiste il file mdadm.conf (<code>-A</code> = <code>--assemble</code>):
<pre>
# mdadm -A /dev/md0
</pre>
Avviare un volume quando ESISTE il file mdadm.conf (<code>-As</code> = <code>--assemble --scan</code>):
<pre>
# mdadm -As /dev/md0
</pre>
Fermare un volume (<code>-S</code> = <code>--stop</code>):
<pre>
# mdadm -S /dev/md0
</pre>
Fermare tutti gli array:
<pre>
# mdadm -Ss
</pre>
Aggiungere un disco all'array md0 (<code>-a</code> = <code>--add</code>):
<pre>
# mdadm /dev/md0 -a /dev/sdh1
</pre>
Rimuovere (<code>-r</code> = <code>--remove</code>) un disco già identificato come danneggiato (''failed'') oppure di riserva (''spare'') dall'array '''md0''':
<pre>
# mdadm /dev/md0 -r /dev/sdh1
</pre>
Rimuovere un disco attivo dall'array '''md0''':
<pre>
# mdadm /dev/md0 --f /dev/sdh1 -r /dev/sdh1
</pre>
In sintesi è prima necessario contrassegnare il disco da rimuovere come danneggiato (<code>-f</code> = <code>--fail</code>) anche se in realtà è perfettamente funzionante.<br/><br/>
Mostrare i metadati dell'array salvati nel disco '''/dev/sde1''' (<code>-E</code> = <code>--examine</code>):
<pre>
# mdadm -E /dev/sde1
</pre>
Mostrare i dettagli dell'array '''md0''' (<code>-D</code> = <code>--detail</code>)
<pre>
# mdadm -D /dev/md0
</pre>
Monitorare un array:
<pre>
# mdadm --monitor --delay=300 /dev/md0
</pre>
Ottenere informazioni sugli array in esecuzione:
<pre>
# cat /proc/mdstat
</pre>
Risincronizzare un array. Se il comando precedente restituisce:
<pre>
md0 : active (auto-read-only) raid1 sda1[0] sdb1[1]
2000000 blocks [2/2] [UU]
resync=PENDING</pre>
occorre dare il comando:
<pre>
# mdadm --readwrite /dev/mdX
</pre>e la sincronizzazione ripartirà:<pre>
[===>...] resync = 16.2% (324736/2000000) finish=0.6min speed=46390K/sec
</pre>


== Approfondimenti ==
== Approfondimenti ==
Riga 227: Riga 243:
=== Manpages ===
=== Manpages ===


<code>man mdadm</code><br />
* <code>man mdadm</code>, [https://manpages.debian.org/bookworm/mdadm/mdadm.8.en.html HTML]
<code>man mdadm.conf</code><br />
* <code>man mdadm.conf</code>, [https://manpages.debian.org/bookworm/mdadm/mdadm.conf.5.en.html HTML]


=== Sitografia ===
=== Sitografia ===
3 084

contributi