Quais sistemas de arquivos Linux suportam a pré-alocação de arquivos inteiros para reduzir a fragmentação de arquivos Torrent/Gnutella?

Quais sistemas de arquivos Linux suportam a pré-alocação de arquivos inteiros para reduzir a fragmentação de arquivos Torrent/Gnutella?

Pelo que entendi, pelo menos com o sistema de arquivos ext3 do Linux, quando um arquivo grande é criado, os blocos não são realmente alocados no disco até que os dados sejam realmente gravados naquela parte do arquivo. O Linux faz algo semelhante quando os programas alocam memória, onde as alocações são lentas e as páginas não são realmente alocadas até que os dados sejam gravados nelas, mas isso é outro tópico.

Quando programas de compartilhamento de arquivos como Bittorrent e Gnutella gravam em arquivos, eles gravam pequenos blocos em áreas aleatórias do arquivo. O sistema de arquivos Linux coloca essas partes do arquivo no disco, criando muita fragmentação. Ao gravar vários arquivos de uma vez dessa maneira, o problema é especialmente grave. Mesmo a seleção de arquivos pré-alocados no programa de compartilhamento de arquivos não parece ajudar. Ser capaz de ler esses arquivos a apenas 10 MB/s é típico da quantidade de fragmentação resultante. O utilitário filefrag pode ser usado para ver quantos fragmentos um arquivo possui. Um arquivo como /var/log/messsages é um bom lugar para testar.

Com o ext3, e presumo também a maioria dos outros sistemas de arquivos Linux, alguns dados realmente precisam ser gravados no arquivo inteiro, do começo ao fim, para realmente ter um arquivo totalmente alocado com fragmentação mínima.

Eu poderia tentar montar um volume NTFS no Linux, mas deve haver uma maneira melhor! Existem ext4, btrfs, xfs, jfs, ReiserFS, ExFAT e até FAT32 a serem considerados! Algum desses arquivos pré-alocados ou pelo menos possui uma API que permite fazer isso sem precisar gravar dados no arquivo inteiro primeiro?

Responder1

Em 2024, os seguintes sistemas de arquivos Linux suportam pré-alocação de arquivos posix_fallocate():

Sistemas de arquivos locais:

  • bcachefs (altamente experimental no momento, não recomendado para uso geral)
  • btrfs
  • ext4/ext3
  • F2FS
  • NTFS3 (uma preallocopção de montagem deve ser especificada para ativar o recurso)
  • VFAT/FAT32
  • XFS

Sistemas de arquivos de rede:

  • GFS2
  • NFS
  • OCFS2
  • CIFS/SAMBA

Considerações importantes:

  • O aplicativo deve fazer uso deste recurso
  • A pré-alocação pode não produzir resultados ideais se o seu sistema de arquivos já estiver [altamente] fragmentado e não houver lacunas de tamanho suficiente.
  • Dado que há espaço livre suficiente para alinhar os arquivos corretamente:
    • No Linux, apenas o XFS pode ser totalmente desfragmentado (o que significa que você também pode desfragmentar o espaço livre)
    • No Windows, você pode obviamente desfragmentar totalmente o NTFS/VFAT.

informação relacionada