Avanti Indietro Indice

4. Riparare gli errori

  1. D: Lavoro con un dispositivo RAID-1 (mirroring) e la corrente è andata via mentre il disco era in attività. Cosa devo fare?
    R: La ridondanza che i livelli RAID offrono serve a proteggere nei confronti di un malfunzionamento del disco, non contro un difetto di alimentazione. Vi sono diversi modi di rimettere le cose a posto in questa situazione.
    • 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 ckraid /etc/raid1.conf (per RAID-1, altrimenti /etc/raid5.conf, etc.) Eseguendo ckraid /etc/raid1.conf --fix 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 --force-source: per esempio, ckraid /etc/raid1.conf --fix --force-source /dev/hdc3 . Il comando ckraid può essere lanciato senza l'opzione --fix per verificare il sistema RAID inattivo senza apportargli modifiche. Quando vi sentirete a vostro agio con le modifiche proposte, potrete aggiungere l'opzione --fix.
    • 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 /dev/hda3 e /dev/hdc3. Potete provare ciò che segue:
      1. fsck /dev/hda3
      2. fsck /dev/hdc3
      3. 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 /dev/hdc3.
      4. dd if=/dev/hdc3 of=/dev/hda3
      5. mkraid raid1.conf -f --only-superblock
      Al posto degli ultimi due passi, potete eseguire ckraid /etc/raid1.conf --fix --force-source /dev/hdc3 che dovrebbe essere leggermente più veloce.
    • 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 fsck /dev/md0 dopo che avete fatto. Il metodo (3) è solo il metodo (1) travestito.
    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.

    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.

  2. D: Ho un sistema RAID-4 o RAID-5 (parità) e la corrente è andata via mentre i dischi erano in attività. Cosa devo fare adesso?
    R: La ridondanza che i livelli RAID offrono serve a proteggere nei confronti di un malfunzionamento del disco, non contro un difetto di alimentazione. 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.

    Il comando ckraid può essere eseguito in modalità "sicura" senza l'opzione --fix per verificare il sistema RAID senza apportargli cambiamenti. Quando vi sentirete a vostro agio con i cambiamenti proposti basterà aggiungere l'opzione --fix.

    Se si vuole si può provare designando uno dei dei dischi come ``disco rotto''. Fatelo con l'opzione --suggest-failed-disk-mask (in inglese suona come "suggerisci-maschera-disco-rotto". ndt).

    Un solo bit dovrà essere indicato nell'opzione: RAID-5 non può recuperare due dischi non funzionanti. La maschera è una maschera binaria: quindi:

        0x1 == primo disco
        0x2 == secondo disco
        0x4 == terzo disco
        0x8 == quarto disco, etc.
                
    

    In alternativa si può scegliere di modificare i settori di parità usando l'opzione --suggest-fix-parity. Questa farà si che la parità venga ricalcolata dagli altri settori.

    Le opzioni --suggest-failed-disk-mask e --suggest-fix-parity possono essere usate senza problemi per la sola verifica. Non vengono apportati cambiamenti se l'opzione --fix non è stata specificata. Quindi potete sperimentare schemi differenti di riparazione.

  3. D: Il mio dispositivo RAID-1, /dev/md0 è formato da due partizioni di hard disk: /dev/hda3 e /dev/hdc3. Recentemente, il disco che conteneva /dev/hdc3 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 è ''dd if=/dev/hda3 of=/dev/hdc3''. Ho provato a farlo, ma le cose continuano a non funzionare.
    R: Il tuo migliore amico dovrebbe rimanere alla larga dal tuo computer. Fortunatamente non vi sono stati danni gravi. Si può riaggiustare il tutto eseguendo:
    mkraid raid1.conf -f --only-superblock
                
    
    Usando dd, 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.
  4. D: La mia versione di mkraid non ha un'opzione --only-superblock . Che devo fare?
    R: I nuovi tool non supportano questa opzione, che è stata rimpiazzata da --force-resync. È stato riferito che la seguente sequenza di comandi funziona con gli ultimi tool e software:
      umount /web (dove /dev/md0 è stata montata)
      raidstop /dev/md0
      mkraid /dev/md0 --force-resync --really-force
      raidstart /dev/md0
                
    
    Dopo questo, un cat /proc/mdstat dovrebbe dare resync in progress, e a questo punto dovrebbe essere possibile effettuare un mount /dev/md0.
  5. D: Il mio dispositivo RAID-1, /dev/md0 è formato da due partizioni: /dev/hda3 e /dev/hdc3. Il mio migliore amico/a (in inglese "My best (girl)friend" NdT), che non conosce RAID, ha eseguito fsck su /dev/hda3 mentre io non guardavo e adesso RAID ha smesso di funzionare. Cosa devo fare?
    R: Il concetto di "migliore amico" andrebbe riesaminato. In generale, fsck 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:
    1. effettuare un backup del filesystem di /dev/hda3
    2. dd if=/dev/hda3 of=/dev/hdc3
    3. mkraid raid1.conf -f --only-superblock
    Questo dovrebbe riportare al funzionamento il dispositivo di mirror.
  6. D: Perché la procedura precedente funziona?
    R: 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.

    Vi potrebbe far sentire più a vostro agio l'invertire la direzione della copia di cui sopra: copiare dal disco che non è stato toccato a quello che lo è stato. Solo assicuratevi che alla fine venga eseguito fsck sul risultante dispositivo md.

  7. D: Mi sento un po' confuso dalle domande riportate sopra, ma ancora non mollo. Ma è sicuro eseguire fsck /dev/md0 ?
    R: Si, è una cosa sicura l'esecuzione di fsck sui dispositivi md. In effetti questo è l'unico posto sicuro dove eseguire fsck.
  8. D: 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.
    R: 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.

    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.

  9. D: E sulla riparazione a caldo?
    R: 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.

    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.

    Da Ottobre 97 esiste una versione beta di MD che consente:

    • la ricostruzione dei livelli RAID 1 e 5 su dischi spare
    • la ricostruzione della parità di RAID-5 dopo uno shutdown sporco
    • l'aggiunta ``a caldo'' di dischi spare ad una serie già in funzione di dischi RAID 1 o 4/5.
    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 SUPPORT_RECONSTRUCTION in include/linux/md.h.

    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 mkraid), e il kernel sarà capace di ricostruire il contenuto in maniera automatica (senza bisogno degli usuali passi mdstop, cambia il drive,ckraid, mdrun).

    Se non avete configurato la ricostruzione automatica e non avete configurato un disco spare, la procedura descritta da Gadi Oxman < gadio@netvision.net.il> è quella raccomandata:

    • 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:
      • fermare il sottosistema RAID (mdstop /dev/md0)
      • rimpiazzare il disco rotto
      • eseguire ckraid raid.conf per ricostruire il suo contenuto
      • far ripartire RAID (mdadd, mdrun).
      A questo punto, nel sistema funzioneranno di nuovo tutti i dischi, garantendoci dal malfunzionamento di uno di essi.

    Per adesso non è possibile assegnare singoli dischi spare a diverse serie RAID. Ogni sottosistema richiederà il proprio disco spare.

  10. D: 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.
    R: Un evento come questo viene segnalato nei log di sistema dal kernel con la priorità ``KERN_ALERT''. 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.
  11. D: Come posso fare a far partire RAID-5 in modalità degradata (con un disco rotto e non ancora rimpiazzato)?
    R: Gadi Oxman < gadio@netvision.net.il> ha scritto: Normalmente, per far funzionare un set di n dischi RAID-5 si deve eseguire:
    mdadd /dev/md0 /dev/disk1 ... /dev/disk(n)
    mdrun -p5 /dev/md0
                  
    
    Anche se uno dei dischi è rotto, si deve comunque eseguire mdadd 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 ``mdrun'' non va a buon fine, il kernel ha notato un errore (per esempio diversi dischi rotti o uno shutdown sporco). Si usi ``dmesg'' per visionare i messaggi di errore del kernel generati dall'esecuzione di ``mdrun''. 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:
    mkraid -f --only-superblock raid5.conf
                
    
    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.
  12. D: Come funziona RAID-5 nel caso che un disco smetta di funzionare?
    R: Uno scenario tipico è il seguente:
    • Una serie di dischi RAID-5 è attiva.
    • Un disco si rompe mentre la serie è attiva.
    • 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.
    • Il driver MD continua a fornire un dispositivo /dev/md0 privo di errori ai driver di livello più alto (anche se con performance ridotte) usando i rimanenti drive operativi.
    • L'amministratore di sistema può quindi eseguire umount /dev/md0 e mdstop /dev/md0 come al solito.
    • 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 mdadd e mdrun.
  13. D: Ho appena sostituito un disco rotto in un sistema RAID-5. Dopo aver ricostruito il sistema, l'esecuzione di fsck mi dà molti, molti errori. È normale?
    R: 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 ckraid userà le informazioni specificate nell'opzione -f (usualmente il file /etc/raid5.conf) 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 fsck.

    E, nel caso siate meravigliati, , qualcuno ha perso tutti i suoi dati commettendo questo sbaglio. È fortemente raccomandato un backup su nastro di tutti i dati prima di riconfigurare una serie di dischi RAID.

  14. D:
    R:
  15. D: Perché non vi è una domanda numero 13?
    A: Se siete scettici sul RAID, sull'Alta Affidabilità e UPS probabilmente è una buona idea l'essere anche superstiziosi. Male non può fare, no?
  16. D: Il QuickStart dice che mdstop serve solo ad essere sicuri che i dischi siano in sincronia. È REALMENTE necessario? Non è abbastanza smontare il filesystem?
    R: Il comando mdstop /dev/md0:
    • 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.
    • metterà in sincronia i dischi del dispositivo. Questa è una cosa meno importante dello smontare il filesystem ma è importante se l'accesso a /dev/md0 avviene direttamente invece che attraverso un filesystem (ad esempio come nel caso di e2fsck).

Avanti Indietro Indice