- Alocação tardia: o driver NTFS3 agora suporta delayed allocation (delalloc), agrupando escritas na memória RAM antes de gravar no disco para reduzir drasticamente a fragmentação.
- Modernização do código: operações críticas de arquivo foram migradas para as infraestruturas de iomap e folios, alinhando o driver aos padrões de alta performance do VFS do Linux.
- Fim dos travamentos: a atualização elimina deadlocks e loops infinitos que ocorriam ao ler metadados corrompidos ou listas de atributos vazias, aumentando a estabilidade do sistema.
- Arquivos esparsos: a nova implementação de SEEK_DATA e SEEK_HOLE permite detectar áreas vazias em arquivos grandes com precisão, acelerando backups e clonagem de discos.
- Segurança de dados: o comando fsync foi ajustado para sincronizar também os diretórios pais (parent inodes), garantindo a integridade da estrutura de pastas em caso de queda de energia.
Linus Torvalds confirmou a integração de uma atualização crítica para o driver NTFS3 no Kernel Linux 7.0. O código, submetido pelo mantenedor Konstantin Komarov da Paragon Software, representa um marco na maturidade deste driver nativo. A grande novidade é a implementação da alocação tardia (delayed allocation ou delalloc), uma técnica avançada que muda fundamentalmente como o Linux gerencia a escrita de dados em partições do Windows, aproximando seu desempenho de sistemas modernos como Ext4 e XFS.
Além do novo mecanismo de alocação, o driver sofreu uma modernização estrutural profunda, migrando operações para a infraestrutura de iomap e corrigindo falhas graves de lógica que poderiam travar o sistema ao ler discos corrompidos.
O impacto real no uso diário:
- Discos mais organizados: ao copiar grandes volumes de dados para um HD externo NTFS, o sistema agora evita escrever pequenos pedaços de arquivos espalhados pelo disco. A alocação tardia permite que o driver “planeje” a gravação, resultando em arquivos contíguos e muito menos fragmentação a longo prazo.
- Segurança contra corrupção: a atualização blinda o driver contra metadados inconsistentes. Antes, tentar ler um disco NTFS levemente corrompido poderia colocar o kernel em um loop infinito, travando o computador. Agora, o driver detecta essas falhas e aborta a operação com segurança.
Detalhes técnicos da alocação tardia
A implementação do delalloc no NTFS3 introduz uma nova estrutura em memória chamada run_da (delayed allocation runlist). O funcionamento técnico ocorre em três etapas:
- Reserva virtual: quando um programa solicita a gravação de dados, o driver não aloca clusters no disco imediatamente. Em vez disso, ele marca a região na memória com uma flag especial (
DELALLOC_LCN), reservando o espaço logicamente. - Gerenciamento de conflitos: o novo código sabe lidar com situações complexas, como colisões com Direct I/O (gravação direta sem cache) e truncamento de arquivos via
fallocate. Se houver risco de conflito, o driver força a alocação imediata para garantir a integridade. - Gravação definitiva: a conversão dos clusters virtuais em espaço físico real ocorre apenas no momento do writeback (quando o kernel decide esvaziar o cache para o disco) ou quando o arquivo é fechado, permitindo agrupar escritas vizinhas em uma única operação sequencial.
Modernização da infraestrutura (iomap e folios)
O driver NTFS3 está abandonando códigos legados para se alinhar aos padrões modernos do VFS (Virtual File System) do Linux:
- Adoção do iomap: operações críticas de arquivo foram portadas para usar
iomap. Isso padroniza o comportamento do NTFS3 com outros sistemas de arquivos de alta performance, facilitando a manutenção futura e reduzindo a dívida técnica. - Uso de folios: o código agora utiliza “folios” (a nova abstração de memória do kernel que substitui as antigas “páginas” individuais). Isso é visível na nova função
ntfs_read_folio(), que zera corretamente os buffers que excedem o tamanho válido do arquivo (i_valid), evitando vazamento de dados antigos da memória RAM para o arquivo.
Melhorias em arquivos esparsos e metadados
A atualização corrige deficiências antigas na manipulação de arquivos especiais:
- Detecção de buracos: a implementação de
SEEK_DATAeSEEK_HOLEagora escaneia as data runs reais do disco. Isso significa que ferramentas de backup e clonagem podem pular “buracos” (espaços vazios não alocados) em arquivos de máquinas virtuais ou bancos de dados com precisão, economizando tempo e espaço. - Limpeza de alocações: o driver agora descarta proativamente clusters pré-alocados para arquivos esparsos e comprimidos, liberando espaço em disco que, de outra forma, ficaria “preso” e inutilizável.
Correções de estabilidade e segurança
Uma lista extensa de bugs críticos foi resolvida neste ciclo:
- Loops infinitos: foram corrigidos erros de lógica em
indx_find(busca em índices),attr_load_runs_rangee situações onde listas de atributos de tamanho zero (zero-sized ATTR_LIST) faziam o driver entrar em processamento eterno. - Deadlocks: resolvida uma dependência circular de bloqueio (locking dependency) na função
run_unpack_exe um travamento fatal emni_read_folio_cmpr(leitura de arquivos comprimidos). - Leitura fora dos limites: corrigida uma vulnerabilidade de slab-out-of-bounds read na função
DeleteIndexEntryRoot, que poderia ser explorada ou causar falhas de sistema ao manipular entradas de índice malformadas.
