O que fazer com um pool do ZFS corrompido

5

Foi executado 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)?

Só que meu pool do ZFS foi corrompido, como em:

andy@ubuntu:~$ 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 começar de novo facilmente. Mas e se esse pool contivesse dados importantes? Qual seria o próximo passo (s) correto (s) para recuperar os dados e restaurar o meu NAS para a ordem de trabalho? Ou o ZFS tenta automaticamente todas as possíveis abordagens de restauração, de forma que os dados sejam agora torrados?

    
por andybjackson 28.01.2012 / 14:13

4 respostas

1

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.

    
por slashdot 30.01.2012 / 06:14
3

Armado com o insight de @slashdot, eu consertei principalmente 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 algo útil.
  2. O segundo zpool import -f tank funcionou quando o primeiro não funcionou, pois havia decorrido tempo suficiente desde o zpool export tank para o ZFS para ter a chance de se corrigir.
  3. Todo este episódio teve algo a ver com rótulos mudando-se depois que uma das unidades falhou (acho que foi o sdb que causou sdc & sdb sdd & sdb sdb).

LOG

andy@ubuntu:~$ zpool status
andy@ubuntu:~$ 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
andy@ubuntu:~$ sudo zdb -u tank
zdb: can't open 'tank': No such device or address
andy@ubuntu:~$ sudo zpool scrub tank
cannot scrub 'tank': pool is currently unavailable
andy@ubuntu:~$ sudo zdb -bcsv tank
zdb: can't open 'tank': No such device or address
andy@ubuntu:~$ sudo zpool export tank
andy@ubuntu:~$ sudo zpool import tank
cannot import 'tank': pool may be in use from other system
use '-f' to import anyway
andy@ubuntu:~$ sudo zpool import -f tank
cannot import 'tank': one or more devices is currently unavailable
andy@ubuntu:~$ sudo zpool status
no pools available
andy@ubuntu:~$ sudo zpool status -x
no pools available
andy@ubuntu:~$ 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
andy@ubuntu:~$ sudo zpool import tank
cannot import 'tank': pool may be in use from other system
use '-f' to import anyway
andy@ubuntu:~$ sudo zpool import -f tank
andy@ubuntu:~$ 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
andy@ubuntu:~$
    
por andybjackson 03.02.2012 / 21:52
1

Você pode apenas misturar discos?

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

Talvez depois que você importou o zpool do tanque reconheceu a seqüência correta.

    
por BBK 11.02.2012 / 19:12
1

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 por descritor: ie / dev / disk / by-id / scsi-SATA-long string que ids exclusivamente o disco físico em vez de / dev / sda.

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

Gareth

    
por Gareth 03.06.2013 / 15:06