Além da compressão, o ZFS também possui o recurso de deduplicação, que faz com que dois (ou mais) arquivos extamente iguais ocupem apenas o espaço de um.
Irei habilitar este recurso no Pool test, que possui 10GB, e está vazio.
ricardo@solaris:~$ uname -a SunOS solaris 5.11 11.0 i86pc i386 i86pc ricardo@solaris:~$ ls -lh /test/ total 0 ricardo@solaris:~$ df -h /test/ Filesystem Size Used Available Capacity Mounted on test 9.8G 31K 9.8G 1% /test
Antes de popular o Pool com uma massa de dados, verifico e habilito o parâmetro de deduplicação para o Pool.
ricardo@solaris:~$ sudo zfs get dedup test NAME PROPERTY VALUE SOURCE test dedup off local ricardo@solaris:~$ sudo zfs set dedup=on test ricardo@solaris:~$ sudo zfs get dedup test NAME PROPERTY VALUE SOURCE test dedup on local
Agora crio dois diretórios no Pool, e copio um conteúdo para um deles, verificando o espaço utilizado em seguida.
ricardo@solaris:~$ mkdir /test/Docs01 ricardo@solaris:~$ mkdir /test/Docs02 ricardo@solaris:~$ cp -rf Documents/Documentação/ /test/Docs01 ricardo@solaris:~$ du -sh /test/Docs01/ 1.2G /test/Docs01 ricardo@solaris:~$ df -h /test/ Filesystem Size Used Available Capacity Mounted on test 9.8G 1.2G 8.6G 13% /test
Em seguida copio o mesmo conteúdo para o outro diretório.
Com o comando du, verifico que cada um deles ocupa 1.3GB (antes o primeiro ocupava 1.2GB), mas o comando df me mostra que o sistema de arquivos está com 8.5GB livres (antes tinha 8.6GB livres), mas o espaço total cresceu (!) de 9.8GB para 11GB, assim como o espaço utilizado (de 1.2GB para 2.6GB).
ricardo@solaris:~$ cp -rf Documents/Documentação/ /test/Docs02 ricardo@solaris:~$ du -sh /test/Docs01/ 1.3G /test/Docs01 ricardo@solaris:~$ du -sh /test/Docs02/ 1.3G /test/Docs02 ricardo@solaris:~$ df -h /test/ Filesystem Size Used Available Capacity Mounted on test 11G 2.6G 8.5G 24% /test
Executo a cópia mais uma vez, para um terceiro diretório. O sistema de arquivos continua com 8.5GB livres, mas agora ele “cresceu” para 12GB, e o espaço utilizado para 3.9GB.
ricardo@solaris:~$ mkdir /test/Docs03 ricardo@solaris:~$ cp -rf Documents/Documentação/ /test/Docs03 ricardo@solaris:~$ du -sh /test/Docs03/ 1.3G /test/Docs03 ricardo@solaris:~$ df -h /test/ Filesystem Size Used Available Capacity Mounted on test 12G 3.9G 8.5G 32% /test
Isto acontece porque os comandos du e df não são apropriados para tratar a deduplicação do ZFS. Esta verificação deve ser feita com os comandos zfs e zpool, como está abaixo. Veja que o tamanho do Pool está com o tamanho correto (9.94GB), o espaço alocado possui o tamanho de apenas um dos diretórios copiados, e a coluna DEDUP mostra que a deduplicação está em 3.13x (já que temos três diretórios com o mesmo conteúdo).
ricardo@solaris:~$ zfs list test NAME USED AVAIL REFER MOUNTPOINT test 3.92G 8.47G 3.91G /test ricardo@solaris:~$ zpool list test NAME SIZE ALLOC FREE CAP DEDUP HEALTH ALTROOT test 9.94G 1.27G 8.67G 12% 3.13x ONLINE -
E repetindo mais uma vez, com um quarto diretório, a análise continua incorreta pelos comandos du e df, mas correta pelo zlist e zpool. Veja que deduplicação passou para 4.18x.
ricardo@solaris:~$ mkdir /test/Docs04 ricardo@solaris:~$ cp -rf Documents/Documentação/ /test/Docs04 ricardo@solaris:~$ df -h /test/ Filesystem Size Used Available Capacity Mounted on test 14G 5.2G 8.4G 39% /test ricardo@solaris:~$ du -sh /test/Docs04 1.3G /test/Docs04 ricardo@solaris:~$ zfs list test NAME USED AVAIL REFER MOUNTPOINT test 5.22G 8.44G 5.21G /test ricardo@solaris:~$ zpool list test NAME SIZE ALLOC FREE CAP DEDUP HEALTH ALTROOT test 9.94G 1.28G 8.66G 12% 4.18x ONLINE - ricardo@solaris:~$
Imagine os benefícios em um File Server de uma grande empresa, onde é comum existirem várias cópias de um mesmo documento.
Com 20 anos de experiência profissional, Oracle ACE Member – eleito pela Oracle Corporation um dos maiores especialistas do mundo em Oracle Database- Trabalhou em grande parte dos maiores bancos de dados Oracle do Brasil. Certificado em Oracle, SQL Server, DB2, MySQL, Sybase e Websphere.
Conselheiro do GPO e do GUOB, palestrante do ENPO, GUOB Tech Day e Oracle Open World, escritor da Revista SQL Magazine e Instrutor na Nerv.