Após quase dois anos de desenvolvimento lançamento , implementação do sistema de arquivos ZFS, apresentado como um módulo para o núcleo do Linux. O funcionamento do módulo foi verificado com núcleos do Linux da versão 2.6.32 até 5.1. Pacotes de instalação prontos estarão disponíveis em breve para as principais distribuições do Linux, incluindo Debian, Ubuntu, Fedora, RHEL/CentOS. O módulo ZFS no Linux já faz parte das distribuições Debian, Ubuntu, Gentoo, Sabayon Linux e ALT Linux.
Dentro do ZFS no Linux, foi preparada a implementação dos componentes ZFS, relacionados tanto ao funcionamento do sistema de arquivos quanto à operação do gerenciador de volumes. Em particular, foram implementados os componentes: SPA (Storage Pool Allocator), DMU (Data Management Unit), ZVOL (ZFS Emulated Volume) e ZPL (ZFS POSIX Layer). Além disso, o projeto permite o uso do ZFS como backend para o sistema de arquivos em cluster Lustre. As realizações do projeto são baseadas no código original do ZFS importado do projeto OpenSolaris, ampliado com melhorias e correções da comunidade Illumos. O projeto avança com a participação de funcionários do Laboratório Nacional de Lawrence Livermore sob contrato com o Departamento de Energia dos Estados Unidos.
O código é distribuído sob a licença livre CDDL, que não é compatível com a GPLv2, o que impossibilita a integração do ZFS no Linux na ramificação principal do núcleo do Linux, uma vez que a mistura de código sob as licenças GPLv2 e CDDL é inadmissível. Para contornar essa incompatibilidade de licenciamento, decidiu-se distribuir o produto totalmente sob a licença CDDL como um módulo carregável separadamente do núcleo. A estabilidade da base de código do ZFS no Linux é avaliada como comparável a outros sistemas de arquivos para Linux.
Principais mudanças:
- Adicionada a suporte embutido para criptografia de dados armazenados em nível de sistema de arquivos e partições. Por padrão, o algoritmo aes-256-ccm é usado para criptografia. Para carregar as chaves de criptografia, o comando "zfs load-key" foi proposto;
- Foi implementada a possibilidade de transmissão de dados criptografados ao executar os comandos "zfs send" e "zfs receive". Ao especificar a opção "-w", os dados que já estão criptografados no pool são transferidos para outro pool como estão, sem a decriptografia intermediária. Ao copiar dessa forma, os dados permanecem protegidos pela chave do remetente, permitindo o uso desse modo para backups em sistemas não confiáveis (em caso de comprometimento do receptor, sem a chave, o invasor não poderá acessar os dados);
- Adicionada a suporte para remoção de discos primários do pool de armazenamento, conectados tanto individualmente quanto em um espelho. A remoção é feita com o comando 'zpool remove'. Durante o processo de remoção, os dados do disco a ser excluído são copiados para os discos primários restantes no pool;
- Adicionado o comando 'zpool checkpoint' para salvar o estado atual do pool com a possibilidade de reverter as mudanças futuras para o momento salvo (um snapshot de todo o pool é criado). Esse recurso pode ser útil durante a execução de trabalhos administrativos complexos que podem ser arriscados e normalmente levam a alterações irreversíveis (como ativar flags de novas funcionalidades do ZFS ou limpar dados);
- Adicionado o comando 'zpool trim', que permite informar os discos utilizados no pool sobre setores que não estão mais em uso. A aplicação da operação TRIM melhora a eficiência dos SSDs e previne a degradação de seu desempenho. Para habilitar um processo de fundo contínuo de envio de comandos TRIM, uma nova propriedade 'autotrim' foi proposta;
- Adicionado o comando 'zpool initialize' para inicializar todo o espaço em disco não alocado, garantindo que ele esteja pronto para uso imediato, sem perda de desempenho no primeiro acesso (por exemplo, ao acomodar armazenamentos virtualizados como VMware VMDK);
- Adicionado suporte para contabilidade e quotas em nível de projeto, complementando as quotas já disponíveis em nível de usuário e grupo. Essencialmente, os projetos são um espaço separado de objetos, associados a um identificador único (ID do projeto). A associação é definida através da operação 'chattr -p' ou através da herança de atributos. Para gerenciar projetos, foram introduzidos os comandos 'zfs project' e 'zfs projectspace', que permitem a criação de projetos e a definição de limites de espaço em disco para eles;
- Adicionada a possibilidade de criar scripts Lua para automatizar várias operações com ZFS. Os scripts são executados em ambientes isolados especiais usando o comando 'zpool program';
- Implementada uma nova biblioteca , fornecendo uma API estável para administração de ZFS a partir de aplicações em Python. A biblioteca é uma interface sobre libzfs_core e fornece um conjunto idêntico de funções, mas aplica tipos mais apropriados para Python;
- Garantida a compatibilidade das utilidades arcstat, arcsummary e dbufstat com Python 3. As utilidades arcstat.py, arc_summary.py e dbufstat.py foram renomeadas para versões sem a extensão “.py”;
- Adicionada a suportar da interface do núcleo Linux Direct IO (O_DIRECT), permitindo acessar dados sem buffers e contornando o cache;
- Apresentadas otimizações de desempenho:
- Acelerada a execução dos comandos “scrub” e “resilver” por meio da divisão em duas fases (dedicada uma fase separada para escaneamento de metadados e determinação da localização dos blocos de dados no disco, permitindo uma verificação subsequente usando leitura sequencial de dados);
- Adicionada a suporte a classes de alocação de dados (Allocation classes),
permitindo incluir SSDs relativamente pequenos no pool e utilizá-los para armazenar apenas determinados tipos de blocos frequentemente usados, como metadados, dados DDT e pequenos blocos de arquivos; - Aumentada a performance dos comandos de administração, como
“zfs list” e “zfs get”, por meio do cache dos metadados necessários para seu funcionamento; - Adicionada a capacidade de paralelizar operações de alocação de blocos através da execução de processos “allocator” separados para cada grupo de metaslab. Em sistemas normais, observa-se um aumento de desempenho de 5 a 10%, mas em grandes sistemas (8 128 GB SSD, 24 núcleos NUMA, 256 GB de RAM) o aumento nas operações de alocação de blocos pode chegar a 25%;
- Adicionada a capacidade de execução adiada do comando “resilver” (reconstrução da distribuição de dados levando em conta a alteração na configuração dos dispositivos) — se ao iniciar uma nova operação a anterior ainda não tiver sido concluída, o novo processador começará a ser executado apenas após a finalização da anterior;
- No log ZIL (ZFS Intent Log) foram feitas otimizações que permitem criar e processar blocos mesmo na presença de blocos ainda sendo processados pelo armazenamento;
- Reduzido o tempo de registro das divisões (zvol) no sistema. Quando o pool contém um grande número de divisões, elas agora se tornam disponíveis imediatamente após a execução do “zpool import”;
- Suporte foi adicionado para aceleração de hardware no cálculo de hashes SHA256 e operações de criptografia AES-GSM usando chips com suporte à tecnologia Intel QAT (Quick Assist Technology). Suporte também foi adicionado para os meios de aceleração de hardware do chipset Intel C62x e CPU Atom C3000.
Fonte: opennet.ru
