使用 Linux dd 命令测试磁盘读写性能

使用,linux,dd,命令,测试,磁盘,读写,性能 · 浏览次数 : 1279

小编点评

**使用 dd 命令测试磁盘读写性能** **步骤 1:创建测试文件** 创建一个名为 `largefile` 的文件,内容为 1GB 的数据,使用以下命令: ```bash head -c 1024M ./largefile > /dev/null ``` **步骤 2:测试读写性能** 使用 `time` 命令测试读写性能: ```bash time dd if=/dev/zero of=/dev/null bs=1M count=10241M ``` **步骤 3:测试磁盘写能力** 使用 `time` 命令测试磁盘写能力: ```bash time dd if=/dev/zero of=/testw.dbf bs=4k count=100000 ``` **步骤 4:测试磁盘读能力** 使用 `time` 命令测试磁盘读能力: ```bash time dd if=/dev/sdb of=/dev/null bs=4k count=100000 ``` **步骤 5:测试同时读写能力** 使用 `time` 命令测试同时读写能力: ```bash time dd if=/dev/sdb of=/testrw.dbf bs=4k ``` **步骤 6:测试纯写入性能** 使用 `time` 命令测试纯写入性能: ```bash time dd if=/dev/zero of=test bs=8k count=10000 oflag=direct6 ``` **步骤 7:测试纯读取性能** 使用 `time` 命令测试纯读取性能: ```bash time dd if=test of=/dev/null bs=8k count=10000 iflag=direct ``` **结果分析** 使用 `time` 命令的输出中可以获取读写和写入的速度,以及读写效率。

正文

使用 Linux dd 命令测试磁盘读写性能

从帮助手册中可以看出,dd命令可以复制文件,根据操作数进行转换和格式化。我这里记录一下dd命令用于测试磁盘I/O性能的过程。

dd 可从标准输入或文件中读取数据,根据指定的格式来转换数据,再输出到文件、设备或标准输出。

dd 命令用法:
Usage: dd [OPERAND]...
  or:  dd OPTION

dd 命令通用语法格式如下:
dd if=path/to/input_file of=/path/to/output_file bs=block_size count=number_of_blocks
##参数说明:

if=文件名:输入文件名,默认为标准输入。即指定源文件。
of=文件名:输出文件名,默认为标准输出。即指定目的文件。
ibs=bytes:一次读入bytes个字节,即指定一个块大小为bytes个字节。
obs=bytes:一次输出bytes个字节,即指定一个块大小为bytes个字节。
bs=bytes:同时设置读入/输出的块大小为bytes个字节。
cbs=bytes:一次转换bytes个字节,即指定转换缓冲区大小。
skip=blocks:从输入文件开头跳过blocks个块后再开始复制。
seek=blocks:从输出文件开头跳过blocks个块后再开始复制。
count=blocks:仅拷贝blocks个块,块大小等于ibs指定的字节数。
conv=<关键字>,关键字可以有以下11种:
    conversion:用指定的参数转换文件。
    ascii:转换ebcdic为ascii
    ebcdic:转换ascii为ebcdic
    ibm:转换ascii为alternate ebcdic
    block:把每一行转换为长度为cbs,不足部分用空格填充
    unblock:使每一行的长度都为cbs,不足部分用空格填充
    lcase:把大写字符转换为小写字符
    ucase:把小写字符转换为大写字符
    swap:交换输入的每对字节
    noerror:出错时不停止
    notrunc:不截短输出文件
    sync:将每个输入块填充到ibs个字节,不足部分用空(NUL)字符补齐。

 

time+dd 测磁盘读写速度

1、先熟悉两个特殊的设备及一些相关参数:

1) time有计时作用,dd用于复制,从if读出,写到of;

2) if=/dev/zero(产生字符)不产生IO,因此可以用来测试纯写速度;

3) 同理of=/dev/null(回收站、无底洞)不产生IO,可以用来测试纯读速度;

4) 将/tmp/test拷贝到/var则同时测试了读写速度;

5) bs是每次读或写的大小,即一个块的大小,count是读写块的数量。

当写入到驱动盘的时候,我们简单的从无穷无用字节的源 /dev/zero 读取,当从驱动盘读取的时候,我们读取的是刚才的文件,并把输出结果发送到无用的 /dev/null。
在整个操作过程中, dd 命令会跟踪数据传输的速度并且报告出结果。

2、测试磁盘写能力

time dd if=/dev/zero of=/testw.dbf bs=4k count=100000

因为/dev/zero是一个伪设备,它只产生空字符流,对它不会产生IO,所以,IO都会集中在of文件中,of文件只用于写,所以这个命令相当于测试磁盘的写能力。命令结尾添加oflag=direct将跳过内存缓存,添加oflag=sync将跳过hdd缓存。

3、测试磁盘读能力

time dd if=/dev/sdb of=/dev/null bs=4k

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

4、测试同时读写能力

time dd if=/dev/sdb of=/testrw.dbf bs=4k

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

5、测试纯写入性能

dd if=/dev/zero of=test bs=8k count=10000 oflag=direct

6、测试纯读取性能

