Este capítulo descreve como criar e gerenciar instantâneos e clones do ZFS do Oracle Solaris. Também são fornecidas informações sobre como salvar instantâneos.
Este capítulo traz as seguintes seções:
Um instantâneo é uma cópia de somente leitura de um sistema de arquivos ou volume. Os instantâneos podem ser criados quase que instantaneamente e, no início, não utilizam espaço adicional em disco dentro do conjunto. No entanto, à medida em que os dados são alterados dentro do conjunto de dados ativo, o instantâneo passa a consumir espaço em disco devido às contínuas referências aos dados antigos e impede, consequentemente, a liberação de espaço.
Os instantâneos do ZFS contam com os seguintes recursos:
Resistência a reinicializações do sistema.
O número máximo de instantâneos é teoricamente 264.
Os instantâneos não utilizam armazenamento de apoio separado. Os instantâneos utilizam espaço em disco diretamente do mesmo conjunto de armazenamento que o sistema de arquivos ou volume a partir do qual foram criados.
Os instantâneos recursivos são criados rapidamente como uma operação atômica. Os instantâneos são criados juntos (todos de uma vez) ou simplesmente não são criados. O benefício das operações de instantâneos atômicos é que os dados do instantâneo são sempre retirados em um momento consistente, mesmo nos sistemas de arquivos descendentes.
Os instantâneos de volumes não podem ser acessados diretamente, mas podem ser clonados, revertidos, ter um backup, e assim por diante. Para obter mais informações sobre o backup de um instantâneo do ZFS, consulte Enviando e recebendo dados do ZFS.
Os instantâneos são criados com o comando zfs snapshot, que apresenta o nome do instantâneo a ser criado como seu único argumento. O nome do instantâneo é especificado da seguinte forma:
filesystem@snapname volume@snapname |
O nome do instantâneo deve estar de acordo com os requisitos de identificação em Requisitos para nomeação de componentes do ZFS.
No exemplo seguinte, é criado um instantâneo de tank/home/ahrens denominado friday.
# zfs snapshot tank/home/ahrens@friday |
É possível criar instantâneos para todos os sistemas de arquivos descendentes com a opção - r. Por exemplo:
# zfs snapshot -r tank/home@now # zfs list -t snapshot NAME USED AVAIL REFER MOUNTPOINT rpool/ROOT/zfs2BE@zfs2BE 78.3M - 4.53G - tank/home@now 0 - 26K - tank/home/ahrens@now 0 - 259M - tank/home/anne@now 0 - 156M - tank/home/bob@now 0 - 156M - tank/home/cindys@now 0 - 104M - |
Os instantâneos não possuem propriedades que possam ser modificadas. E as propriedades do conjunto de dados também não podem ser aplicadas a um instantâneo. Por exemplo:
# zfs set compression=on tank/home/ahrens@now cannot set compression property for 'tank/home/ahrens@now': snapshot properties cannot be modified |
Os instantâneos são destruídos com o comando zfs destroy. Por exemplo:
# zfs destroy tank/home/ahrens@now |
Um conjunto de dados não pode ser destruído se existirem instantâneos deste conjunto de dados. Por exemplo:
# zfs destroy tank/home/ahrens cannot destroy 'tank/home/ahrens': filesystem has children use '-r' to destroy the following datasets: tank/home/ahrens@tuesday tank/home/ahrens@wednesday tank/home/ahrens@thursday |
Além disso, se foram criados clones de um instantâneo, tais clones devem ser destruídos antes que o instantâneo seja destruído.
Para obter mais informações sobre o subcomando destroy, consulte Destruindo um sistema de arquivos ZFS.
Se você possui uma política de instantâneo automático diferente, na qual instantâneos mais antigos estão sendo destruídos sem aviso pelo zfs receive por não existirem mais no lado de envio, é possível utilizar a função de contenção de instantâneos.
Conter um instantâneo evita que ele seja destruído. Além disso, este recurso permite que instantâneos com clones possam ser excluídos enquanto a remoção do último clone está pendente utilizando o comando zfs destroy - d. Cada instantâneo possui uma contagem associada para referência do usuário, inicializada no zero. Esta contagem aumenta de um em um quando uma contenção é colocada em um instantâneo e diminui de um em um quando uma contenção é liberada.
Na versão anterior do Solaris, instantâneos poderiam ser destruídos apenas através do comando zfs destroy se esses não tivessem clones. Nesta versão do Solaris, o instantâneo também deve possuir uma contagem para referência do usuário em zero.
É possível conter um instantâneo ou conjunto de instantâneos. Por exemplo, a sintaxe a seguir põe uma marcação para conter, manter, em tank/home/cindys/snap@1 .
# zfs hold keep tank/home/cindys@snap1 |
É possível utilizar a opção -r como recurso para conter os instantâneos de todos os sistemas de arquivos descendentes. Por exemplo:
# zfs snapshot -r tank/home@now # zfs hold -r keep tank/home@now |
Esta sintaxe adiciona uma única referência, manter, ao instantâneo ou ao conjunto de instantâneos. Cada instantâneo possui sua própria marcação do espaço de nome e as marcações de contenção devem ser únicas no espaço. Se existir uma contenção em um instantâneo, as tentativas para destruir o instantâneo contido através do comando zfs destroy falharão. Por exemplo:
# zfs destroy tank/home/cindys@snap1 cannot destroy 'tank/home/cindys@snap1': dataset is busy |
Se deseja destruir um instantâneo contido, utilize a opção -d. Por exemplo:
# zfs destroy -d tank/home/cindys@snap1 |
Utilize o comando zfs holds para exibir uma lista de instantâneos contidos. Por exemplo:
# zfs holds tank/home@now NAME TAG TIMESTAMP tank/home@now keep Thu Jul 15 11:25:39 2010 |
# zfs holds -r tank/home@now NAME TAG TIMESTAMP tank/home/cindys@now keep Thu Jul 15 11:25:39 2010 tank/home/mark@now keep Thu Jul 15 11:25:39 2010 tank/home@now keep Thu Jul 15 11:25:39 2010 |
É possível utilizar o comando zfs release para liberar a contenção de um instantâneo ou de um conjunto de instantâneos. Por exemplo:
# zfs release -r keep tank/home@now |
Se uma contenção for liberada, o instantâneo pode ser destruído através do comando zfs destroy. Por exemplo:
# zfs destroy -r tank/home@now |
Duas novas propriedades identificam as informações de contenção de instantâneos:
A propriedade defer_destroy está on se o instantâneo foi marcado para destruição adiada utilizando o comando zfs destroy -d. Caso contrário, a propriedade está off.
A propriedade userrefs está definida para o número de contenções do instantâneo, também chamada de contagem para referência do usuário.
É possível renomear instantâneos, porém eles devem ser renomeados dentro do conjunto e do conjunto de dados a partir do qual foram criados. Por exemplo:
# zfs rename tank/home/cindys@083006 tank/home/cindys@today |
Além disso, a sintaxe do atalho a seguir é equivalente à sintaxe anterior:
# zfs rename tank/home/cindys@083006 today |
A operação rename de instantâneo a seguir não é suportada porque o conjunto de destino e o nome do sistema de arquivos são diferentes do conjunto e do sistema de arquivos onde o instantâneo foi criado:
# zfs rename tank/home/cindys@today pool/home/cindys@saturday cannot rename to 'pool/home/cindys@today': snapshots must be part of same dataset |
Como recurso, é possível renomear instantâneos com o comando zfs rename - r. Por exemplo:
# zfs list NAME USED AVAIL REFER MOUNTPOINT users 270K 16.5G 22K /users users/home 76K 16.5G 22K /users/home users/home@yesterday 0 - 22K - users/home/markm 18K 16.5G 18K /users/home/markm users/home/markm@yesterday 0 - 18K - users/home/marks 18K 16.5G 18K /users/home/marks users/home/marks@yesterday 0 - 18K - users/home/neil 18K 16.5G 18K /users/home/neil users/home/neil@yesterday 0 - 18K - # zfs rename -r users/home@yesterday @2daysago # zfs list -r users/home NAME USED AVAIL REFER MOUNTPOINT users/home 76K 16.5G 22K /users/home users/home@2daysago 0 - 22K - users/home/markm 18K 16.5G 18K /users/home/markm users/home/markm@2daysago 0 - 18K - users/home/marks 18K 16.5G 18K /users/home/marks users/home/marks@2daysago 0 - 18K - users/home/neil 18K 16.5G 18K /users/home/neil users/home/neil@2daysago 0 - 18K - |
Você pode ativar ou desativar a exibição das listas de instantâneos na saída zfs list usando a propriedade listsnapshots do pool. Esta propriedade está ativada por padrão.
Se desativar esta propriedade, você pode usar o comando zfs list -t snapshot para exibir as informações do instantâneo. Ou, ative a propriedade listsnapshots do pool. Por exemplo:
# zpool get listsnapshots tank NAME PROPERTY VALUE SOURCE tank listsnapshots on default # zpool set listsnapshots=off tank # zpool get listsnapshots tank NAME PROPERTY VALUE SOURCE tank listsnapshots off local |
Os instantâneos de sistemas de arquivos podem ser acessados no diretório .zfs/snapshot dentro da raiz do sistema de arquivos. Por exemplo, se tank/home/ahrens estiver montado em /home/ahrens, então os dados do instantâneo tank/home/ahrens@thursday poderão ser acessados no diretório /home/ahrens/.zfs/snapshot/thursday .
# ls /tank/home/ahrens/.zfs/snapshot tuesday wednesday thursday |
Os instantâneos podem ser listados da seguinte forma:
# zfs list -t snapshot NAME USED AVAIL REFER MOUNTPOINT pool/home/anne@monday 0 - 780K - pool/home/bob@monday 0 - 1.01M - tank/home/ahrens@tuesday 8.50K - 780K - tank/home/ahrens@wednesday 8.50K - 1.01M - tank/home/ahrens@thursday 0 - 1.77M - tank/home/cindys@today 8.50K - 524K - |
Os instantâneos criados para um sistema de arquivos específico podem ser listados da seguinte forma:
# zfs list -r -t snapshot -o name,creation tank/home NAME CREATION tank/home@now Wed Jun 30 16:16 2010 tank/home/ahrens@now Wed Jun 30 16:16 2010 tank/home/anne@now Wed Jun 30 16:16 2010 tank/home/bob@now Wed Jun 30 16:16 2010 tank/home/cindys@now Wed Jun 30 16:16 2010 |
Quando um instantâneo é criado, seu espaço em disco é inicialmente compartilhado entre o instantâneo e o sistema de arquivos e, possivelmente, com os instantâneos anteriores. À medida que o sistema de arquivos é alterado, o espaço em disco previamente compartilhado torna-se exclusivo do instantâneo e é incluído na propriedade used do instantâneo. Além disso, a exclusão de instantâneos pode aumentar a quantidade de espaço em disco exclusivo de (e conseqüentemente ser utilizado por) outros instantâneos.
A propriedade referenced de espaço do instantâneo é a mesma que o sistema de arquivos tinha no momento em que o instantâneo foi criado.
É possível identificar informações adicionais sobre como os valores da propriedade used são consumidos. Novas propriedades de sistema de arquivos de somente leitura descrevem a utilização do espaço em disco para clones, sistemas de arquivos e volumes. Por exemplo:
$ zfs list -o space # zfs list -ro space tank/home NAME AVAIL USED USEDSNAP USEDDS USEDREFRESERV USEDCHILD tank/home 66.3G 675M 0 26K 0 675M tank/home@now - 0 - - - - tank/home/ahrens 66.3G 259M 0 259M 0 0 tank/home/ahrens@now - 0 - - - - tank/home/anne 66.3G 156M 0 156M 0 0 tank/home/anne@now - 0 - - - - tank/home/bob 66.3G 156M 0 156M 0 0 tank/home/bob@now - 0 - - - - tank/home/cindys 66.3G 104M 0 104M 0 0 tank/home/cindys@now - 0 - - - - |
Para obter uma descrição dessas propriedades, consulte a Tabela 6–1.
É possível utilizar o comando zfs rollback para descartar todas as alterações feitas ao sistema de arquivos desde a criação de um instantâneo específico. O sistema de arquivos volta ao estado que se encontrava no momento em que o instantâneo foi realizado. Por padrão, o comando só pode reverter um instantâneo ao instantâneo mais recente.
Para reverter a um instantâneo anterior, todos os instantâneos intermediários devem ser destruídos. Os instantâneos anteriores podem ser destruídos especificando a opção -r.
Se os instantâneos intermediários possuírem clones, a opção -R também deve ser especificada para destruí-los.
Se o sistema de arquivos que deseja reverter estiver atualmente montado, ele será desmontado e remontado. Se o sistema de arquivos não puder ser desmontado, a reversão falhará. A opção -f obriga o sistema de arquivos a ser desmontado, se necessário.
No exemplo abaixo, o sistema de arquivos tank/home/ahrens é revertido ao instantâneo tuesday:
# zfs rollback tank/home/ahrens@tuesday cannot rollback to 'tank/home/ahrens@tuesday': more recent snapshots exist use '-r' to force deletion of the following snapshots: tank/home/ahrens@wednesday tank/home/ahrens@thursday # zfs rollback -r tank/home/ahrens@tuesday |
Neste exemplo, os instantâneos wednesday e thursday são destruídos porque você reverteu para o instantâneo tuesday.
# zfs list -r -t snapshot -o name,creation tank/home/ahrens NAME CREATION tank/home/ahrens@now Wed Jun 30 16:16 2010 |
Um clone é um volume ou um sistema de arquivos gravável cujo conteúdo inicial é o mesmo do conjunto de dados do qual foi criado. Da mesma forma que os instantâneos, a criação de clones é quase instantânea e inicialmente não utiliza espaço em disco adicional. Além disso, você pode realizar o instantâneo de um clone.
Os clones podem ser criados somente a partir de um instantâneo. Quando um instantâneo é clonado, cria-se uma dependência implícita entre o clone e o instantâneo. Mesmo que o clone tenha sido criado em qualquer parte da hierarquia do conjunto de dados, o instantâneo original não poderá ser destruído enquanto tal clone existir. A propriedade origin revela essa dependência e o comando zfs destroy lista tais dependências, se existirem.
Os clones não herdam as propriedades do conjunto de dados do qual foram criados. Use os comandos zfs get e zfs set para ver e alterar as propriedades de um conjunto de dados clonado. Para obter mais informações sobre a configuração das propriedades do conjunto de dados do ZFS, consulte Definindo propriedades do ZFS.
O clone compartilha inicialmente todo o seu espaço em disco com o instantâneo original e, por essa razão, o valor de sua propriedade used é inicialmente zero. O clone passa a utilizar mais espaço em disco à medida que sofre alterações. A propriedade used do instantâneo original não inclui o espaço em disco consumido pelo clone.
Para criar um clone, use o comando zfs clone, especificando o instantâneo a partir do qual criar o clone e o nome do novo sistema de arquivos ou volume. O novo sistema de arquivos ou volume pode ser colocado em qualquer parte da hierarquia do ZFS. O novo conjunto de dados é do mesmo tipo (por exemplo, sistema de arquivos ou volume) que o instantâneo a partir do qual o clone foi criado. É possível criar um clone de um sistema de arquivos em um conjunto diferente daquele no qual se encontra o instantâneo do sistema de arquivos original.
No exemplo a seguir, um novo clone chamado tank/home/ahrens/bug123 com o mesmo conteúdo inicial do instantâneo tank/ws/gate@yesterday é criado:
# zfs snapshot tank/ws/gate@yesterday # zfs clone tank/ws/gate@yesterday tank/home/ahrens/bug123 |
No exemplo abaixo, a partir do instantâneo projects/newproject@today é criada, para um usuário temporário, uma área de trabalho como projects/teamA/tempuser. As propriedades são, então, definidas na área de trabalho clonada.
# zfs snapshot projects/newproject@today # zfs clone projects/newproject@today projects/teamA/tempuser # zfs set sharenfs=on projects/teamA/tempuser # zfs set quota=5G projects/teamA/tempuser |
Os clones do ZFS são eliminados com o comando zfs destroy. Por exemplo:
# zfs destroy tank/home/ahrens/bug123 |
Os clones devem ser destruídos antes da destruição dos instantâneos pais.
O comando zfs promote pode ser usado para substituir um sistema de arquivos ZFS ativo por um clone de um sistema de arquivos. Este recurso permite clonar e substituir os sistemas de arquivos para que o sistema de arquivos original torne-se o clone do sistema de arquivos especificado. Além disso, este recurso possibilita destruir o sistema de arquivos a partir do qual o clone foi originalmente criado. Sem promover o clone, não é possível destruir um sistema de arquivos original de clones ativos. Para obter mais informações sobre a destruição de clones, consulte Destruindo um clone do ZFS.
No exemplo a seguir, o sistema de arquivos tank/test/productA é clonado e, então, o clone do sistema de arquivos, tank/test/productAbeta , torna-se o sistema de arquivos tank/test/productA original.
# zfs create tank/test # zfs create tank/test/productA # zfs snapshot tank/test/productA@today # zfs clone tank/test/productA@today tank/test/productAbeta # zfs list -r tank/test NAME USED AVAIL REFER MOUNTPOINT tank/test 104M 66.2G 23K /tank/test tank/test/productA 104M 66.2G 104M /tank/test/productA tank/test/productA@today 0 - 104M - tank/test/productAbeta 0 66.2G 104M /tank/test/productAbeta # zfs promote tank/test/productAbeta # zfs list -r tank/test NAME USED AVAIL REFER MOUNTPOINT tank/test 104M 66.2G 24K /tank/test tank/test/productA 0 66.2G 104M /tank/test/productA tank/test/productAbeta 104M 66.2G 104M /tank/test/productAbeta tank/test/productAbeta@today 0 - 104M - |
Nesta saída zfs list, note que as informações de contabilidade de espaço em disco do sistema de arquivos productA original foram substituídas pelo sistema de arquivos productAbeta.
É possível completar o processo de substituição de clone renomeando os sistemas de arquivos. Por exemplo:
# zfs rename tank/test/productA tank/test/productAlegacy # zfs rename tank/test/productAbeta tank/test/productA # zfs list -r tank/test |
Opcionalmente, você pode remover o sistema de arquivos de legado. Por exemplo:
# zfs destroy tank/test/productAlegacy |
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.