Linux服务器想要知道硬盘的读写是否能满足服务的需要,我们可以使用Linux自带的dd命令测试硬盘的读写速度,方法如下:

Linux硬盘写入速度:

time dd if=/dev/zero of=/disk/test bs=2k count=1000000 

Linux硬盘读取速度:

time dd if=/disk/test of=/dev/null bs=2k

命令详解:

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

优化改进

sync; (time dd if=/dev/zero of=/disk/test  bs=1000K count=20000); sync; rm -f /disk/test

解释:

  1. sync 命令用来刷新文件系统的缓冲区,执行sync命令实际的作用是把内存中的数据缓冲写入到磁盘中。先执行下sync命令,是为了减少对后面测试的影响。也可以使用 echo 3 > /proc/sys/vm/drop_caches 来清除缓存。

  2. time dd 这条命令行这里就不讲了。

  3. 最后删除生成的测试文件呀。

重点是sync命令,因为当dd退出时,这条命令行提交的大部分内容都在内存缓冲区(写缓存),甚至如果机器的内存相比于你提交的数据要大得多,那可能数据都在内存中,而再执行sync才能将内存中的数据写入到磁盘中,否则就成了测试内存的写速度,那显然不是你想要的结果。

[end]