以前創建文件我一般用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