¿Qué sistemas de archivos Linux admiten la preasignación de archivos completos para reducir la fragmentación de archivos Torrent/Gnutella?

¿Qué sistemas de archivos Linux admiten la preasignación de archivos completos para reducir la fragmentación de archivos Torrent/Gnutella?

Según tengo entendido, al menos con el sistema de archivos ext3 de Linux, cuando se crea un archivo grande, los bloques no se asignan realmente en el disco hasta que los datos se escriben en esa parte del archivo. Linux hace algo similar cuando los programas asignan memoria, donde las asignaciones son diferidas y las páginas en realidad no se asignan hasta que se escriben datos en ellas, pero ese es otro tema.

Cuando los programas para compartir archivos como Bittorrent y Gnutella escriben en archivos, escriben pequeños bloques en áreas aleatorias del archivo. El sistema de archivos de Linux coloca estas partes del archivo en todo el disco, creando mucha fragmentación. Al escribir en varios archivos a la vez como este, el problema es especialmente grave. Incluso seleccionar archivos preasignados en el programa para compartir archivos no parece ayudar. Ser capaz de leer estos archivos a sólo 10 MB/seg es típico dada la cantidad de fragmentación que resulta. La utilidad filefrag se puede utilizar para ver cuántos fragmentos tiene un archivo. Un archivo como /var/log/messsages es un buen lugar para realizar pruebas.

Con ext3, y supongo que también con la mayoría de los otros sistemas de archivos de Linux, algunos datos deben escribirse en el archivo completo para, de principio a fin, tener un archivo completamente asignado con una fragmentación mínima.

Podría intentar montar un volumen NTFS en Linux, ¡pero tiene que haber una manera mejor! ¡Hay que considerar ext4, btrfs, xfs, jfs, ReiserFS, ExFAT e incluso FAT32! ¿Alguno de estos archivos preasigna, o al menos tiene una API que permite hacer esto sin tener que escribir datos en todo el archivo primero?

Respuesta1

En 2024, los siguientes sistemas de archivos Linux admitirán la preasignación de archivos posix_fallocate():

Sistemas de archivos locales:

  • bcachefs (altamente experimental por el momento, no recomendado para uso general)
  • btrfs
  • ext4/ext3
  • F2FS
  • NTFS3 ( preallocse debe especificar una opción de montaje para habilitar la función)
  • VFAT/FAT32
  • XFS

Sistemas de archivos de red:

  • GFS2
  • NFS
  • OCFS2
  • CIFS/SAMBA

Consideraciones importantes:

  • La aplicación debe hacer uso de esta característica.
  • Es posible que la asignación previa no produzca resultados óptimos si su sistema de archivos ya está [altamente] fragmentado y no hay agujeros de tamaño suficiente.
  • Dado que hay suficiente espacio libre para alinear los archivos correctamente:
    • En Linux, solo XFS se puede desfragmentar completamente (lo que significa que también puedes desfragmentar el espacio libre)
    • En Windows, obviamente, puedes desfragmentar completamente NTFS/VFAT.

información relacionada