[转帖]Linux 中用 dd 命令来测试硬盘读写速度

linux,中用,dd,命令,测试,硬盘,读写,速度 · 浏览次数 : 0

小编点评

**dd 命令简介** `dd` 是一个用于复制文件和设备的命令行工具。它可以从一个文件复制到另一个文件,也可以从一个设备复制到另一个设备。`dd` 命令的通用语法格式如下: ``` dd if=path/to/input_file of=/path/to/output_file bs=block_size count=number_of_blocks ``` 其中: * `if` 指定了输入文件路径。缺省为标准输入。 * `of` 指定了输出文件路径。缺省为标准输出。 * `bs` 指定了每次读入的块大小。默认值为 16 字节。 * `count` 指定了复制的块数量。默认值为文件大小。 * `conv` 指定了转换文件的格式。默认值为 `none`,表示不进行转换。 * `iflag` 指定了读方式。默认值为 `direct`,表示直接从输入文件读取数据。 * `oflag` 指定了输出方式。默认值为 `direct`,表示直接写入到输出文件。 **常用选项** 一些常用的选项包括: * `append`:允许在写入数据之前追加数据。 * `b`:指定块大小为 `bytes` 的大小。默认值为 512 字节。 * `c`:设置缓冲区大小。默认值为 1 字节。 * `k`:设置块大小为 `1024 字节` 的大小。默认值为 4 字节。 * `w`:设置写入模式,默认值为 `copy`。 * `xm`:设置转换缓冲区大小。默认值为 `none`,表示不进行转换。 * `skip`:设置跳过指定数量的块。默认值为 0,表示从文件开头开始复制。 * `seek`:设置从输出文件开头跳过指定数量的块。默认值为 0,表示从文件开头开始复制。 * `count`:设置只复制指定数量的块。默认值为文件大小。 * `conv`:设置文件格式转换。默认值为 `none`,表示不进行转换。 * `iflag`:设置读方式。默认值为 `direct`,表示直接从输入文件读取数据。 * `oflag`:设置输出方式。默认值为 `direct`,表示直接写入到输出文件。 **示例** ``` dd if=text.txt of=output.txt bs=1M count=10000 ``` 这个命令将从 `text.txt` 中复制 10000 个字节到 `output.txt` 中。

正文

https://www.cnblogs.com/xiexun/p/13935443.html

 

 hdparm -T /dev/sdb    iostat 磁盘性能监控  由sysstat包提供

dd 是 Linux/UNIX 下的一个非常有用的命令,作用是用指定大小的块拷贝一个文件,并在拷贝的同时进行指定的转换。

dd 命令通用语法格式如下:

dd if=path/to/input_file of=/path/to/output_file bs=block_size count=number_of_blocks

 

命令简介
主要选项(指定数字的地方若以下列字符结尾乘以相应的数字: b=512, c=1, k=1024, w=2, xm=number m): 
if=file                 输入文件名,缺省为标准输入。 
of=file                 输出文件名,缺省为标准输出。 
ibs=bytes                一次读入 bytes 个字节(即一个块大小为 bytes 个字节)。 
obs=bytes                一次写 bytes 个字节(即一个块大小为 bytes 个字节)。 
bs=bytes                 同时设置读写块的大小为 bytes ,可代替 ibs 和 obs 。 
cbs=bytes                一次转换 bytes 个字节,即转换缓冲区大小。 
skip=blocks               从输入文件开头跳过 blocks 个块后再开始复制。 
seek=blocks                 从输出文件开头跳过 blocks 个块后再开始复制。(通常只有当输出文件是磁盘或磁带时才有效)。 
count=blocks              仅拷贝 blocks 个块,块大小等于 ibs 指定的字节数。 
conv=conversion[,conversion...]    用指定的参数转换文件。 
iflag=FLAGS              指定读的方式FLAGS,参见“FLAGS参数说明”
oflag=FLAGS              指定写的方式FLAGS,参见“FLAGS参数说明”

conv 转换参数:

ascii                  转换 EBCDIC 为 ASCII。 
ebcdic                    转换 ASCII 为 EBCDIC。 
ibm                   转换 ASCII 为 alternate EBCDIC. 
block                  把每一行转换为长度为 cbs 的记录,不足部分用空格填充。 
unblock                 使每一行的长度都为 cbs ,不足部分用空格填充。 
lcase                  把大写字符转换为小写字符。 
ucase                  把小写字符转换为大写字符。 
swab                   交换输入的每对字节。 
noerror                 出错时不停止。 
notrunc                 不截短输出文件。
sync                   把每个输入块填充到ibs个字节,不足部分用空(NUL)字符补齐。 

