shell快速创建文件的三种方法对比。
以下三个命令都能生产一个4G大小的文件。
1. fallocate -l 4G f1
2. dd if=/dev/zero of=f2 bs=1G count=4
3. dd if=/dev/zero of=f3 bs=1G count=0 seek=4
其中1和3 速度奇快。
md5sum f1 f2 f3
会发现生成的三个文件内容是一样的。
命令2是常规的生成文件的方式。
解释一下3,在某种场景下,我们只想让文件系统认为存在一个超大文件在此,但是并不实际写入硬盘。
此时创建的文件在文件系统中的显示大小为4G,但是并不实际占用block,因此创建速度与内存速度相当,seek的作用是跳过输出文件中指定大小的部分,这就达到了创建大文件,但是并不实际写入的目的。
(引用自https://www.cnblogs.com/Crazy-Liu/p/11095814.html)
$ time fallocate -l 3G f.3g.fallocate;
real 0m0.813s
user 0m0.000s
sys 0m0.002s
$ time dd if=/dev/zero of=f.3g.dd1 bs=1G count=3;
real 0m20.792s
user 0m0.000s
sys 0m1.634s
$ time dd if=/dev/zero of=f.3g.dd2 bs=1G count=0 seek=3;
real 0m0.001s
user 0m0.001s
sys 0m0.000s
$ md5sum f.3g*
c698c87fb53058d493492b61f4c74189 f.3g.dd1
c698c87fb53058d493492b61f4c74189 f.3g.dd2
c698c87fb53058d493492b61f4c74189 f.3g.fallocate
hexdump -C f.3gxxxx都是0x00000
md5sum f.3g.fallocate f.3g.dd1 f.3g.dd2是一样的。
即
- 123都能创建大文件
- 1和3速度奇快。
- 123内容一样,md5值一样。
那方法2和3有什么区别?(以后再想)
参考
https://www.cnblogs.com/Crazy-Liu/p/11095814.html