ZFS infinito resilvering


29

Ho un grande pool (> 100TB) ZFS (FUSE) su Debian che ha perso due unità. Quando le unità si sono guastate, le ho sostituite con parti di ricambio fino a quando non ho potuto programmare un'interruzione e sostituire fisicamente i dischi danneggiati.

Quando ho smontato il sistema e sostituito le unità, il pool ha iniziato il resilver come previsto, ma quando arriva a circa l'80% completo (di solito ci vogliono circa 100 ore) si riavvia di nuovo.

Non sono sicuro che la sostituzione di due unità contemporaneamente abbia creato una condizione di competizione o se, a causa delle dimensioni del pool, il resilver impiega così tanto tempo che altri processi di sistema lo interrompono e lo fanno riavviare, ma non ci sono indicazioni evidenti nel risultati di "stato zpool" o registri di sistema che indicano un problema.

Da allora ho modificato il modo in cui disponevo questi pool per migliorare le prestazioni del resilver, ma sono apprezzati tutti i suggerimenti o i consigli su come riportare questo sistema in produzione.

output dello stato di zpool (gli errori sono nuovi dall'ultima volta che ho controllato):

  pool: pod
 state: ONLINE
status: One or more devices has experienced an error resulting in data
    corruption.  Applications may be affected.
action: Restore the file in question if possible.  Otherwise restore the
    entire pool from backup.
   see: http://www.sun.com/msg/ZFS-8000-8A
 scrub: resilver in progress for 85h47m, 62.41% done, 51h40m to go
config:

    NAME                                                 STATE     READ WRITE CKSUM
    pod                                                  ONLINE       0     0 2.79K
      raidz1-0                                           ONLINE       0     0 5.59K
        disk/by-id/wwn-0x5000c5003f216f9a                ONLINE       0     0     0
        disk/by-id/scsi-SATA_ST3000DM001-9YN_Z1F0CWPK    ONLINE       0     0     0
        disk/by-id/scsi-SATA_ST3000DM001-9YN_Z1F0BQAM    ONLINE       0     0     0
        disk/by-id/scsi-SATA_ST3000DM001-9YN_Z1F0BPVD    ONLINE       0     0     0
        disk/by-id/scsi-SATA_ST3000DM001-9YN_Z1F0BQ2Y    ONLINE       0     0     0
        disk/by-id/scsi-SATA_ST3000DM001-9YN_Z1F0CVA3    ONLINE       0     0     0
        disk/by-id/scsi-SATA_ST3000DM001-9YN_Z1F0BQHC    ONLINE       0     0     0
        disk/by-id/scsi-SATA_ST3000DM001-9YN_Z1F0BPWW    ONLINE       0     0     0
        disk/by-id/scsi-SATA_ST3000DM001-9YN_Z1F09X3Z    ONLINE       0     0     0
        disk/by-id/scsi-SATA_ST3000DM001-9YN_Z1F0BQ87    ONLINE       0     0     0
        spare-10                                         ONLINE       0     0     0
          disk/by-id/scsi-SATA_ST3000DM001-1CH_W1F20T1K  ONLINE       0     0     0  1.45T resilvered
          disk/by-id/scsi-SATA_ST3000DM001-9YN_Z1F09BJN  ONLINE       0     0     0  1.45T resilvered
        disk/by-id/scsi-SATA_ST3000DM001-9YN_Z1F0BQG7    ONLINE       0     0     0
        disk/by-id/scsi-SATA_ST3000DM001-9YN_Z1F0BQKM    ONLINE       0     0     0
        disk/by-id/scsi-SATA_ST3000DM001-9YN_Z1F0BQEH    ONLINE       0     0     0
        disk/by-id/scsi-SATA_ST3000DM001-9YN_Z1F09C7Y    ONLINE       0     0     0
        disk/by-id/scsi-SATA_ST3000DM001-9YN_Z1F0CWRF    ONLINE       0     0     0
        disk/by-id/scsi-SATA_ST3000DM001-9YN_Z1F0BQ7Y    ONLINE       0     0     0
        disk/by-id/scsi-SATA_ST3000DM001-9YN_Z1F0C7LN    ONLINE       0     0     0
        disk/by-id/scsi-SATA_ST3000DM001-9YN_Z1F0BQAD    ONLINE       0     0     0
        disk/by-id/scsi-SATA_ST3000DM001-9YN_Z1F0CBRC    ONLINE       0     0     0
        disk/by-id/scsi-SATA_ST3000DM001-9YN_Z1F0BPZM    ONLINE       0     0     0
        disk/by-id/scsi-SATA_ST3000DM001-9YN_Z1F0BPT9    ONLINE       0     0     0
        disk/by-id/scsi-SATA_ST3000DM001-9YN_Z1F0BQ0M    ONLINE       0     0     0
        spare-23                                         ONLINE       0     0     0
          disk/by-id/scsi-SATA_ST3000DM001-1CH_W1F226B4  ONLINE       0     0     0  1.45T resilvered
          disk/by-id/scsi-SATA_ST3000DM001-9YN_Z1F0CCMV  ONLINE       0     0     0
        disk/by-id/scsi-SATA_ST3000DM001-9YN_Z1F0D6NL    ONLINE       0     0     0
        disk/by-id/scsi-SATA_ST3000DM001-9YN_Z1F0CWA1    ONLINE       0     0     0
        disk/by-id/scsi-SATA_ST3000DM001-9YN_Z1F0CVL6    ONLINE       0     0     0
        disk/by-id/scsi-SATA_ST3000DM001-9YN_Z1F0D6TT    ONLINE       0     0     0
        disk/by-id/scsi-SATA_ST3000DM001-9YN_Z1F0BPVX    ONLINE       0     0     0
        disk/by-id/scsi-SATA_ST3000DM001-9YN_Z1F09BGJ    ONLINE       0     0     0
        disk/by-id/scsi-SATA_ST3000DM001-9YN_Z1F0C9YA    ONLINE       0     0     0
        disk/by-id/scsi-SATA_ST3000DM001-9YN_Z1F09B50    ONLINE       0     0     0
        disk/by-id/scsi-SATA_ST3000DM001-9YN_Z1F0AZ20    ONLINE       0     0     0
        disk/by-id/scsi-SATA_ST3000DM001-9YN_Z1F0BKJW    ONLINE       0     0     0
        disk/by-id/scsi-SATA_ST3000DM001-9YN_Z1F095Y2    ONLINE       0     0     0
        disk/by-id/scsi-SATA_ST3000DM001-9YN_Z1F08YLD    ONLINE       0     0     0
        disk/by-id/scsi-SATA_ST3000DM001-9YN_Z1F0BQGQ    ONLINE       0     0     0
        disk/by-id/scsi-SATA_ST3000DM001-9YN_Z1F0B2YJ    ONLINE       0     0    39  512 resilvered
        disk/by-id/scsi-SATA_ST3000DM001-9YN_Z1F0BQBY    ONLINE       0     0     0
        disk/by-id/scsi-SATA_ST3000DM001-9YN_Z1F0C9WZ    ONLINE       0     0     0  67.3M resilvered
        disk/by-id/scsi-SATA_ST3000DM001-9YN_Z1F0BQGE    ONLINE       0     0     0
        disk/by-id/scsi-SATA_ST3000DM001-9YN_Z1F0BQ5C    ONLINE       0     0     0
        disk/by-id/scsi-SATA_ST3000DM001-9YN_Z1F0CWWH    ONLINE       0     0     0
    spares
      disk/by-id/scsi-SATA_ST3000DM001-9YN_Z1F0CCMV      INUSE     currently in use
      disk/by-id/scsi-SATA_ST3000DM001-9YN_Z1F09BJN      INUSE     currently in use

errors: 572 data errors, use '-v' for a list

si prega di fornire l'output dizpool status
longneck

Quindi quali errori segnala se si utilizza -v?
Bobby,

"errori: sono stati rilevati errori permanenti nei seguenti file:" e quindi un elenco di circa 12 file con errori.
jasongullickson,

Per la parte "vedi:", puoi leggere una spiegazione più dettagliata qui: illumos.org/msg/ZFS-8000-8A
Raymond Tau,

Risposte:


56

Congratulazioni e uh-oh. Ti sei imbattuto in una delle cose migliori di ZFS, ma hai anche commesso un peccato di configurazione.

Innanzitutto, poiché stai usando raidz1, hai solo un disco di dati di parità. Tuttavia, due unità si sono guastate contemporaneamente. L'unico risultato possibile qui è la perdita di dati . Nessuna quantità di resilvering lo risolverà.

I tuoi ricambi ti hanno aiutato un po 'qui e ti hanno salvato da un fallimento completamente catastrofico. Ho intenzione di uscire su un arto qui e dire che le due unità guaste non si sono guastate allo stesso tempo e che la prima unità di riserva è stata ripristinata solo parzialmente prima che la seconda unità si guastasse.

Sembra difficile da seguire. Ecco una foto:

sequenza di eventi

Questa è in realtà una buona cosa perché se si trattasse di un array RAID tradizionale, l'intero array sarebbe semplicemente andato offline non appena la seconda unità si fosse guasta e non avresti alcuna possibilità di un ripristino sul posto. Ma poiché si tratta di ZFS, può comunque essere eseguito usando i pezzi che ha e restituisce semplicemente errori a livello di blocco o file per i pezzi che non ha.

Ecco come risolverlo: a breve termine, ottieni un elenco di file danneggiati zpool status -ve copia quei file dal backup nelle loro posizioni originali. Oppure elimina i file. Ciò consentirà al resilver di riprendere e completare.

Ecco il tuo peccato di configurazione: hai troppi dischi in un gruppo raidz.

A lungo termine: è necessario riconfigurare le unità. Una configurazione più appropriata sarebbe quella di disporre le unità in piccoli gruppi di 5 unità o giù di lì in raidz1. ZFS eseguirà automaticamente lo striping su quei piccoli gruppi. Ciò riduce in modo significativo il tempo di ripristino quando un'unità si guasta perché solo 5 unità devono partecipare anziché tutte. Il comando per fare questo sarebbe qualcosa del tipo:

zpool create tank raidz da0 da1 da2 da3 da4 \
                  raidz da5 da6 da7 da8 da9 \
                  raidz da10 da11 da12 da13 da14 \
                  spare da15 spare da16

Grazie mille @longneck per la risposta dettagliata e istruttiva! Sei preciso sulla sequenza degli eventi e ho già preso i tuoi consigli sulla configurazione del dispositivo (il secondo dispositivo che ho creato è configurato quasi esattamente come hai descritto, con alcune considerazioni aggiuntive per mantenere ogni raid diffuso sull'hardware per ridurre le possibilità di perdere un intero raid a causa di guasti al backplane, ecc.).
jasongullickson,

Dopo aver eliminato i file corrotti, "zfs status" ora restituisce valori esadecimali anziché nomi di file; Presumo che questo sparirà quando la macchia finirà finalmente?
jasongullickson,

@jasongullickson solo se anche i metadati del filesystem sono intatti. ZFS è piuttosto aggressivo quando si tratta di proteggere i metadati, quindi probabilmente sarai bravo. solo il tempo lo dirà.
collo lungo

personalmente non mi sono mai imbattuto in un evento di corruzione dei metadati prima, quindi non so come sarà in termini di eventi di errore.
collo lungo

1
@longneck Gotcha, quindi siamo d'accordo - è sicuramente una cattiva idea avere un gruppo RAID-Z abbastanza grande da strozzare un resilver e rallentarlo. E l'altro grande rischio di gruppi più grandi è l'aumento delle probabilità di guasto di un secondo dispositivo durante il resilver: un numero maggiore di dischi di parità (con RAID-Z2 o 3) aiuterebbe con i problemi di affidabilità, ma non con la velocità del resilver .
Shane Madden
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.