写在最前面的
创建超大文件用来测试读写,发包率,搞事等等。
常规文件创建方法:
touch vi vim tee > >>
这些已经满足不了我对大文件日益增长的需求了,这期来记录下如何快速创建超大文件包
1 dd
derder命令
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
2 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
竟然就一毫秒,这就诡异了,简单的进行了一下分析,很大的可能是直接占用10g的空间,然后可能是直接写入盘道,总而言之是很诡异,有时间生成一个小的文件打开分析一下。
$ 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
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 的作用是指定一个文件的大小,如果该文件不存在,就会创建该文件。如果指定文件的大小小于原先的大小,会丢失内容。
这个命令指定的文件大小其实是虚拟的。只是显示出来的大小。如果你指定一个非常大的文件。其实服务器剩余空间并不会减少。