磁盘IO压测工具之dd命令(磁盘性能测试)

0    58    1

Tags:

👉 本文共约4413个字,系统预计阅读时间或需17分钟。

简介

dd 也是我们经常使用到的磁盘测试工具,Linux服务器装好系统之后,想要知道硬盘的读写是否能满足服务的需要,如果不满足硬盘的IO就是服务的一个瓶颈。我们可以使用dd命令简单进行测试,更为专业的测试可以使用上面描述的fio 工具:

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

dd是linux自带的磁盘读写工具,可用于测试顺序读写。 一般而言,磁盘读写有两种方式:BufferIO、DirectIO,DirectIO可以更好的了解纯磁盘读写的性能。

dd命令是LINUX下的一个命令行工具,用于数据转换和处理。dd代表“数据复制”,它可以从一个设备或文件中读取数据,然后将数据写入到另一个设备或文件中。dd命令可以用于多种用途,包括以下几个方面:

  • 磁盘备份和克隆
  • 数据恢复
  • 空白文件创建
  • 密码破解

dd命令的特点

  • 灵活性:可以用于多种数据处理和转换操作,包括备份和克隆磁盘、数据恢复、磁盘清除、空白文件创建等。
  • 可靠性:使用底层的块设备接口读写数据,能够完整地复制数据,保证数据的一致性和完整性。
  • 高效性:可以使用多种缓存机制,提高数据传输速度,使得数据复制更加高效。
  • 灵敏度:可以使用不同的块大小和缓存大小,根据需要进行调整,适应不同的硬件和数据传输需求。
  • 通用性:可以在不同的操作系统和硬件平台上运行,具有很强的通用性。

dd命令的基本语法

dd命令的基本语法如下:

其中,optiondd命令的可选参数,用于指定dd命令的功能和操作。

dd命令常用参数

dd命令可以用指定大小的块来拷贝一个文件,并在拷贝的同时进行指定的转换。

参数注释
if=文件名输入文件名,缺省为标准输入。即指定源文件。< if=input file >
of=文件名输出文件名,缺省为标准输出。即指定目的文件。< of=output file >
ibs=bytes一次读入bytes个字节,即指定一个块大小为bytes个字节
obs=bytes一次输出bytes个字节,即指定一个块大小为bytes个字节
bs=bytes同时设置读入/输出的块大小为bytes个字节
cbs=bytes一次转换bytes个字节,即指定转换缓冲区大小
skip=blocks从输入文件开头跳过blocks个块后再开始复制
seek=blocks从输出文件开头跳过blocks个块后再开始复制
status=progress显示进度信息,例如每秒钟复制的字节数和进度百分比等

dd命令的基本用法

将一个文件复制到另一个文件中

【解释】:将input.txt文件复制到output.txt文件中,块大小为1024字节。

将一个磁盘的内容复制到另一个磁盘中

【解释】:将/dev/sda磁盘的内容复制到/dev/sdb磁盘中,块大小为4096字节。

将一个磁盘的内容复制到一个文件中

【解释】:将/dev/sda磁盘的前1000个块复制到image.img文件中,块大小为4096字节,并显示进度信息。

dd命令高级用法

除了基本的复制和转换操作,dd命令还有一些高级用法:

使用dd命令创建一个空文件

【解释】:创建一个名为newfile的文件,大小为10MB,其中每个块的大小为1MB。

5.2.2使用dd命令进行磁盘克隆

【解释】:将/dev/sda磁盘的内容复制到/dev/sdb磁盘中,块大小为4096字节。conv=noerror,sync表示在复制过程中忽略读取错误,并将输出同步到磁盘中。

使用dd命令进行数据恢复

【解释】:将/dev/sda1分区的内容复制到/mnt/usbdrive/recovered_data.img文件中,块大小为4096字节。conv=noerror,sync表示在复制过程中忽略读取错误,并将输出同步到磁盘中。

使用dd命令进行密码破解

【解释】:将/dev/sda磁盘的内容传递给john密码破解工具,用于破解磁盘中的密码。

dd测试IO

dd测试DirectIO

iops——写测试 dd if=/dev/zero of=./a.dat bs=8k count=1M oflag=direct

iops——读测试 dd if=./a.dat of=/dev/null bs=8k count=1M iflag=direct

