O comando zfs send cria uma representação do fluxo de um instantâneo gravado em uma saída padrão. Por padrão, um fluxo inteiro é gerado. Você pode redirecionar a saída para um arquivo ou para outro sistema. O comando zfs receive cria um instantâneo cujo conteúdo está especificado no fluxo fornecido na entrada padrão. Se um fluxo inteiro for recebido, um novo sistema de arquivos também é criado. Com estes comandos, é possível enviar os dados do instantâneo do ZFS e receber os dados do instantâneo e os sistemas de arquivos ZFS. Consulte os exemplos nesta seção.
Estão disponíveis as seguintes soluções de backup para salvamento de dados do ZFS:
Produtos de backup da empresa: se precisar dos recursos a seguir, então considere uma solução de backup de empresa:
Restauração por arquivo
Verificação da mídia de backup
Gerenciamento de mídia
Instantâneos de sistemas de arquivos e reversão de instantâneos: utilize os comandos zfs snapshot e zfs rollback se desejar criar facilmente uma cópia de um sistema de arquivos e reverter para uma versão anterior do sistema de arquivos, se necessário. Por exemplo, para restaurar um arquivo ou arquivos de uma versão anterior de um sistema de arquivos, você poderia utilizar esta solução.
Para obter mais informações sobre a criação e reversão de um instantâneo, consulte Visão geral dos instantâneos do ZFS.
Salvar instantâneos – Use os comandos zfs send e zfs receive para enviar e receber um instantâneo do ZFS. Você pode salvar alterações incrementais entre instantâneos, mas não pode restaurar os arquivos individualmente. Você deve restaurar o instantâneo de todo o sistema de arquivos. Estes comandos não oferecem uma solução de backup completa para salvar dados do ZFS.
Replicação remota: utilize os comandos zfs send e zfs receive para copiar um sistema de arquivos de um sistema a outro. Este processo difere do produto de gerenciamento de volumes que pode espelhar os dispositivos através de uma WAN. Não é necessário nenhum hardware ou configuração especial. A vantagem da replicação de um sistema de arquivos ZFS é que você pode recriar um sistema de arquivos em um pool de armazenamento de outro sistema e especificar diferentes níveis de configuração para o pool recém-criado, tal como RAID-Z, mas com os dados de sistema de arquivos idênticos.
Utilitários de arquivo – Salvar dados do ZFS com utilitários de arquivos como tar, cpio e pax ou produtos de backup de terceiros. Atualmente, os comandos tar e cpio traduzem as ACLs de estilo NFSv4 corretamente, mas o comando pax não.
Além dos comandos zfs send e zfs receive, você também pode usar utilitários de arquivo, como os comandos tar e cpio, para salvar os arquivos ZFS. Estes utilitários salvam e restauram ACLs e atributos do arquivo do ZFS. Verifique as opções adequadas para os comandos tar e cpio.
Para obter informações atualizadas sobre problemas com o ZFS e produtos de backup de terceiros, consulte as notas da versão do Solaris 10 ou o FAQ do ZFS, disponível aqui:
http://hub.opensolaris.org/bin/view/Community+Group+zfs/faq/#backupsoftware
Você pode utilizar o comando zfs send para enviar uma cópia de um fluxo de instantâneo e receber o fluxo de instantâneo em outro conjunto do mesmo sistema ou em outro conjunto de outro sistema utilizado para armazenar dados de backup. Por exemplo, para enviar o fluxo de instantâneo de outro conjunto do mesmo sistema, utilize uma sintaxe semelhante à seguinte:
# zfs send tank/data@snap1 | zfs recv spool/ds01 |
O zfs recv pode ser usado como um alias do comando zfs receive.
Se estiver enviando o fluxo de instantâneo a outro sistema, conduza a saída de zfs send através do comando ssh. Por exemplo:
host1# zfs send tank/dana@snap1 | ssh host2 zfs recv newtank/dana |
Ao enviar um fluxo completo, o sistema de arquivos de destino não deve existir.
É possível salvar dados incrementais usando a opção i do -zfs send . Por exemplo:
host1# zfs send -i tank/dana@snap1 tank/dana@snap2 | ssh host2 zfs recv newtank/dana |
Observe que o primeiro argumento (snap1) é o instantâneo mais antigo e o segundo (snap2) é o instantâneo mais recente. Nesse caso, o sistema de arquivos newtank/dana deve existir para que o recebimento incremental tenha êxito.
A origem do snap1 incremental pode ser especificada como o último componente do nome do instantâneo. Este atalho significa que é necessário especificar o nome do snap1 somente depois do símbolo @, que se supõe ser do mesmo sistema de arquivos que o snap2. Por exemplo:
host1# zfs send -i snap1 tank/dana@snap2 > ssh host2 zfs recv newtank/dana |
Esta sintaxe de atalho é equivalente à sintaxe incremental no exemplo anterior.
Se você tentar gerar um fluxo incremental do instantâneo1 de um sistema de arquivos diferente, é exibida a seguinte mensagem:
cannot send 'pool/fs@name': not an earlier snapshot from the same fs |
Se precisar restaurar várias cópias, considere compactar uma representação de fluxo de instantâneo do ZFS com o comando gzip. Por exemplo:
# zfs send pool/fs@snap | gzip > backupfile.gz |
Leve em consideração as seguintes questões ao receber um instantâneo de um sistema de arquivos:
O instantâneo e o sistema de arquivos são recebidos.
O sistema de arquivos e todos os sistemas de arquivos descendentes são desmontados.
Os sistemas de arquivos não podem ser acessados enquanto estiverem sendo recebidos.
O sistema de arquivos original que será recebido não deve existir enquanto estiver sendo recebido.
Se um sistema de arquivos com o mesmo nome já existir, é possível utilizar o comando zfs rename para renomear o sistema de arquivos.
Por exemplo:
# zfs send tank/gozer@0830 > /bkups/gozer.083006 # zfs receive tank/gozer2@today < /bkups/gozer.083006 # zfs rename tank/gozer tank/gozer.old # zfs rename tank/gozer2 tank/gozer |
Se fizer uma alteração no sistema de arquivos de destino, e quiser efetuar outro envio incremental de um instantâneo, é necessário, primeiramente, reverter o sistema de arquivos receptor.
Considere o seguinte exemplo. Primeiro, faça uma alteração ao sistema de arquivos, como segue:
host2# rm newtank/dana/file.1 |
Então, efetue um envio incremental de tank/dana@snap3. No entanto, é necessário reverter o sistema de arquivos receptor para receber o novo instantâneo incremental. Ou então, a etapa de reversão pode ser eliminada utilizando a opção -F . Por exemplo:
host1# zfs send -i tank/dana@snap2 tank/dana@snap3 | ssh host2 zfs recv -F newtank/dana |
Quando um instantâneo incremental é recebido, o sistema de arquivos de destino já dever existir.
Se fizer alterações ao sistema de arquivos e não reverter o sistema de arquivos receptores para receber o novo instantâneo incremental ou não utilizar a opção -F, será exibida uma mensagem similar à seguinte:
host1# zfs send -i tank/dana@snap4 tank/dana@snap5 | ssh host2 zfs recv newtank/dana cannot receive: destination has been modified since most recent snapshot |
As verificações seguintes são realizadas antes que a opção -F seja realizada:
Se o instantâneo mais recente não corresponder à fonte incremental, nem a reversão nem o recebimento são concluídos e uma mensagem de erro é devolvida.
Se acidentalmente for fornecido o nome de um sistema de arquivos diferentes que não correspondem à fonte incremental especificada no comando zfs receive, nem a reversão e nem o recebimento são concluídos e a seguinte mensagem de erro é devolvida:
cannot send 'pool/fs@name': not an earlier snapshot from the same fs |
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.