Migração de disco on-line do ZFS

Migração de disco on-line do ZFS

Gostaria de saber se o ZFS pode lidar com o seguinte. Digamos que eu tenha o FreeBSD instalado em um zpool com dois discos físicos de 500 GB em uma configuração espelhada. Eles formam a partição raiz, portanto, apenas um máximo de 20 GB está sendo usado.

Mais tarde, eu gostaria de substituir os discos físicos por dois pequenos SSDs em uma configuração espelhada. Existe uma maneira de fazer isso on-line? Minha ideia era adicionar esses discos ao zpool como espelhos extras, aguardar a conclusão do resilvering e então remover as unidades antigas. O problema é que esses novos discos seriam menores que os originais.

Uma ideia que tive foi particionar apenas as unidades de 500 GB, de modo que o ZFS obtivesse apenas, digamos, 30 GB de espaço em cada disco físico, sendo o restante desperdiçado. Dessa forma os SSDs teriam mais espaço, então não chegaria a um problema de encolhimento. O problema é que desta forma preciso estimar antecipadamente o tamanho dos futuros discos de substituição. Há alguma maneira de evitar isto?

Responder1

Você está certo de que se o vdev for o disco inteiro, quando você mudar para SSDs eles teriam que ter pelo menos esse tamanho, você não pode "reduzir" para discos menores (é claro que você pode aumentar para discos maiores). Você também está certo ao dizer que pode usar partições para que os vdevs sejam menores que os futuros SSDs e você teria que adivinhar o tamanho desses SSDs.

Alternativamente, se o servidor puder acomodar todos os 4 discos ao mesmo tempo, mesmo por um curto período de tempo, você poderá criar o zpool da maneira que desejar agora e usar enviar/receber para transferir os dados para os novos SSDs. Isso requer que todos os dispositivos estejam conectados ao mesmo tempo. Uma pequena advertência: a operação de envio/recebimento só pode enviar a partir de um instantâneo - portanto, você não pode duplicar um disco "ativo" e precisará fazer acomodações para isso (o tempo de inatividade pode ser bastante curto, adicionando um pouco de complexidade).

Ainda mais complicado, é possível armazenar o "envio" para um arquivo intermediário em outro disco em algum lugar e depois "receber" a partir dele. Portanto, você só precisa de 3 discos no servidor por vez. E mais complicado ainda, os 4 discos podem estar em servidores diferentes e o envio/recebimento pode ser canalizado através de ssh ou até mesmo netcat.

Responder2

Não consigo pensar em nenhuma maneira óbvia de fazer isso.

Por enquanto, visto que você precisa particionar os discos raiz de qualquer maneira (para adicionar o código de inicialização), e isso não parece algo que deveria acontecer com frequência, sugiro apenas criar uma partição pequena (<20 GB) para o pool raiz. Se precisar de espaço extra, você pode criar um segundo pool com o espaço restante. Quando se trata de colocar os SSDs, basta particioná-los, adicionar o código de inicialização, 'zfs anexar' eles ao pool raiz e, em seguida, 'zfs detach' os originais (ou 'zfs replace' em vez de 'zfs attachment' e 'zfs detach' ).

informação relacionada