如何在 1s 内创建上百 G 的超大文件?

百家 作者:程序人生 2020-06-07 11:50:35
作者 | 写代码的明哥?
来源 | Python编程时光?
责编 | 王晓曼
常规的创建文件方式有:
  • touch

  • vi(m)

  • tee

  • >?或?>>

但是这几种都只适合创建小的文本文件,某些情况下出于测试的需要,你需要快速创建一个超大的文件,可能要上百G。这时候要使用上面几个命令,你可能要等一天的时间,效率非常低。
接下来介绍几种我常用的方法。

dd

dd 命令,可以从标准输入或指定的文件中读取数据,拷贝至新文件。
$?dd?if=/dev/zero?of=big_file?count=10?bs=1G
使用 time 命令,可以算出创建一个 10G的文件需要耗时多久?
$?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秒的时间!
$?ls?-lh?big_file?
-rw-r--r--?1?root?root?10G?Jun??2?10:57?big_file

fallocate

fallocate 命令可以为文件预分配物理空间。-l 后接空间大小,默认单位为字节。也可后跟k、m、g、t、p、e来指定单位,分别代表KB、MB、GB、TB、PB、EB。
$?fallocate?-l?10G?big_file
使用 time 命令,可以算出创建一个 10G的文件需要耗时多久?
$?time?fallocate?-l?10G?big_file
real????0m0.002s
user????0m0.000s
sys????0m0.001s
居然只有 0.001秒。
$?ls?-lh?big_file?
-rw-r--r--?1?root?root?10G?Jun??2?11:01?big_file
使用 du 命令,查看是否是真正创建了一个 10G大小的文件?从结果来看,是的。
$?du?-sh?big_file
10G????big_file

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,速度够快,也是也会真实地占用磁盘空间,符合真实的测试场景。

更多精彩推荐

?“删除中国应用”App 凭啥火爆印度?

?红警 1 游戏开源,代码非常规范,网友:秀色可餐

?头条和百度“大打出手”时,微信搜索去哪儿了?

?怒肝 8 个月源码,我成为了 Spring 开源贡献者

?干货 | 基于SRS直播平台的监控系统之实现思路与过程

?挖矿仍然有利可图吗?

你点的每个“在看”,我都认真当成了喜欢

关注公众号:拾黑(shiheibook)了解更多

[广告]赞助链接:

四季很好,只要有你,文娱排行榜:https://www.yaopaiming.com/
让资讯触达的更精准有趣:https://www.0xu.cn/

公众号 关注网络尖刀微信公众号
随时掌握互联网精彩
赞助链接