Mover um sistema de arquivos ZFS de um pool para outro

12

Estou estendendo um servidor Solaris 10 U8 com um pool de armazenamento extra além do rpool de raiz.

Qual é a maneira mais eficaz / simples / confiável de mover determinado (s) sistema (s) de arquivos ZFS do rpool para este novo conjunto de armazenamento?

Isso pode ser feito on-line ou eu deveria desligar os serviços usando esses pools primeiro?

    
por Asgeir S. Nilsen 26.11.2009 / 20:02

4 respostas

13

A questão sobre a desativação de serviços depende essencialmente dos serviços em si:

  • Eles estão escrevendo ativamente no sistema de arquivos que você planeja mover?
  • Eles estão armazenando dados persistentes que você deseja manter.

Em qualquer caso, o envio de um sistema de arquivos ZFS pode levar um longo tempo. É possível minimizar a indisponibilidade do serviço, mantendo-os on-line na maior parte do tempo:

  • crie um instantâneo
  • envia esse instantâneo da maneira sugerida anteriormente, mas mantendo todos os serviços ativos
  • quando o fs é recebido no outro conjunto, desative os limites de serviços críticos para esse sistema de arquivos. Certifique-se de que o novo sistema de arquivos no pool de destino não seja modificado, pois as alterações serão descartadas posteriormente de qualquer maneira.
  • crie um segundo instantâneo (por exemplo, snapshot2)
  • envia esse segundo instantâneo incrementalmente, que será muito mais rápido que a transferência anterior. por exemplo:

    zfs send -i rpool/filesystem@snapshot rpool/filesystem@snapshot2 | zfs receive -F destinationpool/filesystem

  • quando terminar, mova o ponto de montagem do sistema de arquivos do conjunto de dados antigo para o novo. por exemplo:

    zfs set mountpoint=/application/directory.old rpool/filesystem
    

    zfs set mountpoint=/application/directory destination/filesystem

Você precisa garantir que nenhum processo esteja vinculado a /application/filesystem (por exemplo, acessando arquivos ou tendo o diretório atual) para conseguir isso.

  • reative o (s) serviço (s) e você está pronto.
por 27.11.2009 / 02:32
9

Eu não acho que isso pode ser feito online, mas meu processo seria desligar os serviços necessários, tirar um instantâneo e usar o zfs send / receive para fazer a migração. Algo como:

zfs send rpool/filesystem@snapshot | zfs receive destinationpool/filesystem

Editar:

Se você instalar o comando "pipe view" (pv), poderá monitorar o status da transferência com:

zfs send rpool/filesystem@snapshot | pv | zfs receive destinationpool/filesystem
    
por 26.11.2009 / 20:11
9

Estou repetindo muito do que jlliagre disse, mas com acréscimos para sistemas de arquivos descendentes. (Principalmente, eu tenho uma referência quando eu esqueço).

Se você tiver sistemas de sub-arquivos, use o sinal -r no comando zfs snapshot e o sinal -r ou -R no comando zfs send . A maiúscula -R move todas as propriedades , instantâneos e clones.

Para mover um conjunto inteiro:

zfs snapshot -r sourcepool@moving
zfs send -R sourcepool@moving | zfs receive -F destpool

para sincronizar as alterações para um período de migração mais curto desligar aplicativos, desligar o samba, nfs

zfs snapshot -r sourcepool@moving2
zfs send -Ri sourcepool@moving sourcepool@moving2 | zfs receive -F destpool

Se você estiver criando vários instantâneos intermediários para a migração, leia a página do manual sobre a opção zfs send -I .

    
por 31.03.2012 / 02:00
4

Você também encontrará algum benefício ao usar uma ferramenta como "mbuffer" no pipeline; aparentemente, o desempenho de envio / recebimento do ZFS melhora drasticamente se ambas as extremidades puderem transmitir dados continuamente, e sem o mbuffer (ou algo similar) você obtém um efeito de pingue-pongue onde um bloqueia continuamente no outro.

    
por 24.11.2015 / 17:14

Tags