首页 > 技术文章 > 1,dd测试IO,经常会用到,用来简单测试某个目录的读写性能。

k8s-pod 2020-08-10 20:13 原文

dd测试IO,经常会用到,用来简单测试某个目录的读写性能。

本次测试环境:自己电脑的ubuntu系统~其他Unix/Linux系统也可以用dd.

Tips:dd操作需要三思而行,搞清楚确认没问题再进行操作!一旦方向搞反了数据就没有了。

① /var目录写速度测试,在/var目录下写入一个约800M大小的iotest文件用时测试

# dd if=/dev/zero of=/var/iotest bs=8k count=102400
102400+0 records in
102400+0 records out
838860800 bytes (839 MB) copied, 3.50779 s, 239 MB/s
# 
② /var目录读速度测试,读取/var目录下这个iotest文件用时测试

# dd if=/var/iotest of=/dev/null
1638400+0 records in
1638400+0 records out
838860800 bytes (839 MB) copied, 4.44191 s, 189 MB/s
#
③ /var目录读写速度综合测试,读取/var目录下iotest文件,写入到/var目录下的rwtest文件。

# dd if=/var/iotest of=/var/rwtest
1638400+0 records in
1638400+0 records out
838860800 bytes (839 MB) copied, 11.0764 s, 75.7 MB/s
#

 

在Linux最常用的文件生成和切片工具是dd,它功能比较全面,但无法以行为单位提取文件数据,也无法直接将文件按大小或行数进行均分(除非借助循环)。另两款数据分割工具split和csplit能够比较轻松地实现这些需求。csplit是split的升级版。

1.1 dd命令
从if指定的文件读取数据,写入到of指定的文件。使用bs指定读取和写入的块大小,使用count指定读取和写入的数据块数量,bs和count相乘就是文件总大小。可以指定skip忽略读取if指定文件的前多少个块,seek指定写入到of指定文件时忽略前多少个块。

dd if=/dev/zero of=/tmp/abc.1 bs=1M count=20
if是input file,of是output file;bs有c(1byte)、w(2bytes)、b(512bytes)、kB(1000bytes)、K(1024bytes)、MB(1000)、M(1024)和GB、G等几种单位。因此,不要随意在单位后加上字母B。

假设现有文件CentOS.iso的大小1.3G,需要将其切分后还原,切分的第一个小文件大小为500M。

dd if=/tmp/CentOS.iso of=/tmp/CentOS1.iso bs=2M count=250
生成第二个小文件,由于第二个小文件不知道具体大小,所以不指定count选项。由于第二个小文件要从第500M处开始切分,于是需要忽略CentOS.iso的前500M。假设bs=2M,于是skip掉的数据块数量为250。

dd if=/tmp/CentOS.iso of=/tmp/CentOS2.iso bs=2M skip=250
现在CentOS.iso=CentOS1.iso+CentOS2.iso。可以将CentOS[1-2].iso还原。

cat CentOS1.iso CentOS2.iso >CentOS_m.iso
比较CentOS_m.iso和CentOS.iso的md5值,它们是完全一样的。

shell> md5sum CentOS_m.iso CentOS.iso
504dbef14aed9b5990461f85d9fdc667  CentOS_m.iso
504dbef14aed9b5990461f85d9fdc667  CentOS.iso
那么seek选项呢?和skip有什么区别?skip选项是忽略读取时的前N个数据块,而seek是忽略写入文件的前N个数据块。假如要写入的文件为a.log,则seek=2时,将从a.log的第3个数据块开始追加数据,如果a.log文件本身大小就不足2个数据块,则缺少的部分自动使用/dev/zero填充。

于是,在有了CentOS1.iso的基础上,要将其还原为和CentOS.iso相同的文件,可以使用下面的方法:

dd if=/tmp/CentOS.iso of=/tmp/CentOS1.iso bs=2M skip=250 seek=250
还原后,它们的md5值也是相同的。

shell> md5sum CentOS1.iso CentOS.iso
504dbef14aed9b5990461f85d9fdc667  CentOS1.iso
504dbef14aed9b5990461f85d9fdc667  CentOS.iso

 

推荐阅读