Ho appena recuperato 2 dischi da 500 GB sata da una vecchia installazione, così ho aperto il mio nuovo Desktop e collegato a mia macchina Linux principale, questi 2 dischi stati utilizzati per circa 3 anni sull’altra installazione, quindi preferisco usarli in una configurazione in mirroring, o RAID 1, quindi tutto ciò che è scritto in un disco viene copiato automaticamente anche sull’altro, e non vi è alcuna perdita di informazioni, se uno dei due dischi si rompe.
Al momento io uso una Mint 14 edizione XFCE, che è totalmente compatibile con Ubuntu 12.10, e dal mio punto di vista per alcuni aspetti molto migliore, in questa guida userò quindi comandi che sono compatibili per Mint, Ubuntu e Debian per altre distribuzioni dovrete cercare i vostri pacchetti, ma le configurazioni ed i comandi saranno gli stessi.
Come prima cosa, che cosa è un RAID?
Da Wikipedia
Un RAID, acronimo di Redundant Array of Inexpensive Disks, insieme ridondante di dischi economici (oppure Redundant Array of Independent Disks, in italiano insieme ridondante di dischi indipendenti), è un sistema informatico che usa un gruppo di dischi rigidi per condividere o replicare le informazioni. I benefici del RAID sono di aumentare l’integrità dei dati, la tolleranza ai guasti e le prestazioni, rispetto all’uso di un disco singolo. Nella sua implementazione originaria il fattore chiave era l’abilità di combinare parecchi dischi a basso costo ed obsoleti per rendere il sistema complessivamente migliore di un disco di ultima generazione per capacità, affidabilità e velocità.
Si tratta di una buona definizione del concetto RAID originale, ovvero l’implementazione hardware, in cui sono collegati 2 o più dischi a un controller che utilizza una CPU e RAM dedicata per eseguire tutti i compiti necessari per mantenere il livello di RAID scelto, mentre su Linux, questo è tradizionalmente effettuato tramite un software RAID.
Questo significa che in Linux, useremo le nostre risorse della CPU e RAM per eseguire tutte le attività necessarie per mantenere i nostri dischi con la configurazione RAID installata, questo naturalmente ha un costo per il nostro sistema di alcune risorse, ma significa anche che noi non dobbiamo acquistare un controller RAID aggiuntivo per i nostri computer, e con le CPU e la RAM di oggi questo è di solito un costo trascurabile in termini di cicli di CPU.
In questo articolo configurerò i 2 dischi in un RAID 1 la configurazione nota anche come “mirroring del disco”, i dati scritti su un’unità disco sono contemporaneamente scritti sull’altro disco. Durante la scrittura, ci sarà una riduzione delle prestazioni rispetto allo scrivere su un singolo disco. Se un disco si guasta, tutti i dati sono conservati sull’altra unità.
Il RAID 1 offre affidabilità dei dati estremamente elevata, ma al costo di raddoppiare la necessaria capacità di immagazzinamento dati.
Installazione del software
mdadm
è lo strumento standard di gestione del RAID disponibile su Linux e dovrebbe essere disponibile in qualsiasi distribuzione moderna, quindi per installarlo sul nostro sistema si può utilizzare il comando:
sudo apt-get install mdadm |
Questo probabilmente installerà anche il pacchetto postfix
, la configurazione di questo software è utile per inviare e-mail se il sistema ha rilevato che l’array RAID è degradato, ma se si sta installando il tutto sul vostro desktop potete non configurarlo, mentre su qualsiasi server vi consiglio di configurarlo per essere in grado di inviare e-mail in caso di problemi.
Partizionamento del disco
Potremmo utilizzare i dischi interi e costruire il raid su di loro, ma le best practice dicono che è meglio fare 1 partizione che prende l’intero disco ed usare questa non c’è problema, vogliamo sempre seguire le pratiche migliori 🙂
Io ho installato Mint su un disco da 500 GB, che nel mio sistema è mappato come sda
, i nuovi 2 dischi sono sdb
e sdc
e io li userò per fare 1 nuovo filesystem che monterò in /data, quindi passiamo ora al partizionamento, per questo compito che io ho sempre usato fdisk
, se preferite qualcosa di più grafico è possibile utilizzare cfdisk
.
Come prima cosa è necessario identificare i nuovi dischi, per questo si può usare il comando dmesg
o da un terminale come utente root utilizzare il comando fdisk -l
che nel mio caso stampa questa :
Disk /dev/sda: 500.1 GB, 500107862016 bytes 255 heads, 63 sectors/track, 60801 cylinders, total 976773168 sectors Units = sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 4096 bytes I/O size (minimum/optimal): 4096 bytes / 4096 bytes Disk identifier: 0x000d3020 Device Boot Start End Blocks Id System /dev/sda1 * 2048 97656831 48827392 83 Linux /dev/sda2 97658878 976771071 439556097 5 Extended Partition 2 does not start on physical sector boundary. /dev/sda5 97658880 105469951 3905536 82 Linux swap / Solaris /dev/sda6 105472000 976771071 435649536 83 Linux Disk /dev/sdb: 500.1 GB, 500107862016 bytes 255 heads, 63 sectors/track, 60801 cylinders, total 976773168 sectors Units = sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0x00000000 Disk /dev/sdb doesn't contain a valid partition table Disk /dev/sdc: 500.1 GB, 500107862016 bytes 255 heads, 63 sectors/track, 60801 cylinders, total 976773168 sectors Units = sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0x00000000 Disk /dev/sdc doesn't contain a valid partition table |
Si dovrebbero cercare dischi con non contengono una tabella di partizione valida, sono i dischi che si desidera partizionare.
Con fdisk
basta seguire queste semplici istruzioni:
fdisk /dev/sdb |
Si aprirà una finestra di dialogo, basta usare la seguente sequenza per creare una nuova partizione primaria che occuperà l’intero disco e contrassegnarla come Linux Raid:
n ; per una nuova partizione enter p ; per indicare che è primaria enter 1 ; numero della partizione enter ; accetta il default enter ; accetta il default t ; per cambiare il tipo fd ; configura il tipo a “Linux raid auto detect” (83h) w ; salva i cambiamenti su disco ed esce |
Ripetere l’operazione per il secondo disco, questa volta iniziando con
fdisk /dev/sdc |
e utilizzare la stessa sequenza.
Creare il RAID
Ora possiamo finalmente creare il nostro RAID, la sintassi è la seguente:
mdadm --create /dev/md0 --level=mirror --raid-devices=2 /dev/sdb1 /dev/sdc1 mdadm: Defaulting to version 1.2 metadata mdadm: array /dev/md0 started. |
Questo creerà il dispositivo virtuale /dev/md0
creato da due dispositivi a blocchi reali /dev/sdb1
e /dev/sdc1
, configurandolo in modalità mirror
.
Ok, ora è tutto pronto per partire con il nostro RAID. Il mirror deve essere costruito, cioè il contenuto (comunque non importante, in quanto il dispositivo non è ancora formattato) dei due dispositivi deve essere sincronizzato.
Verificate il file /proc/mdstat
. Dovrebbe dirvi che il dispositivo /dev/md0 è stato avviato, e che il mirror è in fase di ricostruzione, e un ETA per il completamento della ricostruzione.
cat /proc/mdstat Personalities : [raid1] md0 : active raid1 sdc1[1] sdb1[0] 488253440 blocks super 1.2 512K chunks 2 far-copies [2/2] [UU] [>....................] resync = 0.3% (1625024/488253440) finish=169.9min speed=47730K/sec |
La ricostruzione viene fatta usando la banda di I/O non utilizzata. Quindi, il sistema dovrebbe essere ancora abbastanza reattivo, anche se i led degli hard disk dovrebbero lampeggiare allegramente.
Il processo di ricostruzione è trasparente, quindi si può effettivamente utilizzare il dispositivo anche se il mirror è attualmente in fase di ricostruzione.
Formatteremo ora il dispositivo, mentre la ricostruzione è in esecuzione. E questo funzionerà.
Inoltre è possibile montarlo e usarlo mentre la ricostruzione è in esecuzione.
Naturalmente, se il disco si rompe mentre la ricostruzione è in esecuzione, siete sfortunati.
Creare il file mdadm.conf
In Ubuntu il sistema esegue una scansione di tutti i dispositivi durante l’avvio e attiva automaticamente i raid, quindi non è necessario avere un file mdadm.conf configurato, ma come best practice vi suggerisco di scrivere al suo interno la configurazione Raid, in Ubuntu questo file si trova in /etc/mdadm/mdadm.conf e il modo più semplice per configurarlo è quello di utilizzare il seguente comando:
sudo mdadm --detail --scan --verbose > /etc/mdadm/mdadm.conf |
Nel mio caso questo file contiene:
ARRAY /dev/md0 level=raid1 num-devices=2 metadata=1.2 name=mint-desktop:0 UUID=048c40d4:16d71dda:1c3ba4ca:8babae51 devices=/dev/sdb1,/dev/sdc1 |
Creare un filesystem sul metadevice Raid
Io formatterò il raid con un filesystem ext4, quindi per fare questo si può usare il comando:
sudo mkfs.ext4 /dev/md0 |
Come previsto questa operazione è terminata senza errori in pochi secondi anche se il mirror è ancora in ricostruzione.
Ora creo il mount point e monto il nuovo filesystem su di esso con:
sudo mkdir /data sudo mount /dev/md0 /data sudo chmod 777 /data # I want all users to be able to work there sudo chmod +t /data #But i want that only the owner can delete their contents. tune2fs -m 1 /dev/md0 #reserve just 1% of the disk for maintenance |
E come ultima cosa aggiungo una riga al file /etc/fstab, in modo che il raid venga montato automaticamente in /data durante il processo di avvio
echo "/dev/md0 /data/ ext4 defaults 1 2" >> /etc/fstab |
Piccolo Aggiornamento
Dopo un riavvio il sistema mi ha detto che /dev/md0 non era disponibile, e quindi il /media è stato ignorato nella fase di avvio.
Ho controllato come il processo di scansione automatica rinominava mio meta-dispositivo e per me questo è :
mint-desktop dev # ls -l /dev/md/mint-desktop\:0 lrwxrwxrwx 1 root root 8 Dec 30 12:12 /dev/md/mint-desktop:0 -> ../md127 /dev/md/mint-desktop:0 -> ../md127 |
mint-desktop è il nome del mio desktop, così ho cambiato la linea in fstab con:
/dev/md/mint-desktop:0 /data/ ext4 defaults 1 2 |
Ed adesso /data
viene montato automaticamente in fase di avvio.
Conclusioni
Con queste semplici istruzioni è possibile impostare un RAID software su Linux, questo vi aiuterà a salvare i vostri dati se qualcosa di brutto capita ad uno dei vostri hard disk, vi consiglio anche di dare un’occhiata a questo articolo sul RAID10 , una ottima alternativa al Raid 1 che ho usato in questo articolo.
Riferimenti
The Software-RAID HOWTO
Raid Setup
Non-standard RAID levels
Popular Posts:
- None Found
To fix the problem you mention in your small update (if your mdadm.conf file still refers to md0) you need to update your initramfs.
sudo update-initramfs -u
Thanks Steven,
I did not investigate too much this problem and so I solved the issue putting the label.
But your is a much betetr solution.
Salve io ho un dubbio, ho seguito la tua guida e alla fine sul mio kubuntu 11.10 sono riuscito s creare un Raid1 e tutto funziona, questo Raid contiene solo dati di lavoro. Ilmio quesito è il seguente adesso ho neccessità di formattare il sistema e reinstallare da zero la distro, metterò la 12.04 per questioni di supporto, il Raid non contiene il sistema ma sono altri HHD, quindi se io reinstallo non lo tocco ma come faccio a reimpostarlo nel nuovo sistema senza formattare o rifarlo? Non voglio e non devo perdere i dati penso che si la procedura per farlo basta rifare la parte finale della guida. Grazie per la risposta Drox
Ciao,
Si basta rifare la parte in cui ridefinisci il raid, anche io ho reinstallato il SO su un certo disco, senza problemi sui due dischi in Raid.
Le distribuzioni più nuove dovrebbero fare autodiscovery, segnati comunque la conf che vedi in : /etc/mdadm/mdadm.conf
Creare il file mdadm.conf
In Ubuntu il sistema esegue una scansione di tutti i dispositivi durante l’avvio e attiva automaticamente i raid, quindi non è necessario avere un file mdadm.conf configurato, ma come best practice vi suggerisco di scrivere al suo interno la configurazione Raid, in Ubuntu questo file si trova in /etc/mdadm/mdadm.conf e il modo più semplice per configurarlo è quello di utilizzare il seguente comando:
sudo mdadm –detail –scan –verbose > /etc/mdadm/mdadm.conf
Nel mio caso questo file contiene:
ARRAY /dev/md0 level=raid1 num-devices=2 metadata=1.2 name=mint-desktop:0 UUID=048c40d4:16d71dda:1c3ba4ca:8babae51
devices=/dev/sdb1,/dev/sdc1
Quindi è questa parte qui? Dopo aver ovviamente intallato mdamd!
Si confermo, è questa parte che definisce il tuo raid (raid1 formato da sdb1 e sdc1)
Scusa, forse ti faccio una domanda banale, ma trattando di dati di lavoro vorrei essere sicuro di non perdere nulla.
ho questo sistema
/dev/sdc1 montato su /home da 250 GB
/dev/sdb1 montato su /media/mirror da 250 GB
/dev/sdb1 è una partizione vuota.
nel comando mdadm per creare il RAID devo indicare prima il device origine e poi quello destinazione? cioè nel caso mio sarebbe
madm –create /dev/md0 –level=mirror –raid-devices=2 /dev/sdc1 /dev/sdb1
o sbaglio? Non vorrei che la sincronizzazione avvenisse dalla partizione vuota a quella “buona” cancellandomi tutto…
La partizione /dev/sdb1 deve essere necessariamente montata all’avvio da fstab (per esempio sulla dir /mirror) ?
Ciao,
In tutti i test che ho fatto il mirror veniva creato sui due device vuoti, e poi montando il device in raid ci scrivevo sopra i dati.
Non so se il caso che ipotizzi sia fattibile, anzi se lo hai testato con successo..fammelo sapere.
Ciao
Ciao,
Ho un server con due dischi in Raid, che funziona con Ubuntu. Vorrei fare un upgrade di dischi e allo stesso tempo anche un aggiornamento del sistema a una versione piu’ nuova. Sapete indicarmi un metodo per fare questa cosa? Io avevo pensato di mettere un disco nuovo e lasciare che faccia la ricostruzione e poi ripetere con il secondo disco, e in fine aggiornare il sistema. Ma penso che dovro’ riconfigurare i dischi Raid. Per fare il tutto posso utilizzare questa guida? Si puo’ applicare al mio caso?
Ciao e Grazie
Volevo fare il RAID 1 con due dischi da 3 TB, ho dato il comando fdisk /dev/sdb
ed ho ottenuto questo come risposta:
Welcome to fdisk (util-linux 2.27.1).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.
/dev/sdb: device contains a valid ‘ext4′ signature; it is strongly recommended to wipe the device with wipefs(8) if this is unexpected, in order to avoid possible collisions
Device does not contain a recognized partition table.
The size of this disk is 2,7 TiB (3000592982016 bytes). DOS partition table format can not be used on drives for volumes larger than 2199023255040 bytes for 512-byte sectors. Use GUID partition table format (GPT).
Created a new DOS disklabel with disk identifier 0x2aa6102f.
Comando (m per richiamare la guida):
E’ possibile risolvere il problema? Ubuntu si trova su un SSD da 250 GB.
Grazie.