参考:

https://blog.csdn.net/Franciz777/article/details/126779259

=================================================

概念介绍:

/dev/zero:

In Unix-like operating systems, /dev/zero is a special file that provides as many null characters (ASCII NULL, 0x00; not ASCII character "digit zero", "0", 0x30) as are read from it. One of the typical uses is to provide a character stream for overwriting information. Another might be to generate a clean file of a certain size. Using mmap to map /dev/zero to RAM is the BSD way of implementing shared memory.

Like /dev/null, /dev/zero acts as a source and sink for data. All writes to /dev/zero succeed with no other effects (the same as for /dev/null, although /dev/null is the more commonly used data sink); all reads on /dev/zero return as many NULs as characters requested.

这里需要知道的两个linux上的伪文件,/dev/zero 和 /dev/null,其中用的最多的是/dev/null,之所以说是伪文件是因为这两个确实不是真实的文件,但是却可以当做文件来用。/dev/null 就向一个“黑洞”,任何内容写入都不会被保存,因此常常被用作不保存结果时的输出重定向的文件;/dev/zero可以看做是一个字节流文件,或者看作是一个无限大的写满null的文件,把这个文件作为输入就相当于获得了无尽的null数据,这里需要知道的是null数据是ASCII码中的null码,而不是ASCII码中的0,1,2......中的0。

-----------------------------------------------

这里我们要有的测速硬盘的软件为dd,查看帮助文档:

(base) devil@hp:~$ dd -help
dd: 不适用的选项 -- h
请尝试执行 "dd --help" 来获取更多信息。
(base) devil@hp:~$ dd -h
dd: 不适用的选项 -- h
请尝试执行 "dd --help" 来获取更多信息。
(base) devil@hp:~$ dd -_help
dd: 不适用的选项 -- _
请尝试执行 "dd --help" 来获取更多信息。
(base) devil@hp:~$ dd --help
用法:dd [操作数] ...
 或:dd 选项
复制文件,依照指定操作数转换并格式化。 bs=字节数 一次读写的比特数(默认:512);
会覆盖 ibs 和 obs 选项
cbs=字节数 一次转换的字节数
conv=CONVS 依照每个逗号分割的符号列表转换文件
count=块数 只将复制指定数量的输入块
ibs=字节数 一次读取的字节数(默认:512)
if=文件 从指定文件而非标准输入来进行读取
iflag=标志 按照以逗号分隔的符号列表指定的方式读取
obs=字节数 一次写入指定字节数(默认:512)
of=文件 写入到指定文件而非标准输出
oflag=标志 按照以逗号分隔的符号列表指定的方式写入
seek=块数 在输出开始处跳过指定的 obs 大小的块数
skip=块数 在输入开始处跳过指定的 ibs 大小的块数
status=等级 要输出到标准错误的信息等级;
'none' 将仅输出错误信息,
'noxfer' 将不输出最终传输统计信息,
'progress' 将显示周期性的传输统计信息 块数和字节数后可以带有以下的一个或多个后缀:
c=1, w=2, b=512, kB=1000, K=1024, MB=1000*1000, M=1024*1024, xM=M,
GB=1000*1000*1000, G=1024*1024*1024 以及相应可使用 T, P, E, Z, Y。
也可使用二进制进位前缀:如 KiB=K、MiB=M 等等。 每个 CONV 符号可能为: ascii 由 EBCDIC 码转换至 ASCII 码
ebcdic 由 ASCII 码转换至 EBCDIC 码
ibm 由 ASCII 码转换至代用的 EBCDIC 码
block 在换行符结尾的记录末尾填充空格至 cbs 对应的长度
unblock 将 cbs 大小的块中尾部的空格替换为一个换行符
lcase 将大写字符转换为小写
ucase 将小写字符转换为大写
sparse 尝试寻址(seek)而非写入全空(NUL)的输出块
swab 交换每一对输入数据字节
sync 将每个输入数据块以 NUL 空字符填充至 ibs 的大小;当配合
block 或 unblock 使用时,会以空格代替 NUL 字符来填充
excl 如果输出文件已存在则认为操作失败
nocreat 不要创建输出文件
notrunc 不要截断输出文件
noerror 读取数据发生错误后仍然继续
fdatasync 结束前将输出文件数据物理上写入磁盘
fsync 与上者类似,但也将元数据一同写入 FLAG 符号可以是: append 追加模式(仅对输出有意义;隐含了conv=notrunc)
direct 使用直接I/O 存取模式
directory 除非是目录,否则操作失败
dsync 使用同步 I/O 存取模式
sync 与上者类似,但同时也对元数据生效
fullblock 为输入积累完整块(仅iflag)
nonblock 使用无阻塞I/O 存取模式
noatime 不更新访问时间
nocache 请求不使用缓存。参见 oflag=sync
noctty 不根据文件指派控制终端
nofollow 不跟随链接文件
count_bytes 把 'count=N' 看作字节计数(仅 iflag)
skip_bytes 把 'skip=N' 看作字节计数(仅 iflag)
seek_bytes 把 'seek=N' 看作字节计数(仅 oflag) 向正在运行的 'dd' 进程发送 USR1 信号可以令其向标准错误输出 I/O
统计数据并继续进行复制。 选项有: --help 显示此帮助信息并退出
--version 显示版本信息并退出 GNU coreutils 在线帮助:<https://www.gnu.org/software/coreutils/>
请向 <http://translationproject.org/team/zh_CN.html> 报告任何翻译错误
完整文档 <https://www.gnu.org/software/coreutils/dd>
或者在本地使用:info '(coreutils) dd invocation'

  

