当前位置:首页 > linux教程 > 列表

linux用dd测试磁盘速度例子

发布:smiling 来源: PHP粉丝网  添加日期:2014-10-01 17:39:58 浏览: 评论:0 

首先要了解两个特殊的设备:

/dev/null:回收站、无底洞

/dev/zero:产生字符

Ø 测试磁盘写能力

time dd if=/dev/zero of=/test.dbf bs=8k count=300000

因为/dev//zero是一个伪设备,它只产生空字符流,对它不会产生IO,所以,IO都会集中在of文件中,of文件只用于写,所以这个命令相当于测试磁盘的写能力.

Ø 测试磁盘读能力

time dd if=/dev/sdb1 of=/dev/null bs=8k

因为/dev/sdb1是一个物理分区,对它的读取会产生IO,/dev/null是伪设备,相当于黑洞,of到该设备不会产生IO,所以,这个命令的IO只发生在/dev/sdb1上,也相当于测试磁盘的读能力。

Ø 测试同时读写能力

time dd if=/dev/sdb1 of=/test1.dbf bs=8k

这个命令下,一个是物理分区,一个是实际的文件,对它们的读写都会产生IO(对/dev/sdb1是读,对/test1.dbf是写),假设他们都在一个磁盘中,这个命令就相当于测试磁盘的同时读写能力.

下面直接介绍几种常见的DD命令,先看一下他的区别~

  1. dd bs=64k count=4k if=/dev/zero of=test 
  2. dd bs=64k count=4k if=/dev/zero of=test; sync 
  3. dd bs=64k count=4k if=/dev/zero of=test conv=fdatasync 
  4. dd bs=64k count=4k if=/dev/zero of=test oflag=dsync 

这四条DD命令区别在于内存中写缓存的处理方式.

1.dd bs=64k count=4k if=/dev/zero of=test

没有加任何参数,dd默认的方式不包括“同步(sync)”命令。也就是说,dd命令完成前并没有让系统真正把文件写到磁盘上。所以以上命令只是单纯地把这128MB的数据读到内存缓冲当中(写缓存[write cache])。所以你得到的将是一个超级快的速度。因为其实dd给你的只是读取速度,直到dd完成后系统才开始真正往磁盘上写数据,但这个速度你是看不到了。所以如果这个速度很快,没有什么作用。

实际运行结果:

268435456 bytes (268 MB) copied, 1.3529 seconds, 198 MB/s

2.dd bs=64k count=4k if=/dev/zero of=test; sync

和前面1中的完全一样。分号隔开的只是先后两个独立的命令。当sync命令准备开始往磁盘上真正写入数据的时候,前面dd命令已经把错误的“写入速度”值显示在屏幕上了。所以你还是得不到真正的写入速度。

实际运行结果:268435456 bytes (268 MB) copied, 0.522815 seconds, 513 MB/s

3.dd bs=64k count=4k if=/dev/zero of=test conv=fdatasync

加入这个参数后,dd命令执行到最后会真正执行一次“同步(sync)”操作,所以这时候你得到的是读取这128M数据到内存并写入到磁盘上所需的时间,这样算出来的时间才是比较符合实际使用结果的。

实际运行结果:268435456 bytes (268 MB) copied, 2.8046 seconds, 95.7 MB/s

4.dd bs=64k count=4k if=/dev/zero of=test oflag=dsync

加入这个参数后,dd在执行时每次都会进行同步写入操作。也就是说,这条命令每次读取64k后就要先把这64k写入磁盘,然后再读取下面这64k,一共重复128次。这可能是最慢的一种方式了,因为基本上没有用到写缓存(write cache)。

实际运行结果:268435456 bytes (268 MB) copied, 3.40069 seconds,78.9 MB/s

一般来说,第四种方法是最严格的,可以模拟数据库的插入操作,所以很慢,也是用来测试vps硬盘性能标准的一条标杆,一般来说测试结果,如果超过10M,对正常建站就无影响。超过50M,就是非常给力状态,看了这个vps硬盘性能非常的好,DD速度达到了78.9MB/s。

在这几条命令中,bs=64k表示同时读入/输出的块大小为64k个字节,count=4k表示拷贝块的个数为4000个,如果测试再严格一点,我们运行1G数据量的DD:

dd if=/dev/zero of=test bs=64k count=16k oflag=dsync

表示每个块大小为64k个字节,测试16k个数量的块,实际测试结果:

1073741824 bytes (1.1 GB) copied, 18.9098 seconds, 56.8 MB/s

写到这里,我觉得利用DD命令测试硬盘应该很清楚了,通常我们测试用第四条命令即可,当然DD越快并不能代表服务器的性能好坏,普通硬盘的服务器执行DD命令结果在30M左右就不错了,另外,执行DD命令测试硬盘IO性能,对硬盘的损害很大,不建议多次或长时间尝试!

例子,首先要了解两个特殊的设备:

/dev/null:回收站、无底洞

/dev/zero:产生字符

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

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

  1. [root@nagios ~]# time dd if=/dev/zero of=/var/test bs=8k count=1000000 
  2. 1000000+0 records in 
  3. 1000000+0 records out 
  4. 8192000000 bytes (8.2 GB) copied, 52.5749 seconds, 156 MB/s 
  5. real 0m55.841s 
  6. user 0m0.507s 
  7. sys 0m15.706s 

##红色部分是因为使用了time命令才显示的,因此需要time命令来计算复制的时间.

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

  1. [root@nagios ~]# time dd if=/var/test of=/dev/null bs=8k 
  2. 1000000+0 records in 
  3. 1000000+0 records out 
  4. 8192000000 bytes (8.2 GB) copied, 49.0088 seconds, 167 MB/s 
  5. real 0m49.025s 
  6. user 0m0.559s 
  7. sys 0m6.383s 

测读写速度:

  1. [root@nagios ~]# time dd if=/dev/zeroof=/tmp/test bs=64k 
  2. 125000+0 records in 
  3. 125000+0 records out 
  4. 8192000000 bytes (8.2 GB) copied, 129.239 seconds, 63.4 MB/s 
  5. real 2m9.251s  //phpfensi.com 
  6. user 0m0.114s 
  7. sys 0m21.494s 

看来这个测试结果还不错,嘿嘿.

Tags: linux磁盘 dd测试磁盘速度

分享到: