Após mais de um ano de desenvolvimento, foi publicado o lançamento do projeto OpenZFS 2.3.0, desenvolvendo a implementação do sistema de arquivos ZFS para Linux e FreeBSD. O projeto ficou conhecido como "ZFS on Linux" e anteriormente se limitava ao desenvolvimento de um módulo para o kernel Linux, mas após a fusão com o código do FreeBSD foi reconhecido como a principal implementação do OpenZFS e renomeado.
OpenZFS foi testado com kernels Linux de 4.18 a 6.12 e todas as ramificações do FreeBSD a partir de 13.3. O código é distribuído sob a licença CDDL gratuita. OpenZFS já é usado no FreeBSD e está incluído nas distribuições Debian, Ubuntu, Gentoo, NixOS e ALT Linux. Os pacotes com a nova versão serão preparados em breve para as principais distribuições Linux, incluindo Debian, Ubuntu, Fedora, RHEL/CentOS.
OpenZFS fornece uma implementação de componentes ZFS relacionados ao sistema de arquivos e ao gerenciador de volume. Componentes implementados: SPA (Storage Pool Allocator), DMU (Data Management Unit), ZVOL (ZFS Emulated Volume) e ZPL (ZFS POSIX Layer). O projeto também permite que o ZFS seja usado como back-end para o sistema de arquivos em cluster Lustre. O trabalho do OpenZFS é baseado no código ZFS original, importado do projeto OpenSolaris e ampliado com melhorias e correções da comunidade Illumos. O projeto está sendo desenvolvido com a participação de funcionários do Laboratório Nacional Livermore sob contrato com o Departamento de Energia dos Estados Unidos.
O código é distribuído sob a licença CDDL gratuita, que é incompatível com GPLv2, que não permite a integração do OpenZFS no ramo principal do kernel Linux, uma vez que misturar código sob as licenças GPLv2 e CDDL é inaceitável. Para contornar a incompatibilidade de licenciamento, decidiu-se distribuir todo o produto para Linux sob a licença CDDL como um módulo carregado separadamente, fornecido separadamente do kernel. A estabilidade da base de código OpenZFS é avaliada como comparável a outros FS para Linux.
Grandes mudanças:
- Foi implementada a capacidade de adicionar novos discos dinamicamente a um array RAIDZ existente para aumentar o tamanho do armazenamento sem interromper o trabalho e sem a necessidade de criar um novo grupo de unidades. A redistribuição de dados redundantes levando em consideração novos discos é realizada automaticamente. Para adicionar um disco a um grupo existente, você pode usar o comando “zpool attachment POOL raidzP-N NEW_DEVICE” e para monitorar a conclusão do processo de expansão da matriz em segundo plano, você pode usar “zpool status”.
- A execução de operações relacionadas à desduplicação de blocos de dados foi significativamente acelerada. As otimizações, entre outras coisas, afetaram o formato das tabelas de desduplicação, portanto para habilitar as otimizações propostas nos pools existentes, é necessário habilitar a opção “fast_dedup”, após a qual serão criadas novas tabelas de desduplicação, que serão utilizadas em paralelo com as mesas antigas.
- Adicionado modo Direct IO, que permite realizar operações de leitura e gravação ignorando o cache ARC (Adaptive Replacement Cache). Este modo melhora o desempenho em situações em que o cache pode impactar negativamente o desempenho devido a operações adicionais de cópia de memória, como ao usar dispositivos NVMe.
- A maioria dos comandos (zfs list|get|mount|version, zpool status|list|get|version) adicionou a opção “-j” para saída no formato JSON.
- O tamanho permitido para nomes de arquivos e diretórios foi aumentado de 255 para 1023 caracteres (o novo tamanho foi escolhido para acomodar 255 caracteres de 4 bytes).
- Otimizações de desempenho foram feitas em várias partes da base de código.
- Opções foram adicionadas ao módulo do kernel:
- dmu_ddt_copies
- raidz_expand_max_copy_bytes
- raidz_expand_max_reflow_bytes
- raidz_io_agregado_rows
- spa_cpus_per_allocator
- spa_num_allocators
- zap_shrink_enabled
- zfetch_max_idistance
- zfs_active_allocator
- zfs_arc_shrinker_seeks
- zfs_dedup_log_flush_entries_min
- .zfs_dedup_log_flush_flow_rate_txgs
- zfs_dedup_log_flush_min_time_ms
- zfs_dedup_log_flush_passes_max
- zfs_dedup_log_mem_max
- zfs_dedup_log_mem_max_percent
- zfs_dedup_log_txg_max
- zfs_dio_enabled
- zfs_dio_write_verify_events_per_second
- zfs_resilver_defer_percent
- zfs_scrub_after_expand
- zfs_snapshot_no_setuid
- zfs_vdev_direct_write_verify
- zio_taskq_write_tpq
Fonte: opennet.ru
