之前建立文件我通常用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