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 |