ZFS: colocando um disco online em um pool indisponível

ZFS: colocando um disco online em um pool indisponível

Eu tenho um servidor doméstico usando FreeBSD e ZFS que funcionou bem nos últimos 5 anos e em várias ocasiões substituí discos defeituosos com sucesso.

No entanto, hoje aconteceu um pequeno desastre e espero encontrar uma solução.

Eu tenho um pool de nível superior que consiste em 3 vdevs, cada um dos quais é um pool raidz1, portanto, até 3 discos podem falhar - assumindo que todos pertencem a vdevs diferentes - e a integridade dos dados está intacta.

Ontem, notei alguns erros relatados por 1 disco em 1 vdev. Pela experiência anterior, isso geralmente indica que o disco está prestes a falhar, então faço o que costumo fazer:

  1. Disco off-line: zpool offline tank gpt/ta4
  2. Substitua fisicamente o disco
  3. Configure o novo disco com gpart e, em seguida, zpool substitua tank gpt/ta4

No entanto, desta vez, entre as etapas 2 e 3, ocorreu um desastre: quando liguei o servidor após instalar a nova unidade, senti cheiro de algo queimando e meu HBA indicou que4das unidades não estavam disponíveis! Por um golpe de sorte inacreditável, deve ter havido algum pico de tensão, porque outra unidade no mesmo vdev (gpt/ta2) agora está completamente morta e a inspeção visual revela que um dos MOSFETs no PCB está queimado.

Então agora gpt/ta2 está UNAVAIL e gpt/ta4 está OFFLINE, então obviamente o vdev, que é raidz1, também está UNAVAIL.

Minhas perguntas são: 1) Existe uma maneira de colocar o gpt/ta4 online novamente? Quando tento emitir "zpool online tank gpt/ta4", ele me diz que o pool não está disponível, então não posso fazer isso. Posso entender por que isso acontece, mas estava pensando que gpt/ta4, embora apresentasse alguns erros de leitura, ainda era basicamente um membro 'bom' do pool raidz1 antes de colocá-lo offline (o status do zpool relatou que não havia dados conhecidos erros). Existe alguma maneira de conseguir isso?

2) Caso contrário, existe uma maneira de pelo menos colocar o restante do meu pool de nível superior (que consiste em 3 vdevs raidz1) online? Os outros 2 vdevs estão perfeitamente bem.

Por favor me ajude, tenho muitos dados preciosos sobre isso :-)

Desde já, obrigado.

Responder1

Não que isso ajude você neste momento, mas é exatamente por isso que você nunca me verá aconselhando as pessoas a usarem o raidz1 - e para conjuntos de espelhos, se estiverem usando discos enormes, muitas vezes sugerindo espelhos triplos.

É /improvável ao extremo/ que qualquer ação que você possa tomar coloque o tanque novamente online. Devo começar por isso, para não aumentar as vossas esperanças.

1: Certifique-se de que os discos estejam seguros - mesmo que isso signifique desconectar todos eles.

2: Atualize para a versão mais recente do FreeBSD - você deseja os bits ZFS mais recentes que puder obter.

3: Coloque o gpt/ta4 original (que supostamente está 'OK' e apenas apresentando erros de leitura) de volta no sistema ou em um novo sistema com bits ZFS mais recentes (assim como todos os outros, se você os tiver removido), inicialize e execute-o em ordem até que um funcione (esteja avisado - estes não são seguros, especialmente o último, pois em suas tentativas de recuperar o sistema eles provavelmente reverterão e perderão dados gravados recentemente):

  • importação zpool -f tanque
  • importação zpool -fF tanque
  • importação zpool -tanque fFX

Se todos os três falharem, você estará fora do domínio da recuperação “simples”. Algumas pesquisas no Google por 'importar pools inválidos', 'zdb', 'zpool import -F', 'zpool import -X', 'zpool import -T' (perigo!) E similares podem fornecer alguns blogs e informações adicionais nas tentativas de recuperação feitas por outros, mas já está em terreno muito perigoso e potencialmente prejudicial aos dados nesse ponto e você está entrando rapidamente no território de serviços de recuperação pagos (e não de empresas tradicionais de recuperação de dados, eles não têm experiência com ZFS e não será de nenhuma utilidade para você).

Nota: Um método mais preciso e 'mais seguro' seria 'zpool import -o readonly=on -f -T [txg_id] tank'. No entanto, para que isso funcione, você precisará usar o zdb por conta própria, primeiro, para localizar um txg_id recente aparentemente saudável, e não estou preparado para tentar explicar tudo isso aqui. O Google será seu amigo aqui - não tome nenhuma ação até que tenha lido informações suficientes para se sentir confortável com o que está fazendo. Não confie em nenhuma fonte única.

Nota 2: a coisa mais 'segura' a fazer seria entrar em contato imediatamente com alguém capaz de executar os serviços de recuperação do ZFS.

Nota 3: a próxima coisa 'mais segura' a fazer seria colocar as unidades em um sistema seguro e adicionar cada unidade bruta inteira a um novo disco, fornecendo, teoricamente, cópias idênticas de seus discos, mas isso significaria você precisaria de um número semelhante de discos novos, de preferência de tamanho/tipo semelhante ou idêntico aos antigos, mas não estritamente necessários. E só então tente qualquer uma das opções acima em um conjunto de unidades, mantendo os outros de lado por segurança.

informação relacionada