Usare i loop device per creare filesystem in RAID su Linux

Solitamente si usano i loop device su Linux (Wikipedia offre una spiegazione esauriente) per montare delle immagini ISO e renderle accessibili nel filesystem ma non è l’unico utilizzo, per esempio può essere utile formattare dei file e montarli con l’opzione “-o loop” come se fossero dei device. Un possibile scenario potrebbe essere la creazione di due dispositivi in RAID, servendosi non di due device veri e propri ma solo di file.

I passi da compiere, in sintesi, sono i seguenti: creare due (o più) file con dd, usare losetup per consentire il mount senza l’opzione “-o loop” dei due file come se fossero dispositivi veri e propri da poter formattare, assemblare i due dispositivi in RAID utilizzando mdadm.

Vediamo passo passo come fare, la distribuzione cui faccio riferimento per questa miniguida è Ubuntu:

Come già visto, con dd è possibile creare file delle dimensioni che vogliamo. Per il nostro esempio creeremo nella nostra home directory due file di 100MB ciascuno chiamandoli “raid1” e “raid2”:

dd if=/dev/zero of=/home/nomeutente/raid1 bs=1M count=100

e poi

dd if=/dev/zero of=/home/nomeutente/raid2 bs=1M count=100

Usiamo losetup per associare ciascun file creato a un loop device e rendere superflua l’opzione “-o loop” del comando mount:

sudo losetup /dev/loop0 /home/nomeutente/raid1

e poi ancora:

sudo losetup /dev/loop1 /home/nomeutente/raid2

A questo punto possiamo assemblare i due dispositivi in RAID utilizzando mdadm (se non è presente sulla vostra Ubuntu potete installarlo con il comando “sudo apt-get install mdadm”). Possiamo scegliere tra vari livelli RAID, nell’esempio che propongo ho deciso di usare il RAID 1, cioè il “mirroring” che permette una ridondanza di dati completa tra i due dischi (i due file creati nel nostro caso):

sudo mdadm --create /dev/md0 --level=1 --raid-devices=2 /dev/loop0 /dev/loop1

Con il comando dato diciamo di creare un dispositivo “/dev/md0” che si componga di due device loop0 e loop1 in RAID 1
.
A questo punto possiamo formattare /dev/md0 (nell’esempio qui di seguito ho scelto il filesystem ext3):

sudo mkfs.ext3 /dev/md0

Quindi per montare /dev/md0 basterà creare una directory che serva da punto di mount, per esempio /mnt/raid:

sudo mkdir /mnt/raid

e montare md0 con:

sudo mount -t ext3 /dev/md0 /mnt/raid

Da questo momento in poi i dati scritti in /mnt/raid verranno salvati su loop0 e loop1.

Per controllare lo stato del RAID creato possiamo ricorrere al comando:

cat /proc/mdstat

Per eliminare tutte le modifiche fatte e i device creati basterà procedere con i seguenti passi:

  1. sudo umount /mnt/raid /*smonta /mnt/raid*/
  2. sudo mdadm --stop /dev/md0 /*ferma con mdadm il dispositivo md0*/
  3. sudo mdadm --remove /dev/md0 /*cancella il dispositivo md0*/
  4. losetup -d /dev/loop0 /* cancella l’impostazione di loop0 con losetup*/
  5. losetup -d /dev/loop1 /*cancella l’impostazione di loop1 con losetup*/
  6. cd /home/nomeutente&&sudo rm raid1 raid2 /*ci spostiamo nella home directory e cancelliamo i due file creati con dd
  7. sudo rmdir /mnt/raid /*cancelliamo la directory creata in /mnt/

Per la realizzazione di questa guida ho trovato molto utile un post molto completo di cui consiglio la lettura: Making use of loop devices on Linux. Molto ben fatto è anche HOWTO: Linux Software Raid using mdadm, un tutorial postato sul forum di Ubuntu.

2 commenti su “Usare i loop device per creare filesystem in RAID su Linux”

  1. Ottima idea… ma mi chiedevo se è possibile criptare i file così creati; in pratica la mia necessità sarebbe quella di effettuare dei backup su una macchina remota in hosting presso un ISP, utilizzando rsync in maniera trasparente.

    Per il momento non ho implementato niente di simile perché i dati sono sensibili ed una protezione forte è indispensabile.

    Ho cercato in rete e qualcosa è venuto fuori, ma non essendo un sistemista vero, non vorrei fare stronzate, mi puoi fornire qualche "diritta"?

  2. Ottimo post, proprio quello che cercavo.
    E' passato un pò di tempo, ma adesso per cancellare un raid si usa "sudo mdadm –manage -S /dev/md0"

    a parte questo, hai suggerimenti su come rendere persistenti le modifiche al boot ?

I commenti sono chiusi.