Como instalar suporte ao sistema de arquivos ZFS no Ubuntu

O sistema de arquivos ZFS foi projetado originalmente nos laboratórios da Sun Microsystems, bem antes da empresa ser adquirida pela Oracle.
Trata-se de um sistema de arquivos avançado, com um gestor de volumes lógicos.
open zfs logo
Além do Solaris e nos sistemas operacionais derivados, ele roda em várias outras plataformas.
No FreeBSD, o ZFS é o sistema de arquivos padrão.
À medida em que problemas de licenciamento foram sendo resolvidos, tornou-se possível portar o sistema para várias distribuições GNU/Linux, incluindo Debian, Ubuntu etc.

O ZFS possui recursos importantes de proteção contra corrupção de dados, além de compressão, gestão de volumes, integridade de dados, software RAID, cache e muito mais.

Os exemplos deste texto se baseiam em uma instalação Ubuntu 16.04 LTS. Se você deseja obter informações mais específicas sobre instalação do ZFS no Debian, leia este artigo.
Os links do texto e da seção “Referências”, ao final, podem ajudar, caso você deseje aprofundar mais em determinado assunto.

Como instalar o ZFS no Ubuntu 16.04

No exemplo abaixo, vou demonstrar como encontrar softwares relacionados ao ZFS e como instalar o que você precisa.
Como sempre, comece por atualizar os repositórios. Depois faça a busca, com ‘search‘:

sudo apt update
sudo apt search openzfs

O resultado pode ser extenso (e nem tudo serve ao que queremos realizar aqui):

 Sorting...
            Full Text Search...
            libuutil1linux/xenial-updates 0.6.5.6-0ubuntu10 amd64
              Solaris userland utility library for Linux  

            libuutil1linux-dbg/xenial-updates 0.6.5.6-0ubuntu10 amd64
              Debugging symbols for libuutil1linux

            libzfs2linux/xenial-updates 0.6.5.6-0ubuntu10 amd64
              Native OpenZFS filesystem library for Linux            

            libzfslinux-dev/xenial-updates 0.6.5.6-0ubuntu10 amd64
              Native OpenZFS filesystem development files for Linux 

            libzpool2linux/xenial-updates 0.6.5.6-0ubuntu10 amd64
              Native OpenZFS pool library for Linux
                      
            zfs-dkms/xenial-updates 0.6.5.6-0ubuntu10 amd64
              Native OpenZFS filesystem kernel modules for Linux

            zfs-doc/xenial-updates,xenial-updates 0.6.5.6-0ubuntu10 all
              Native OpenZFS filesystem documentation and examples.

            zfs-initramfs/xenial-updates,xenial-updates 0.6.5.6-0ubuntu10 all

            libzfslinux-dev/xenial-updates 0.6.5.6-0ubuntu10 amd64
              Native OpenZFS filesystem development files for Linux 

            libzpool2linux/xenial-updates 0.6.5.6-0ubuntu10 amd64
              Native OpenZFS pool library for Linux
                      
            zfs-dkms/xenial-updates 0.6.5.6-0ubuntu10 amd64
              Native OpenZFS filesystem kernel modules for Linux

            zfs-doc/xenial-updates,xenial-updates 0.6.5.6-0ubuntu10 all
              Native OpenZFS filesystem documentation and examples.

            zfs-initramfs/xenial-updates,xenial-updates 0.6.5.6-0ubuntu10 all
              Native OpenZFS root filesystem capabilities for Linux

            zfs-zed/xenial-updates 0.6.5.6-0ubuntu10 amd64
              OpenZFS Event Daemon (zed)

            zfsutils-linux/xenial-updates 0.6.5.6-0ubuntu10 amd64
              Native OpenZFS management utilities for Linux

            zfsutils-linux-dbg/xenial-updates 0.6.5.6-0ubuntu10 amd64
              Debugging symbols for zfsutils-linux

Para fazer a instalação do sistema ZFS básico, basta executar o comando que segue:

sudo apt install zfs

As dependências necessárias, como você já deve saber, serão instaladas automaticamente.
Para verificar se o suporte ao sistema de arquivos se encontra instalado no seu sistema:
use o comando cat:

cat /proc/filesystems | grep zfs
	zfs

