Como reconstruir o pool do ZFS com novos discos de diferentes tamanhos de setor?

2

Eu tenho o Ubuntu 12.04 com o ZFS instalado. Existem dois pools: rpool (o sistema de arquivos raiz) e rdata (todos os dados). O rdata foi criado com 2 unidades WD EADS de 1 TB (com setores físicos de 512 bytes) em um espelho ZFS. O rdata tem muitos conjuntos de dados em uma hierarquia.

O rdata está ficando sem espaço, então eu comprei 2 unidades Seagate 3TB. Infelizmente, quando tentei adicionar uma das novas unidades ao mirror, para que ela pudesse ser resilver, o zpool attach falhou dizendo

cannot attach /dev/disk/by-id/scsi-SATA_ST3000DM001-1CH_W1F1EE1G-part1 to /dev/disk/by-id/scsi-SATA_WDC_WD10EADS-00_WD-WCAU47275172-part1: devices have different sector alignment

Agora sei que isso ocorre porque os novos drives movem setores físicos e o único caminho de recuperação é reconstruir o pool. Eu estou propondo fazer o seguinte:

  1. Verifique se há um instantâneo de todos os conjuntos de dados no rdata.
  2. Remove 1 elemento do espelho rdata (por isso, tenho um bom backup conhecido e libero uma porta SATA)
  3. Conecte uma das novas unidades à máquina
  4. crie um novo pool chamado rdata1 com setores 4k e um único dispositivo físico
  5. use o zpool recv para restaurar os instantâneos dos conjuntos de dados do rdata para rdata1
    • Neste ponto, rdata1 deve ser idêntico a rdata
  6. exporte o dispositivo no qual o rdata1 está localizado
  7. destruir rdata
  8. importe o dispositivo que continha rdata1 como rdata
  9. remova o disco físico antigo e substitua-o pelo outro novo disco
  10. anexe o outro novo disco aos rdata recém-criados para recriar o espelho

Isso soa razoável? Eu ainda terei o segundo disco antigo se der errado e como último recurso, eu tenho outro servidor FreeNAS que tem um backup completo de todos os instantâneos; apenas no caso.

Gareth

    
por Gareth 03.06.2013 / 14:49

1 resposta

1

No final, o assunto foi forçado por um erro da minha parte. O procedimento que usei no final foi:

  1. Desligue o sistema e desconecte um elemento do pool original; substituindo-o por um nos novos discos.
  2. Ligue e crie um novo pool com o novo disco único
  3. use o rsync para mover os dados em vez de zpool recv
  4. exporta os dois pools
  5. importe o novo pool usando o nome antigo
  6. desligue e substitua a outra unidade antiga por uma nova
  7. ligue e conecte a nova unidade ao novo pool.

Infelizmente, o sistema se recusou a esquecer a antiga piscina. Eu movi isso para uma nova pergunta: Como removo um pool do ZFS?

    
por Gareth 06.06.2013 / 16:54