FLAGS 参数说明:

append -append  mode  (makes  sense  only  for output; conv=notrunc sug-gested)
direct                读写数据采用直接IO方式; directory              读写失败除非是directory; dsync                 读写数据采用同步IO; sync                 同上,但是针对是元数据 fullblock              堆积满block(accumulate full blocks of input )(iflag only); nonblock               读写数据采用非阻塞IO方式 noatime                读写数据不更新访问时间

 

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

与[转帖]Linux 中用 dd 命令来测试硬盘读写速度相似的内容:

[转帖]Linux 中用 dd 命令来测试硬盘读写速度

https://www.cnblogs.com/xiexun/p/13935443.html hdparm -T /dev/sdb iostat 磁盘性能监控 由sysstat包提供 dd 是 Linux/UNIX 下的一个非常有用的命令,作用是用指定大小的块拷贝一个文件,并在拷贝的同时进行指定的转

[转帖]Linux中最全shell命令&常用注意事项

在编辑linux脚本中不断的会用到复杂的脚本编辑,写文章记录。 Linux命令大全(手册) – 真正好用的Linux命令在线查询网站 目录 推荐书籍: Linux常用命令 Linux 常用命令 在linux shell脚本中root切换到普通用户执行脚本 Linux—shell中$(( ))、$(

[转帖]linux shell 中数组的定义和for循环遍历的方法

https://www.cnblogs.com/ysk123/p/11510718.html linux 中定义一个数据的语法为: variable=(arg1 arg2 arg3 ....) 中间用空格分开。数组的下标从0开始。 1 获取下标为n的元素: variable[n] 而且不存在数组下标

[转帖]关于Linux操作系统中LUN的队列深度(queue_depth)

Linux中的queue_depth(队列深度),可以用lsscsi查看。不过今天在我的vm 虚拟机环境中(无外界存储),是没有lsscsi命令。不过,从网上,搜到了如下的信息:$ lsscsi -l[0:0:1:0] disk FUJITSU MAM3184MP 0105 /dev/sda sta

[转帖]linux shell中 if else以及大于、小于、等于逻辑表达式介绍

https://www.jb51.net/article/34332.htm 在linux shell编程中,大多数情况下,可以使用测试命令来对条件进行测试,这里简单的介绍下,方便需要的朋友 比如比较字符串、判断文件是否存在及是否可读等,通常用"[]"来表示条件测试。注意:这里的空格很重要。要确保方

[转帖]linux 系统 UDP 丢包问题分析思路

https://cizixs.com/2018/01/13/linux-udp-packet-drop-debug/ 最近工作中遇到某个服务器应用程序 UDP 丢包,在排查过程中查阅了很多资料,总结出来这篇文章,供更多人参考。 在开始之前,我们先用一张图解释 linux 系统接收网络报文的过程。 首

[转帖]Linux常用命令:利用sed命令删除文件的特定行

http://www.dbs724.com/12806.html 前言 正常来说,我们想要删除文件中的某些行内容,一般都是先打开这个文件,然后找到要删除的内容,再然后选中这些行并按删除键进行删除,这在数据量很少时是没有问题的。但是,一旦文件中的行数据非常多,而且数据冗杂的情况下,你还要用上面的方法去

[转帖]Linux 内核内存性能调优的一些笔记

https://my.oschina.net/u/6150560/blog/7759034 一、前言 在工作生活中,我们时常会遇到一些性能问题:比如手机用久了,在滑动窗口或点击 APP 时会出现页面反应慢、卡顿等情况;比如运行在某台服务器上进程的某些性能指标(影响用户体验的 PCT99 指标等)不达

[转帖]《Linux性能优化实战》笔记(三)—— CPU 上下文切换(下)

上篇介绍了三种CPU 上下文切换以及它们可能造成的问题和原因,这一篇来看看在系统中如何发现CPU 上下文切换问题。 一、 查看上下文切换情况 主要使用两个命令:vmstat以及之前用过的pidstat。 1. vmstat # 每隔5秒输出1组数据vmstat 5 procs memory swap

[转帖]编译实战 | 手摸手教你在Windows环境下运行Redis6.x

原创:微信公众号 码农参上,欢迎分享,转载请保留出处。 哈喽大家好啊,我是没事就愿意瞎捣鼓的Hydra。 不知道有没有小伙伴像我一样,平常开发中用的是windows操作系统,有时候想装点什么软件,一看只支持linux系统,无奈要么启动虚拟机、要么装在云服务器上。 这不前几天又是这样,刚想用一下Red