RAID Software : Proteggere i dati con l’aiuto del kernel (4 di 5)

linux

Nel precedente articolo è stato affrontato l’argomento della messa in RAID della partizione di root, partendo da un’installazione standard o da un sistema già esistente.
In questa penultima parte della serie viene affrontato un case study relativo all’impiego di mdadm per la creazione di un sistema RAID 1 con disco estraibile.

Case Study 1 – RAID 1 con HD ide “a cassetto”

Il seguente Case study descrive il progetto realizzato per la società “Immagine & Dettaglio” che si occupa di architettura d’interni, progettazione architettonica e di grafica.
L’esigenza primaria della società era di ottenere la gestione centralizzata dei dati e rimpiazzare il vetusto impianto per i backup, rappresentato da un DAT (Digital Audio Tape) a cassette, con un progetto che offrisse maggiore sicurezza nella registrazione dei dati, minori costi e la possibilità di trasportare tali backup in luoghi diversi dall’ufficio in cui risiedeva il sistema, per ridurre al minimo la possibilità di perdita totale di tutti i dati.
Il progetto ha quindi previsto il riutilizzo di una vecchia macchina (denominata “ied-storage” con processore Intel Celeron 1000 MegaHertz, 256 MegaByte di RAM ed un disco da 20 GigaByte), l’acquisto di tre dischi IDE da 300 GigaByte e due kit per hard disk estraibili.
Questi kit, visibili nella Foto 1 risultano facilmente installabili in qualsiasi slot da 5 pollici e ¼ (ossia lo slot dei lettori cd/dvd) e consentono di collegare un cassetto ad uno dei canali IDE della scheda madre e di rendere il disco che viene inserito all’interno di questo, estraibile.

Foto 1

Foto 1

Sul canale IDE primario della scheda madre sono stati quindi collegati il disco del sistema operativo da 20 GigaByte (come Master) ed il lettore DVD (come Slave) mentre sul canale IDE secondario è stato collegato uno dei dischi da 300 GigaByte (come Master) ed il cassetto IDE (come Slave).
Utilizzando la tecnologia RAID software offerta dal kernel Linux per realizzare un mirror (RAID 1) sui dischi collegati al secondo canale IDE oltre ad avere 300 GigaByte di spazio disponibile in rete, ne si garantisce il completo backup.
Inoltre, attraverso delle sostituzioni schedulate del disco (ad esempio una volta la settimana), si garantisce la possibilità di trasportare il contenuto del disco lontano dall’ufficio, avere tre copie dello stesso dato ad ogni sostituzione e nella peggiore delle ipotesi, ossia quella in cui entrambi i dischi collegati alla macchina si rompano, una sola settimana di ritardo nei backup (presenti sul disco estratto la settimana precedente).
Sul disco primario da 20 GigaByte è stato installato come sistema operativo Debian Sarge 3.1, mentre i due dischi hdc e hdd non sono stati configurati.

Sviluppo del progetto

Lo stato del sistema al primo boot è il seguente:

$ df -h
Filesystem         Dimens. Usati Disp. Uso% Montato su
/dev/hda2            19,2G 1001M 17,8G  12% /
tmpfs                 443M     0  443M   0% /dev/shm

Una partizione root da 19 GigaByte, una swap da 500 MegaByte.
Su ciascuno dei due dischi hdc e hdd vanno quindi create due partizioni hdc1 ed hdd1 (ad esempio attraverso il programma fdisk) della massima grandezza disponibile (quindi 300 GigaByte) ed il RAID 1 ad esse associato:

$ mdadm --create /dev/md0 --level=1 --raid-disks=2 /dev/hdc1 /dev/hdd1
mdadm: array /dev/md0 started.

Al termine della sincronizzazione lo stato del RAID è il seguente:

$ cat /proc/mdstat
Personalities : [raid1]
md0 : active raid1 hdd1[1] hdc1[0]
      2993440 blocks [2/2] [UU]
 
unused devices: <none>

La fase successiva prevede la creazione del filesystem sulla device md0:

$ mke2fs -j /dev/md0

Ed il suo montaggio nella directory /mnt:

$ mount /dev/md0 /mnt

In questo modo è possibile muovere l’attuale contenuto della cartella /home all’interno del nuovo filesystem, questo perché l’obiettivo finale vuole essere quello di rendere lo spazio offerto dal RAID 1 condiviso attraverso SAMBA, che nella configurazione standard condivide le directory home di ciascun utente:

$ mv /home/* /mnt/

Una volta smontata la cartella /mnt:

$ umount /mnt/

E’ possibile associare all’interno del file /etc/fstab la device /dev/md0 al mount point /home, aggiungendo nel file /etc/fstab la seguente riga:

/dev/md0        /home           ext3    defaults        0       0

E forzarne il mount con il comando mount -a, verificando che sia poi correttamente montata:

$ mount -a
$ mount
...
...
/dev/md0 on /home type ext3 (rw)

Configurazione di SAMBA

Nell’installare SAMBA come prima cosa, all’interno del file /etc/apt/sources.list di entrambe le macchine, vanno aggiunti i repositories SAMBA per le ultime versioni:

deb http://it.samba.org/samba/ftp/Binary_Packages/Debian sarge samba

In questo modo pur utilizzando una distribuzione stabile (Sarge) i cui pacchetti relativi a SAMBA sarebbero aggiornati a versioni precedenti alle ultime disponibili, si potrà disporre dei pacchetti allo stato dell’arte.
Effettuata la modifica, è necessario lanciare l’aggiornamento dei repositories:

$ apt-get update

Quindi installare SAMBA lasciando il file di configurazione così com’è, in modo che condivida le cartelle homes di tutti gli utenti (configurazione di default):

$ apt-get install samba smbfs smbclient

Una volta creato un utente locale nel sistema ed in SAMBA:

$ adduser ied-user1
$ passwd ied-user1
$ smbpasswd -a ied-user1

Lo spazio presente nel RAID 1 è accessibile dai client Microsoft Windows della rete che effettuino il login con l’utenza “ied-user1”.

Sostituire il disco estraibile

A completamento del progetto, rimane da schedulare uno spegnimento forzato della macchina necessario alla sostituzione del disco. Inutile dire che il disco non può essere estratto a caldo, pertanto si è stato scelto di spegnere la macchina ogni venerdì, manualmente o attraverso la schedulazione del crontab sostituendo il disco prima di riaccenderla. L’unico accorgimento che va preso in questo senso riguarda la forzatura dell’aggiunta del nuovo disco esterno all’interno del RAID. La motivazione è che controller software del kernel, trovandosi un persistent superblock differente sul disco che è stato sostituito, giudica il RAID in stato inconsistente.
Per ovviare, è sufficiente fare in modo che ad ogni avvio di sistema venga lanciato il seguente comando:

$ mdadm -a /dev/md0 /dev/hdd1

Tale comando nel caso che il disco non cambi non effettuerà alcuna operazione, giudicando il disco “already added”, nel caso che il disco ed il persistent superblock siano differenti, lo aggiungerà avviandone in contemporanea la re sincronizzazione, operazione che impiegherà per una capacità di 300 Giga circa 100 minuti.
Il comando lanciato può essere incluso in uno script denominato ad esempio /etc/init.d/mdadm-raid-recovery, dal seguente contenuto:

#!/bin/bash
#
# Script per il recovery del secondo disco di RAID.
 
mdadm -a /dev/md0 /dev/hdd1

Ed incluso fra gli script di avvio in questo modo:

$ update-rc.d mdadm-raid-recovery start 20 2 3 4 5 .
 Adding system startup for /etc/init.d/mdadm-raid-recovery ...
   /etc/rc2.d/S20mdadm-raid-recovery -> ../init.d/mdadm-raid-recovery
   /etc/rc3.d/S20mdadm-raid-recovery -> ../init.d/mdadm-raid-recovery
   /etc/rc4.d/S20mdadm-raid-recovery -> ../init.d/mdadm-raid-recovery
   /etc/rc5.d/S20mdadm-raid-recovery -> ../init.d/mdadm-raid-recovery

ad ogni avvio del sistema verrà effettuato questo controllo e l’eventuale aggiunta del disco inserito.
In caso sia presente un nuovo disco, verrà sincronizzato e messo in linea, di modo da garantire, al momento della sostituzione e prima di qualsiasi altra nuova scrittura, tre copie identiche dello stesso dato.

Ecco il giudizio sul progetto espresso dalla società : “L’utilizzo di un backup come questo ci ha permesso di avere la totale sicurezza per i dati e la possibilità di conservare una copia di essi lontano dalla sede. A tutto questo si aggiunge il risparmio dovuto al fatto di aver usato una macchina dismessa insieme all’acquisto dei tre dischi e dei relativi kit.” – Luciana Ferrari, Amministratore unico di “Immagine & Dettaglio”

Conclusioni

Nel prossimo ed ultimo articolo verrà illustrato il secondo case study: un network RAID 1 attraverso DRBD.

Note

Questa serie di articoli è apparsa in origine nel libro edito da Duke Italia Clustering e raid software allegato all’edizione italiana di Linux Journal dell’Ottobre 2006.

Da sempre appassionato del mondo open-source e di Linux nel 2009 ho fondato il portale Mia Mamma Usa Linux! per condividere articoli, notizie ed in generale tutto quello che riguarda il mondo del pinguino, con particolare attenzione alle tematiche di interoperabilità, HA e cloud.
E, sì, mia mamma usa Linux dal 2009.

Tags: , , , , , ,