------------------------------

可以看到这个软件的设置参数比较多,不过我们常用的比较少,给出必要的参数的说明:

bs=字节数 一次读写的比特数(默认:512);测试时的每次读写的数据量大小。

if=文件 从指定文件而非标准输入来进行读取。从哪个文件里读数据。

of=文件 写入到指定文件而非标准输出。把数据写入到哪个文件。

FLAG参数:

direct 使用直接I/O 存取模式。数据写入给硬盘缓存队列后操作系统即可视为数据已经写入硬盘,由硬盘自身的电路和软件绝对如何真正分批的写入硬盘的磁盘,该方式是最高效的硬盘写入方式,现实运行中也是使用该种方式的。
dsync 使用同步 I/O 存取模式。每次操作写入数据都是需要把数据直接写入硬盘磁盘的,不在硬盘缓存中驻留,由于硬盘每次写入都是有一定延迟的(尤其机械硬盘寻道操作比较耗时),这种硬盘对操作系统的每次写入操作都直接响应后写入磁盘而不是存储在硬盘缓存的方式会极大的降低磁盘的写入效率。
sync 与上者类似,但同时也对元数据生效。和dsync同步类似,只不过对磁盘文件的元数据更新也是使用该种同步方式,写入效率几乎和dsync一样低。

写入测试:

(4k数据大小,10k次写入)

dd bs=4k count=10k if=/dev/zero of=/tmp/test oflag=direct

dd bs=4k count=10k if=/dev/zero of=/tmp/test oflag=dsync

dd bs=4k count=10k if=/dev/zero of=/tmp/test oflag=sync

(1M数据大小,10k次写入)

dd bs=1M count=10k if=/dev/zero of=/tmp/test oflag=direct

dd bs=1M count=10k if=/dev/zero of=/tmp/test oflag=dsync

dd bs=1M count=10k if=/dev/zero of=/tmp/test oflag=sync


读取测试:

(4k数据大小,10k次写入)

 sudo  dd if=/dev/sdb of=/dev/null bs=4k count=10k iflag=direct
 

 
 

(1M数据大小,10k次写入)

  sudo  dd if=/dev/sdb of=/dev/null bs=1M count=10k iflag=direct
 

=================================================

