linux下fallocate快速建立大文件

之前建立文件我通常用dd來建立,例如建立一個512M的文件:linux

dd命令能夠輕易實現建立指定大小的文件,如函數

dd if=/dev/zero of=test bs=1M count=1000工具

會生成一個1000M的test文件,文件內容爲全0(因從/dev/zero中讀取,/dev/zero爲0源).net

可是這樣爲實際寫入硬盤,文件產生速度取決於硬盤讀寫速度,若是欲產生超大文件,速度很慢htm

在某種場景下,咱們只想讓文件系統認爲存在一個超大文件在此,可是並不實際寫入硬盤內存

則能夠開發

dd if=/dev/zero of=test bs=1M count=0 seek=100000get

此時建立的文件在文件系統中的顯示大小爲100000MB,可是並不實際佔用block,所以建立速度與內存速度至關test

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

相關文章
相關標籤/搜索