哪些 Linux 文件系统支持预分配整个文件以减少 Torrent/Gnutella 文件碎片?

哪些 Linux 文件系统支持预分配整个文件以减少 Torrent/Gnutella 文件碎片?

据我了解,至少在 Linux ext3 文件系统中,当创建一个大文件时,在数据实际写入文件的该部分之前,这些块实际上不会分配到磁盘上。当程序分配内存时,Linux 会执行类似的操作,其中分配是惰性的,并且在将数据写入页面之前实际上不会分配页面,但这是另一个主题。

当 Bittorrent 和 Gnutella 等文件共享程序写入文件时,它们会在文件的随机区域写入小块。 Linux 文件系统将文件的这些部分放在磁盘上,从而产生大量碎片。当像这样同时写入多个文件时,问题尤其严重。即使在文件共享程序中选择预分配文件似乎也没有帮助。通常只能以 10MB/秒的速度读取这些文件,并会产生大量碎片。 filefrag 实用程序可用于查看文件有多少个片段。像 /var/log/messsages 这样的文件是测试的好地方。

对于 ext3,我假设大多数其他 Linux 文件系统也是如此,实际上必须将一些数据写入整个文件,以便从头到尾真正拥有一个完全分配的文件,并且碎片最少。

我可以尝试在 Linux 中安装 NTFS 卷,但必须有更好的方法!有 ext4、btrfs、xfs、jfs、ReiserFS、ExFAT,甚至 FAT32 可供考虑!这些预分配文件中的任何一个,或者至少有一个 API 允许执行此操作,而无需首先将数据写入整个文件?

答案1

到 2024 年,以下 Linux 文件系统支持文件预分配posix_fallocate()

本地文件系统:

  • bcachefs(目前处于高度实验阶段,不建议一般使用)
  • BTFS
  • 外部4/外部3
  • F2FS
  • NTFS3(prealloc必须指定安装选项才能启用该功能)
  • FAT/FAT32
  • XFS

网络文件系统:

  • GFS2
  • 网络文件系统
  • OCFS2
  • CIFS/桑巴

重要考虑因素:

  • 应用程序必须使用此功能
  • 如果您的文件系统已经[高度]碎片并且没有足够大小的孔,则预分配可能不会产生最佳结果。
  • 假设有足够的可用空间来正确对齐文件:
    • 在 Linux 下,只有 XFS 可以完全进行碎片整理(意味着您也可以对可用空间进行碎片整理)
    • 在 Windows 中,您显然可以对 NTFS/VFAT 进行完全碎片整理。

相关内容