<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN"> <HTML> <HEAD> <META NAME="GENERATOR" CONTENT="SGML-Tools 1.0.9"> <TITLE>Software-RAID HOWTO: Riparare gli errori</TITLE> <LINK HREF="Software-RAID-0.4x-HOWTO-5.html" REL=next> <LINK HREF="Software-RAID-0.4x-HOWTO-3.html" REL=previous> <LINK HREF="Software-RAID-0.4x-HOWTO.html#toc4" REL=contents> </HEAD> <BODY> <A HREF="Software-RAID-0.4x-HOWTO-5.html">Avanti</A> <A HREF="Software-RAID-0.4x-HOWTO-3.html">Indietro</A> <A HREF="Software-RAID-0.4x-HOWTO.html#toc4">Indice</A> <HR> <H2><A NAME="s4">4. Riparare gli errori</A></H2> <P> <OL> <LI><B>D</B>: Lavoro con un dispositivo RAID-1 (mirroring) e la corrente è andata via mentre il disco era in attività. Cosa devo fare? <BLOCKQUOTE> <B>R</B>: La ridondanza che i livelli RAID offrono serve a proteggere nei confronti di un malfunzionamento del <B>disco</B>, non contro un difetto di <B>alimentazione</B>. Vi sono diversi modi di rimettere le cose a posto in questa situazione. <UL> <LI>Metodo (1): Usare i tool raid. Questi possono essere usati per rimettere in sincronia il sistema raid. I danni al filesystem non vengono corretti; dopo che il sistema raid è stato rimesso in sincronia, il filesystem deve ancora essere riparato con fsck. I sistemi RAID possono essere controllati con <CODE>ckraid /etc/raid1.conf</CODE> (per RAID-1, altrimenti <CODE>/etc/raid5.conf</CODE>, etc.) Eseguendo <CODE>ckraid /etc/raid1.conf --fix</CODE> il programma sceglierà uno dei dischi della serie (usualmente il primo), e userà questo come copia master, copiando i suoi blocchi su quelli degli altri dischi nel mirror. Per designare un disco da utilizzare come copia master si può usare l'opzione <CODE>--force-source</CODE>: per esempio, <CODE>ckraid /etc/raid1.conf --fix --force-source /dev/hdc3</CODE> . Il comando ckraid può essere lanciato senza l'opzione <CODE>--fix</CODE> per verificare il sistema RAID inattivo senza apportargli modifiche. Quando vi sentirete a vostro agio con le modifiche proposte, potrete aggiungere l'opzione <CODE>--fix</CODE>. </LI> <LI>Metodo (2): Paranoico, spenditempo, non molto migliore del primo metodo. Assumiamo che la serie di dischi RAID sia formata da due dischi, e consista delle partizioni <CODE>/dev/hda3</CODE> e <CODE>/dev/hdc3</CODE>. Potete provare ciò che segue: <OL> <LI><CODE>fsck /dev/hda3</CODE></LI> <LI><CODE>fsck /dev/hdc3</CODE></LI> <LI>si decida quale delle due partizioni ha meno errori o dove si possano aggiustare meglio o dove sono i dati che vi interessano. Scegliete l'una o l'altra come nuova copia ``master''. Diciamo che avete scelto <CODE>/dev/hdc3</CODE>.</LI> <LI><CODE>dd if=/dev/hdc3 of=/dev/hda3</CODE></LI> <LI><CODE>mkraid raid1.conf -f --only-superblock</CODE></LI> </OL> Al posto degli ultimi due passi, potete eseguire <CODE>ckraid /etc/raid1.conf --fix --force-source /dev/hdc3</CODE> che dovrebbe essere leggermente più veloce. </LI> <LI>Metodo (3): Versione del metodo precedente per pigri. Se non avete voglia di aspettare che il lungo controllo di fsck venga completato, va bene anche saltare i primi tre passi illustrati sopra e andare direttamente agli ultimi due. Assicuratevi solamente che venga eseguito <CODE>fsck /dev/md0</CODE> dopo che avete fatto. Il metodo (3) è solo il metodo (1) travestito.</LI> </UL> In ogni caso i passi precedenti serviranno solo a sincronizzare i sistemi raid. Il filesystem probabilmente avrà ancora bisogno di riparazioni: perciò fsck dovrà essere eseguito sul dispositivo md quando esso è attivo e non è stato montato. <P>Con una serie di tre dischi RAID-1, vi sono più possibilità come quella di usare due dischi per ''votare'' una risposta a maggioranza. I tool per automatizzare questa procedura attualmente (Settembre 97) non esistono. </BLOCKQUOTE> </LI> <LI><B>D</B>: Ho un sistema RAID-4 o RAID-5 (parità) e la corrente è andata via mentre i dischi erano in attività. Cosa devo fare adesso? <BLOCKQUOTE> <B>R</B>: La ridondanza che i livelli RAID offrono serve a proteggere nei confronti di un malfunzionamento del <B>disco</B>, non contro un difetto di <B>alimentazione</B>. Poiché i dischi formanti una serie RAID-4 o RAID-5 non contengono un filesystem che fsck può leggere vi sono meno scelte nella riparazione. Non si può usare fsck per un controllo o una riparazione preliminare; si deve usare prima ckraid. <P>Il comando <CODE>ckraid</CODE> può essere eseguito in modalità "sicura" senza l'opzione <CODE>--fix</CODE> per verificare il sistema RAID senza apportargli cambiamenti. Quando vi sentirete a vostro agio con i cambiamenti proposti basterà aggiungere l'opzione <CODE>--fix</CODE>. <P> <P>Se si vuole si può provare designando uno dei dei dischi come ``disco rotto''. Fatelo con l'opzione <CODE>--suggest-failed-disk-mask</CODE> (in inglese suona come "suggerisci-maschera-disco-rotto". ndt). <P>Un solo bit dovrà essere indicato nell'opzione: RAID-5 non può recuperare due dischi non funzionanti. La maschera è una maschera binaria: quindi: <PRE> 0x1 == primo disco 0x2 == secondo disco 0x4 == terzo disco 0x8 == quarto disco, etc. </PRE> <P>In alternativa si può scegliere di modificare i settori di parità usando l'opzione <CODE>--suggest-fix-parity</CODE>. Questa farà si che la parità venga ricalcolata dagli altri settori. <P> <P>Le opzioni <CODE>--suggest-failed-disk-mask</CODE> e <CODE>--suggest-fix-parity</CODE> possono essere usate senza problemi per la sola verifica. Non vengono apportati cambiamenti se l'opzione <CODE>--fix</CODE> non è stata specificata. Quindi potete sperimentare schemi differenti di riparazione. <P> </BLOCKQUOTE> </LI> <LI><B>D</B>: Il mio dispositivo RAID-1, <CODE>/dev/md0</CODE> è formato da due partizioni di hard disk: <CODE>/dev/hda3</CODE> e <CODE>/dev/hdc3</CODE>. Recentemente, il disco che conteneva <CODE>/dev/hdc3</CODE> si è rotto, ed è stato rimpiazzato da un nuovo disco. Il mio migliore amico, che non conosce RAID, dice che la cosa corretta da fare adesso è ''<CODE>dd if=/dev/hda3 of=/dev/hdc3</CODE>''. Ho provato a farlo, ma le cose continuano a non funzionare. <BLOCKQUOTE> <B>R</B>: Il tuo migliore amico dovrebbe rimanere alla larga dal tuo computer. Fortunatamente non vi sono stati danni gravi. Si può riaggiustare il tutto eseguendo: <BLOCKQUOTE><CODE> <PRE> mkraid raid1.conf -f --only-superblock </PRE> </CODE></BLOCKQUOTE> Usando <CODE>dd</CODE>, sono state create due copie identiche della partizione. Questo va quasi bene, tranne per il fatto che le estensioni RAID-1 del kernel si aspettano che i superblock RAID siano differenti. Così, quando si prova a riattivare RAID, il software nota il problema e disattiva una delle due partizioni. Ricreando i superblock, si dovrebbe avere un sistema perfettamente funzionante. </BLOCKQUOTE> </LI> <LI><B>D</B>: La mia versione di <CODE>mkraid</CODE> non ha un'opzione <CODE>--only-superblock</CODE> . Che devo fare? <BLOCKQUOTE> <B>R</B>: I nuovi tool non supportano questa opzione, che è stata rimpiazzata da <CODE>--force-resync</CODE>. È stato riferito che la seguente sequenza di comandi funziona con gli ultimi tool e software: <BLOCKQUOTE><CODE> <PRE> umount /web (dove /dev/md0 è stata montata) raidstop /dev/md0 mkraid /dev/md0 --force-resync --really-force raidstart /dev/md0 </PRE> </CODE></BLOCKQUOTE> Dopo questo, un <CODE>cat /proc/mdstat</CODE> dovrebbe dare <CODE>resync in progress</CODE>, e a questo punto dovrebbe essere possibile effettuare un <CODE>mount /dev/md0</CODE>. </BLOCKQUOTE> </LI> <LI><B>D</B>: Il mio dispositivo RAID-1, <CODE>/dev/md0</CODE> è formato da due partizioni: <CODE>/dev/hda3</CODE> e <CODE>/dev/hdc3</CODE>. Il mio migliore amico/a (in inglese "My best (girl)friend" NdT), che non conosce RAID, ha eseguito <CODE>fsck</CODE> su <CODE>/dev/hda3</CODE> mentre io non guardavo e adesso RAID ha smesso di funzionare. Cosa devo fare? <BLOCKQUOTE> <B>R</B>: Il concetto di "migliore amico" andrebbe riesaminato. In generale, <CODE>fsck</CODE> non dovrebbe essere mai eseguito su una singola partizione facente parte di un sistema RAID. Presumendo che nessuna partizione sia stata fortemente danneggiata non sono andati persi dati e il dispositivo RAID-1 può essere recuperato come segue: <OL> <LI>effettuare un backup del filesystem di <CODE>/dev/hda3</CODE></LI> <LI><CODE>dd if=/dev/hda3 of=/dev/hdc3</CODE></LI> <LI><CODE>mkraid raid1.conf -f --only-superblock</CODE></LI> </OL> Questo dovrebbe riportare al funzionamento il dispositivo di mirror. </BLOCKQUOTE> </LI> <LI><B>D</B>: Perché la procedura precedente funziona? <BLOCKQUOTE> <B>R</B>: Perché ogni partizione componente un mirror RAID-1 è una copia perfettamente valida del filesystem. Addirittura il mirroring può essere disabilitato e una delle partizioni può venire montata e funzionerà senza problemi come un filesystem normale, senza RAID. Quando si è pronti a ripartire con RAID-1, si smonti la partizione e si seguano le istruzioni sopracitate per far ripartire il mirror. Si noti che le istruzioni di cui sopra valgono SOLO per RAID-1 e per nessun altro livello. <P>Vi potrebbe far sentire più a vostro agio l'invertire la direzione della copia di cui sopra: copiare <B>dal</B> disco che non è stato toccato <B>a</B> quello che lo è stato. Solo assicuratevi che alla fine venga eseguito fsck sul risultante dispositivo md. </BLOCKQUOTE> </LI> <LI><B>D</B>: Mi sento un po' confuso dalle domande riportate sopra, ma ancora non mollo. Ma è sicuro eseguire <CODE>fsck /dev/md0</CODE> ? <BLOCKQUOTE> <B>R</B>: Si, è una cosa sicura l'esecuzione di <CODE>fsck</CODE> sui dispositivi <CODE>md</CODE>. In effetti questo è <CODE>l'unico</CODE> posto sicuro dove eseguire <CODE>fsck</CODE>. </BLOCKQUOTE> </LI> <LI><B>D</B>: Se un disco si sta deteriorando lentamente, sarà ovvio scoprire quale sia? Sono preoccupato dal fatto che non lo sia, e questa confusione potrebbe portare a qualche decisione pericolosa da parte di un amministratore di sistema. <BLOCKQUOTE> <B>R</B>: Una volta che un disco si rompe, un codice di errore viene trasmesso dal driver a basso livello al driver RAID. Il driver RAID marcherà questo disco come ``cattivo'' nei superblock dei dischi ``buoni'' (in questa maniera più avanti sapremo quale dei dischi di mirror sia buono e quale non) e continuerà le operazioni RAID sui rimasti dischi funzionanti. <P>Questo, va da sé, dà per certo che il disco ed i driver di basso livello possano accorgersi di un errore in lettura/scrittura e che, per esempio, non continuino a danneggiare i dati in silenzio. Questo è vero per i driver attuali (schemi di rilevazione dell'errore sono usati internamente) ed è base delle operazioni RAID. </BLOCKQUOTE> </LI> <LI><B>D</B>: E sulla riparazione a caldo? <BLOCKQUOTE> <B>R</B>: Si sta lavorando per completare la ``ricostruzione a caldo''. Con questa funzionalità, si possono aggiungere dei dischi ``spare'' al set RAID (sia esso di livello 1 o 4/5), e quando un disco smette di funzionare i dati contenuti in esso saranno ricostruiti su uno dei dischi spare durante l'attività, senza nemmeno aver bisogno di fermare il set RAID. <P>Tuttavia, per usare questa funzionalità, il disco spare deve essere stato dichiarato durante il boot, o esso dovrà essere aggiunto ``a caldo'', cosa che richiede l'uso di connettori e cabinet speciali che consentano di aggiungere un disco senza togliere corrente. <P> <P>Da Ottobre 97 esiste una versione beta di MD che consente: <UL> <LI>la ricostruzione dei livelli RAID 1 e 5 su dischi spare</LI> <LI>la ricostruzione della parità di RAID-5 dopo uno shutdown sporco</LI> <LI>l'aggiunta ``a caldo'' di dischi spare ad una serie già in funzione di dischi RAID 1 o 4/5.</LI> </UL> Come predefinizione, la ricostruzione automatica è in questo momento (Dicembre 97) disabilitata a causa della natura ancora sperimentale di questo lavoro. Può comunque essere abilitata cambiando il valore di <CODE>SUPPORT_RECONSTRUCTION</CODE> in <CODE>include/linux/md.h</CODE>. <P> <P>Se i drive spare sono stati configurati su un sistema raid quando esso è stato creato e la ricostruzione è stata attivata nel kernel, i drive spare conterranno da subito il superblock RAID (scritto da <CODE>mkraid</CODE>), e il kernel sarà capace di ricostruire il contenuto in maniera automatica (senza bisogno degli usuali passi <CODE>mdstop</CODE>, cambia il drive,<CODE>ckraid</CODE>, <CODE>mdrun</CODE>). <P> <P>Se non avete configurato la ricostruzione automatica e non avete configurato un disco spare, la procedura descritta da Gadi Oxman < <A HREF="mailto:gadio@netvision.net.il">gadio@netvision.net.il</A>> è quella raccomandata: <UL> <LI>Per adesso, una volta che il primo disco è stato rimosso, il sistema RAID continuerà a funzionare in modalità ``degradata''. Per riportarlo alla piena funzionalità avrete bisogno di: <UL> <LI>fermare il sottosistema RAID (<CODE>mdstop /dev/md0</CODE>)</LI> <LI>rimpiazzare il disco rotto</LI> <LI>eseguire <CODE>ckraid raid.conf</CODE> per ricostruire il suo contenuto</LI> <LI>far ripartire RAID (<CODE>mdadd</CODE>, <CODE>mdrun</CODE>). </LI> </UL> A questo punto, nel sistema funzioneranno di nuovo tutti i dischi, garantendoci dal malfunzionamento di uno di essi.</LI> </UL> <P>Per adesso non è possibile assegnare singoli dischi spare a diverse serie RAID. Ogni sottosistema richiederà il proprio disco spare. </BLOCKQUOTE> </LI> <LI><B>D</B>: Vorrei che ci fosse un allarme udibile per ``ehi tu, si è rotto un disco nel mirror'' in modo tale che anche il novello amministratore di sistema possa sapere che c'è un problema. <BLOCKQUOTE> <B>R</B>: Un evento come questo viene segnalato nei log di sistema dal kernel con la priorità ``<CODE>KERN_ALERT</CODE>''. Vi sono diversi pacchetti software che controllano i file log di sistema e fanno emettere un bip allo speaker del PC, eseguono un pager, mandano e-mail ecc. automaticamente. </BLOCKQUOTE> </LI> <LI><B>D</B>: Come posso fare a far partire RAID-5 in modalità degradata (con un disco rotto e non ancora rimpiazzato)? <BLOCKQUOTE> <B>R</B>: Gadi Oxman < <A HREF="mailto:gadio@netvision.net.il">gadio@netvision.net.il</A>> ha scritto: Normalmente, per far funzionare un set di n dischi RAID-5 si deve eseguire: <BLOCKQUOTE><CODE> <PRE> mdadd /dev/md0 /dev/disk1 ... /dev/disk(n) mdrun -p5 /dev/md0 </PRE> </CODE></BLOCKQUOTE> Anche se uno dei dischi è rotto, si deve comunque eseguire <CODE>mdadd</CODE> su quel disco, come se tutto fosse normale. (?? provare a usare /dev/null al posto del disco rotto ??? occhio) Quindi, Il sistema RAID funzionerà in modalità degradata con (n - 1) dischi. Se l'esecuzione di ``<CODE>mdrun</CODE>'' non va a buon fine, il kernel ha notato un errore (per esempio diversi dischi rotti o uno shutdown sporco). Si usi ``<CODE>dmesg</CODE>'' per visionare i messaggi di errore del kernel generati dall'esecuzione di ``<CODE>mdrun</CODE>''. Se il set raid-5 è rovinato a causa di un calo di tensione, e non a causa della rottura di un disco, si può tentare di recuperare il tutto creando un nuovo superblock RAID: <BLOCKQUOTE><CODE> <PRE> mkraid -f --only-superblock raid5.conf </PRE> </CODE></BLOCKQUOTE> Una serie di dischi RAID non fornisce protezione alcuna contro i difetti dell'alimentazione o contro un blocco del kernel e quindi non può nemmeno garantire un corretto recupero dei dati. La ricostruzione del superblock servirà solo a far ignorare al sistema la condizione in cui si trova marcando tutti i drive come ``OK'' come se niente fosse accaduto. </BLOCKQUOTE> </LI> <LI><B>D</B>: Come funziona RAID-5 nel caso che un disco smetta di funzionare? <BLOCKQUOTE> <B>R</B>: Uno scenario tipico è il seguente: <UL> <LI>Una serie di dischi RAID-5 è attiva. </LI> <LI>Un disco si rompe mentre la serie è attiva. </LI> <LI>Il firmware del disco e i driver di basso livello del disco/controller si accorgono del malfunzionamento e inviano un messaggio di errore al driver MD. </LI> <LI>Il driver MD continua a fornire un dispositivo <CODE>/dev/md0</CODE> privo di errori ai driver di livello più alto (anche se con performance ridotte) usando i rimanenti drive operativi. </LI> <LI>L'amministratore di sistema può quindi eseguire <CODE>umount /dev/md0</CODE> e <CODE>mdstop /dev/md0</CODE> come al solito. </LI> <LI>Se il disco rotto non viene rimpiazzato, l'amministratore di sistema può comunque far partire il sistema raid in modalità degradata come al solito eseguendo <CODE>mdadd</CODE> e <CODE>mdrun</CODE>.</LI> </UL> </BLOCKQUOTE> </LI> <LI><B>D</B>: Ho appena sostituito un disco rotto in un sistema RAID-5. Dopo aver ricostruito il sistema, l'esecuzione di <CODE>fsck</CODE> mi dà molti, molti errori. È normale? <BLOCKQUOTE> <B>R</B>: No. E, a meno che fsck non sia stato eseguito in modalità "verify only; do not update" ("verifica solamente; non aggiornare". ndt), è del tutto possibile che abbiate rovinato i vostri dati. Sfortunatamente, uno scenario non poco raro è quello nel quale si cambia accidentalmente l'ordine dei dischi in una serie di dischi RAID-5, dopo averne rimpiazzato uno. Anche se il superblock RAID memorizza l'ordine corretto, non tutti i tool tengono conto di questa informazione. In particolare, la versione attuale di <CODE>ckraid</CODE> userà le informazioni specificate nell'opzione <CODE>-f</CODE> (usualmente il file <CODE>/etc/raid5.conf</CODE>) al posto di quelle contenute nel superblock. Se l'ordine specificato non è quello corretto il disco rimpiazzato sarà ricostruito in maniera errata. Sintomo di questo tipo di sbaglio sembrano essere i pesanti e numerosi errori di <CODE>fsck</CODE>. <P>E, nel caso siate meravigliati, <B>sì</B>, qualcuno ha perso <B>tutti</B> i suoi dati commettendo questo sbaglio. È <B>fortemente raccomandato</B> un backup su nastro di <B>tutti</B> i dati prima di riconfigurare una serie di dischi RAID. </BLOCKQUOTE> </LI> <LI><B>D</B>: <BLOCKQUOTE> <B>R</B>: </BLOCKQUOTE> </LI> <LI><B>D</B>: Perché non vi è una domanda numero 13? <BLOCKQUOTE> <B>A</B>: Se siete scettici sul RAID, sull'Alta Affidabilità e UPS probabilmente è una buona idea l'essere anche superstiziosi. Male non può fare, no? </BLOCKQUOTE> </LI> <LI><B>D</B>: Il QuickStart dice che <CODE>mdstop</CODE> serve solo ad essere sicuri che i dischi siano in sincronia. È REALMENTE necessario? Non è abbastanza smontare il filesystem? <BLOCKQUOTE> <B>R</B>: Il comando <CODE>mdstop /dev/md0</CODE>: <UL> <LI>lo marcherà come ''pulito''. Questo ci consente di rilevare gli shutdown sporchi dovuti, per esempio, ad un blocco del kernel o ad un malfunzionamento nell'alimentazione. </LI> <LI>metterà in sincronia i dischi del dispositivo. Questa è una cosa meno importante dello smontare il filesystem ma è importante se l'accesso a <CODE>/dev/md0</CODE> avviene direttamente invece che attraverso un filesystem (ad esempio come nel caso di <CODE>e2fsck</CODE>).</LI> </UL> </BLOCKQUOTE> </LI> </OL> <HR> <A HREF="Software-RAID-0.4x-HOWTO-5.html">Avanti</A> <A HREF="Software-RAID-0.4x-HOWTO-3.html">Indietro</A> <A HREF="Software-RAID-0.4x-HOWTO.html#toc4">Indice</A> </BODY> </HTML>