Disclaimer :
La versione originale di questo articolo è stata pubblicata da IBM
developerWorks ed è di proprietà di Westtech Information Services. Questo
documento è una versione aggiornata dell'articolo originale, e contiene
numerosi miglioramenti apportati dal Gentoo Linux Documentation team.
Questo documento non è mantenuto attivamente.
|
Software RAID nel nuovo kernel Linux 2.4, Parte 2
1.
Impostare RAID-1 in un ambiente di produzione
RAID nel mondo reale
Nell'articolo
precedente, sono state introdotte ai lettori alle funzionalità del RAID
software di Linux 2.4, mostrando come impostare volumi lineari, RAID-0 e RAID-1.
In questo articolo, verrà analizzato cosa serve sapere per poter usare RAID-1 in
modo da incrementare la disponibilità dei dati in ambiente di produzione. Ciò
richiede maggiore comprensione e conoscenza rispetto alla semplice creazione di
un RAID-1 su un server di test o nel proprio pc casalingo; più precisamente,
bisogna sapere esattamente da quali cause esterne il RAID-1 dovrà proteggere
i dati, e come mantenere attivo e funzionante il proprio volume RAID nel caso si
guasti un disco. In questo articolo verranno coperti questi aspetti, iniziando
con una panoramica su cosa possono fare o non fare RAID-1, 4 e 5, e terminando
con una completa simulazione di test della sostituzione di un disco in RAID-1
guasto (qualcosa che si dovrebbe effettivamente fare, seguendo questo articolo
come guida, in base alle proprie possibilità). Dopo aver effettuato la
simulazione, si avrà acquisito tutta l'esperienza necessaria per gestire i
guasti di un RAID-1 in un ambiente reale.
Cosa non può fare RAID
Le caratteristiche di tolleranza ai guasti di RAID sono progettate per
proteggere i dati dell'utente dagli effetti negativi di uno spontaneo guasto
completo del disco, e questa è una buona cosa. Ma RAID non è una soluzione
perfetta per ogni tipo di problema riguardante l'affidabilità. Prima di
implementare una forma di RAID (1,4,5) tollerante ai guasti in un ambiente di
produzione, è estremamente importante conoscere esattamente cosa NON
potrà fare RAID per i dati dell'utente. Quando si è in una situazione nella
quale l'operatività dipende da RAID, non si vuole fare nessuna falsa
affermazione riguardo alle sue funzionalità. Cominciamo sfatando alcuni miti
comuni riguardo a RAID 1, 4 e 5.
Molte persone pensano che posizionare tutti i propri dati importanti su un
volume RAID 1/4/5 li esimi dall'eseguire backup regolari. Questa cosa è
completamente falsa, ed il perchè è presto detto. RAID 1/4/5 aiutano a
proteggere i dati da interruzioni non pianificate causate da guasti
casuali dei dischi. Tuttavia, non offrono protezioni contro corruzioni dei
dati casuali o intenzionali. Se viene digitato cd /; rm -rf * come
root su un volume RAID, si perderanno un sacco di dati molto importanti nel giro
di qualche secondo, ed il fatto di avere una configurazione RAID-5 su 10 dischi
sarà ininfluente. Inoltre, RAID non sarà d'aiuto se il server viene fisicamente
rubato o se c'è un incendio nell'edificio. E ovviamente, se non viene
implementata una strategia di backup, non si avrà un archivio dei dati passati:
se qualcuno nel proprio ufficio cancella alcuni dati importanti, non si
riuscirà a recuperarli. Solamente questo dovrebbe essere sufficiente a
convincere che, nella maggior parte dei casi, bisogna pianificare ed
implementare una strategia di backup prima di pensare di affrontare
l'implementazione di un potenziale RAID-1, 4 o 5.
Un altro errore è l'implementazione di un RAID software su un sistema composto
da hardware di bassa qualità. Se si sta assemblando un server che dovrà svolgere
qualcosa di importante, ha senso acquistare l'hardware migliore nel limite
delle proprie disponibilità economiche. Se il proprio sistema è instabile o non
adeguatamente raffreddato, si incorrerà in problemi che RAID non potrà
risolvere. Un'altro esempio simile è l'impossibilità di RAID nel fornire
continuità aggiuntiva al servizio in caso di mancanza di alimentazione. Se il
proprio server è adibito a svolgere un qualsiasi compito relativamente
importante, assicurarsi che sia equipaggiato con un gruppo di continuità (UPS).
Inoltre è importante focalizzarsi sulle problematiche inerenti ai filesystem.
Il filesystem esiste "al di sopra" del proprio volume RAID software. Ciò
significa che usare un RAID software non permette di evitare i problemi dovuti
al filesystem, per esempio a lunghi e potenzialmente problematici fsck se
capita di non utilizzare un filesystem non journaled o con la tendenza a
rovinarsi. Pertanto, il RAID software non rende il filesystem ext2 più
affidabile; ecco perché è così importante che la comunità Linux abbia a
disposizione ReiserFS, come anche JFS e XFS. RAID software e filesystem
journaled affidabili sono una combinazione efficace.
RAID - implementazione intelligente
Speriamo che la sezione precedente abbia sfatato qualunque mito riguardo a RAID
eventualmente a conoscenza del lettore. Quando si implementa RAID-1, 4 o 5, è
molto importante vedere la tecnologia come qualcosa che migliora
l'uptime (periodo di tempo nel quale la macchina è attiva e funzionante,
N.d.T.). Quando viene implementato uno di questi livelli RAID, si verrà
protetti da una situazione molto specifica, ovvero un completo guasto spontaneo
(singolo o multiplo) dei dischi. Se si sperimenta questa situazione, il RAID
software permetterà al sistema di continuare a funzionare, così come dare
l'opportunità all'utente di eseguire le operazioni necessarie per sostituire il
disco guasto con uno nuovo. In altre parole, se si implementa RAID 1,4, o 5,
verrà ridotto il rischio di avere una lunga interruzione di servizio non
pianificata, solamente il tempo necessario alla sostituzione del disco fuori
uso. Ovviamente, questo significa che se non è una priorità avere un sistema
altamente disponibile non sarà necessario implementare un RAID software, a meno
che non si stia progettando di usarlo principalmente come un modo per
incrementare le prestazioni di I/O su file.
Un amministratore di sistema intelligente usa il RAID software per uno scopo
preciso, ovvero migliorare l'affidabilità di un server già molto affidabile. Se
si è dei bravi amministratori di sistema, si avranno già affrontati gli aspetti
basilari. La propria organizzazione sarà protetta dalle catastrofi grazie
all'implementazione di un piano regolare di backup. Il proprio server sarà
alimentato da un UPS, e ci sarà in funzione un software di monitoraggio
dell'UPS in modo che il proprio server venga spento in caso di un prolungamento
di mancanza di corrente. Forse si starà utilizzando un filesystem journaled
come ReiserFS in modo da ridurre i tempi di esecuzione di fsck e
incrementare le prestazioni e l'affidabilità dello stesso. E si spera che il
proprio server sia adeguatamente raffreddato e sia composto da hardware di alta
qualità, e si abbia fatto grande attenzione ai problemi di sicurezza. Ora, e
solo ora, si dovrebbe considerare l'implementazione di un RAID-1, 4 o 5
software; facendolo, si aggiungerà potenzialmente qualche punto percentuale di
uptime al proprio server difendendolo da un guasto completo dei dischi. Il RAID
software aggiunge uno strato di protezione che rende ancora migliore un server
già robusto di per sé.
2.
Spiegazione dettagliata per RAID-1
Ora che si è a conoscenza di cosa RAID può fare e non fare, chi scrive spera che
il lettore abbia aspirazioni ragionevoli ed un giusto atteggiamento nei
confronti dell'argomento. In questa sezione, si verrà accompagnati attraverso il
processo di simulazione di guasto di un disco, ed il riavvio del proprio volume
RAID in modalità degradata. Se si possiede l'abilità di impostare un volume
RAID-1 su una macchina di test e seguire i vari passaggi, è caldamente
consigliato farlo. Questo tipo di simulazione può risultare divertente. E
divertirsi un po' proprio adesso può aiutare ad assicurare che quando un disco si
guasterà veramente, si sarà calmi e padroni di sé, sapendo esattamente cosa
fare.
Importante:
Per eseguire questo test, è essenziale l'aver impostato un volume RAID-1 in
modo da poter avviare comunque il proprio sistema Linux con un disco fisso
scollegato, perché sarà il modo con il quale si andrà a simulare il guasto di un
disco.
|
Il primo passo è impostare un volume RAID-1: fare riferimento all'articolo precedente se si ha
bisogno di rinfrescarsi la memoria a riguardo. Una volta impostato il volume, il
comando cat /proc/mdstat visualizzerà qualcosa di simile a questo:
Codice 2.1: Esaminare il volume RAID |
# cat /proc/mdstat
Personalities : [linear] [raid0] [raid1] [raid5]
read_ahead 1024 sectors
md0 : active raid1 ide/host2/bus0/target0/lun0/part1[1] ide/host0/bus0/target0/lun0/part5[0]
4610496 blocks [2/2] [UU]
[======>..............] resync = 34.8% (1606276/4610496) finish=3.2min speed=15382K/sec
unused devices: <none>
|
Notare che chi scrive sta utilizzando devfs, che è anche il motivo per cui si
vedono dei nomi di dispositivo estremamente lunghi nel codice appena esposto.
L'autore in verità sta utilizzando /dev/hda5 e
/dev/hde1 come dischi RAID-1. In questo momento, il codice del
software RAID nel kernel sta sincronizzando i dischi in modo che ciascuno sia
l'esatta copia dell'altro. Se il proprio volume RAID-1 è arrivato a questo
punto, si può proseguire e creare un filesystem sul volume, e montarlo da
qualche parte. Copiarci dentro qualche file ed impostare il proprio
/etc/fstab in modo che il volume (/dev/md0) venga
montato all'avvio del sistema. Questa è la linea che l'autore del documento ha
aggiunto al proprio fstab; quella dell'utente potrebbe differire leggermente:
Codice 2.2: informazioni in fstab |
/dev/md0 /mnt/raid1 reiserfs defaults 0 0
|
Si è quasi pronti per simulare un guasto del disco, ma manca ancora una cosa.
Primo, eseguire nuovamente cat /proc/mdstat, ed attendere fino a che
tutti i volumi dei dischi saranno sincronizzati. Dopodiché, il proprio
/proc/mdstat dovrebbe apparire così:
Codice 2.3: Riesaminare il volume RAID |
# cat /proc/mdstat
Personalities : [linear] [raid0] [raid1] [raid5]
read_ahead 1024 sectors
md0 : active raid1 ide/host2/bus0/target0/lun0/part1[1] ide/host0/bus0/target0/lun0/part5[0]
4610496 blocks [2/2] [UU]
unused devices: <none>
|
Inizia la simulazione
Ora che la risincronizzazione è completata, si è pronti per la simulazione.
Proseguire spegnendo completamente la propria macchina. Successivamente aprirla
e scollegare uno dei dischi fissi che compongono l'array RAID-1. Ovviamente, non
bisognerà scollegare il disco che contiene la propria partizione root di Linux,
in quanto si avrà bisogno di avviare nuovamente Linux! Ora che il disco fisso è
scollegato, riaccendere la macchina. Una volta effettuato il login, si potrà
constatare che /dev/md0 è montato e che si potrà ancora usare il
volume. Eseguendo cat /proc/mdstat si potrà vedere il cambiamento
importante:
Codice 2.4: Mancanza di un disco |
# cat /proc/mdstat
Personalities : [linear] [raid0] [raid1] [raid5]
read_ahead 1024 sectors
md0 : active raid1 ide/host0/bus0/target0/lun0/part5[0]
4610496 blocks [2/1] [U_]
unused devices: <none>
|
È possibile vedere che il volume /dev/md0 è in esecuzione in
modalità degradata. Il disco /dev/hde è scollegato, in tal modo
/dev/hde1 non viene trovato durante la fase di boot del kernel e
l'avvio automatico dell'array. Fortunatamente, il kernel ha trovato
/dev/hda5, e /dev/md0 è riuscito comunque ad avviarsi
in modalità degradata. Com'è possibile vedere, la partizione
/dev/hde1 non viene elencata in /proc/mdstat, e uno
dei dischi RAID è marcato come "fuori uso" ([U_] invece di [UU]).
Ma siccome /dev/md0 sta comunque funzionando, il RAID-1 software
sta facendo quello che per cui è progettato: mantenere i propri dati
disponibili.
Recupero
In questo momento si sta sperimentando un guasto simulato di un disco. Se il
disco che attualmente non è alimentato si guasta realmente mentre il sistema è
in esecuzione, è il tipo di situazione che si sta vivendo. Il proprio volume
RAID-1 verrà eseguito in modalità degradata, in altre parole esso sarà ancora
disponibile ma senza alcuna ridondanza. Al momento opportuno si dovrà spegnere
il sistema, sostituire il disco guasto, e riavviare nuovamente il sistema. A
questo punto il proprio volume RAID-1 partirà ancora in modalità degradata.
Una volta che il nuovo disco è nella macchina, creare una partizione RAID
autodetect (FD) di dimensioni adeguate sul nuovo disco. Un riavvio
addizionale potrebbe essere necessario in modo che Linux possa rileggere la
tabella delle partizioni del disco. Una volta che la nuova partizione è
visibile al sistema, si è pronti per ripristinare il proprio array RAID-1,
ottenendo nuovamente un po' di ridondanza.
Ovviamente, quella che si sta eseguendo è solamente una simulazione. Per fare
pratica nel riaggiungere una partizione nel proprio array RAID, è possibile
fare due cose, in base al tipo di scenario che si preferisce affrontare. Si può
o spegnere la macchina, collegare il disco, avviare il sistema, e aggiungere
nuovamente la vecchia partizione nell'array, o spegnere la macchina, collegare
il disco, avviare, cancellare il disco, creare una nuova partizione RAID
autodetect (FD) da aggiungere all'array (della dimensione corretta,
ovviamente, grande almeno quanto la partizione che si sta ripristinando),
dopodiché aggiungere questa partizione nuova di zecca all'array. La seconda
scelta probabilmente si avvicina di più a quello che potrebbe avvenire nel caso
un guasto reale del disco, mentre la prima simula qualcosa come situazione di
guasto al controller dei dischi o di un cavo danneggiato, dove uno dei dischi
del mirror è temporaneamente non disponibile, causando l'esecuzione in modalità
degradata di /dev/md0, e richiedendo la successiva aggiunta di una
delle partizioni dopo aver rimediato al problema. Qualsiasi simulazione si
scelga, la "correzione" è la medesima: dopo che la partizione è pronta, bisogna
reinserirla nel volume /dev/md0.
Controllare dmesg
Prima di reinserire la partizione nel proprio array, è buona cosa dare
un'occhiata ai messaggi di boot del proprio kernel. Digitando dmesg |
more sarà possibile visualizzarli. Si dovrebbe vedere una porzione di testo
simile al seguente:
Codice 2.5: Messaggi di boot del kernel |
linear personality registered
raid0 personality registered
raid1 personality registered
raid5 personality registered
raid5: measuring checksumming speed
8regs : 1291.209 MB/sec
32regs : 1195.197 MB/sec
pII_mmx : 2110.740 MB/sec
p5_mmx : 2652.522 MB/sec
raid5: using function: p5_mmx (2652.522 MB/sec)
md driver 0.90.0 MAX_MD_DEVS=256, MD_SB_DISKS=27
md.c: sizeof(mdp_super_t) = 4096
autodetecting RAID arrays
(read) ide/host0/bus0/target0/lun0/part5's sb offset: 4610560 [events: 00000004]
(read) ide/host2/bus0/target0/lun0/part1's sb offset: 4610496 [events: 00000002]
autorun ...
considering ide/host2/bus0/target0/lun0/part1 ...
adding ide/host2/bus0/target0/lun0/part1 ...
adding ide/host0/bus0/target0/lun0/part5 ...
created md0
bind<ide/host0/bus0/target0/lun0/part5,1>
bind<ide/host2/bus0/target0/lun0/part1,2>
running: <ide/host2/bus0/target0/lun0/part1><ide/host0/bus0/target0/lun0/part5>
now!
ide/host2/bus0/target0/lun0/part1's event counter: 00000002
ide/host0/bus0/target0/lun0/part5's event counter: 00000004
md: superblock update time inconsistency -- using the most recent one
freshest: ide/host0/bus0/target0/lun0/part5
md: kicking non-fresh ide/host2/bus0/target0/lun0/part1 from array!
unbind<ide/host2/bus0/target0/lun0/part1,1>
export_rdev(ide/host2/bus0/target0/lun0/part1)
md0: max total readahead window set to 124k
md0: 1 data-disks, max readahead per data-disk: 124k
raid1: device ide/host0/bus0/target0/lun0/part5 operational as mirror 0
raid1: md0, not all disks are operational -- trying to recover array
raid1: raid set md0 active with 1 out of 2 mirrors
md: updating md0 RAID superblock on device
ide/host0/bus0/target0/lun0/part5 [events: 00000005](write) ide/host0/bus0/target0/lun0/part5's sb offset: 4610560
md: recovery thread got woken up ...
md0: no spare disk to reconstruct array! -- continuing in degraded mode
md: recovery thread finished ...
..
.... autorun DONE.
|
Ora è consigliabile prendere un po' di tempo e leggere attentamente questi
messaggi, perché aiuteranno a capire il processo usato dal kernel per avviare
automaticamente /dev/md0, fornendo un altro visione preziosa dei
funzionamenti interni del software RAID di Linux. Se l'output del kernel
elencato sopra è stato letto, si vedrà che il kernel ha individuato
/dev/hda5 e /dev/hde1, ma hde1 non è
aggiornato rispetto a hda5. Pertanto il kernel avvia
/dev/md0 in modalità degradata, usando /dev/hda5 e non
toccando assolutamente /dev/hde1. A questo punto è il momento di
aggiungere la propria partizione originale (o creata ex-novo) al volume. Ecco
come.
Il ripristino continua
Per prima cosa, se la partizione sostitutiva ha un nuovo nome di dispositivo,
aggiornare /etc/raidtab in modo che rispecchi le nuove
informazioni. Successivamente aggiungere la nuova partizione al volume usando
il seguente comando, sostituendo /dev/hde1 con il nome del
dispositivo della partizione che si andrà ad aggiungere:
Codice 2.6: Aggiungere il nuovo dispositivo |
# raidhotadd /dev/md0 /dev/hde1
|
Le luci del proprio disco fisso dovrebbero cominciare a lampeggiare in quanto
comincerà la ricostruzione. Proseguire ed eseguire cat /proc/mdstat per
verificare lo stato di ricostruzione del RAID-1 che ora sarà in corso:
Codice 2.7: Verificare lo stato di ricostruzione del RAID-1 |
# cat /proc/mdstat
Personalities : [linear] [raid0] [raid1] [raid5]
read_ahead 1024 sectors
md0 : active raid1 ide/host2/bus0/target0/lun0/part1[2] ide/host0/bus0/target0/lun0/part5[0]
4610496 blocks [2/1] [U_]
[>....................] recovery = 1.8% (84480/4610496) finish=3.5min speed=21120K/sec
unused devices: <none>
|
Nel giro di qualche minuto, il proprio volume RAID-1 tornerà ad uno stato
normale:
Codice 2.8: Il volume RAID normale |
# cat /proc/mdstat
Personalities : [linear] [raid0] [raid1] [raid5]
read_ahead 1024 sectors
md0 : active raid1 ide/host2/bus0/target0/lun0/part1[1] ide/host0/bus0/target0/lun0/part5[0]
4610496 blocks [2/2] [UU]
unused devices: <none>
|
Voila! È stata appena effettuato un ripristino da un guasto di un disco
simulato, e si è pronti per usare RAID-1 in un ambiente di produzione. Ora sarà
possibile attaccare l'adesivo fatto in casa "certificato RAID-1" sulla propria
fronte ed iniziare a sbattere le braccia correndo in giro per l'ufficio per il
diletto dei propri colleghi. Ovviamente, forse non è una grande idea. Ci si
vede nel prossimo articolo.
Risorse
|
|