web-dev-qa-db-pt.com

O que fazer com um pool do ZFS corrompido

Foi executada uma instância de teste de um NAS usando um ZFS, conforme mencionado em Restaurando um servidor Ubuntu usando ZFS RAIDZ para dados .

Esta semana um dos meus discos morreu. Não deve ser um problema, deveria (os benefícios do RAID sendo resiliência, bem como desempenho)?

Exceto que meu pool do ZFS foi corrompido, como em:

[email protected]:~$ Sudo zpool status -v
  pool: tank
 state: UNAVAIL
status: One or more devices could not be used because the label is missing
        or invalid.  There are insufficient replicas for the pool to continue
        functioning.
action: Destroy and re-create the pool from
        a backup source.
   see: http://www.Sun.com/msg/ZFS-8000-5E
  scan: none requested
config:

    NAME        STATE     READ WRITE CKSUM
    tank        UNAVAIL      0     0     0  insufficient replicas
      raidz1-0  UNAVAIL      0     0     0  insufficient replicas
        sdb     FAULTED      0     0     0  corrupted data
        sdc     FAULTED      0     0     0  corrupted data
        sdd     UNAVAIL      0     0     0

Felizmente, esta é uma instância de teste e, portanto, posso facilmente começar de novo. Mas e se esse pool contivesse dados importantes? Qual seria o próximo passo (s) correto (s) para recuperar os dados e restaurar meu NAS para a ordem de trabalho? Ou o ZFS tenta automaticamente todas as possíveis abordagens de restauração, de modo que os dados agora são torrados?

5
andybjackson

Parece que seu pool pode não estar corrompido. Embora a partir da saída, parece que vários dispositivos podem estar em apuros. Eu estou supondo que vários discos podem estar em estado questionável, daí o estado com falha em sdb e sdc. Descobrir o que pode estar errado com eles e seu pool pode provar que você está errado. Isso não parece um estado fatal de pool.

1
slashdot

Armado com o insight do @slashdot, eu praticamente consertei o meu problema, mas eu realmente não sei o que fiz. Por favor, examine a seguinte trilha e me ilumine.

Em particular, quais das seguintes hipóteses são verdadeiras e ou o que estou perdendo?

  1. Nem zdb -u tank nem zdb -dcsv tank fizeram alguma coisa útil.
  2. O segundo zpool import -f tank funcionou quando o primeiro não funcionou, pois o tempo decorrido desde o zpool export tank para o ZFS tinha a chance de se corrigir.
  3. Todo este episódio teve algo a ver com rótulos mudando-se após uma das unidades falharem (acho que foi sdb que causou sdc> sdb & sdd> sdb).

LOG

[email protected]:~$ zpool status
[email protected]:~$ Sudo zpool status
  pool: tank
 state: UNAVAIL
status: One or more devices could not be used because the label is missing
        or invalid.  There are insufficient replicas for the pool to continue
        functioning.
action: Destroy and re-create the pool from
        a backup source.
   see: http://www.Sun.com/msg/ZFS-8000-5E
  scan: none requested
config:

        NAME        STATE     READ WRITE CKSUM
        tank        UNAVAIL      0     0     0  insufficient replicas
          raidz1-0  UNAVAIL      0     0     0  insufficient replicas
            sdb     FAULTED      0     0     0  corrupted data
            sdc     FAULTED      0     0     0  corrupted data
            sdd     UNAVAIL      0     0     0
[email protected]:~$ Sudo zdb -u tank
zdb: can't open 'tank': No such device or address
[email protected]:~$ Sudo zpool scrub tank
cannot scrub 'tank': pool is currently unavailable
[email protected]:~$ Sudo zdb -bcsv tank
zdb: can't open 'tank': No such device or address
[email protected]:~$ Sudo zpool export tank
[email protected]:~$ Sudo zpool import tank
cannot import 'tank': pool may be in use from other system
use '-f' to import anyway
[email protected]:~$ Sudo zpool import -f tank
cannot import 'tank': one or more devices is currently unavailable
[email protected]:~$ Sudo zpool status
no pools available
[email protected]:~$ Sudo zpool status -x
no pools available
[email protected]:~$ Sudo zpool import
  pool: tank
    id: 9117894036185671023
 state: UNAVAIL
status: One or more devices contains corrupted data.
action: The pool cannot be imported due to damaged devices or data.
   see: http://www.Sun.com/msg/ZFS-8000-5E
config:

        tank        UNAVAIL  insufficient replicas
          raidz1-0  UNAVAIL  insufficient replicas
            sdb     FAULTED  corrupted data
            sdb     UNAVAIL
            sdc     ONLINE
[email protected]:~$ Sudo zpool import tank
cannot import 'tank': pool may be in use from other system
use '-f' to import anyway
[email protected]:~$ Sudo zpool import -f tank
[email protected]:~$ Sudo zpool status
      pool: tank
 state: DEGRADED
status: One or more devices could not be used because the label is missing or
        invalid.  Sufficient replicas exist for the pool to continue
        functioning in a degraded state.
action: Replace the device using 'zpool replace'.
   see: http://www.Sun.com/msg/ZFS-8000-4J
  scan: scrub repaired 0 in 0h13m with 0 errors on Mon Nov 21 09:22:11 2011
config:

        NAME                      STATE     READ WRITE CKSUM
        tank                      DEGRADED     0     0     0
          raidz1-0                DEGRADED     0     0     0
            10820373921989571629  UNAVAIL      0     0     0  was /dev/sdb1
            sdb                   ONLINE       0     0     0
            sdc                   ONLINE       0     0     0

errors: No known data errors
[email protected]:~$
3
andybjackson

Acho que os pôsteres anteriores destacaram o problema. A causa provável foi devido à maneira como você especificou os discos.

Minha experiência é com o ZFS no Ubuntu. Embora eu também use o ZFS em freenas, nunca precisei me aprofundar na implementação do bsd.

Certamente, para o Ubuntu, é altamente recomendado que você especifique seus dispositivos por id em vez de descritor: isto é,/dev/disk/by-id/scsi-SATA-string longa que identifica o disco físico em vez de/dev/sda.

O uso do dispositivo by-id elimina qualquer dependência na porta SATA específica à qual o disco está conectado.

Gareth

1
Gareth

Você pode apenas misturar discos?

Uma vez que eu misturei discos e zpool disse "discos contêm dados corrompidos". Depois que eu conectei discos na seqüência anterior, ele começou a funcionar.

Talvez depois que você importou zpool tanque reconhecido sequência correta.

1
BBK