Lançamento do ZFS no Linux 0.8.0, implementações do ZFS para o kernel do Linux

Após quase dois anos de desenvolvimento apresentado liberar ZFS no Linux 0.8.0, uma implementação do sistema de arquivos ZFS empacotado como um módulo para o kernel do Linux. O módulo foi testado com kernels Linux de 2.6.32 a 5.1. Pacotes de instalação prontos em breve estará preparado para as principais distribuições Linux, incluindo Debian, Ubuntu, Fedora, RHEL/CentOS. O módulo ZFS on Linux já está incluído nas distribuições Debian, Ubuntu, Gentoo, Sabayon Linux e ALT Linux.

Como parte do ZFS no Linux, foi preparada uma implementação de componentes ZFS relacionados tanto à operação do sistema de arquivos quanto ao funcionamento do gerenciador de volume. Em particular, são implementados os seguintes componentes: SPA (Storage Pool Allocator), DMU (Data Management Unit), ZVOL (ZFS Emulated Volume) e ZPL (ZFS POSIX Layer). Além disso, o projeto oferece a capacidade de usar o ZFS como back-end para o sistema de arquivos de cluster Lustre. O trabalho do projeto é baseado no código ZFS original importado do projeto OpenSolaris e aprimorado com melhorias e correções da comunidade Illumos. O projeto está sendo desenvolvido com a participação de funcionários do Livermore National Laboratory sob contrato com o Departamento de Energia dos Estados Unidos.

O código é distribuído sob uma licença CDDL gratuita, que é incompatível com GPLv2, o que não permite que o ZFS no Linux seja integrado ao ramo principal do kernel do Linux, pois não é permitido misturar código sob as licenças GPLv2 e CDDL. Para contornar essa incompatibilidade de licença, decidiu-se distribuir todo o produto sob a licença CDDL como um módulo carregável separadamente, fornecido separadamente do núcleo. A estabilidade do ZFS na base de código do Linux é classificada como comparável a outros sistemas de arquivos para Linux.

Grandes mudanças:

  • Adicionado suporte integrado para criptografia de dados armazenados no nível do sistema de arquivos e partições. O algoritmo de criptografia padrão é aes-256-ccm. O comando "zfs load-key" foi proposto para carregar chaves de criptografia;
  • Implementada a capacidade de transferir dados criptografados ao executar os comandos 'zfs send' e 'zfs receive'. Ao especificar a opção “-w”, os dados já criptografados no pool são transferidos para outro pool como estão, sem descriptografia intermediária. Com essa cópia, os dados ficam protegidos pela chave do remetente, o que permite utilizar essa modalidade para backup em sistemas não confiáveis ​​(em caso de comprometimento do destinatário, o invasor não conseguirá acessar os dados sem a chave);
  • Adicionado suporte para remover unidades primárias de um pool de armazenamento, conectado individualmente e como parte de um espelho. A remoção é realizada com o comando "zpool remove". O processo de exclusão copia os dados da unidade excluída para as unidades primárias restantes no pool;
  • Adicionado o comando "zpool checkpoint" para salvar o estado atual do pool com a capacidade de reverter outras alterações no ponto salvo no tempo (um instantâneo de todo o pool é criado). Esse recurso pode ser útil no processo de execução de trabalho administrativo complexo potencialmente perigoso, que em condições normais leva a alterações irreversíveis (por exemplo, ativando sinalizadores para nova funcionalidade do ZFS ou limpando dados);
  • O comando "zpool trim" foi adicionado para informar as unidades usadas no pool sobre os setores que não estão mais em uso. O uso da operação TRIM permite aumentar a eficiência dos SSDs e evitar a degradação de seu desempenho. Uma nova propriedade "autotrim" foi proposta para permitir o processo contínuo em segundo plano de transmissão de comandos TRIM;
  • Adicionado o comando "zpool initialize" para inicializar todo o espaço em disco não alocado, o que permite que ele esteja instantaneamente pronto para uso, sem degradação de desempenho no primeiro acesso (por exemplo, ao hospedar armazenamentos virtualizados como VMware VMDK);
  • Adicionado suporte para cotas de nível de projeto e contabilidade, além de cotas de usuário e grupo disponíveis anteriormente. Em essência, os projetos são um espaço separado de objetos associados a um identificador separado (ID do projeto). A ligação é definida por meio da operação 'chattr -p' ou por herança de atributo. Para gerenciamento de projetos, são apresentados os comandos “zfs project” e “zfs projectspace” que permitem gerenciar a criação de projetos e definir limites de espaço em disco para os mesmos;
  • Adicionada a capacidade de criar scripts Lua para automatizar vários trabalhos com o ZFS. Os scripts são executados em ambientes isolados especiais usando o comando "zpool program";
  • Nova biblioteca implementada pyzfs, que fornece uma API estável para administrar o ZFS a partir de aplicativos Python. A biblioteca é um wrapper em torno de libzfs_core e fornece um conjunto idêntico de funções, mas usa tipos Python mais próximos;
  • Os utilitários arcstat, arcsummary e dbufstat tornaram-se compatíveis com o Python 3. Os utilitários arcstat.py, arc_summary.py e dbufstat.py foram renomeados para versões sem a extensão ".py";
  • Adicionado suporte para a interface do kernel Linux Direct IO (O_DIRECT), que permite acessar dados sem buffer e ignorando o cache;
  • Otimizações de desempenho introduzidas:
    • O trabalho dos comandos “scrub” e “resilver” foi acelerado devido à divisão em duas fases (uma fase separada foi alocada para escanear metadados e determinar a localização dos blocos com dados no disco, o que permite uma verificação posterior usando dados sequenciais leitura);
    • Adicionado suporte para classes de alocação,
      permitir que SSDs relativamente pequenos sejam agrupados e usados ​​para armazenar apenas certos tipos de blocos comumente usados, como metadados, dados DDT e pequenos blocos de arquivos;

    • Desempenho aprimorado de comandos administrativos, como
      "zfs list" e "zfs get", armazenando em cache os metadados necessários para sua operação;

    • Adicionado suporte para paralelização de operações de alocação de blocos executando processos de alocadores separados para cada grupo de metaslab. Em sistemas convencionais, há um aumento de desempenho de 5 a 10%, mas em grandes (8 SSD de 128 GB, 24 núcleos NUMA, 256 GB de RAM), o aumento nas operações de alocação de blocos pode chegar a 25%;
    • Adicionada a possibilidade de execução diferida do comando “resilver” (reconstruindo a distribuição de dados levando em consideração as alterações na configuração das unidades) - se a anterior ainda não tiver sido concluída ao iniciar uma nova operação, o novo manipulador iniciará a execução somente após o fim do anterior;
    • Otimizações foram adicionadas ao ZIL (ZFS Intent Log) para permitir criar e processar blocos na presença de blocos que ainda estão sendo processados ​​pelo armazenamento;
    • Tempo de registro reduzido para partições (zvol) no sistema. Quando um pool contém um grande número de partições, elas agora estão disponíveis imediatamente após a "importação do zpool";
    • Adicionado suporte para cálculo acelerado por hardware de hashes SHA256 e operações de criptografia AES-GSM usando chips Intel QAT (Quick Assist Technology). Adicionado suporte para aceleração de hardware do chipset Intel C62x e CPU Atom C3000.

Fonte: opennet.ru

Adicionar um comentário