Resistencia sin fin ZFS

29

Tengo un grupo grande (> 100TB) ZFS (FUSE) en Debian que perdió dos unidades. Como las unidades fallaron, las reemplacé con repuestos hasta que pude programar una interrupción y reemplazar físicamente los discos defectuosos.

Cuando apagué el sistema y reemplacé las unidades, el grupo comenzó a recuperarse como se esperaba, pero cuando se completa aproximadamente el 80% (esto generalmente toma alrededor de 100 horas) se reinicia nuevamente.

No estoy seguro si el reemplazo de dos unidades a la vez creó una condición de carrera, o si debido al tamaño del grupo el resistencias demora tanto que otros procesos del sistema lo están interrumpiendo y haciendo que se reinicie, pero no hay ninguna indicación obvia en el resultados del 'estado de zpool' o los registros del sistema que apuntan a un problema.

Desde entonces, modifiqué la forma en que establezco estos grupos para mejorar el rendimiento de recuperación, pero apreciamos cualquier pista o consejo sobre cómo volver a poner este sistema en producción.

Salida del estado de zpool (los errores son nuevos desde la última vez que lo verifiqué):

  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
jasongullickson
fuente
proporcione la salida dezpool status
longneck
Entonces, ¿qué errores informa si usa -v?
Bobby
"errores: se han detectado errores permanentes en los siguientes archivos:" y luego una lista de aproximadamente 12 archivos que tienen errores.
jasongullickson
Para la parte 'ver:', puede leer una explicación más detallada aquí: illumos.org/msg/ZFS-8000-8A
Raymond Tau

Respuestas:

56

Felicidades y uh-oh. Te has topado con una de las mejores cosas de ZFS, pero también cometiste un pecado de configuración.

Primero, dado que está usando raidz1, solo tiene un disco con datos de paridad. Sin embargo, tuvo dos unidades que fallaron simultáneamente. El único resultado posible aquí es la pérdida de datos . Ninguna cantidad de resistencia va a arreglar eso.

Sus repuestos lo ayudaron un poco aquí y lo salvaron de una falla completamente catastrófica. Voy a salir de aquí y decir que las dos unidades que fallaron no fallaron al mismo tiempo y que el primer repuesto solo se recuperó parcialmente antes de que fallara la segunda unidad.

Eso parece difícil de seguir. Aquí hay una foto:

secuencia de eventos

En realidad, esto es algo bueno porque si se tratara de una matriz RAID tradicional, toda su matriz simplemente se habría desconectado tan pronto como fallara la segunda unidad y no tendría ninguna posibilidad de una recuperación in situ. Pero como se trata de ZFS, aún puede ejecutarse usando las piezas que tiene y simplemente devuelve errores de nivel de bloque o archivo para las piezas que no tiene.

Así es como lo arregla: a corto plazo, obtenga una lista de archivos dañados zpool status -vy copie esos archivos de la copia de seguridad en sus ubicaciones originales. O eliminar los archivos. Esto permitirá que el resiliente se reanude y complete.

Aquí está su pecado de configuración: tiene demasiadas unidades en un grupo raidz.

A largo plazo: necesita reconfigurar sus unidades. Una configuración más apropiada sería organizar las unidades en pequeños grupos de 5 unidades más o menos en raidz1. ZFS se dividirá automáticamente en esos pequeños grupos. Esto reduce significativamente el tiempo de recuperación cuando falla una unidad porque solo 5 unidades deben participar en lugar de todas. El comando para hacer esto sería algo como:

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
cuello largo
fuente
¡Muchas gracias @longneck por la respuesta detallada e informativa! Estás al tanto de la secuencia de eventos, y ya he tomado tu consejo sobre la configuración del dispositivo (el segundo dispositivo que construí está configurado casi exactamente como lo describiste, con algunas consideraciones adicionales para mantener cada incursión extendida en el hardware para reducir las posibilidades de perder una incursión completa debido a una falla del plano posterior, etc.).
jasongullickson
Después de eliminar los archivos dañados, el "estado zfs" ahora devuelve valores hexadecimales en lugar de nombres de archivo; ¿Supongo que esto desaparecerá cuando finalmente termine el exfoliante?
jasongullickson
@jasongullickson solo si los metadatos del sistema de archivos también están intactos. ZFS es bastante agresivo cuando se trata de proteger los metadatos, por lo que probablemente sea bueno. sólo el tiempo dirá.
longneck
Personalmente, no me he encontrado con un evento de corrupción de metadatos antes, así que no sé cómo será en términos de eventos de error.
longneck
1
@longneck Gotcha, entonces estamos de acuerdo: definitivamente es una mala idea tener un grupo RAID-Z lo suficientemente grande como para estar bloqueando un resiliente y desacelerándolo. Y el otro gran riesgo de los grupos más grandes es el aumento de las probabilidades de que falle un segundo dispositivo durante la recuperación: un mayor número de discos de paridad (con RAID-Z2 o 3) ayudaría con los problemas de confiabilidad, pero no con la velocidad de la recuperación. .
Shane Madden