ZFS: zpool import - dispositivo ausente do UNAVAIL

1

Por cerca de um ano eu tive um servidor debian rodando com dados em hdd criptografados por dm-crypt / luks sob zfs (pool name zdata), 8 hdds em um modo espelhado, então 4 espelhos com 2 hdds cada. Um zpool status dos horários de funcionamento:

# zpool status  
pool: zdata  
state: ONLINE  
scrub: scrub completed after (blahblah)  
config:  
NAME        STATE     READ WRITE CKSUM  
zdata          ONLINE       0     0     0  
mirror-0       ONLINE       0     0     0  
 dm-name-n8_2  ONLINE       0     0     0  
 dm-name-n8_3  ONLINE       0     0     0  
mirror-1       ONLINE       0     0     0  
 dm-name-n8_0  ONLINE       0     0     0  
 dm-name-n8_1  ONLINE       0     0     0  
mirror-2       ONLINE       0     0     0  
 dm-name-n8_4  ONLINE       0     0     0  
 dm-name-n8_5  ONLINE       0     0     0  
mirror-3       ONLINE       0     0     0  
 dm-name-n8_7  ONLINE       0     0     0  
 dm-name-n8_6  ONLINE       0     0     0  
errors: No known data errors  

(É claro que não há backup dos dados brutos de 34 TB. Posso desistir de quase todos os dados, mas há alguns arquivos que considero preciosos para mim.)
Duas semanas atrás, após a atualização para estável, notei vários erros de leitura, gravação e soma de verificação começando com dm-name-n8_2. Um scrub não fez isso, porque zfs começou um resilvering, mas nunca terminou, como começou de novo e de novo. Esse foi o momento, onde também dm-name-n8_3, o outro disco rígido neste espelho, mostrou o mesmo tipo de erros e eu comecei a perceber, que ambos os hhds e seus controladores estavam morrendo.
Eu acho, do que eu fiz coisas bobas, nem tudo que eu posso compreender no momento ( zpool history não mostra nada). Entre outros, iniciei uma substituição com os discos "melhores". Nesse meio tempo, trabalhei em um eletrodoméstico defeituoso que causou uma queda de energia e, após a inicialização, não consegui importar o pool novamente. Os discos defeituosos agora são dd'ed e substituídos. Por fim, não consigo importar o conjunto novamente:

# zpool import -f
pool: zdata
id: 1343310357846896221
state: UNAVAIL
status: One or more devices were being resilvered.
action: The pool cannot be imported due to damaged devices or data.
config:

zdata             UNAVAIL  missing device
mirror-0        DEGRADED
 dm-name-n8_2  UNAVAIL
 dm-name-n8_3  ONLINE
mirror-1       ONLINE
 n8_0          ONLINE
 n8_1          ONLINE
mirror-2       DEGRADED
 dm-name-n8_4  ONLINE
 dm-name-n8_5  UNAVAIL
mirror-3       ONLINE
 n8_7          ONLINE
 dm-name-n8_6  ONLINE

# zpool import zdata -f
cannot import 'zdata': one or more devices is currently unavailable

Samesame com zpool import zdata -fnF
Anote os nomes dos dispositivos alterados.
O pool tem pelo menos um dispositivo online em cada espelho, por que reclama de um dispositivo ausente?
Como posso saber qual dispositivo está faltando? Há maneiras de colocar o pool online novamente e como faço isso?
(Eu li os documentos do oracle e o capítulo sobre zfs no manual do freebsd, aprendi algumas coisas, mas não encontrei uma resposta para minhas perguntas). A saída do zdb é um pouco longa, pode ser vista aqui .

    
por manes 10.08.2017 / 21:12

1 resposta

1

Eventualmente, encontrei uma solução para a bagunça: Eu vi mensagens status diferentes dependendo de quais discos eu levei para trazer o pool novamente. Fiz várias tentativas para importar o conjunto em um estado degradado com várias combinações de quatro discos correspondentes e, no final, obtive isso:

NAME                       STATE     READ WRITE CKSUM
zdata                      DEGRADED     0     0     0
  mirror-0                 DEGRADED     0     0     0
    dm-name-n8_2           ONLINE       0     0     0  (resilvering)
    11141007683912581709   UNAVAIL      0     0     0  was     /dev/disk/by-id/dm-name-n8_3
  mirror-1                 DEGRADED     0     0     0
    16620393607066428577   FAULTED      0     0     0  was     /dev/disk/by-id/dm-name-n8_0
    dm-name-n8_0           ONLINE       0     0     0
  mirror-2                 DEGRADED     0     0     0
    replacing-0            DEGRADED    85     0     0
      1051730541091272780  FAULTED      0     0     0  was     /dev/disk/by-id/dm-name-n8_4
      dm-name-n8_6         ONLINE       0     0    85  (resilvering)
dm-name-n8_4           ONLINE       0     0     0  (resilvering)
  mirror-3                 DEGRADED     0     0     0
    dm-name-n8_5           ONLINE       0     0     0
    13833275275194605312   FAULTED      0     0     0  was     /dev/disk/by-id/dm-name-n8_6

que me permitiu copiar quase todos os dados dos discos danificados. A perda foi de aproximadamente 0,1% (134 de > 70000) arquivos.

Pelo que entendi, o zfs armazena dados de configuração em cada dispositivo desse pool e os mantém sincronizados. Talvez a falta de energia danificou isso, ou os discos morrendo?

De qualquer forma, estou feliz de novo. Obrigado por ler e ajudar!

    
por 15.08.2017 / 21:40

Tags