1. 程式人生 > >快速預分配磁碟空間

快速預分配磁碟空間

在開發過程中有時候需要為某個檔案快速地分配固定大小的磁碟空間,為什麼要這樣做呢?

(1)可以讓檔案儘可能的佔用連續的磁碟扇區,減少後續寫入和讀取檔案時的磁碟尋道開銷;

(2)迅速佔用磁碟空間,防止使用過程中所需空間不足。

具體的例子有windows下的Bt下載服務,或者一些基於固定大小檔案塊的儲存系統(如QFS)。

為某個檔案預分配磁碟空間必須是實際的佔用磁碟空間,以Linux來說,使用lseek或truncate到一個固定位置生成的“空洞檔案”是不會佔據真正的磁碟空間的。

快速的為某個檔案分配實際的磁碟空間在Linux下可通過fallocate(對應的posix介面為posix_fallocate)系統呼叫來實現,當前支援ext4/xfs。

windows 下可通過SetFilePointer() 和SetEndOfFile()或者SetFileValidData()實現。