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

5

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

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 - supondo que todos eles pertençam a vdevs diferentes - e a integridade de dados está intacta. / p>

Ontem, notei alguns erros sendo reportados por 1 disco em 1 vdev. De experiências anteriores, isso geralmente indica que o disco está prestes a falhar, então faço o que geralmente faço:

  1. Offline o disco: 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, esse tempo entre os passos 2 e 3 ocorreu: quando eu liguei o servidor depois de instalar a nova unidade, senti o cheiro de algo queimando e meu HBA indicou que 4 das unidades não eram t disponível! Por um golpe de inacreditavelmente má sorte, deve ter havido algum aumento de tensão, porque outra unidade no mesmo vdev (gpt / ta2) está completamente inoperante, e a inspeção visual revela que um dos MOSFETs no PCB está queimado.

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

Minhas perguntas são: 1) Existe uma maneira de trazer o gpt / ta4 de volta online? Quando eu tento emitir "zpool online tank gpt / ta4", ele me diz que o pool está indisponível, então não posso fazê-lo. Eu posso entender porque isso pode ser assim, mas eu estava pensando que o gpt / ta4, apesar de experimentar alguns erros de leitura, era basicamente um 'bom' membro do pool raidz1 antes de colocá-lo offline (zpool status relatou que não havia dados conhecidos erros). Existe alguma maneira de conseguir isso?

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

Por favor, ajudem, eu tenho muitos dados preciosos sobre isso: -)

Obrigado antecipadamente.

    
por indotoonster 22.12.2013 / 13:26

1 resposta

8

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

É / improvável ao extremo / que qualquer ato que você possa tomar seja colocar o tanque de volta online. Eu devo começar com isso, para não aumentar suas esperanças.

1: verifique se os discos estão seguros, mesmo que isso signifique desconectar todos eles.

2: Atualize para a versão mais recente do FreeBSD - você quer os bits mais recentes do ZFS em que você pode chegar.

3: Coloque o gpt / ta4 original (supostamente 'OK' e apenas erros de leitura) de volta no sistema ou em um novo sistema com novos bits ZFS (assim como todos os outros, se você os tiver removido) ), inicialize-o e execute-o, até que funcione (esteja avisado - não é seguro, especialmente o último, pois, em suas tentativas de recuperar o sistema, é provável que ele retroceda e, assim, perca dados gravados recentemente) :

  • zpool import -f tank
  • zpool import -fF tank
  • zpool import -fFX tank

Se todos os 3 falharem, você estará fora da área de recuperação "simples". Alguns pesquisando por 'importando pools ruins', 'zdb', 'zpool import -F', 'zpool import -X', 'zpool import -T' (perigo!) E similares, podem fornecer alguns blogs e informações adicionais em tentativas de recuperação feitas por outras pessoas, mas já está em um terreno perigoso e potencialmente danoso para os dados e você está entrando rapidamente em 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 o 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 sozinho, 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 medidas até que você 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 imediatamente em contato com alguém capaz de 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 inserir cada unidade bruta inteira em um novo disco, também, dando-lhe, teoricamente, cópias idênticas de seus discos, mas isso significaria que você precisaria de um número semelhante de novos discos, de preferência de tamanho / tipo semelhante ou idêntico aos antigos, mas não estritamente necessários. E só então tente qualquer um dos itens acima em um conjunto de unidades, mantendo os outros à parte para guarda.

    
por 22.12.2013 / 20:14

Tags