Recuperando/importando pool ZFS Linux com nome de pool duplicado

Recuperando/importando pool ZFS Linux com nome de pool duplicado

Eu fiz algo muito estúpido hoje ao tentar adicionar um terceiro espelho a um zpool Linux existente chamado backup. Basta dizer que cometi alguns erros porque não administro muito meu ZFS além de trocar discos a cada dois anos. E, ao tentar corrigi-los, interpretei mal os conselhos on-line para recriar o pool e criei um novo pool nomeado, backupdestruindo assim o pool existente. (Sim, usei a -fopção depois que ele reclamou. Sim, sou um idiota. Agora sei que nunca mais devo fazer isso. Vamos em frente.)

Pelo que li on-line, meu backuppool original que "criei" provavelmente é irrecuperável. O que é bom, porque o nome dele backuptem um motivo: na maioria das vezes, ele apenas abriga meus backups de cerca de 15 anos. No entanto, há algumas coisas que seria bom ter de volta (alguns dados não essenciais que eu movi para lá temporariamente) e algumas coisas que levarei alguns dias para configurar novamente, relacionadas às configurações de backup que residia naquele volume. (Agora eu sei que devo fazer backup dessas coisas em outro lugar, então esta será uma experiência de aprendizado.)

Mas eu tenho um backup dos meus backups - eu estava substituindo um terceiro espelho hoje por uma unidade que removi há alguns meses durante outra atualização do meu sistema (junto com uma atualização do sistema operacional). Na verdade, essa unidade não falhou, mas era antiga e começou a acumular alguns setores defeituosos, então achei melhor retirá-la em vez de esperar que ela fosse corrompida ou algo assim.

De qualquer forma, ainda tenho aquela unidade antiga, então pensei em colocá-la de volta no meu sistema e recuperar os dados do pool de lá. Eu só sentiria falta dos últimos meses de dados de backup. Agora, eu nunca exportei oficialmente o pool naquela unidade nem nada. E desde então atualizei meu sistema operacional, então não esperava que ele detectasse automaticamente essa unidade. (Não sei se está conectado à mesma porta SATA ou não, pois movi algumas unidades.)

Mas o zpool importcomando parece não encontrar nada automaticamente. Brincando com algumas opções, zpool importvejo a segunda versão (agora destruída) do backuppool, mas esse é apenas o pool vazio que criei acidentalmente em duas outras unidades.

Algum conselho sobre como posso tentar ler os dados neste terceiro disco? Pelo que me lembro, era um espelho perfeitamente funcional e atualizado do pool ZFS antes de retirá-lo do caso há alguns meses. Em particular:

  1. O fato de haver um pool destruído pode estar backupinterferindo na capacidade de detectar e tentar recuperar/importar esse pool antigo? Existe uma maneira de contornar isso?
  2. Ainda tenho a instalação antiga do sistema operacional em meu servidor que acredito estar em execução quando usei o disco antigo. Tentei inicializá-lo apenas para ver se ele poderia detectar o pool ZFS, mas isso não aconteceu. (Novamente, a unidade pode não estar conectada ao mesmo local.) Mas há algum arquivo de log do ZFS ou outras coisas que eu possa extrair que possam conter metadados naquele pool antigo ou o número de ID ou algo que eu poderia ser usado para forçar o ZFS a importar o que deveria ser um espelho intacto nesta unidade?
  3. Estou apenas assumindo que meu pool nos dois primeiros discos foi destruído por meio do create -fcomando. Mas se alguém tiver uma ideia de como posso recuperar o primeiro pool diretamente ali, obviamente seria ótimo.
  4. Existe algum outro motivo pelo qual o ZFS não detectaria o terceiro espelho antigo como um disco de pool do ZFS? Se sim, alguma outra sugestão? Outras ferramentas de recuperação que posso tentar?

Agradeço por qualquer ajuda ou sugestões.

EDIT: Aqui está a saída de zdb -l /dev/sdb1(que é a terceira unidade)

------------------------------------
LABEL 0
------------------------------------
    version: 5000
    name: 'backup'
    state: 0
    txg: 0
    pool_guid: 3936176493905234028
    errata: 0
    hostid: 8323329
    hostname: [omitted]
    top_guid: 14695910886267065742
    guid: 17986383713788026938
    vdev_children: 1
    vdev_tree:
        type: 'mirror'
        id: 0
        guid: 14695910886267065742
        whole_disk: 0
        metaslab_array: 34
        metaslab_shift: 33
        ashift: 12
        asize: 1000197324800
        is_log: 0
        create_txg: 4
        children[0]:
            type: 'disk'
            id: 0
            guid: 17914838236907067293
            path: '/dev/sdd1'
            whole_disk: 0
            DTL: 143
            create_txg: 4
        children[1]:
            type: 'disk'
            id: 1
            guid: 17986383713788026938
            path: '/dev/sdb1'
            whole_disk: 0
            DTL: 141
        children[2]:
            type: 'disk'
            id: 2
            guid: 1683783279473519399
            path: '/dev/sdc1'
            whole_disk: 0
            DTL: 145
            create_txg: 4
    features_for_read:
        com.delphix:hole_birth
        com.delphix:embedded_data
    create_txg: 0
    labels = 0 1 2 3 

Se estou interpretando isso corretamente, o status 0 significa que o pool deve estar intacto. Mas quando tento importar mesmo usando o pool GUID zpool import 3936176493905234028, recebo um erro "não é possível importar... nenhum pool disponível". (Presumo que devo usar pool_guid, mas tentei usar guid e top_guid também e nada parece funcionar.)

EDIT2: recuperei o arquivo zpool.cache do sistema operacional original em que esse pool estava ativo e tentei zpool import -c zpool.cache, o que deu o seguinte:

   pool: backup
     id: 3936176493905234028
  state: UNAVAIL
 status: One or more devices contains corrupted data.
 action: The pool cannot be imported due to damaged devices or data.
   see: http://zfsonlinux.org/msg/ZFS-8000-5E
 config:

    backup      UNAVAIL  insufficient replicas
      mirror-0  UNAVAIL  insufficient replicas
        sdd1    FAULTED  corrupted data
        sdc1    FAULTED  corrupted data

O que é de se esperar. Esses são os dois discos onde o pool foi substituído pelo meu comando create. No entanto, o sdb1 não está listado como uma unidade em potencial - provavelmente porque eu o removi do pool depois de retirar o disco. No entanto, acho que tenho uma cópia intacta dos dados espelhados antigos no sdb1, e o zdb concorda. Por que não importa?

informação relacionada