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

Da Guide@Debianizzati.Org.
Vai alla navigazione Vai alla ricerca
 
(41 versioni intermedie di uno stesso utente non sono mostrate)
Riga 3: Riga 3:
|successivo=Nfs-kernel-server:_condividere_risorse_tra_macchine_GNU/Linux
|successivo=Nfs-kernel-server:_condividere_risorse_tra_macchine_GNU/Linux
}}{{Versioni_compatibili}}{{Template:RAID}}
}}{{Versioni_compatibili}}{{Template:RAID}}
= Introduzione =
== Introduzione ==


=== Generalità ===
=== Generalità ===
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 />
* 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''.
** In debian il programma deputato a creare e gestire i volumi raid software puri si chiama <code>mdadm</code>.
** 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>.
{{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>.}}


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 />
== Installare debian su RAID software ==
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. In debian il programma deputato a creare e gestire i volumi raid si chiama ''mdadm''.<br/>
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/>
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.
 
= Installare debian su RAID software =


Si  veda [[Installare Debian: configurazione RAID | questa pagina]] per un  esempio di come utilizzare lo strumento di partizionamento predefinito.
Si  veda [[Installare Debian: configurazione RAID | questa pagina]] per un  esempio di come utilizzare lo strumento di partizionamento predefinito.


= Creare RAID software dopo l'installazione (mdadm) =
== Creare RAID software dopo l'installazione (mdadm) ==


== Installazione ==
=== Installazione ===
Se durante l'installazione del sistema operativo avete configurato uno o più volumi raid allora ''mdadm'' sarà già stato installato, in caso contrario:
Se durante l'installazione del sistema operativo avete configurato uno o più volumi raid allora ''mdadm'' sarà già stato installato, in caso contrario:
<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/>


=== Preparazione dischi ===
=== Fermare volumi ===
{{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''.}}
* Fermare un volume (<code>-S</code> = <code>--stop</code>):
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.
<pre>
==== Esempio con fdisk ====
# 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>}}
Una volta apportate tutte le modifiche è necessario dare il seguente comando
<pre># update-initramfs -u</pre>
 
== Esempi ==
 
=== Creazione di un volume raid che include due partizioni ===
 
===== 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:
<pre># fdisk /dev/sde</pre>
<pre># fdisk /dev/sde</pre>
Riga 60: Riga 156:
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 83: Riga 179:
Ripetere la procedura per tutti gli eventuali altri volumi raid che si desidera creare.
Ripetere la procedura per tutti gli eventuali altri volumi raid che si desidera creare.


=== Attivare automaticamente un volume RAID ad ogni avvio ===
==== Attivare automaticamente un volume RAID ad ogni avvio ====


Come già scritto ogni volume raid appena creato viene anche automaticamente attivato e quindi reso immediatamente disponibile, tuttavia tale attivazione deve essere eseguita nuovamente ad ogni riavvio del computer. È possibile attivare manualmente un volume raid tramite l'opzione <code>--assemble</code> (<code>-A</code>) oppure automatizzare la procedura di attivazione di tutti i volumi raid creati salvandone la relativa struttura in un apposito file di configurazione: <code>/etc/mdadm/mdadm.conf</code>.<br />
Come già scritto ogni volume raid appena creato viene anche automaticamente attivato e quindi reso immediatamente disponibile, tuttavia tale attivazione deve essere eseguita nuovamente ad ogni riavvio del computer. È possibile attivare manualmente un volume raid tramite l'opzione <code>--assemble</code> (<code>-A</code>) oppure automatizzare la procedura di attivazione di tutti i volumi raid creati salvandone la relativa struttura in un apposito file di configurazione: <code>/etc/mdadm/mdadm.conf</code>.<br />
Riga 89: Riga 185:
<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 100: Riga 194:
posto naturalmente che il suddetto volume non contenesse informazioni essenziali per l'avvio del sistema, nel qual caso non ripartirebbe proprio il sistema operativo.
posto naturalmente che il suddetto volume non contenesse informazioni essenziali per l'avvio del sistema, nel qual caso non ripartirebbe proprio il sistema operativo.


