linux下fallocate快速建立大檔案,linuxfallocate
以前建立檔案我一般用dd來建立,例如建立一個512M的檔案:
dd命令可以輕易實現建立指定大小的檔案,如
dd if=/dev/zero of=test bs=1M count=1000
會產生一個1000M的test檔案,檔案內容為全0(因從/dev/zero中讀取,/dev/zero為0源)
但是這樣為實際寫入硬碟,檔案產生速度取決於硬碟讀寫速度,如果欲產生超大檔案,速度很慢
在某種情境下,我們只想讓檔案系統認為存在一個超大檔案在此,但是並不實際寫入硬碟
則可以
dd if=/dev/zero of=test bs=1M count=0 seek=100000
此時建立的檔案在檔案系統中的顯示大小為100000MB,但是並不實際佔用block,因此建立速度與記憶體速度相當
seek的作用是跳過輸出檔案中指定大小的部分,這就達到了建立大檔案,但是並不實際寫入的目的
當然,因為不實際寫入硬碟,所(www.111cn.net)以你在容量只有10G的硬碟上建立100G的此類檔案都是可以的
記得以前做Windows開發的時候,有個API叫SetEndOfFile,可以用來將檔案內部遊標所在位置設為檔案末尾,可以用來截取或者擴充檔案,這個函數本質上相當於直接操作檔案分區表的結構,用它來作檔案擴充是不需要頻繁的填充檔案,linux下肯定也有對應的東西,即ftrunc/truncate這兩個函數。
那麼直接利用這個特性來建立大檔案的工具就肯定有人做好了,經搜尋找到了fallocate和truncate兩個命令, 以及GNU dd的seek擴充:
代碼如下 複製代碼
# fallocate -l 10G bigfile
# truncate -s 10G bigfile
# dd of=bigfile bs=1 seek=10G count=0
檔案系統對於這樣建立的檔案有特殊處理,叫疏鬆檔案,現在建立大檔案光速了,再也不用糾結等半天了。
from:http://www.111cn.net/sys/linux/55537.htm