Tecnicamente, quando você copia/move/cria novos arquivos no seu pool/sistema de arquivos ZFS, os ZFs os dividem em pedaços e comparam esses pedaços com pedaços existentes (dos arquivos) armazenados no Pool ZFS/FileSystem para ver se ele encontrou algum jogo. Portanto, mesmo que partes do arquivo sejam correspondidas, o recurso de desduplicação pode salvar os espaços de disco do seu pool/sistema de arquivos ZFS.
Neste artigo, vou mostrar como ativar a desduplicação em seus pools/sistemas de arquivos ZFS. Então vamos começar.
Índice:
Criando um pool ZFS:
Para experimentar a desduplicação do ZFS, criarei um novo pool de ZFS usando o vdb e VDC dispositivos de armazenamento em uma configuração de espelho. Você pode pular esta seção se você já tiver um pool de ZFS para testar a desduplicação.
$ sudo lsblk -e7
Para criar um novo pool ZFS Pool1 usando o vdb e VDC Dispositivos de armazenamento em configuração espelhada, execute o seguinte comando:
$ sudo zpool create -f pool1 espelho /dev /vdb /dev /vdc
Uma nova piscina do ZFS Pool1 deve ser criado como você pode ver na captura de tela abaixo.
$ sudo zpool status
Ativando a desduplicação nos pools do ZFS:
Nesta seção, vou mostrar como ativar a desduplicação no seu pool ZFS.
Você pode verificar se a desduplicação está ativada no seu pool ZFS Pool1 com o seguinte comando:
$ sudo zfs get dedup pool1
Como você pode ver, a desduplicação não está ativada por padrão.
Para ativar a desduplicação no seu pool ZFS, execute o seguinte comando:
$ sudo zfs set dedup = no pool1
A desduplicação deve ser ativada no seu pool ZFS Pool1 Como você pode ver na captura de tela abaixo.
$ sudo zfs get dedup pool1
Ativando a desduplicação no ZFS FileSystems:
Nesta seção, vou mostrar como ativar a desduplicação em um sistema de arquivos ZFS.
Primeiro, crie um sistema de arquivos ZFS fs1 na sua piscina do ZFS Pool1 do seguinte modo:
$ sudo zfs crie pool1/fs1
Como você pode ver, um novo sistema de arquivos ZFS FS1 é criada.
Lista de $ sudo zfs
Como você ativou a desduplicação na piscina Pool1, A desduplicação também está ativada no sistema de arquivos ZFS fs1 (ZFS FileSystem fs1 herda da piscina Pool1).
$ sudo zfs get dedup pool1/fs1
Como o sistema de arquivos ZFS fs1 herda a desduplicação (Dedup) Propriedade do pool ZFS Pool1, Se você desativar a desduplicação no seu pool ZFS Pool1, A desduplicação também deve ser desativada para o sistema de arquivos ZFS fs1. Se você não quiser, terá que ativar a desduplicação no seu sistema de arquivos ZFS fs1.
Você pode ativar a desduplicação no seu sistema de arquivos ZFS fs1 do seguinte modo:
$ sudo zfs set dedup = no pool1/fs1
Como você pode ver, a desduplicação está ativada para o seu sistema de arquivos ZFS fs1.
Testando a desduplicação do ZFS:
Para simplificar as coisas, vou destruir o sistema de arquivos ZFS fs1 da piscina do ZFS Pool1.
$ sudo zfs destrow pool1/fs1
O sistema de arquivos ZFS fs1 deve ser removido da piscina Pool1.
Eu baixei a imagem ISO do Arch Linux no meu computador. Vamos copiá -lo para o pool do ZFS Pool1.
$ sudo cp -v downloads/archlinux -2021.03.01-X86_64.ISO /Pool1 /Image1.ISO
Como você pode ver, a primeira vez que copiei a imagem ISO do Arch Linux, ela usou sobre 740 MB de espaço em disco do pool ZFS Pool1.
Além disso, observe que a taxa de desduplicação (Dedup) é 1.00x. 1.00x da taxa de desduplicação significa que todos os dados são exclusivos. Então, nenhum dado está desduplicado ainda.
Vamos copiar a mesma imagem ISO do Arch Linux para o pool ZFS Pool1 de novo.
Como você pode ver, apenas 740 MB do espaço em disco é usado, embora estejamos usando o dobro do espaço do disco.
A taxa de desduplicação (Dedup) também aumentou para 2.00x. Isso significa que a desduplicação está economizando metade do espaço em disco.
Lista de $ sudo zpool
Mesmo que sobre 740 MB de espaço físico em disco é usado, logicamente sobre 1.44 GB de espaço em disco é usado no pool ZFS Pool1 Como você pode ver na captura de tela abaixo.
Lista de $ sudo zfs
Vamos copiar o mesmo arquivo para o pool ZFS Pool1 mais algumas vezes.
Como você pode ver, depois que o mesmo arquivo é copiado 5 vezes para o pool do ZFS Pool1, Logicamente, o pool usa sobre 3.59 GB de espaço em disco.
Lista de $ sudo zfs
Mas 5 cópias do mesmo arquivo usam apenas cerca de 739 Mb de espaço em disco do dispositivo de armazenamento físico.
A taxa de desduplicação (Dedup) é cerca de 5 (5.01x). Portanto, a desduplicação economizou cerca de 80% (1-1/dedução) do espaço de disco disponível do pool ZFS Pool1.
Quanto maior o índice de desduplicação (DEDUP) dos dados que você armazenou no seu pool/sistema de arquivos ZFS, mais espaço em disco você está salvando com desduplicação.
Problemas da desduplicação do ZFS:
A desduplicação é um recurso muito bom e economiza muito espaço em disco do seu pool/sistema de arquivos ZFS se os dados que você está armazenando no seu pool/sistema de arquivos ZFS for redundante (o arquivo semelhante é armazenado várias vezes) na natureza.
Se os dados que você está armazenando no seu pool/sistema de arquivos ZFS não tiver muita redundância (quase exclusiva), então a desduplicação não fará nada de bom. Em vez disso, você acabará desperdiçando memória que os ZFs poderiam utilizar para armazenamento em cache e outras tarefas importantes.
Para que a desduplicação do trabalho, o ZFS deve acompanhar os blocos de dados armazenados no seu pool/sistema de arquivos ZFS. Para fazer isso, o ZFS cria uma tabela de desduplicação (DDT) na memória (RAM) do seu computador e armazenam blocos de dados de hash do seu pool/sistema de arquivos ZFS lá. Portanto, quando você tenta copiar/mover/criar um novo arquivo no seu pool/sistema de arquivos ZFS, o ZFS pode verificar se há blocos de dados correspondentes e salvar espaços de disco usando desduplicação.
Se você não armazenar dados redundantes no seu pool/sistema de arquivos ZFS, quase nenhuma desduplicação ocorrerá e uma quantidade insignificante de espaços de disco será salva. Se a desduplicação salva espaços em disco ou não, o ZFS ainda terá que acompanhar todos os blocos de dados do seu pool/sistema de arquivos ZFS na tabela de desduplicação (DDT).
Portanto, se você tiver um grande pool/sistema de arquivos ZFS, o ZFS terá que usar muita memória para armazenar a tabela de desduplicação (DDT). Se a desduplicação do ZFS não estiver economizando muito espaço em disco, toda essa memória é desperdiçada. Este é um grande problema de desduplicação.
Outro problema é a alta utilização da CPU. Se a tabela de desduplicação (DDT) for muito grande, o ZFS também pode ter que fazer muitas operações de comparação e pode aumentar a utilização da CPU do seu computador.
Se você planeja usar a desduplicação, analise seus dados e descubra o quão bem a desduplicação funcionará com esses dados e se a desduplicação pode economizar custos para você.
Você pode descobrir quanta memória a tabela de desduplicação (DDT) do pool ZFS Pool1 está usando com o seguinte comando:
$ sudo zpool status -d pool1
Como você pode ver, a tabela de desduplicação (DDT) do pool ZFS Pool1 armazenado 5860 entradas e cada entrada usa 324 bytes de memória.
Memória usada para o DDT (Pool1) = 5860 entradas x 324 bytes por entrada
= 1.898.640 bytes
= 1.854.14 kb
= 1.8107 MB
Desativando a desduplicação nos Pools/FileSystems do ZFS:
Depois de ativar a desduplicação no seu pool/sistema de arquivos ZFS, os dados deduplicados permanecem deduplicados. Você não poderá se livrar dos dados deduplicados, mesmo que desative a desduplicação no seu pool/sistema de arquivos ZFS.
Mas há um hack simples para remover a desduplicação do seu pool/sistema de arquivos ZFS:
i) Copie todos os dados do seu pool/sistema de arquivos ZFS para outro local.
ii) Remova todos os dados do seu pool/sistema de arquivos ZFS.
iii) Desative a desduplicação no seu pool/sistema de arquivos ZFS.
iv) Mova os dados de volta ao seu pool/sistema de arquivos ZFS.
Você pode desativar a desduplicação no seu pool ZFS Pool1 com o seguinte comando:
$ sudo zfs set dedup = off pool1
Você pode desativar a desduplicação no seu sistema de arquivos ZFS fs1 (Criado na piscina Pool1) com o seguinte comando:
$ sudo zfs set dedup = off pool1/fs1
Depois que todos os arquivos desduplicados são removidos e a desativação está desativada, a tabela de deduplicação (DDT) deve estar vazia conforme marcado na captura de tela abaixo. É assim que você verifica se nenhuma desduplicação está ocorrendo no seu pool/sistema de arquivos ZFS.
$ sudo zpool status -d pool1
Usar casos para desduplicação do ZFS:
A desduplicação do ZFS tem alguns prós e contras. Mas tem alguns usos e pode ser uma solução eficaz em muitos casos.
Por exemplo,
i) Diretórios domésticos do usuário: Você pode usar a desduplicação do ZFS para diretórios residenciais do usuário de seus servidores Linux. A maioria dos usuários pode estar armazenando dados quase semelhantes em seus diretórios domésticos. Portanto, há uma grande chance de a desduplicação ser eficaz lá.
ii) Hospedagem da Web compartilhada: Você pode usar a desduplicação do ZFS para hospedagem compartilhada WordPress e outros sites do CMS. Como o WordPress e outros sites do CMS têm muitos arquivos semelhantes, a desduplicação do ZFS será muito eficaz lá.
iii) nuvens auto-hospedadas: Você poderá economizar um pouco de espaço em disco se usar a desduplicação do ZFS para armazenar dados do usuário NextCloud/OwnCloud.
iv) Desenvolvimento da Web e aplicativos: Se você é um desenvolvedor da web/aplicativo, é muito provável que você esteja trabalhando com muitos projetos. Você pode estar usando as mesmas bibliotecas (eu.e. Módulos de nó, módulos python) em muitos projetos. Nesses casos, a desduplicação do ZFS pode efetivamente economizar muito espaço em disco.
Conclusão:
Neste artigo, discuti como a desduplicação do ZFS funciona, os prós e os contras da desduplicação do ZFS e alguns casos de uso de desduplicação do ZFS. Eu mostrei como ativar a desduplicação em seus pools/sistemas de arquivos ZFS.
Eu também mostrei como verificar a quantidade de memória que a tabela de deduplicação (DDT) dos seus pools/sistemas de arquivos ZFS está usando. Eu mostrei como desativar a desduplicação em seus pools/sistemas de arquivos ZFS também.
Referências:
[1] Como dimensionar a memória principal para a desduplicação do ZFS
[2] Linux - Qual é o tamanho da minha tabela de dedução do ZFS no momento? - Falha do servidor
[3] Apresentando ZFs no Linux - Damian Wojstaw