正确的使用dd进行磁盘读写速度测试

标签: 正确 dd 磁盘 | 发表时间:2014-07-07 14:01 | 作者:elf8848
出处:http://www.iteye.com

正确的使用dd进行磁盘读写速度测试
dd是Linux/UNIX 下的一个非常有用的命令,作用是用指定大小的块拷贝一个文件,并在拷贝的同时进行指定的转换,所以可以用来测试硬盘的顺序读写能力。可以写文件,可以写裸设备。


dd语法
---------------------------------------------------------
功能说明:读取,转换并输出数据。
语  法:dd [bs=<字节数>][cbs=<字节数>][conv=<关键字>][count=<区块数>][ibs=<字节数>][if=<文件>][obs=<字节数>][of=<文件>][seek=<区块数>][skip=<区块数>][--help][--version]
补充说明:dd可从标准输入或文件读取数据,依指定的格式来转换数据,再输出到文件,设备或标准输出。
参  数:
  bs=<字节数>   将ibs( 输入)与obs(输出)设成指定的字节数。
  cbs=<字节数>   转换时,每次只转换指定的字节数。
  conv=<关键字>   指定文件转换的方式。
  count=<区块数>   仅读取指定的区块数。
  ibs=<字节数>   每次读取的字节数。
  if=<文件>   从文件读取。
  obs=<字节数>   每次输出的字节数。
  of=<文件>   输出到文件。
  seek=<区块数>   一开始输出时,跳过指定的区块数。
  skip=<区块数>   一开始读取时,跳过指定的区块数。
  --help   帮助。
  --version   显示版本信息。

dd常用参数详解
---------------------------------------------------------
if=xxx  从xxx读取,如if=/dev/zero,该设备无穷尽地提供0,(不产生读磁盘IO)
of=xxx  向xxx写出,可以写文件,可以写裸设备。如of=/dev/null,"黑洞",它等价于一个只写文件. 所有写入它的内容都会永远丢失. (不产生写磁盘IO)
bs=8k  每次读或写的大小,即一个块的大小。
count=xxx  读写块的总数量。

避免操作系统“写缓存”干扰测试成绩,使用sync、fsync、fdatasync
---------------------------------------------------------
关于sync、fsync、fdatasync请参考:http://elf8848.iteye.com/blog/2088986

dd bs=8k count=4k if=/dev/zero of=test.log conv=fsync
dd bs=8k count=4k if=/dev/zero of=test.log conv=fdatasync
dd bs=8k count=4k if=/dev/zero of=test.log oflag=dsync
dd bs=8k count=4k if=/dev/zero of=test.log  默认“写缓存”启作用
dd bs=8k count=4k if=/dev/zero of=test.log conv=sync   “写缓存”启作用
dd bs=8k count=4k if=/dev/zero of=test.log; sync   “写缓存”启作用

dd bs=8k count=4k if=/dev/zero of=test.log conv=fsync
加入这个参数后,dd命令执行到最后会真正执行一次“同步(sync)”操作,,这样算出来的时间才是比较符合实际使用结果的。conv=fsync表示把文件的“数据”和“metadata”都写入磁盘(metadata包括size、访问时间st_atime & st_mtime等等),因为文件的数据和metadata通常存在硬盘的不同地方,因此fsync至少需要两次IO写操作,fsync 与fdatasync相差不大。(重要,最有参考价值)

dd bs=8k count=4k if=/dev/zero of=test.log conv=fdatasync
加入这个参数后,dd命令执行到最后会真正执行一次“同步(sync)”操作,,这样算出来的时间才是比较符合实际使用结果的。conv=fdatasync表示只把文件的“数据”写入磁盘,fsync 与fdatasync相差不大。(重要,最有参考价值)

dd bs=8k count=4k if=/dev/zero of=test.log oflag=dsync
加入这个参数后,每次读取8k后就要先把这8k写入磁盘,然后再读取下面一个8k,一共重复4K次。这是最慢的一种方式了。

dd bs=8k count=4k if=/dev/zero of=test
没加关于操作系统“写缓存”的参数,默认“写缓存”启作用。dd先把数据写的操作系统“写缓存”,就完成了写操作。通常称为update的系统守护进程会周期性地(一般每隔30秒)调用sync函数,把“写缓存”中的数据刷入磁盘。因为“写缓存”起作用,你会测试出一个超级快的性能。
如:163840000 bytes (164 MB) copied, 0.742906 seconds, 221 MB/s

dd bs=8k count=4k if=/dev/zero of=test conv=sync 
conv=sync参数明确“写缓存”启作用,默认值就是conv=sync

dd bs=8k count=4k if=/dev/zero of=test; sync
与第1个完全一样,分号隔开的只是先后两个独立的命令。当sync命令准备开始往磁盘上真正写入数据的时候,前面dd命令已经把错误的“写入速度”值显示在屏幕上了。所以你还是得不到真正的写入速度。