Se o seu resultado estiver de acordo com o que se vê acima, então tudo correu bem.

Referências

Como instalar o ZFS no Debian.
Conheça o sistema de arquivos ZFS.

Introdução ao sistema de arquivos ZFS

O atual ZFS é um sistema de arquivos avançado, projetado para dar respostas a uma série de problemas encontrados em outros projetos de sistemas de arquivos.
Nascido nos laboratórios da Sun, o atual desenvolvimento em código aberto do projeto faz parte do OpenZFS Project.
O Z File System ou ZFS tem 3 grandes alvos:

  1. Integridade de dados — Cada informação armazenada inclui um checksum de si mesma.
    Quando dados são gravados, o checksum é calculado e gravado junto.
    O checksum será calculado novamente, a cada leitura. Se os dois resultados não coincidirem, o sistema avisa sobre a presença de erro.
    havendo redundância de dados disponível, o ZFS vai sempre tentar corrigir automaticamente os erros que encontrar.
  2. Checksum algorythm ou algoritmo de soma de verificação é um método usado para verificar a integridade de dados, que tenham trafegado ou sido gravados em alguma mídia.

  3. storage pools — O conceito se refere a um conjunto de dispositivos físicos ou virtuais, reunidos em um pool ou reservatório.
    A este pool, novos dispositivos sempre podem ser adicionados.
    Quando algum espaço é alocado em um pool de armazenamento, este pode ser disponibilizado a todo o sistema de arquivos.
  4. Performance — Um mecanismo de caching múltiplo ajuda a melhorar a performance do sistema.
    O ZFS conta com o ARC, um sistema de leitura de cache, baseado na memória.
    Um segundo nível de leitura de cache, baseado em disco pode ser adicionado, com o L2ARC.
    Por fim, há um sistema de escrita assíncrona em disco, também disponível, chamado ZIL.

Ao final deste texto, há um glossário com termos relacionados ao ZFS. Consulte-o sempre que precisar.

O que diferencia o ZFS de outros sistemas

O ZFS é significativamente diferente de outros sistemas (principalmente anteriores), por que é mais do que apenas um sistema de arquivos.
Com a combinação de papéis entre o gestor de volumes e o sistema de arquivos, o ZFS provê vantagens exclusivas.
Sua arquitetura permite que o sistema de arquivos saiba o que ocorre na camada inferior da estrutura de discos.
Sistemas tradicionais, só poderiam ser criados um em cada disco. Havendo dois discos, dois sistemas de arquivos deveriam ser criados — um para cada.
Em uma configuração RAID, seria possível contornar este problema — apresentando ao sistema de arquivos um único disco lógico, formado pelo espaço somado de vários discos físicos ou virtuais. Neste caso, o sistema “pensa” que está lidando com apenas um único dispositivo de armazenamento.
O ZFS atua em conjunto com o gestor de volumes e permite a criação de vários sistemas de arquivos em um pool de armazenamento.
Uma das maiores vantagens da onisciência do ZFS em relação ao layout físico das mídias de armazenamento é que isto permite aos sistemas de arquivos crescer à medida em que novos dispositivos são adicionados ao pool. O novo espaço se torna disponível a todo o sistema de arquivos.
O ZFS também possui a capacidade de aplicar diferentes propriedades a cada sistema de arquivos que compõe seu ecossistema — o que pode tornar vantajoso ter vários deles, além de datasets, no lugar de trabalhar com um único sistema monolítico.

Requisitos do sistema

Por ter sido originalmente projetados para o sistema UNIX da Sun, Solaris, o ZFS foi considerado por muito tempo como um sistema de arquivos moldado para grandes servidores e para companhias em condições (financeiras) de manter os melhores e mais poderosos hardwares disponíveis no mercado — portanto, fora da realidade dos pequenos PCs.
O fato é que depois de ter sido portado para inúmeras outras plataformas de código aberto (BSD, Illumos e Linux — sob a tutela da organização OpenZFS), estes requerimentos caíram.
Além disto, os sistemas dos PCs também se tornaram mais robustos, o que contribuiu para que a tecnologia se tornasse mais acessível.
logo oficial openzfs
Atualmente, os requisitos de sistema de hardware são:

  • memória ECC — que não é obrigatório, mas é fortemente recomendado.
  • de 8 a 16 GB de espaço em disco, pelo menos, para obter melhor performance.
    É possível usar o ZFS em espaços menores (e eu uso). Contudo, para usufruir de recursos avançados de deduplicação, por exemplo, vai ser necessário ter mais espaço de armazenamento.
  • Como limitação, se você pretende inicializar o sistema de um dataset ZFS, não é possível criar um root pool com mais discos físicos do que é suportado pelo seu hardware (BIOS).
    Este limite é, usualmente, 8 discos.
    Alguns softwares de virtualização, como o VirtualBox, pode lidar apenas com 4.

