如何在 1 s内快速建立数百G超大文件?

常规的建立文件方式有:shell

  1. touch
  2. vi(m)
  3. tee
  4. >>>

可是这几种都只适合建立小的文本文件,某些状况下出于测试的须要,你须要快速建立一个超大的文件,可能要 上百G。这时候要使用上面几个命令,你可能要等一天的时间,效率很是低。服务器

接下来介绍几种我经常使用的方法测试

1. dd

dd命令,能够从标准输入或指定的文件中读取数据,拷贝至新文件。spa

$ dd if=/dev/zero of=big_file count=10 bs=1G复制代码

使用 time 命令,能够算出建立一个 10G的文件须要耗时多久?3d

$ time dd if=/dev/zero of=big_file count=10 bs=1G
10+0 records in
10+0 records out
10737418240 bytes (11 GB) copied, 7.93627 s, 1.4 GB/s

real    0m7.941s
user    0m0.000s
sys    0m7.935s复制代码

花了将近8秒的时间code

$ ls -lh big_file 
-rw-r--r-- 1 root root 10G Jun  2 10:57 big_file复制代码

2. fallocate

fallocate命令能够为文件预分配物理空间。-l后接空间大小,默认单位为字节。也可后跟k、m、g、t、p、e来指定单位,分别表明KB、MB、GB、TB、PB、EB。cdn

$ fallocate -l 10G big_file复制代码

使用 time 命令,能够算出建立一个 10G的文件须要耗时多久?blog

$ time fallocate -l 10G big_file
real    0m0.002s
user    0m0.000s
sys    0m0.001s复制代码

竟然只有 0.001秒。it

$ ls -lh big_file 
-rw-r--r-- 1 root root 10G Jun  2 11:01 big_file复制代码

使用 du 命令,查看是不是真正建立了一个 10G大小的文件?从结果来看,是的。io

$ du -sh big_file
10G    big_file复制代码

3. truncate

truncate命令能够将文件缩减或扩展为指定大小,使用-s参数设置大小。

$ truncate -s 10G big_file复制代码

使用 time 命令,能够算出建立一个 10G的文件须要耗时多久?

$ time truncate -s 10G big_file
real    0m0.001s
user    0m0.000s
sys    0m0.001s复制代码

也是只有 0.001 秒。

不过与 fallocate 不一样的是,allocate 建立的文件是真实大小,而 truncate 建立的并非。

使用 ls 和 du 命令,查看的结果是不同的。

$ ls -lh big_file 
-rw-r--r-- 1 root root 10G Jun  2 11:11 big_file

$ du -sh big_file 
0    big_file复制代码

因而可知 truncate 的做用是指定一个文件的大小,若是该文件不存在,就会建立该文件。若是指定文件的大小小于原先的大小,会丢失内容。

这个命令指定的文件大小实际上是虚拟的。只是显示出来的大小。若是你指定一个很是大的文件。其实服务器剩余空间并不会减小。


以上,是我经常使用的几种建立大文件的方法,能够根据不一样的使用场景进行选择,我通常使用的是 fallocate,速度够快,也是也会真实地占用磁盘空间,符合真实的测试场景。


相关文章
相关标签/搜索