裸设备测试
----------------------
1、裸设备到文件系统
dd if=/dev/rsd1b of=/backup/df1.dbf bs=8k skip=8 count=3841
2、文件系统到裸设备
dd if=/backup/df1.dbf of=/dev/rsd2b bs=8k seek=8
更多关于裸设备,请参考:http://czmmiao.iteye.com/blog/1748748



已有 0 人发表留言,猛击->> 这里<<-参与讨论


ITeye推荐



相关 [正确 dd 磁盘] 推荐:

正确的使用dd进行磁盘读写速度测试

- - 操作系统 - ITeye博客
正确的使用dd进行磁盘读写速度测试. dd是Linux/UNIX 下的一个非常有用的命令,作用是用指定大小的块拷贝一个文件,并在拷贝的同时进行指定的转换,所以可以用来测试硬盘的顺序读写能力. 功能说明:读取,转换并输出数据. 语  法:dd [bs=<字节数>][cbs=<字节数>][conv=<关键字>][count=<区块数>][ibs=<字节数>][if=<文件>][obs=<字节数>][of=<文件>][seek=<区块数>][skip=<区块数>][--help][--version].

linux用dd测试磁盘速度

- -
linux用dd测试磁盘速度. 首先要了解两个特殊的设备:. /dev/null:回收站、无底洞. /dev/zero:产生字符. 因为/dev//zero是一个伪设备,它只产生空字符流,对它不会产生IO,所以,IO都会集中在of文件中,of文件只用于写,所以这个命令相当于测试磁盘的写能力. 因为/dev/sdb1是一个物理分区,对它的读取会产生IO,/dev/null是伪设备,相当于黑洞,of到该设备不会产生IO,所以,这个命令的IO只发生在/dev/sdb1上,也相当于测试磁盘的读能力.

自制 DD-WRT 固件笔记 (1)

- Leo Pay - fcicq&#39;s blog-beta
这实在不属于 Wireless Series, 显然是个技术活…. 去年年初有篇 说说 OpenWRT,. 但好像不到二月份这只 wr841n v5 就变砖了, 也没好意思去再修.. (刷回原厂固件时, 误刷了带 u-boot 的版本, 不断重启). 最近买了 usb-ttl 线, 于是就救回来了.

Android取证:使用ADB和DD对文件系统做镜像

- - FreeBuf互联网安全新媒体平台
从本文开始我将为大家带来一系列与数字取证相关的文章,并将重点关注移动设备方面的取证技术. 在这篇文章中,我将为大家分享一些关于我对Android设备镜像采集的想法. 在Android设备上,有两种我们可以执行的镜像采集类型:. 实时采集:在正在运行的设备上执行. 通常,分析人员会使用各种工具获取root权限,并使用DD提取镜像;.

确保数据存入磁盘

- khsing - Linux@SOHU
原文:Ensuring data reaches disk. 在理想的情况下,系统崩溃、断电、磁盘访问失败这些情况是不会出现的,开发者编写程序时也不用为这些情况担忧. 不幸的是,这些情况比我们想像的还经常出现. 本文描述了数据是怎样一步步被写入磁盘上的,尤其是其中被缓冲的几个步骤. 本文也提供了数据被正确写盘的最佳实践,以确保意外发生的时候,数据不会丢失.

Erlang监测系统CPU、内存、磁盘

- chuang - Jobin的主页
Erlang的os_mon服务中提供了一些用于监测系统信息的服务. cpu_sup:监测CPU负载和使用率(Unix). disksup:监测磁盘(Unix、Windows). memsup:监测内存(Unix、Windows、VxWorks). os_sup:监测系统日志(Solaris、Windows).

RAID磁盘阵列学习笔记

- Michael - IT技术博客大学习
标签:  RAID  磁盘阵列.     RAID是“Redundant Array of Independent Disk”的缩写,中文意思是独立冗余磁盘阵列. 简单地解释,就是将N台硬盘通过RAID Controller(分Hardware,Software)结合成虚拟单台大容量的硬盘使用. RAID的采用为存储系统(或者服务器的内置存储)带来巨大利益,其中提高传输速率和提供容错功能是最大的优点.

几招省磁盘空间的方法

- - OurMySQL
   我们在工作中时常会遇到一些客户的TPS\QPS都不太高,但磁盘占用非常大,一旦单实例空间太大,像内存、网络、CPU以及备份都将增加相应的开销. 可能仅仅是由于空间不满足使得我们不得不进行扩容,下面的方法提供给大家参考.    1) 字符集是否遵循了最小化原则?(能用latin的就不用gbk.    2) 索引上是否有滥用.

linux使用FIO测试磁盘的iops

- - 企业架构 - ITeye博客
FIO是测试IOPS的非常好的工具,用来对硬件进行压力测试和验证,支持13种不同的I/O引擎,包括:sync,mmap, libaio, posixaio, SG v3, splice, null, network, syslet, guasi, solarisaio 等等. fio 官网地址: http://freshmeat.net/projects/fio/.