Como ativar a deduplicação do ZFS

Como ativar a deduplicação do ZFS
O recurso de desduplicação do sistema de arquivos ZFS é uma maneira de remover dados redundantes de Pools/FileSystems do ZFS. Simplificando, se você armazenar muitos arquivos no seu pool/sistema de arquivos ZFS, e alguns desses arquivos são iguais, apenas uma cópia desses arquivos seria mantida no pool ZFS/FileSystem. O restante deles será uma referência a essa cópia do arquivo. Isso economizará muito espaço em disco no seu pool/sistema de arquivos ZFS.

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:

  1. Criando uma piscina ZFS
  2. Ativando a desduplicação nos pools do ZFS
  3. Ativando a desduplicação nos sistemas de arquivos ZFS
  4. Testando a desduplicação do ZFS
  5. Problemas de desduplicação do ZFS
  6. Desativando a desduplicação em pools/sistemas de arquivos ZFS
  7. Casos de uso para desduplicação do ZFS
  8. Conclusão
  9. Referências

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