在Linux系统中经常会使用dd命令来测试硬盘的写入速度,命令会涉及几个常用参数:sync、dsync、fsync与fdatasync

# dd if=/dev/zero of=/tmp/1G bs=4k count=256000 oflag=dsync

# dd if=/dev/zero of=/tmp/1G bs=4k count=256000 oflag=sync

# dd if=/dev/zero of=/tmp/1G bs=4k count=256000 conv=fsync

# dd if=/dev/zero of=/tmp/1G bs=4k count=256000 conv=fdatasync

上面4个命令都是往硬盘中写入1G的数据,只是oflag=dsync和oflag=sync这两个的速度慢的要命。

dd --help中对各参数作用描述如下:  

Each FLAG symbol may be:

dsync           use synchronized I/O for data   // 对应oflag=dsync

sync             likewise, but also for metadata  // 对应oflag=sync

Each CONV symbol may be:

fdatasync     physically write output file data before finishing  // 对应conv=fdatasync

fsync            likewise, but also write metadata                       // 对应conv=fsync

区别:
使用dsync/sync,dd会从/dev/zero中,每次读取4Kbytes数据,然后直接写入到硬盘当中,重复此步骤,直到共读取并且写入了1G的数据。
使用fdatasync/fsync,dd会从/dev/zero中一次性读取1G的数据,写入到磁盘的缓存中,然后再从磁盘缓存中读取,一次性写入到硬盘当中。

/dev/在内存当中,和缓存一样,读取速度都非常快,因此两种方式最终的读取速度对最终的写入速度无任何影响。 换种说法,就是此处不管有没有的硬盘缓存,对IO都不产生任何影响。那也就是说,两种方式的主要差异就在于多步与一步。

dsync/sync是一次写一个bs大小的数据,同步写到磁盘后再继续写下一个IO;

fdatasync/fsync是每次写一个bs大小数据到磁盘缓存,dd命令结束前一次性将数据刷入磁盘中,因此IOPS比dsync/sync方式要高的多。

因此可以推断,使用dsync,以1G为blocksize,次数为一的方式往硬盘中写入1 Gbytes的数据,结果将不会与dd if=/dev/zero of=/tmp/1Gbytes bs=4k count=256000 conv=fdatasync有太大的差距。

CONV标识其他参数含义:

1. conv=notrunc,do not truncate the output file

2. conv=nocreat, do not create the output file

3. conv=excl,      fail if the output file already exists

FLAG标识其他参数含义:

1. oflag=direct, use direct I/O for data

2. oflag=nonblock, use non-blocking I/O

3. oflag=noatime, do not update access time

</article>

[转帖]dd命令中dsync和fsync区别的更多相关文章

  1. Linux dd命令中dsync与fdatasync的区别【转】

    在Linux系统中经常会使用dd命令来测试硬盘的写入速度,命令会涉及到两个参数:dsync与fdatasync,本文介绍一下其区别. dd if=/dev/zero of=/tmp/1Gbytes b ...

  2. [转帖]dd命令详解

    dd命令详解 https://czmmiao.iteye.com/blog/1748748 之前一直对linux的命令很恐惧 现在发现 其实不是那么复杂 要仔细学习就可以了 比如 dd = disk ...

  3. [转帖] dd 命令图解

    dd命令-->dd是disk dump的缩写,指定大小的块拷贝一个文件,同时进行指定的转换,起到一个初始化磁盘的作用  https://blog.csdn.net/jerry_1126/arti ...

  4. [转帖]Linux命令中特殊符号

    Linux命令中特殊符号 转自:http://blog.chinaunix.net/uid-16946891-id-5088144.html   在shell中常用的特殊符号罗列如下:# ; ;; . ...

  5. dd命令的conv=fsync,oflag=sync/dsync

    conv的参数有 1.sync Pad every input block to size of 'ibs' with trailing zero bytes. When used with 'blo ...

  6. Linux下使用DD命令测试磁盘读写速度

    dd是Linux/UNIX 下的一个非常有用的命令,作用是用指定大小的块拷贝一个文件,并在拷贝的同时进行指定的转换,所以可以用来测试硬盘的读写能力~ 几种常见的DD命令,先看一下区别~ dd bs=6 ...

  7. 在linux上用dd命令实现ghost功能

    ghost和g4l 安装操作系统,速度太慢,整个过程太冗长乏味了. 安装过程中,需要回答若干问题,系统需要安装无数个软件,创建和写入无数的文件.因为涉及到大量的文件定位和读写,速度一定是快不起来的. ...

  8. (6)dd命令安装Linux

    1.面对大批量服务器的安装,人们往往热衷于选择"无人值守安装"的方式,而此方式需要对服务器进行过多的配置,并不适合初学者. 无人值守安装(Kickstart),又称全自动安装,其工 ...

  9. 【转载】shell中 dd 命令

    转载自:http://blog.chinaunix.net/uid-24958038-id-3416169.html dd if=/dev/zero of=的含义是什么? 一.dd命令的解释 dd:用 ...

  10. 【转】linux 中dd命令使用详解

    原文网址:http://xiaozhuang.blog.51cto.com/4396589/850657 原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究 ...

