Um clone em ZFS é um clone do snapshot. Não podemos editar um snapshot pois ele é apenas leitura, mas o clone é editável. Podemos adicionar, excluir, editar arquivos dentro dele.
O snaphost é a origem do clone. Só conseguimos destruir um snapshot se não houver clones vinculados. Devemos destruir o clone para poder destruir o snapshot.
Criar clone é praticamente instantâneo e não consome espaço adicional inicialmente. Durante alterações de dados no clone ele começará a consumir espaço separado do snapshot.
Meu Atual Ambiente
tenho o pool “meuPool”
elder@server01:~$ sudo zpool list NAME SIZE ALLOC FREE CKPOINT EXPANDSZ FRAG CAP DEDUP HEALTH ALTROOT meuPool 160M 23,0M 137M - - 7% 14% 1.00x ONLINE -
Tenho o dataset “meuPool/documentos”
elder@server01:~$ sudo zfs list NAME USED AVAIL REFER MOUNTPOINT meuPool 198K 79,7M 24K /meuPool meuPool/documentos 24K 79,7M 24K /meuPool/documentos
Vamos criar alguns arquivos dentro do dataset
elder@server01:~$ touch /meuPool/documentos/arquivos{1..7}.txt
elder@server01:~$ ls -1 /meuPool/documentos/ arquivos1.txt arquivos2.txt arquivos3.txt arquivos4.txt arquivos5.txt arquivos6.txt arquivos7.txt
Criando Snapshot meu Pool/documentos
elder@server01:~$ sudo zfs snapshot meuPool/documentos@08_02_2021
listando o snapshot
elder@server01:~$ sudo zfs list -t snapshot NAME USED AVAIL REFER MOUNTPOINT meuPool/documentos@08_02_2021 0B - 25K -
Criando um Clone do Snapshot
Criarei um clone do snapshot “meuPool/documentos@08_02_2021” e darei o nome de “documentosClone”
elder@server01:~$ sudo zfs clone meuPool/documentos@08_02_2021 meuPool/documentosClone
Vamos listar os datasets e veremos que o clone estará visível
elder@server01:~$ sudo zfs list NAME USED AVAIL REFER MOUNTPOINT meuPool 251K 79,7M 24K /meuPool meuPool/documentos 38K 79,7M 25K /meuPool/documentos meuPool/documentosClone 15K 79,7M 25K /meuPool/documentosClone
Liste as montagens e veja que o clone foi montado automaticamente
elder@server01:~$ df -hT Sist. Arq. Tipo Tam. Usado Disp. Uso% Montado em ....... meuPool zfs 80M 128K 80M 1% /meuPool meuPool/documentos zfs 80M 128K 80M 1% /meuPool/documentos meuPool/documentosClone zfs 80M 128K 80M 1% /meuPool/documentosClone
Veja os arquivos
elder@server01:~$ ls -1 /meuPool/documentosClone/ arquivos1.txt arquivos2.txt arquivos3.txt arquivos4.txt arquivos5.txt arquivos6.txt arquivos7.txt
vamos criar outros arquivos dentro do clone e ver o resultado
elder@server01:~$ touch /meuPool/documentosClone/documentos{1..5}.txt elder@server01:~$ ls -1 /meuPool/documentosClone/ arquivos1.txt arquivos2.txt arquivos3.txt arquivos4.txt arquivos5.txt arquivos6.txt arquivos7.txt documentos1.txt documentos2.txt documentos3.txt documentos4.txt documentos5.txt
Sabemos que os snapshots ficam dentro da pasta inicial/raiz de onde eles foram criados. Vamos visualizar o conteúdo do snapshot
elder@server01:~$ ls -1 /meuPool/documentos/.zfs/snapshot/08_02_2021/ arquivos1.txt arquivos2.txt arquivos3.txt arquivos4.txt arquivos5.txt arquivos6.txt arquivos7.txt
Vamos tentar criar um arquivo dentro do snapshot
elder@server01:~$ touch /meuPool/documentos/.zfs/snapshot/08_02_2021/teste.txt touch: não foi possível tocar '/meuPool/documentos/.zfs/snapshot/08_02_2021/teste.txt': Sistema de arquivos somente para leitura
Em vermelho acima vemos que: “Sistema de arquivos somente para leitura”
Destruindo o Clone
Liste os DataSets
elder@server01:~$ sudo zfs list NAME USED AVAIL REFER MOUNTPOINT meuPool 251K 79,7M 24K /meuPool meuPool/documentos 38K 79,7M 25K /meuPool/documentos meuPool/documentosClone 15K 79,7M 25K /meuPool/documentosClone
Destrua o clone “meuPool/documentosClone”
elder@server01:~$ sudo zfs destroy meuPool/documentosClone
Conclusão
Vimos como como criar um clone e destruí-lo. Também aprendemos que o clone é editável e independente do snapshot do qual ele foi criado; podemos excluir, alterar e adicionar dados dentro do clone sem afetar o snapshot.
O snapshot é uma imagem de um sistema de arquivos e não é editável, é apenas leitura.