Dec 282012
 

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

rtable

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:

flattr this!

  9 Responses to “Configurazione di 2 dischi in mirroring su Ubuntu Linux”

  1. 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.

  2. 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!

  3. 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

  4. 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

 Leave a Reply

(required)

(required)


*

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>