dd if=test of=/dev/null bs=8k count=10000 iflag=direct

注意:dd 只能提供一个大概的测试结果,而且是连续 I/O 而不是随机 I/O,理论上文件规模越大,测试结果越准确。 同时,iflag/oflag 提供 direct 模式,direct 模式是把写入请求直接封装成 I/O 指令发到磁盘,非 direct 模式只是把数据写入到系统缓存就认为 I/O 成功,并由操作系统决定缓存中的数据什么时候被写入磁盘。

 

操作实例

1)写入速度

首先我们将文件写入固态硬盘

# dd if=/dev/zero of=./largefile bs=1M count=1024
1M的大小实际上是相当大的。你可以尝试用更小的尺寸如 64K 甚至是 4K 的。

2)读取速度

现在读回这个文件。但是,得首先清除内存的缓存,以确保这个文件确实是从驱动盘读取的。

运行下面的命令来清除内存缓存

# sudo sh -c "sync && echo 3 > /proc/sys/vm/drop_caches"

现在读取此文件

# dd if=./largefile of=/dev/null bs=4k

参考链接:https://www.cnblogs.com/sylar5/p/6649009.html

与使用 Linux dd 命令测试磁盘读写性能相似的内容:

使用 Linux dd 命令测试磁盘读写性能

使用 Linux dd 命令测试磁盘读写性能 从帮助手册中可以看出,dd命令可以复制文件,根据操作数进行转换和格式化。我这里记录一下dd命令用于测试磁盘I/O性能的过程。 dd 可从标准输入或文件中读取数据,根据指定的格式来转换数据,再输出到文件、设备或标准输出。 dd 命令用法: Usage: d

[转帖]FIO磁盘性能测试工具

https://www.cnblogs.com/lyhabc/p/16708771.html 简介 一般我们测试硬盘或者存储的性能的时候,会用Linux系统自带的dd命令,因为是自带命令,简单易使用,因此一些客户喜欢使用dd命令来测试磁盘的读写性能。 但是用dd命令来测试性能,有如下问题: 1. d

[转帖]FIO磁盘性能测试工具

https://www.cnblogs.com/lyhabc/p/16708771.html 简介 一般我们测试硬盘或者存储的性能的时候,会用Linux系统自带的dd命令,因为是自带命令,简单易使用,因此一些客户喜欢使用dd命令来测试磁盘的读写性能。 但是用dd命令来测试性能,有如下问题: 1. d

[转帖]dd命令中dsync和fsync区别

在Linux系统中经常会使用dd命令来测试硬盘的写入速度,命令会涉及几个常用参数:sync、dsync、fsync与fdatasync # dd if=/dev/zero of=/tmp/1G bs=4k count=256000 oflag=dsync # dd if=/dev/zero of=/

操作系统开发:BIOS/MBR基础与调试

这里在实验之前需要下载 Bochs-win32-2.6.11 作者使用的是Linux版本的,在Linux写代码不太舒服,所以最好在Windows上做实验,下载好虚拟机以后还需要下载Nasm汇编器,以及GCC编译器,为了能够使用DD命令实现磁盘拷贝,这里你可以安装windows 10 下面的子系统Ub

[转帖]使用Linux命令快速查看某一行

原创:打码日记(微信公众号ID:codelogs),欢迎分享,转载请保留出处。 简介# 当年,我还是Linux菜鸟的时候,就在简历上写着精通Linux命令了,而当面试官问我“如何快速查看某个文件的第200行,仅这一行”时,我的心里是懵逼的。 当时面试官心里估计在窃喜,从我敷衍的回答中,他应该已经完全

Linux无头模式使用mat分析dump的方法

摘要 mat可以很好的进行jvm的内存dump的分析. 但是大部分服务器是没有GUI界面的. 而且就算是有GUI界面也很难直接使用. 但是随着jvm堆区越来越大. WindowsPC机器已经很难进行分析. 所以基于此. 想着能够使用Linux进行简要分析 然后使用Windows进行打开. 根据网上查

[转帖]linux 下 {}大括号的用法

我们平时使用Linux的时候经常遇到这样一个问题,举例有这样一种情况:执行命令 $ cp /etc/apt/sources.list /etc/apt/sources.list.bak 这里面有个问题,明明 /etc/apt/sources 这几个字都是一样的,为什么要打两遍?这样的还算短了,要是更

Cygwin,在windows中使用linux命令

习惯了 linux 命令的快捷操作,使用 winodws 的 shell 感觉效率非常低下,于是开始搜寻工具支持。 刚开始搜到的是 GnuWin32,但是它已经停止更新维护了,于是找到了 Cygwin。当然 Cygwin 还有其他功能,在此不做赘述 下载安装 1. 登录 Cygwin官网下载界面,进

【转帖】Linux中如何取消ln链接?(linuxln取消)

https://www.dbs724.com/163754.html Linux系统使用ln命令可以快速创建链接,ln链接是指把文件和目录链接起来,当改变源时可以快速地改变整个目录下的文件和目录。有时候,某些文件或者目录链接起来不是我们需要的,我们需要使用Linux取消ln链接命令。下面就来简单介绍