bw——写测试 dd if=/dev/zero of=./a.dat bs=1M count=8k oflag=direct

bw——读测试 dd if=./a.dat of=/dev/null bs=1M count=8k iflag=direct

dd测试BufferIO

BufferIO主要出现在一些大文件读写的场景,由于使用内存做Cache所以读写性能上和DirectIO相比,通常会高很多,尤其是读,所以这个场景下我们仅关心bw即可。

用dd测试BufferIO的写时,需要增加一个conv=fdatasync,使用该参数,在完成所有读写后会调用一个sync确保数据全部刷到磁盘上(期间操作系统也有可能会主动flush),否则就是主要在测内存读写了;

另外还有一个参数是oflag=dsync,使用该参数也是走的BufferIO,但却是会在每次IO操作后都执行一个sync。

通常conv=fdatasync更符合大文件读写的场景,所以这里以其作为参数进行测试。

bw——写测试 dd if=/dev/zero of=./a.dat bs=1M count=8k conv=fdatasync

bw——读测试 dd if=./a.dat of=/dev/null bs=1M count=8k

示例

dd纯写速度

dd 测试读写速度,就是读当前磁盘文件,再写入当前磁盘之中。一定程度上,复制量越大,读写的时间越长,统计的结果越准。但是测试结果信息量较少,只能作为参考量,更多读写模式和测试信息:可以使用dd 命令参数来配置:

使用conv, iflag, oflag 三个变量可以配置dd 命令的复制模块式,读取模式和写入模式;

dd纯读速度

dd 命令三种经典测试

其它dd介绍

dd命令的替代工具

除了dd命令,Linux系统中还有一些其他的命令和工具可以用于复制和转换操作,例如cprsynctarddrescue等。

  • cp命令:用于复制文件和目录,可以在不同的目录之间复制文件和目录。
  • rsync命令:用于远程数据同步,可以在本地和远程系统之间同步文件和目录。
  • tar命令:用于打包和解压文件,可以将多个文件和目录打包成一个文件,并进行解压操作。
  • ddrescue命令:用于数据恢复,可以在损坏的磁盘上执行数据恢复操作。

这些命令和工具都有各自的优缺点,需要根据具体情况选择合适的工具。例如,如果需要复制文件或目录,可以使用cp命令;如果需要进行远程数据同步,可以使用rsync命令;如果需要进行数据恢复,可以使用ddrescue命令。

dd命令的常见问题

dd命令执行后没有输出?

dd命令执行时,通常不会有输出。如果需要查看操作进度,可以使用status=progress选项,例如:

dd命令执行过程中出现错误?

dd命令执行时,可能会出现错误。常见的错误包括磁盘读取错误、磁盘空间不足等。如果出现错误,可以尝试使用conv=noerror选项忽略错误,或者使用其他工具进行数据恢复。

dd命令执行后磁盘容量变小了?

dd命令执行时,可能会出现磁盘容量变小的情况。

这是因为dd命令会忽略磁盘末尾的空白区域。如果需要复制整个磁盘,可以使用conv=sync,noerror选项,例如:dd if=/dev/sda of=/dev/sdb conv=sync,noerror

dd命令可以用于病毒清除吗?

dd命令不是专门用于病毒清除的工具,但可以用于清除病毒。

如果系统感染了病毒,可以使用dd命令清除感染的磁盘分区或整个磁盘。但需要注意的是,清除病毒会导致数据丢失,因此需要提前备份重要数据。

总结

磁盘IO测试工具有fio、dd、sysbench、GreenPlum提供的gpcheckperf工具、iometer 、 Orion等。

本人提供Oracle(OCP、OCM)、MySQL(OCP)、PostgreSQL(PGCA、PGCE、PGCM)等数据库的培训和考证业务,私聊QQ646634621或微信db_bao,谢谢!

参考

https://blog.51cto.com/u_12993908/5275922

https://mp.weixin.qq.com/s/6ICAR1mWLMU1Ua6nFBe8mQ

标签:

头像

小麦苗

学习或考证,均可联系麦老师,请加微信db_bao或QQ646634621

您可能还喜欢...

发表回复

嘿,我是小麦,需要帮助随时找我哦
  • 18509239930
  • 个人微信

  • 麦老师QQ聊天
  • 个人邮箱
  • 点击加入QQ群
  • 个人微店

  • 回到顶部
返回顶部