Diante disto, é seguro afirmar que qualquer máquina atual atende, com folga, os pré-requisitos para instalar e usar o ZFS.
Além disto, recomenda-se usar o kernel Linux mais atual possível, em um sistema 64 bit.

Como instalar suporte ao ZFS no Linux

A implementação prática do suporte via FUSE, no Debian, é abordada no artigo Como implementar suporte ao sistema de arquivos ZFS no Debian.

Terminologia do ZFS

Se você está estudando o assunto, ou deseja entender melhor alguns termos usados neste artigo, segue um pequeno glossário do tema.

  • boot environment — se refere ao ambiente inicializável — Oracle Solaris, GNU/Linux etc. — que consiste de um sistema raíz ZFS e, eventualmente, outros sistemas de arquivos montados embaixo dele.
    Um único boot environment pode estar ativo a cada vez.
  • checksum — um hash de 256-bit de dados em um bloco do sistema (system block).
    A capacidade do checksum varia do simples e rápido fletcher4 a hashes criptograficamente robustos, tais como o SHA256.

    O Fletcher checksum é um algoritmo desenvolvido por John G. Fletcher nos laboratórios da Lawrence Livermore, nos anos 70.
    O algoritmo oferece propriedades de detecção de erros como o mínimo de esforço computacional.

  • clone — é um sistema de arquivos, cujo conteúdo é idêntico ao de um snapshot.
  • dataset — Nome genérico dado a um dos seguintes componentes de um sistema de arquivos ZFS:
    1. clone
    2. sistema de arquivos
    3. snapshot
    4. volume

    Cada dataset é identificado por um nome único em um espaço de nomes ZFS (ZFS namespace), de acordo com o seguinte formato:
    pool/path[@snapshot] em ‘pool’ é o nome do pool de armazenamento que contém o dataset e ‘path’ é o caminho ou endereço do componente.
    O nome entre colchetes se refere a um componente opcional que identifica o snapshot do dataset.

  • mirror — é um dispositivo virtual que armazena cópias de dados idênticas em dois ou mais discos.
    Se qualquer um dos discos dentro de um mirror (espelho) falhar, outro disco pode prover os mesmos dados.
  • pool — se refere a um grupo lógico de dispositivos dentro de um layout de armazenamento.
    O espaço em disco para acomodar os datasets (componentes de um sistema ZFS) é alocado em um pool.
    Em uma tradução livre, o termo storage pool quer dizer tanque de armazenagem ou reservatório de armazenamento.
  • RAID-Z — é um dispositivo virtual que armazena dados e paridades em múltiplos discos.
  • resilvering — é o processo de copiar dados de um dispositivo a outro.
    Por exemplo, se um dispositivo espelho (mirror) for retirado ou substituído, os dados de um outro espelho atualizado são copiados para dentro do novo dispositivo que for colocado no lugar.
  • snapshot — uma cópia apenas-para-leitura (read-only copy) de um sistema de arquivos ou de um volume, em um determinado ponto no tempo.
  • dispositivo virtual — é um dispositivo lógico dentro de um pool, que pode ser um dispositivo físico, um arquivo ou uma coletânea de dispositivos.
  • volume — é um componente ZFS (dataset) que representa um dispositivo de bloco. Um dispositivo usado para swap, por exemplo, é um volume ZFS.

Referências

https://elias.praciano.com/2016/01/como-instalar-suporte-ao-sistema-de-arquivos-zfs-no-debian/
https://docs.oracle.com/cd/E23824_01/html/821-1448/ftyue.html#scrolltoc
https://www.freebsd.org/doc/handbook/zfs.html
http://zfsonlinux.org/faq.html