=== Rendere utilizzabili i volumi RAID ===
==== Rendere usabili i volumi RAID ====


Per poter materialmente memorizzare dati all'interno di un volume raid è necessario montarlo come una qualsiasi altra partizione, pertanto creare in primis un punto di mount, ad esempio:
Per poter materialmente memorizzare dati all'interno di un volume raid è necessario montarlo come una qualsiasi altra partizione, pertanto creare in primis un punto di mount, ad esempio:
Riga 116: Riga 210:
Dove UUID si ottiene digitando da terminale <code>blkid /dev/dispositivo</code>, ad esempio:
Dove UUID si ottiene digitando da terminale <code>blkid /dev/dispositivo</code>, ad esempio:
<pre>blkid /dev/md0</pre>
<pre>blkid /dev/md0</pre>
=== Mettere in RAID la partizione di root ===
{{Warningbox|
* Questa è un operazione ESTREMAMENTE delicata che potrebbe rendere non più avviabile il sistema e/o causare la perdita completa dei dati.
* Si ipotizza che la partizione di boot non sia separata, ovvero che la directory <code>/boot</code> risieda nella partizione di root.
}}
* Creare una partizione su un nuovo disco, della dimensione che si ritiene più opportuna (non deve necessariamente essere uguale a quella corrente di root). Non è necessario formattarla con un file system. Questo passaggio può anche essere eseguito anche dopo il punto 2.
* Riavviare il PC selezionando un'altra distro o usandone una live (es. Debian Live). Installare <code>mdadm</code> se già non disponibile.
{{Cautionbox|Il punto è che la partizione di root che si vuole copiare '''NON''' deve essere montata all'avvio del sistema.}}
* Supponendo che la partizione di root esistente sia <code>/dev/nvme0n1p2</code> e quella nuova invece <code>/dev/nvme1n1p2</code> creare un volume raid degradato che includa quest'ultima
<pre># mdadm -C /dev/md0 -l 1 -n 2 nvme1n1p2 missing</pre>
* Formattare il volume appena creato con il file system desiderato, per es. <code>ext4</code> (2,5% blocchi riservati, etichetta "radice"):
<pre># mkfs.ext4 -m 2.5 -L radice /dev/md0</pre>
* Creare due punti di montaggio temporanei per la partizione esistente e per quella nuova, ad esempio:
<pre>
# mkdir /mnt/dst
# mkdir /mnt/src
</pre>
* Montare la partizione di root esistente in <code>/mnt/src</code> e quella nuova in <code>/mnt/dst</code>, ad esempio:
<pre>
# mount /dev/nvme0n1p2 /mnt/src
# mount /dev/md0 /mnt/dst
</pre>
* Copiare tutti i dati della partizione esistente in quella nuova:
<pre># rsync -axcHAWXS --del --numeric-ids --info=progress2 /mnt/src /mnt/dst</pre>
* Terminata la copia modificare il file <code>/mnt/dst/etc/fstab</code> aggiornando l'UUID della vecchia partizione di root con quello del volume raid <code>md0</code>.
{{Suggerimento|Per trovare l'UUID di <code>md0</code> usare il comando <code>lsblk -f</code>}}
* Modificare il file <code>/mnt/dst/boot/grub/grub.cfg</code> aggiornando la sezione relativa al sistema operativo sostituendo l'UUID della vecchia partizione di root con il volume raid <code>md0</code>.
* Aggiungere i dati del volume raid <code>md0</code> al file <code>/mnt/dst/etc/mdadm/mdadm.conf</code> (si rilegga la sezione dedicata di questa guida).
* Smontare le partizioni
<pre>
# umount /mnt/src
# umount /mnt/dst
</pre>
{{Warningbox|
* Fino a questo punto la partizione originale di root non è stata in alcun modo modificata, ma con il prossimo comando tutti i dati in essa contenuti andranno persi.
* Aggiungere una nuova partizione ad un volume RAID ne comporta la risincronizzazione, pertanto il seguente comando deve essere lanciato solo se si ritiene di poter lasciare acceso il PC per tutto il tempo che serve a completare l'operazione. A seconda delle dimensioni dei dati e della velocità dei dischi l'operazione potrebbe anche richiedere giorni. A titolo indicativo 10 GiB di dati richiedono meno di un'ora per essere sincronizzati con dischi nvme.
}}
* Aggiungere ora la vecchia partizione di root al volume raid appena creato
<pre># mdadm /dev/md0 -a /dev/nvme0n1p2</pre>
* Riavviare il PC
{{Cautionbox|È probabile che al riavvio il sistema si blocchi proponendo il prompt di ''grub rescue''. Ciò è dovuto al fatto che l'UUID della partizione di root è cambiato e GRUB non riesce più a trovarla (nonostante la modifica al file <code>grub.cfg</code>). Vedere [[Guida a GRUB 2#"No such device" error|l'apposita sezione]] della guida dedicata a GRUB 2.}}


=== Eliminare un volume RAID ===
=== Eliminare un volume RAID ===
Riga 140: Riga 276:


A questo punto, se lo si desidera, è possibile eliminare tutte le partizioni dai dischi che formavano <code>mdX</code>. Nel caso di dischi SSD un comando utile è <code>blkdiscard</code>, ad esempio:
A questo punto, se lo si desidera, è possibile eliminare tutte le partizioni dai dischi che formavano <code>mdX</code>. Nel caso di dischi SSD un comando utile è <code>blkdiscard</code>, ad esempio:
<pre># blkdiscard /dev/sdX /dev/sdY</pre>
<pre># blkdiscard /dev/sdX
Da notare che questo comando non elimina realmente i dati, ma fa semplicemente apparire i dischi come vuoti.
# 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.
= Principali comandi =
 
Avviare un Array (se ESISTE il file mdadm.conf):
<pre>
# mdadm -As /dev/md0
</pre>
 
Avviare un Array (se NON esiste il file mdadm.conf):
<pre>
# mdadm -A /dev/md0
</pre>
 
Fermare un Array:
<pre>
# mdadm -S /dev/md0
</pre>
Fermare tutti gli array:
<pre>
# mdadm -S -s
</pre>
 
Aggiungere un disco all'array md0:
<pre>
# mdadm /dev/md0 --add /dev/sdh1
</pre>
 
Rimuovere un disco dall'array md0:
<pre>
# mdadm /dev/md0 --fail /dev/sdc1 --remove /dev/sdc1
</pre>
 
Mostrare i metadati dell'array salvati nel disco:
<pre>
# mdadm -E /dev/sdb1
</pre>  
 
Mostrare i dettagli dell'array md0
<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 ==


=== Debianizzati ===
=== Debianizzati ===
[[Software Raid 1: configurazione e verifiche | Guida]] dettagliata per Debian Sarge dedicata a varie casistiche di RAID 1.
* [[Software Raid 1: configurazione e verifiche | Guida]] dettagliata per Debian Sarge dedicata a varie casistiche di RAID 1.


=== 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 ===
* [http://en.wikipedia.org/wiki/RAID RAID], pagina inglese di wikipedia
* [http://en.wikipedia.org/wiki/RAID RAID], pagina inglese di wikipedia
* [https://askubuntu.com/questions/1299978/install-ubuntu-20-04-desktop-with-raid-1-and-lvm-on-machine-with-uefi-bios Install Ubuntu 20.04 desktop with RAID 1 and LVM on machine with UEFI BIOS]
* [https://askubuntu.com/questions/1403691/how-can-i-create-mdadm-raid1-without-losing-data Mettere in raid 1 una partizione di root]


{{Autori
{{Autori
Riga 227: Riga 302:
| Verificata_da =
| Verificata_da =
: [[Utente:Ferdybassi|Ferdybassi]]
: [[Utente:Ferdybassi|Ferdybassi]]
| Numero_revisori= 1
: [[Utente:Wtf|Wtf]]
| Numero_revisori= 2
}}
}}




[[Categoria:Filesystem]]
[[Categoria:Filesystem]]

Versione attuale delle 14:41, 30 giu 2024

File System e dispositivi fisici
Arrow left.png

Generalità

Locali

Remoti

Strumenti

Arrow right.png


Debian-swirl.png Versioni Compatibili

Tutte le versioni supportate di Debian
RAID

Sommario

Durante l'installazione
  1. Generale
  2. Raid 1 ed LVM
Dopo l'installazione
  1. Generale
  2. Raid 1

Introduzione

Generalità

Raid è un artificio per garantire essenzialmente uno o entrambi dei seguenti vantaggi:

  • Ridondanza dei dischi rigidi, ovvero protezione contro eventuali perdite di dati e/o interruzione di servizio causati da guasti di uno o più dischi rigidi.
  • Aggregazione dello spazio in partizioni più grandi e aumento della banda dati disponibile, ovvero della velocità di lettura/scrittura dei dati sui dischi rigidi.

Esistono diverse modalità, ovvero livelli, raid; i principali sono:

  • RAID 0, richiede un minimo di due dischi e garantisce questi benefici:
    • possibilità di creare un volume logico di capacità pari alla somma delle capacità delle singole partizioni che lo compongono;
    • aumento della velocità complessiva a scapito di una riduzione dell'affidabilità garantita da un disco singolo, infatti è sufficiente che si guasti uno solo dei dischi perché si perdano tutti i dati del corrispondente volume raid. È un classico esempio di sistema serie la cui affidabilità complessiva si calcola come il prodotto delle affidabilità di ciascun disco.
  • RAID 1, garantisce ridondanza poiché il sistema continuerà a funzionare fintanto che almeno uno dei dischi è attivo; può garantire un minimo miglioramento per quanto riguarda la lettura dati, ma implica una minima riduzione della velocità in scrittura rispetto al disco singolo. È un classico di sistema parallelo la cui affidabilità complessiva si calcola come uno meno la produttoria di uno meno l'affidabilità del singolo disco. Richiede un minimo di due dischi.
  • RAID 5, semplificando garantisce un incremento di ridondanza e parzialmente di velocità, tuttavia qualora uno dei dischi si guasti le prestazioni si riducono drasticamente. Richiede un minimo di tre dischi.
  • 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.
Info.png Nota
  • 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

Per chi intendesse approfondire maggiormente l'argomento può iniziare consultando wikipedia.

RAID Hardware e Software

Esistono due modi per creare e gestire un volume raid: attraverso la mediazione di controller hardware dedicati oppure via software.

  • 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).
  • 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.
    • In debian il programma deputato a creare e gestire i volumi raid software puri si chiama mdadm.
    • 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 è dmraid.
Attention.png Avvertimento
mdadm 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 è dmraid.


Installare debian su RAID software

Si veda questa pagina per un esempio di come utilizzare lo strumento di partizionamento predefinito.

Creare RAID software dopo l'installazione (mdadm)

Installazione

Se durante l'installazione del sistema operativo avete configurato uno o più volumi raid allora mdadm sarà già stato installato, in caso contrario:

# aptitude install mdadm

Principali comandi

Warning.png ATTENZIONE
mdadm richiede che l'utente abbia già provveduto a creare le partizioni da mettere in raid. Strumenti come fdisk, parted, ecc. vanno tutti bene.


Attention.png Avvertimento
È utile notare che attualmente (v.4.2-5) mdadm attribuisce come nome di default agli array nome_host_pc:numero progressivo, ottenendo quindi qualcosa di simile a pippo:0 per quanto riguarda md0. Sfortunatamente il carattere : non è POSIX compatibile col risultato che il sistema stamperà a video anche un messaggio di avvertenza simile a mdadm Value: "pippo:0" cannot be set as devname. Reason: not POSIX compatible. Value ignored.. Un simile messaggio NON deve evidentemente essere aggiunto a /etc/mdadm/mdadm.conf. In concreto questo significa che nella directory /dev/md/ non sarà presente un collegamento simbolico a /dev/md0 di nome /dev/md/pippo:0, ma più semplicemente /dev/md/0.


Info.png Nota
È possibile mettere in raid sia interi dischi che singole partizioni.


Creare nuovi volumi

  • Creare un volume composto da due partizioni attive (-C = --create)
# mdadm -C /dev/md0 -l 1 -n 2 /dev/sde1 /dev/sde1
  • Creare un volume degradato (cioè composto da una sola partizione attiva)
# mdadm -C /dev/md0 -l 1 -n 2 /dev/sde1 missing

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 n+x, ecco perché oltre a /dev/sde1 viene dichiarato anche missing.
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 (-A = --assemble):
# mdadm -A /dev/md0
  • Avviare un volume quando ESISTE il file mdadm.conf (-As = --assemble --scan):
# mdadm -As /dev/md0

Ottenere informazioni

  • Mostrare i dettagli dell'array md0 (-D = --detail)
# mdadm -D /dev/md0
  • Mostrare i dettagli di tutti i volumi esistenti (-s = --scan)
# mdadm -Ds
  • Mostrare i metadati dell'array salvati nella partizione /dev/sde1 (-E = --examine):
# mdadm -E /dev/sde1
  • Ottenere informazioni sugli array in esecuzione:
# cat /proc/mdstat
  • Monitorare il volume md0 (-F = --follow = --monitor) ogni 5 minuti (-d = --delay):
# mdadm -F -d=300 /dev/md0

Aggiungere una nuova partizione a volumi esistenti

  • Aggiungere la partizione /dev/sdh1 all'array md0 (-a = --add):
# mdadm /dev/md0 -a /dev/sdh1

Rimuovere una partizione da volumi esistenti

  • Rimuovere (-r = --remove) un disco già identificato come danneggiato (failed) oppure di riserva (spare) dall'array md0:
# mdadm /dev/md0 -r /dev/sdh1
  • Rimuovere una partizione attiva dall'array md0 (-f = --fail):
# mdadm /dev/md0 -f /dev/sdh1 -r /dev/sdh1

In sintesi è prima necessario contrassegnare il disco da rimuovere come danneggiato (-f = --fail) anche se in realtà è perfettamente funzionante.

Fermare volumi

  • Fermare un volume (-S = --stop):
# mdadm -S /dev/md0
  • Fermare tutti gli array:
# mdadm -Ss

Sincronizzare nuovamente un volume

Se il comando cat /proc/mdstat restituisce:

md0 : active (auto-read-only) raid1 sda1[0] sdb1[1]
2000000 blocks [2/2] [UU]
resync=PENDING

occorre dare il comando:

# mdadm --readwrite /dev/mdX

e la sincronizzazione ripartirà:

[===>...] resync = 16.2% (324736/2000000) finish=0.6min speed=46390K/sec

/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:

# mdadm -Ds >> /etc/mdadm/mdadm.conf
Warning.png ATTENZIONE
Come scritto sopra il comando mdadm -Ds può generare anche messaggi di varia natura che NON devono essere inclusi in /etc/mdadm/mdadm.conf, pertanto è onere dell'utente eliminare i suddetti messaggi da mdadm.conf. In linea di principio devono essere incluse solo le righe che iniziano con ARRAY ...


Una volta apportate tutte le modifiche è necessario dare il seguente comando

# update-initramfs -u

Esempi

Creazione di un volume raid che include due partizioni

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 /dev/sde digitare da terminale:

# fdisk /dev/sde

Appena premuto 'invio' dovrebbe essere comparso il prompt di fdisk:

Command (m for help)

Premere "p" per stampare a video l'elenco delle partizioni disponibili (posto naturalmente che ce ne siano di già definite).

Warning.png ATTENZIONE

Assicurarsi di aver selezionato il disco giusto ed eventualmente di possedere una copia di backup dei dati in esso contenuti! Alcune operazioni, come cancellare una partizione, comportano la perdita di tutti gli eventuali dati in essa contenuti.


È possibile cancellare le partizioni premendo "d" oppure crearne di nuove premendo "n" (posto naturalmente di avere spazio libero); ogni comando in genere innesca una procedura interattiva che dovrebbe risultare abbastanza intuitiva.

Attention.png Avvertimento
Si ricorda nuovamente che tutte le partizioni componenti un certo volume raid devono necessariamente avere la stessa dimensione.

Una volta che per il disco sia stato definito lo schema di partizioni desiderato premere "t" per cambiare ID alle partizioni che andranno a comporre il volume raid; verrà chiesto prima di selezionare la partizione da alterare e poi di digitare il codice esadecimale per l'ID desiderato, nel caso in oggetto "fd" (premendo l si ottiene invece un elenco di tutti i codici esadecimali possibili).
Premere "w" per scrivere le modifiche sul disco oppure "q" per uscire senza apportare alcuna modifica (in tal caso tutte le variazioni andranno evidentemente perse e dovranno essere rieseguite da capo).
Ripetere le precedenti operazioni per tutti gli altri dischi che concorreranno alla formazione dei volumi raid con una o più partizioni.

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:

# mdadm --create /dev/md0 --level=1 --raid-devices=2 /dev/sde1 /dev/sdf1
  • --create (-C) dice banalmente che si vuole creare un nuovo volume raid. Ogni nuovo volume creato è anche automaticamente attivato.
  • --level=1 (-l=1) dichiara che stiamo creando un raid 1. Se invece di 1 si fosse dichiarato 0 si sarebbe creato un raid 0.
  • --raid-devices=2 (-n=2) dichiara il numero di dischi che comporranno il volume raid. Questo numero deve essere uguale al numero di partizioni dichiarate come attive più l'eventuale numero di dischi di riserva dichiarati. In questo esempio non è stato esplicitato il numero di dischi di riserva che quindi viene considerato zero (cioè nessun disco di riserva) e pertanto si sono dichiarate correttamente solo due partizioni attive (/dev/sde1 e /dev/sdf1).
Info.png Nota
È sempre possibile aumentare il numero di dischi attivo che compongono il volume raid con la modalità --grow, in caso contrario ogni eventuale disco aggiunto successivamente al volume raid verrà considerato essere di riserva.

Per verificare che il volume sia correttamente inizializzato digitare

# cat /proc/mdstat

Dovrebbe comparire qualcosa di simile a

Personalities: [raid1]
md0 : active raid1 sde1[0] sdf1[1]
      XXXXXXXX blocks super 1.2 [2/2] [UU]
unused devices: <none>

Un altro utile comando per ottenere informazioni sul volume appena creato è

# mdadm --detail /dev/md0

A questo punto il volume raid può essere formattato secondo la procedura canonica; ad esempio per creare un filesystem ext4:

# mkfs.ext4 /dev/md0

Ripetere la procedura per tutti gli eventuali altri volumi raid che si desidera creare.

Attivare automaticamente un volume RAID ad ogni avvio

Come già scritto ogni volume raid appena creato viene anche automaticamente attivato e quindi reso immediatamente disponibile, tuttavia tale attivazione deve essere eseguita nuovamente ad ogni riavvio del computer. È possibile attivare manualmente un volume raid tramite l'opzione --assemble (-A) oppure automatizzare la procedura di attivazione di tutti i volumi raid creati salvandone la relativa struttura in un apposito file di configurazione: /etc/mdadm/mdadm.conf.
La struttura di tutti i volumi raid creati può essere visualizzata con:

# mdadm --detail --scan

Tutte le righe che iniziano con ARRAY ... possono essere aggiunte in coda al file /etc/mdadm/mdadm.conf.

La predetta procedura può anche essere ridotta ad un solo comando digitando:

# mdadm --detail --scan >> /etc/mdadm/mdadm.conf

Che provvede anche a creare direttamente il file .conf se questo non esisteva.

Warning.png ATTENZIONE
Il precedente comando potrebbe aggiungere anche righe che non iniziano con ARRAY ..., nel qual caso spetterà all'utente cancellare le suddette righe.


Qualora ci si dimenticasse di (o non si volesse) creare/modificare il file /etc/mdadm/mdadm.conf, dopo un riavvio è possibile riassemblare un volume dando un comando del tipo:

mdadm -A /dev/md0 /dev/sde1 /dev/sdf1

posto naturalmente che il suddetto volume non contenesse informazioni essenziali per l'avvio del sistema, nel qual caso non ripartirebbe proprio il sistema operativo.

Rendere usabili i volumi RAID

Per poter materialmente memorizzare dati all'interno di un volume raid è necessario montarlo come una qualsiasi altra partizione, pertanto creare in primis un punto di mount, ad esempio:

# mkdir /mnt/mio_volume_raid/

Successivamente, posto di voler montare il volume 0, digitare:

# mount /dev/md0 /mnt/mio_volume_raid/

A questo punto il volume raid risulterà molto probabilmente accessibile in sola lettura a tutte le utenze eccetto root, pertanto ove richiesto sarà necessario cambiare proprietario e/o permessi sul volume raid montato.
Per smontare il volume raid, come sempre è sufficiente digitare:

# umount /mnt/mio_volume_raid/

Montare automaticamente un volume all'avvio

Perché un certo volume venga montato automaticamente all'avvio è necessario editare /etc/fstab/ aggiungendo una riga del tipo:

UUID=XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX     /mnt/mio_volume_raid    ext4     defaults     0     2

Dove UUID si ottiene digitando da terminale blkid /dev/dispositivo, ad esempio:

blkid /dev/md0

Mettere in RAID la partizione di root

Warning.png ATTENZIONE
  • Questa è un operazione ESTREMAMENTE delicata che potrebbe rendere non più avviabile il sistema e/o causare la perdita completa dei dati.
  • Si ipotizza che la partizione di boot non sia separata, ovvero che la directory /boot risieda nella partizione di root.


  • Creare una partizione su un nuovo disco, della dimensione che si ritiene più opportuna (non deve necessariamente essere uguale a quella corrente di root). Non è necessario formattarla con un file system. Questo passaggio può anche essere eseguito anche dopo il punto 2.
  • Riavviare il PC selezionando un'altra distro o usandone una live (es. Debian Live). Installare mdadm se già non disponibile.
Attention.png Avvertimento
Il punto è che la partizione di root che si vuole copiare NON deve essere montata all'avvio del sistema.
  • Supponendo che la partizione di root esistente sia /dev/nvme0n1p2 e quella nuova invece /dev/nvme1n1p2 creare un volume raid degradato che includa quest'ultima
# mdadm -C /dev/md0 -l 1 -n 2 nvme1n1p2 missing
  • Formattare il volume appena creato con il file system desiderato, per es. ext4 (2,5% blocchi riservati, etichetta "radice"):
# mkfs.ext4 -m 2.5 -L radice /dev/md0
  • Creare due punti di montaggio temporanei per la partizione esistente e per quella nuova, ad esempio:
# mkdir /mnt/dst
# mkdir /mnt/src
  • Montare la partizione di root esistente in /mnt/src e quella nuova in /mnt/dst, ad esempio:
# mount /dev/nvme0n1p2 /mnt/src
# mount /dev/md0 /mnt/dst
  • Copiare tutti i dati della partizione esistente in quella nuova:
# rsync -axcHAWXS --del --numeric-ids --info=progress2 /mnt/src /mnt/dst
  • Terminata la copia modificare il file /mnt/dst/etc/fstab aggiornando l'UUID della vecchia partizione di root con quello del volume raid md0.
Bulb.png Suggerimento
Per trovare l'UUID di md0 usare il comando lsblk -f


  • Modificare il file /mnt/dst/boot/grub/grub.cfg aggiornando la sezione relativa al sistema operativo sostituendo l'UUID della vecchia partizione di root con il volume raid md0.
  • Aggiungere i dati del volume raid md0 al file /mnt/dst/etc/mdadm/mdadm.conf (si rilegga la sezione dedicata di questa guida).
  • Smontare le partizioni
# umount /mnt/src
# umount /mnt/dst
Warning.png ATTENZIONE
  • Fino a questo punto la partizione originale di root non è stata in alcun modo modificata, ma con il prossimo comando tutti i dati in essa contenuti andranno persi.
  • Aggiungere una nuova partizione ad un volume RAID ne comporta la risincronizzazione, pertanto il seguente comando deve essere lanciato solo se si ritiene di poter lasciare acceso il PC per tutto il tempo che serve a completare l'operazione. A seconda delle dimensioni dei dati e della velocità dei dischi l'operazione potrebbe anche richiedere giorni. A titolo indicativo 10 GiB di dati richiedono meno di un'ora per essere sincronizzati con dischi nvme.


  • Aggiungere ora la vecchia partizione di root al volume raid appena creato
# mdadm /dev/md0 -a /dev/nvme0n1p2
  • Riavviare il PC
Attention.png Avvertimento
È probabile che al riavvio il sistema si blocchi proponendo il prompt di grub rescue. Ciò è dovuto al fatto che l'UUID della partizione di root è cambiato e GRUB non riesce più a trovarla (nonostante la modifica al file grub.cfg). Vedere l'apposita sezione della guida dedicata a GRUB 2.


Eliminare un volume RAID

Si supponga di voler eliminare il volume mdX.

Il primo passo è smontare il volume

# umount /dev/mdX
Info.png Nota
Se sul volume in oggetto sono presenti root o altre partizioni fondamentali che non possono essere smontate l'unica soluzione è eseguire le operazioni con un immagine live oppure selezionando all'avvio un sistema operativo diverso da quello che usa il volume mdX.


Visualizzare e prendere nota dei dischi/partizioni che compongono il volume:

# mdadm -D /dev/mdX

Supponiamo che sia composto da due partizioni: /dev/sde1 e /dev/sdf1

Fermare il volume che si vuole eliminare

# mdadm -S /dev/mdX

Eliminare tutti i metadati dai dischi/partizioni che compongono il volume mdX, che in questo esempio significa

# mdadm --zero-superblock /dev/sde1 /dev/sdf1

Aggiornare il file /etc/mdadm/mdadm.conf eliminando la riga corrispondente a mdX. Eseguire:

# update-initramfs -u

A questo punto, se lo si desidera, è possibile eliminare tutte le partizioni dai dischi che formavano mdX. Nel caso di dischi SSD un comando utile è blkdiscard, ad esempio:

# blkdiscard /dev/sdX
# blkdiscard /dev/sdY

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 -f altrimenti il sistema si limiterà a stampare a video un messaggio di avvertimento relativo alla perdita dei dati sui dischi specificati.

Approfondimenti

Debianizzati

  • Guida dettagliata per Debian Sarge dedicata a varie casistiche di RAID 1.

Manpages

Sitografia




Guida scritta da: Wtf Swirl-auth60.png Debianized 60%
Estesa da:
Robiz (RAID 1)
wtf (configurazione RAID)
Verificata da:
Ferdybassi
Wtf

Verificare ed estendere la guida | Cos'è una guida Debianized