linux~dd命令

dd命令可以轻易实现创建指定大小的文件,如dd if=/dev/zero of=test bs=1M count=1000 会生成一个1000M的test文件,文件内容为全0(因从/dev/zero中读取,/dev/zero为0源),但是这样为实际写入硬盘,文件产生速度取决于硬盘读写速度,如果欲产生超大文件,速度很慢。
 
在某种场景下,我们只想让文件系统认为存在一个超大文件在此,但是并不实际写入硬盘,则可以使用 dd if=/dev/zero of=test bs=1M count=0 seek=10000,此时创建的文件在文件系统中的显示大小为10000MB,但是并不实际占用block,因此创建速度与内存速度相当
seek的作用是跳过输出文件中指定大小的部分,这就达到了创建大文件,但是并不实际写入的目的。当然,因为不实际写入硬盘,所以你在容量只有10G的硬盘上创建100G的此类文件都是可以的。
 

使用linux自带dd命令测试硬盘的读写速度:

time有计时作用,dd用于复制,从if读出,写到of。if=/dev/zero不产生IO,因此可以用来测试纯写速度。同理of=/dev/null不产生IO,可以用来测试纯读速度。bs是每次读或写的大小,即一个块的大小,count是读写块的数量。

测/data目录所在磁盘的纯写速度:

ubuser@ubuser-OptiPlex-7010:~$ time dd if=/dev/zero of=1.txt bs=8k count=100000
100000+0 records in
100000+0 records out
819200000 bytes (819 MB, 781 MiB) copied, 10.7367 s, 76.3 MB/s

real 0m11.367s
user 0m0.000s
sys 0m1.200s

测/data目录所在磁盘的纯读速度:

ubuser@ubuser-OptiPlex-7010:~$ time dd if=1.txt of=/dev/null bs=8k count=100000
100000+0 records in
100000+0 records out
819200000 bytes (819 MB, 781 MiB) copied, 0.160082 s, 5.1 GB/s

real    0m0.161s
user    0m0.008s
sys     0m0.152s

 测读写速度:

ubuser@ubuser-OptiPlex-7010:~$ time dd if=1.txt of=2.txt bs=8k count=100000
100000+0 records in
100000+0 records out
819200000 bytes (819 MB, 781 MiB) copied, 26.7008 s, 30.7 MB/s

real    0m26.765s
user    0m0.036s
sys     0m1.156s
理论上测试复制量越大测试结果越准确。
 
正常测试的时候可能不止测试一边,可能会需要很多遍求取平均值,这个测试结果在普通的重定向是没有效果的,google 后发现可以用下面的方式重定向到一个文件:
dd if=/dev/zero of=/var/test bs=8k count=1000000  2>> info,这样测试的结果就到info文件里面了
 
 

posted @ 2021-03-05 10:28  声声慢43  阅读(605)  评论(0编辑  收藏  举报