Como importar um filho de um espelho zpool quebrado em um host diferente?

1

Eu tenho um disco rígido em torno do qual uma vez pertenceu a um pool espelhado do ZFS de 3 discos em um servidor Ubuntu 12.04, chamado d510 . O disco foi devidamente desconectado, mas seu sistema de arquivos tank0 não foi exportado.

Gostaria agora de recuperar alguns arquivos desse disco montando-o em um sistema de desktop Xubuntu 14.04 diferente. Neste sistema de desktop, o disco é visto como:

$ ls /dev/disk/by-id/
...
ata-WDC_WD10EADS-00M2B0_WD-WCAV51264701
ata-WDC_WD10EADS-00M2B0_WD-WCAV51264701-part1
ata-WDC_WD10EADS-00M2B0_WD-WCAV51264701-part9
...

Os dados parecem estar somente na partição part1 , pois part9 é muito pequeno. No entanto, o comando zdb revela que essa partição de disco em particular já foi filha 2 e foi chamada de forma diferente no servidor Ubuntu 12.04, ou seja, scsi-SATA_WDC_WD10EADS-00_WD-WCAV51264701-part1 .

$ sudo zdb -l /dev/disk/by-id/ata-WDC_WD10EADS-00M2B0_WD-WCAV51264701-part1
--------------------------------------------
LABEL 0
--------------------------------------------
    version: 5000
    name: 'tank0'
    state: 0
    txg: 0
    pool_guid: 8764435549195071605
    hostname: 'd510'
    top_guid: 4212287141343472152
    guid: 10584802241354722513
    vdev_children: 1
    vdev_tree:
        type: 'mirror'
        id: 0
        guid: 4212287141343472152
        metaslab_array: 31
        metaslab_shift: 33
        ashift: 12
        asize: 1000189984768
        is_log: 0
        create_txg: 4
        children[0]:
            type: 'disk'
            id: 0
            guid: 4518508443267048848
            path: '/dev/disk/by-id/scsi-SATA_WDC_WD10EARS-00_WD-WCAV56475795-part1'
            whole_disk: 1
            DTL: 118
            create_txg: 4
            resilvering: 1
        children[1]:
            type: 'disk'
            id: 1
            guid: 12490123066008148558
            path: '/dev/disk/by-id/scsi-SATA_WDC_WD10EARS-00_WD-WCAV56524564-part1'
            whole_disk: 1
            DTL: 120
            create_txg: 4
            resilvering: 1
        children[2]:
            type: 'disk'
            id: 2
            guid: 10584802241354722513
            path: '/dev/disk/by-id/scsi-SATA_WDC_WD10EADS-00_WD-WCAV51264701-part1'
            whole_disk: 1
            DTL: 126
            resilvering: 1
    features_for_read:
    create_txg: 0
--------------------------------------------
LABEL 1
--------------------------------------------
...

Devido a essa diferença no nome do id, criei os seguintes links:

sudo ln -s ata-WDC_WD10EADS-00M2B0_WD-WCAV51264701 scsi-SATA_WDC_WD10EADS-00_WD-WCAV51264701
sudo ln -s ata-WDC_WD10EADS-00M2B0_WD-WCAV51264701-part1 scsi-SATA_WDC_WD10EADS-00_WD-WCAV51264701-part1
sudo ln -s ata-WDC_WD10EADS-00M2B0_WD-WCAV51264701-part9 scsi-SATA_WDC_WD10EADS-00_WD-WCAV51264701-part9

Ainda assim, como nas tentativas anteriores menos sofisticadas, o sistema de arquivos não importará (nem exportará para esse assunto):

$ sudo zpool import -o rdonly=on -d . -D -f -X -R /mnt 8764435549195071605
no pools available to import

Alguma sugestão sobre como importar este disco espelho ZFS órfão neste host diferente?

Devo talvez criar links ainda mais suaves para as outras unidades e partições apontando para essa única unidade?

Os dados com certeza ainda estão disponíveis no disco, no entanto, o ZFS no Linux parece ser bastante exigente sobre o que é permitido importar. Os pools do ZFS são ótimos no sistema em que são criados, mas os cenários de recuperação e atualização parecem ser prejudicados por esse comportamento.

Na documentação do Oracle Solaris

When a pool is created, it is intrinsically tied to the host system. The host system maintains information about the pool so that it can detect when the pool is unavailable. source

mas ainda

If you do not explicitly export the pool, but instead remove the disks manually, you can still import the resulting pool on another system. However, you might lose the last few seconds of data transactions, and the pool will appear faulted on the original system because the devices are no longer present. source

    
por Serge Stroobandt 08.03.2016 / 11:36

1 resposta

0

Algumas ideias:

  • De acordo com a página man, -D só importa pools que foram destruídos. Talvez sua piscina nunca tenha sido destruída e, portanto, não apareça?

  • Talvez essas opções possam ajudá-lo?

    -F
        Recovery mode for a non-importable pool.
        Attempt to return the pool to an importable
        state by discarding the last few transactions.
        Not all damaged pools can be recovered by
        using this option. If successful, the data
        from the discarded transactions is
        irretrievably lost. This option is ignored if
        the pool is importable or already imported.
    
    
     -n
        Used with the -F recovery option. Determines
        whether a non-importable pool can be made
        importable again, but does not actually
        perform the pool recovery. For more details
        about pool recovery mode, see the -F option,
        above.
    
por 15.03.2016 / 16:23