1. dd硬盘读写测速(不做实际读写):

测试纯写入性能

dd if=/dev/zero of=/dev/sdb bs=1M count=10240 oflag=direct

测试纯读取性能

dd if=/dev/sdb of=/dev/null bs=1M count=10240 iflag=direct

2. dd格式化硬盘

dd if=/dev/zero of=/dev/sdb bs=1M count=1024

3. dd复制,块级复制,只能复制文件,不能复制目录

[root@localhost ~]# echo 12345 > test.txt
[root@localhost ~]# dd if=test.txt of=dd_test.txt
0+1 records in
0+1 records out
6 bytes (6 B) copied, 0.000176888 s, 33.9 kB/s
[root@localhost ~]# cat dd_test.txt
12345
[root@localhost ~]#

4. dd扩展

4.1、
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相差不大。(重要,最有参考价值)

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

4.3、

dd bs=8k count=4k if=/dev/zero of=test.log oflag=dsync

加入这个参数后,dd在执行时每次都会进行同步写入操作。每次读取8k后就要先把这8k写入磁盘,然后再读取下面一个8k,一共重复4K次,生成一个32M文件。这是最慢的一种方式了,基本上没有用到写缓存(write cache)。也是比较准确的。

conv=fdatasync与oflag=dsync的区别在于:sync函数只是将所有修改过的块缓冲区排入写队列,然后就返回,它并不等待实际写磁盘操作结束。fsync函数只对由文件描述符filedes指定的单一文件起作用,并且等待写磁盘操作结束,然后返回。所以看到的fdatasync速度比dsync好。

4.4、
dd bs=8k count=4k if=/dev/zero of=test
没有加任何参数,dd默认的方式不包括“同步(sync)”命令(没加关于操作系统“写缓存”的参数,默认“写缓存”启作用),也就是说,dd命令完成前并没有让系统真正把文件写到磁盘上。dd先把数据写到操作系统“写缓存”,就完成了写操作。所以以上命令只是单纯地把数据读到内存缓冲当中(写缓存[write cache])。通常称为update的系统守护进程会周期性地(一般每隔30秒)调用sync函数,把“写缓存”中的数据刷入磁盘。

因为“写缓存”起作用,会测试出一个超快的性能。因为dd给的只是读取速度,直到dd完成后系统才开始真正往磁盘上写数据,但这个速度是看不到了。

fdatasync 、fsync 、dsync 几种方式,建议用哪种呢?

建议dd bs=8k count=4k  if=/dev/zero of=test.log conv=fdatasync

因为这种方式最接近计算机实际操作,所以测出来的数据最有参考价值。??

  1. dd if=/dev/zero of=test bs=64k count=16k
  这个很不准确的,因为命令结束的时候数据还没有真正写到磁盘上去

  2. dd if=/dev/zero of=test bs=64k count=16k conv=fsync
  这个还算准确,数据已经写入磁盘

  3. dd if=/dev/zero of=test bs=64k count=4k oflag=dsync
  这个可以当成是模拟数据库插入操作,所以很慢  

-dsync 可以当成是模拟数据库插入操作,在/dev/zone中读出一条数据就立即写入硬盘

-fsync 同样也是将数据已经写入磁盘,但是是在经过缓存后最后再写入硬盘

5. 监控磁盘IO

dstat

参考链接:https://www.cnblogs.com/kongzhongqijing/articles/9049336.html

最新文章

  1. ubuntu14 查找并删除所有文件名中带有特定关键词的文件
  2. C#中的委托与事件并存的理由
  3. IOS OC声明变量在@interface括号中与使用@property的区别(转载)
  4. centos 服务器配置(一) 之端口占用
  5. Kinect For Windows V2开发日志八:侦测、追踪人体骨架
  6. C#调用IOS推送
  7. 凭借5G研究优势,诺基亚将携手菲律宾将其应用于VR/AR领域
  8. python实现mysql的读写分离及负载均衡
  9. 【JAVAEE学习笔记】hibernate02:实体规则、对象状态、缓存、事务、批量查询和实现客户列表显示
  10. 如何修改script.bin/script.fex
  11. WPA/WPA2加密破解
  12. Lua 5.3 协程简单示例
  13. redux (一)
  14. 学号 20175201张驰 《Java程序设计》第5周学习总结
  15. 【HDU - 4342】History repeat itself(数学)
  16. go vendor管理Golang项目依赖
  17. python语法_变量及命名规则
  18. Codeforces 920F - SUM and REPLACE
  19. 20155202张旭《网络对抗技术》 week1 PC平台逆向破解及Bof基础实践
  20. 原创zynq文章整理(MiZ702教程+例程)

热门文章

  1. flutter系列之:UI layout简介
  2. losf命令详解
  3. 一文学会Spring JDBC 使用
  4. 前端必读:如何在 JavaScript 中使用SpreadJS导入和导出 Excel 文件
  5. 使用mysql5.7版本的mysqldump备份mysql8.0版本的数据库报错解决办法
  6. MySQL手动恢复数据库测试操作
  7. 9_SpringBoot
  8. 基于Qt Designer和PyQt5的桌面软件开发--环境搭建和入门例子
  9. PHP全栈开发(六):PHP与HTML页面交互
  10. python之流程控制上-if、while