哪些 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 進行完全碎片整理。

相關內容