Ext4
在 ext4 上禁用稀疏文件支持
是否可以完全禁用 ext4 文件系統中的稀疏文件支持?
目的是避免磁碟碎片。
如果解決方案允許文件系統快速分配文件,而不用零(或其他)填充文件,則獎勵“無分”。
我想要的是能夠告訴應用程序創建 X 字節的文件,並且無論他們使用什麼方法來預分配文件,都會在磁碟上創建一個 X 字節的文件。我對 X 字節的“表觀大小”沒有用處,也無法控制這些應用程序的原始碼。
為了節省您一些時間,讓我已經解決了一些評論,每當有人提到稀疏文件和快速分配時,這些評論似乎總是出現
- 我不在乎文件系統分配啟發式應該有多好。
- 我知道不將新分配的塊歸零的安全隱患。
在 ext4 中沒有禁用稀疏文件支持的選項,但是 ext4(以及一般的 Linux 核心)支持的功能允許您在不編寫新文件系統驅動程序(或調整 ext4 驅動程序)的情況下實現解決方法。
我認為可行的是實現一個共享庫 shim,您將使用 載入它
LD_PRELOAD
,並且您將覆蓋所有可能導致創建稀疏文件的呼叫,以便以它們沒有的方式處理它們。在文件中分配塊的快速方法是使用posix_fallocate
,它確保在返回時分配磁碟空間*,而不必將所有零寫入塊(但文件系統保證從分配的塊中讀取*將返回零)。你的墊片也必須攔截posix_fallocate
,因為它也可以用來創建稀疏文件……shims有一些限制
LD_PRELOAD
(尤其是 setuid 二進製文件),但它們可能不適用於您的情況。