Ext4

在 ext4 上禁用稀疏文件支持

  • April 22, 2020

是否可以完全禁用 ext4 文件系統中的稀疏文件支持?

目的是避免磁碟碎片。

如果解決方案允許文件系統快速分配文件,而不用零(或其他)填充文件,則獎勵“無分”。

我想要的是能夠告訴應用程序創建 X 字節的文件,並且無論他們使用什麼方法來預分配文件,都會在磁碟上創建一個 X 字節的文件。我對 X 字節的“表觀大小”沒有用處,也無法控制這些應用程序的原始碼。

為了節省您一些時間,讓我已經解決了一些評論,每當有人提到稀疏文件和快速分配時,這些評論似乎總是出現

  • 我不在乎文件系統分配啟發式應該有多好。
  • 我知道不將新分配的塊歸零的安全隱患。

在 ext4 中沒有禁用稀疏文件支持的選項,但是 ext4(以及一般的 Linux 核心)支持的功能允許您在不編寫新文件系統驅動程序(或調整 ext4 驅動程序)的情況下實現解決方法。

我認為可行的是實現一個共享庫 shim,您將使用 載入它LD_PRELOAD,並且您將覆蓋所有可能導致創建稀疏文件的呼叫,以便以它們沒有的方式處理它們。在文件中分配塊的快速方法是使用posix_fallocate,它確保在返回時分配磁碟空間*,而不必將所有零寫入塊(但文件系統保證從分配的塊中讀取*將返回零)。你的墊片也必須攔截posix_fallocate,因為它也可以用來創建稀疏文件……

shims有一些限制LD_PRELOAD(尤其是 setuid 二進製文件),但它們可能不適用於您的情況。

引用自:https://unix.stackexchange.com/questions/581758