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 |