Esta seção descreve como usar as opções zfs send -I e -R para enviar e receber fluxos de instantâneos mais complexos.
Considere os pontos a seguir ao enviar e receber fluxos de instantâneos do ZFS complexos:
Use a opção zfs send -I para enviar todos os fluxos incrementais de um instantâneo para um instantâneo cumulativo. Ou, utilize esta opção para enviar um fluxo incremental do instantâneo original para criar um clone. O instantâneo original já deve existir no lado de recepção para aceitar o fluxo incremental.
Use a opção zfs send -R para enviar um fluxo de replicação de todos os sistemas de arquivos descendentes. Quando o fluxo de replicação é recebido, todas as propriedades, instantâneos, sistemas de arquivo descendentes e clones são preservados.
Utilize ambas opções para enviar um fluxo de replicação incremental.
As alterações feitas às propriedades são preservadas, assim como as operações rename e destroy do instantâneo e do sistema de arquivos.
Se zfs recv -F não for especificado ao receber o fluxo de replicação, as operações destroy do conjunto de dados são ignoradas. A sintaxe de zfs recv -F neste caso também retém seu significado de reversão se necessário.
Como em outros casos (não zfs send -R) - i ou -I, se -I for usado, todos os instantâneos entre snapA e snapD são enviados. Se -i é utilizado, apenas snapD (para todos os descendentes) são enviados.
Para receber qualquer um desses novos tipos de fluxos do zfs send, o sistema destinatário deve executar uma versão do software capaz de enviá-los. A versão de fluxo é incrementada.
No entanto, você pode acessar os fluxos a partir das versões mais antigas do pool usando uma versão mais recente do software. Por exemplo, você pode enviar e receber os fluxos criados com as opções mais recentes para e de um pool de versão 3. Porém, você deve executar um software recente para receber um fluxo enviado com as opções mais recentes.
É possível combinar um grupo de instantâneos incrementais em um instantâneo usando a opçãozfs send -I. Por exemplo:
# zfs send -I pool/fs@snapA pool/fs@snapD > /snaps/fs@all-I |
Então, deve-se remover snapB, snapC e snapD.
# zfs destroy pool/fs@snapB # zfs destroy pool/fs@snapC # zfs destroy pool/fs@snapD |
Para receber o instantâneo combinado, utilize o comando a seguir.
# zfs receive -d -F pool/fs < /snaps/fs@all-I # zfs list NAME USED AVAIL REFER MOUNTPOINT pool 428K 16.5G 20K /pool pool/fs 71K 16.5G 21K /pool/fs pool/fs@snapA 16K - 18.5K - pool/fs@snapB 17K - 20K - pool/fs@snapC 17K - 20.5K - pool/fs@snapD 0 - 21K - |
Você também pode usar o comando zfs send -I para combinar um instantâneo e um instantâneo de clone a fim de criar um conjunto de dados combinado. Por exemplo:
# zfs create pool/fs # zfs snapshot pool/fs@snap1 # zfs clone pool/fs@snap1 pool/clone # zfs snapshot pool/clone@snapA # zfs send -I pool/fs@snap1 pool/clone@snapA > /snaps/fsclonesnap-I # zfs destroy pool/clone@snapA # zfs destroy pool/clone # zfs receive -F pool/clone < /snaps/fsclonesnap-I |
Utilize o comando zfs send -R para replicar um sistema de arquivos ZFS e todos os sistemas de arquivos descendentes, até o instantâneo nomeado. Quando este fluxo é recebido, todas as propriedades, instantâneos, sistemas de arquivo descendentes e clones são preservados.
No exemplo seguinte, são criados instantâneos para os sistemas de arquivos do usuário. Um fluxo de replicação é criado para todos os instantâneos do usuário. A seguir, os instantâneos e sistemas de arquivos originais são destruídos e, então, recuperados.
# zfs snapshot -r users@today # zfs list NAME USED AVAIL REFER MOUNTPOINT users 187K 33.2G 22K /users users@today 0 - 22K - users/user1 18K 33.2G 18K /users/user1 users/user1@today 0 - 18K - users/user2 18K 33.2G 18K /users/user2 users/user2@today 0 - 18K - users/user3 18K 33.2G 18K /users/user3 users/user3@today 0 - 18K - # zfs send -R users@today > /snaps/users-R # zfs destroy -r users # zfs receive -F -d users < /snaps/users-R # zfs list NAME USED AVAIL REFER MOUNTPOINT users 196K 33.2G 22K /users users@today 0 - 22K - users/user1 18K 33.2G 18K /users/user1 users/user1@today 0 - 18K - users/user2 18K 33.2G 18K /users/user2 users/user2@today 0 - 18K - users/user3 18K 33.2G 18K /users/user3 users/user3@today 0 - 18K - |
No exemplo a seguir, o comando zfs send -R foi utilizado para replicar o conjunto de dados users e seus descendentes, e enviar o fluxo replicado para outro conjunto, users2.
# zfs create users2 mirror c0t1d0 c1t1d0 # zfs receive -F -d users2 < /snaps/users-R # zfs list NAME USED AVAIL REFER MOUNTPOINT users 224K 33.2G 22K /users users@today 0 - 22K - users/user1 33K 33.2G 18K /users/user1 users/user1@today 15K - 18K - users/user2 18K 33.2G 18K /users/user2 users/user2@today 0 - 18K - users/user3 18K 33.2G 18K /users/user3 users/user3@today 0 - 18K - users2 188K 16.5G 22K /users2 users2@today 0 - 22K - users2/user1 18K 16.5G 18K /users2/user1 users2/user1@today 0 - 18K - users2/user2 18K 16.5G 18K /users2/user2 users2/user2@today 0 - 18K - users2/user3 18K 16.5G 18K /users2/user3 users2/user3@today 0 - 18K - |
Os comandos zfs send e zfs recv podem ser usados para copiar remotamente uma representação de fluxo do instantâneo de um sistema a outro. Por exemplo:
# zfs send tank/cindy@today | ssh newsys zfs recv sandbox/restfs@today |
Este comando envia os dados do instantâneo tank/cindy@today e os recebe no sistema de arquivos sandbox/restfs. O comando também cria um instantâneo restfs@today no sistema newsys. Neste exemplo, o usuário foi configurado para que use ssh no sistema remoto.