Какие файловые системы Linux поддерживают предварительное выделение целых файлов для уменьшения фрагментации файлов Torrent/Gnutella?

Какие файловые системы Linux поддерживают предварительное выделение целых файлов для уменьшения фрагментации файлов Torrent/Gnutella?

Насколько я понимаю, по крайней мере, в файловой системе Linux ext3, когда создается большой файл, блоки фактически не выделяются на диске, пока данные не будут фактически записаны в эту часть файла. Linux делает то же самое, когда программы выделяют память, где выделения ленивые и страницы фактически не выделяются, пока данные не будут записаны в них, но это уже другая тема.

Когда программы обмена файлами, такие как Bittorrent и Gnutella, записывают файлы, они записывают небольшие блоки в случайные области файла. Файловая система Linux размещает эти части файла по всему диску, создавая большую фрагментацию. При записи в несколько файлов одновременно, как в этом случае, проблема становится особенно серьезной. Даже выбор предварительного выделения файлов в программе обмена файлами, похоже, не помогает. Возможность читать эти файлы со скоростью всего 10 МБ/с является типичной для такого количества фрагментации. Утилиту filefrag можно использовать для просмотра количества фрагментов в файле. Файл типа /var/log/messsages является хорошим местом для тестирования.

В ext3, как, я полагаю, и в большинстве других файловых систем Linux, некоторые данные фактически приходится записывать во весь файл, чтобы от начала до конца фактически иметь полностью выделенный файл с минимальной фрагментацией.

Я мог бы попробовать смонтировать том NTFS в Linux, но должен быть способ получше! Есть ext4, btrfs, xfs, jfs, ReiserFS, ExFAT и даже FAT32, которые стоит рассмотреть! Есть ли у кого-нибудь из них предварительное распределение файлов или, по крайней мере, API, позволяющее делать это без предварительной записи данных во весь файл?

решение1

В 2024 году следующие файловые системы Linux поддерживают предварительное распределение файлов posix_fallocate():

Локальные файловые системы:

  • bcachefs (на данный момент экспериментальный, не рекомендуется для общего использования)
  • btrfs
  • ext4/ext3
  • F2FS
  • NTFS3 ( preallocдля включения функции необходимо указать параметр монтирования)
  • VFAT/FAT32
  • XFS

Сетевые файловые системы:

  • ГФС2
  • НФС
  • OCFS2
  • CIFS/САМБА

Важные соображения:

  • Приложение должно использовать эту функцию.
  • Предварительное распределение может не дать оптимальных результатов, если ваша файловая система уже [сильно] фрагментирована и в ней нет дыр достаточного размера.
  • При наличии достаточного свободного места для правильного выравнивания файлов:
    • В Linux полностью дефрагментировать можно только XFS (то есть можно дефрагментировать и свободное пространство)
    • В Windows вы, очевидно, можете полностью дефрагментировать NTFS/VFAT.

Связанный контент