Guia de administração do ZFS Oracle Solaris

Criando e destruindo instantâneos 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.

Contendo instantâneos do 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:

Renomeando instantâneos do ZFS

É 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  -