Resilversão infinita do ZFS


29

Eu tenho um grande pool (> 100 TB) de ZFS (FUSE) no Debian que perdeu duas unidades. Como as unidades falharam, substituí-as por peças sobressalentes até que eu pudesse agendar uma interrupção e substituir fisicamente os discos defeituosos.

Quando desliguei o sistema e substituí as unidades, o pool começou a se resilver conforme o esperado, mas quando chega a 80% de conclusão (isso geralmente leva cerca de 100 horas), ele é reiniciado novamente.

Não tenho certeza se a substituição de duas unidades ao mesmo tempo criou uma condição de corrida ou se, devido ao tamanho do pool, o resilver leva tanto tempo que outros processos do sistema estão interrompendo e causando a reinicialização, mas não há indicação óbvia no resultados de 'status do zpool' ou os logs do sistema que apontam para um problema.

Desde então, modifiquei a forma como organizo esses pools para melhorar o desempenho de resilvering, mas qualquer sugestão ou conselho sobre como colocar esse sistema em produção novamente é apreciado.

Saída de status do zpool (os erros são novos desde a última vez que verifiquei):

  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

forneça a saída dezpool status
longneck

Então, que erros são reportados se você usar -v?
Bobby

"erros: erros permanentes foram detectados nos seguintes arquivos:" e uma lista de cerca de 12 arquivos com erros.
Jasongullickson

Para a parte 'see:', você pode ler uma explicação mais detalhada aqui: illumos.org/msg/ZFS-8000-8A
Raymond Tau

Respostas:


56

Parabéns e uh-oh. Você encontrou uma das melhores coisas sobre o ZFS, mas também cometeu um pecado de configuração.

Primeiro, como você está usando o raidz1, você tem apenas um disco com dados de paridade. No entanto, você teve duas unidades com falha contemporânea. O único resultado possível aqui é a perda de dados . Nenhuma quantidade de resilversão vai corrigir isso.

Suas peças de reposição o ajudaram um pouco aqui e o salvaram de um fracasso completamente catastrófico. Vou abordar aqui um pouco e dizer que as duas unidades que falharam não falharam ao mesmo tempo e que a primeira sobressalente apenas parcialmente resilvered antes da segunda unidade falhar.

Isso parece difícil de seguir. Aqui está uma foto:

sequência de eventos

Isso é realmente uma coisa boa, porque se esse fosse um array RAID tradicional, todo o array simplesmente ficaria offline assim que a segunda unidade falhasse e você não teria chance de se recuperar no local. Mas como esse é o ZFS, ele ainda pode ser executado usando as peças que possui e simplesmente retorna erros no nível de bloco ou arquivo para as peças que não possui.

Aqui está como corrigi-lo: Em curto prazo, obtenha uma lista de arquivos danificados zpool status -ve copie esses arquivos do backup para seus locais originais. Ou exclua os arquivos. Isso permitirá que o resilver seja retomado e concluído.

Aqui está o seu pecado de configuração: você tem muitas unidades em um grupo raidz.

Longo prazo: você precisa reconfigurar suas unidades. Uma configuração mais apropriada seria organizar as unidades em pequenos grupos de 5 unidades ou mais no raidz1. O ZFS distribuirá automaticamente esses pequenos grupos. Isso reduz significativamente o tempo de resilver quando uma unidade falha, porque apenas 5 unidades precisam participar em vez de todas elas. O comando para fazer isso seria 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

Muito obrigado @ longneck pela resposta detalhada e informativa! Você é direto sobre a sequência de eventos e já segui seus conselhos sobre a configuração do dispositivo (o segundo dispositivo que eu construí é configurado quase exatamente como você descreveu, com algumas considerações adicionais para manter cada invasão espalhada pelo hardware. reduza as chances de perder um ataque inteiro devido à falha do backplane, etc.).
Jasongullickson 15/07

Após excluir os arquivos corrompidos, "zfs status" agora retorna valores hexadecimais em vez de nomes de arquivos; Suponho que isso desaparecerá quando a limpeza finalmente terminar?
Jasongullickson 15/07

@jasongullickson apenas se os metadados do sistema de arquivos também estiverem intactos. O ZFS é bastante agressivo quando se trata de proteger os metadados, então você provavelmente será bom. só o tempo irá dizer.
longneck

pessoalmente, eu nunca encontrei um evento de corrupção de metadados antes, então não sei como será isso em termos de eventos de erro.
longneck

1
@ Longneck Gotcha, então estamos de acordo - é definitivamente uma má ideia ter um grupo RAID-Z grande o suficiente para você gargalhar um resilver e desacelerá-lo. E o outro grande risco de grupos maiores é o aumento das chances de um segundo dispositivo falhar durante o resilver - um número maior de discos de paridade (com RAID-Z2 ou 3) ajudaria nos problemas de confiabilidade, mas não na velocidade do resilver .
Shane Madden
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.