随机推荐

  1. 第三部分_Shell脚本简单四则运算

    简单四则运算 算术运算:默认情况下,shell就只能支持简单的整数运算 运算内容:加(+).减(-).乘(*).除(/).求余数(%) 1. 四则运算符号 表达式 举例 $(( )) | echo $ ...

  2. 实时入库不用愁,HStore帮分忧

    本文分享自华为云社区<直播回顾 | 实时入库不用愁,HStore帮分忧>,作者:汀丶. 海量数据时代,如何实现数据实时入库与实时查询?GaussDB(DWS) HStore表为数据高效存储 ...

  3. KubeEdge在国家工业互联网大数据中心的架构设计与应用

    摘要:在18年的时候,工信部开展了一个叫国家创新发展工程,这个工程中提出了要建立一个国家工业大数据中心,中国移动在其中承担了边缘协同与数据采集相关功能的研发.本文将从该项目背景下面临的问题与挑战.技术 ...

  4. 一文详解特权访问管理(PAM)

    什么是特权访问管理(PAM)? 特权访问管理(Privileged Access Management)是一个包含网络安全策略和访问管理工具的解决方案,用于控制和监管和保护具有特权访问权限的用户.在之 ...

  5. 8款最佳实践,保护你的 IaC 安全!

    基础设施即代码(IaC) 是一种快速发展的技术,利用软件开发原则和实践,用软件配置基础设施.与传统的 IT 基础架构相比,IaC 可以更高效地交付软件.自动化还解锁了弹性配置的能力,该功能可在不同的负 ...

  6. 跟着字节AB工具DataTester,5步开启一个实验

    更多技术交流.求职机会,欢迎关注字节跳动数据平台微信公众号,回复[1]进入官方交流群   火山引擎A/B测试平台DataTester孵化于字节跳动业务内部,在字节跳动,"万事皆A/B,一切可 ...

  7. Solon2 开发之IoC,七、切面与函数环绕拦截

    想要环绕拦截一个 Bean 的函数.需要三个前置条件: 通过注解做为"切点",进行拦截(不能无缘无故给拦了吧?费性能) Bean 的 method 是被代理的 在 Bean 被扫描 ...

  8. 创建一个基本的FastAPI应用程序

    Python 搭建 FastAPI 项目 要生成FastAPI项目的代码,你可以使用FastAPI的脚手架工具来快速创建一个基本的FastAPI应用程序. 以下是创建一个新的FastAPI项目的步骤: ...

  9. 报错 PEP 8: expected 2 blank lines, found 1

    PyCharm 提示:PEP 8: expected 2 blank lines, found 1 类或方法前需要空两行 解决方法:Ctrl+Alt+L 格式化一下就OK了.或者手动在前面敲一行

  10. dom4j selectNodes 取不到值 因为XML带有命名空间 HL7

    xml 如下: <?xml version="1.0" encoding="UTF-8"?> <POOR_IN200901UV ITSVers ...