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.