Pular para o conteúdo

Solaris 11: ZFS Deduplication

Solaris 11: ZFS Deduplication

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.

Ricardo Portilho Proni

Ricardo Portilho Proni

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.

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

plugins premium WordPress