Linux磁盘/硬盘测速,dd命令的更多相关文章

  1. fio硬盘测速windows+linux

    一.FIO工具简介 Fio工具的介绍网上有很多,都是可以通用的,这里就不做太多个人描述了,直接借鉴一下 fio是一种I / O工具,用于基准测试和压力/硬件验证.它支持19种不同类型的I / O引擎( ...

  2. Linux下 网卡测速

    参考: How do I verify the speed of my NIC? Linux下 网卡测速 命令: $ sudo ethtool eth0 Settings for eth0: Supp ...

  3. 磁盘,fdisk分区,MBR,dd命令

    光盘和磁盘.u盘.软盘.硬盘有什么区别 ①光盘: cdrom/dvdrom:光驱(光盘驱动器)    rom:只读    ram:可以擦写    cd:700M    dvd:4G ②软盘:flopp ...

  4. LINUX利用Speedtest测速

    那么远程服务器呢?要知道大多数远程服务器是没有浏览器可以打开web页面的.用浏览器打开网页测速的瓶颈就在此,你不能按计划的对服务器进行定期的常规测试.这时需要到一个名为Speedtest-cli的软件 ...

  5. Linux下hdparm硬盘测速

    在Linux下可以使用hdparm对硬盘进行测试或者查看硬盘的相关信息.这样你就知道了硬盘读写速度. Hdparm功能说明:显示与设定硬盘的参数. 语 法:hdparm [-CfghiIqtTvyYZ ...

  6. linux查看主板型号及内存硬件信息,及硬盘测速

    查看主板型号: sudo  dmidecode |grep -A16 "System Information$" 内存槽及内存条: sudo  dmidecode |grep -A ...

  7. 详解hdparm: linux下的硬盘测速工具

    hdparm的功能:显示与设定硬盘的参数.hdparm可检测,显示与设定IDE或SCSI硬盘的参数. 语法: hdparm [-CfghiIqtTvyYZ][-a <快取分区>][-A & ...

  8. Linux 磁盘空间大小统计du命令常见使用方法

    版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/hongweigg/article/details/37692057 在 Linux下,能够对某个文件 ...

  9. Linux磁盘分区的实用管理命令

    系统环境:Centos6.7 命令信息: 1.lsblk  列出分区信息,可以查看分区的光在目录和使用情况  (读取内存中的分区表信息) 2.fdisk 用来创建MBR分区(也可以创建GPT分区,但是 ...

  10. Linux磁盘管理:lvcreate 常用命令

    查看当前LV及PV信息: [root@rusky ~]# hostnamectl Static hostname: localhost.localdomain Transient hostname: ...

随机推荐

  1. 《Android开发卷——自定义日期选择器(三)》

                 继 <Android开发卷--自定义日期选择器(一)>:http://blog.csdn.net/chillax_li/article/details/19047 ...

  2. element-ui 合并行或列 table :span-method(行合并)

    element-ui 官网案例:table合并行或列 element-ui官网中关于行合并的例子是根据行号进行合并的,这显然不符合我们日常开发需求,因为通常我们table中的数据都是动态生成的,所以需 ...

  3. python 日志写入文件,参数说明及动态判断文件是创建还是追加

    import logging import os ''' 格式符 含义 %(levername)s 日志级别名称 %(pathname)s 当前执行程序的路径(即脚本所在的位置) %(filename ...

  4. CLR via C# 笔记 -- 可空值类型(19)

    1. 值类型的变量永远不会为null,所有需要使用System.Nullable<T> 2. 操作数是null,结构是null:==.!=操作数都为null,则返回true:<.&g ...

  5. Electron 的 安装

    背景 因为搞嵌入式开发的时候,每次烧写不同版本的固件的时候,经常需要重命名,有时候烧错版本我也不知道: 因此我认为对固件的管理比较麻烦,所以我希望能够有一个比较好的工具来做管理,找了一圈没有发现合适的 ...

  6. ONNX Runtime入门示例:在C#中使用ResNet50v2进行图像识别

    ONNX Runtime简介 ONNX Runtime 是一个跨平台的推理和训练机器学习加速器.ONNX 运行时推理可以实现更快的客户体验和更低的成本,支持来自深度学习框架(如 PyTorch 和 T ...

  7. 哇塞,实测780MB/s!基于RK3568J与FPGA的PCIe通信案例详解

    ARM + FPGA架构有何种优势 近年来,随着中国新基建.中国制造2025的持续推进,单ARM处理器越来越难满足工业现场的功能要求,特别是能源电力.工业控制.智慧医疗等行业通常需要ARM + FPG ...

  8. 【Error】mysql的error.log中ranges: 268 max_threads: 4 split: 268 depth: 2是什么意思?

    2021-12-08T09:36:39.612332+08:00 44213799 [Note] [MY-011825] [InnoDB] Parallel scan: 4 2021-12-08T09 ...

  9. ELK日志缺失问题排查-Logstash消费过慢问题

    1. 背景 另外一个推荐系统的推荐请求追踪日志,通过ELK收集,方便遇到问题时,可以通过唯一标识sid来复现推荐过程 在一次上线之后,发现日志大量缺失,缺失率达90%,确认是由上线引起的,但因为当时没 ...

  10. (Java)常用类库

    Spring 常用工具类 Spring作为常用的开发框架,在Spring框架应用中,排在ApacheCommon.Guava.Huool等通用库后,第二优先级可以考虑使用Spring-core-xxx ...