dd命令简介

  1. dd
  2. Copy a file, converting and formatting according to the operands.
  3. dd 可以理解为是 disk dump 磁盘转储的含义
  4. 他不仅仅可以用于测试磁盘的简要读写速度
  5. 还可以进行文件备份转储等.

命令介绍

  1. time dd if=/dev/zero of=test bs=8k count=20k oflag=dsync oflag=dsync
  2. time dd if=test of=/dev/null bs=8k oflag=dsync
  3. time dd if=test of=/var/test bs=64k oflag=dsync
  4. time有计时作用,dd用于复制,从if读出,写到of
  5. if=/dev/zero不产生IO,因此可以用来测试纯写速度;
  6. 同理of=/dev/null不产生IO,可以用来测试纯读速度;
  7. 将当前目录下面的test拷贝到/var则同时测试了读写速度;
  8. bs是每次读或写的大小,即一个块的大小,count是读写块的数量
  9. oflag=dsync

参数说明

  1. flag 相关参数
  2. append 追加模式(仅对输出有意义;隐含了conv=notrunc)
  3. direct 使用直接I/O 存取模式
  4. directory 除非是目录,否则 directory 失败
  5. dsync 使用同步I/O 存取模式
  6. sync 与上者类似,但同时也对元数据生效
  7. fullblock 为输入积累完整块(仅iflag)
  8. nonblock 使用无阻塞I/O 存取模式
  9. noatime 不更新存取时间
  10. nocache Request to drop cache. See also oflag=sync
  11. noctty 不根据文件指派控制终端
  12. nofollow 不跟随链接文件
  13. count_bytes treat 'count=N' as a byte count (iflag only)
  14. skip_bytes treat 'skip=N' as a byte count (iflag only)
  15. seek_bytes treat 'seek=N' as a byte count (oflag only)

dd其他功能介绍

  1. dd if=/dev/hdx of=/dev/hdy
  2. 将本地的/dev/hdx整盘备份到/dev/hdy
  3. dd if=/dev/hdx of=/path/to/image
  4. 将/dev/hdx全盘数据备份到指定路径的image文件
  5. dd if=/dev/hdx | gzip >/path/to/image.gz
  6. 备份/dev/hdx全盘数据,并利用gzip工具进行压缩,保存到指定路径恢复:
  7. dd if=/path/to/image of=/dev/hdx
  8. 将备份文件恢复到指定盘
  9. gzip -dc /path/to/image.gz | dd of=/dev/hdx
  10. 将压缩的备份文件恢复到指定盘
  11. dd if=/dev/hdx of=/path/to/image count=1 bs=512
  12. 备份磁盘开始的512Byte大小的MBR信息到指定文件恢复:
  13. dd if=/path/to/image of=/dev/hdx
  14. 将备份的MBR信息写到磁盘开始部分
  15. dd if=/dev/mem of=/root/mem.bin bs=1024
  16. 将内存里的数据拷贝到root目录下的mem.bin文件
  17. dd if=/dev/cdrom of=/root/cd.iso
  18. 拷贝光盘数据到root文件夹下,并保存为cd.iso文件
  19. !!!!慎用
  20. dd if=/dev/urandom of=/dev/hda1
  21. 利用随机的数据填充硬盘,在某些必要的场合可以用来销毁数据。执行此操作以后,/dev/hda1将无法挂载,创建和拷贝操作无法执行。
  22. From: http://blog.chinaunix.net/uid-11728685-id-5825650.html

建议使用fio进行相关IO测试

  • 不建议使用dd进行性能测试的原因
  1. 1. dd命令的IO模型单一,只能测试顺序IO,不能测试随机IO
  2. 2. dd命令可设置的参数较少,并且测试结果不一定能反映出磁盘的真实性能。
  3. 3. dd命令的设计初衷就不是用例测试性能的,在dd的手册中可以看到。
  4. 4. 无法设置队列深度,因此不推荐用dd命令来测试最大读IOPS
  • fio的部分相关参数
  1. 常用参数:
  2. filename: 指定文件(设备)的名称,可以通过冒号分割同时指定多个文件,如filename=/dev/sda:/dev/sdb。这个测试时直接写裸设备,有可能写坏文件系统。
  3. directory: 设置filename的路径前缀,在后面的基准测试中,采用这种方式来指定设备。
  4. name: 指定job的名字,在命令行中表示新启动一个job
  5. direct: bool类型,如果设置成true (1),表示不使用系统的 io buffer
  6. thread 使用pthread_create创建线程,另一种是fork创建进程。进程的开销比线程要大,一般都采用thread测试
  7. ioengine: I/O引擎,现在fio支持19ioengine。默认值是sync同步阻塞I/OlibaioLinuxnative异步I/O
  8. iodepth: 如果ioengine采用异步方式,该参数表示一批提交保持的io单元数。该参数可参考文章“Fio压测工具和io队列深度理解和误区”。
  9. rw: I/O模式,可选 randreadrandwriterandrw
  10. bs: I/O block大小,默认是4k
  11. size: 指定job处理的文件的大小。
  12. numjobs: 指定job的克隆数(线程)。
  13. time_based: 如果在runtime指定的时间还没到时文件就被读写完成,将继续重复知道runtime时间结束。
  14. runtime: 指定在多少秒后停止进程。如果未指定该参数,fio将执行至指定的文件读写完全完成。
  15. group_reporting: 当同时指定了numjobs了时,输出结果按组显示。
  16. Studyhttps://www.jianshu.com/p/23a956e09b1c

fio的样例

  1. fio -name=8k -filename=/var/io.speedtest -runtime=30 -direct=1 -bs=8k -rw=randread -rwmixread=70 -ioengine=sync -size=4G -numjobs=50 -thread -group_reporting >randread8k_70.txt
  2. # 参数解释
  3. filename 文件位置以及名字,可以指定不同的分区进行验证
  4. runtime 执行时间,避免测试过久,影响生产
  5. direct=1 不使用缓存 直接走内存.
  6. bs 指定块大小
  7. rw 指定测试类型
  8. rwmixread 混写读写中的读比率. 数据库一般读多写少
  9. size指定文件大小, 避免过大.
  10. numjobs 测试的线程数, 不建议超过CPU的核心数
  11. -thread 不适用fork的方式进行创建, 提高测试速度
  12. gourp_reporting 汇总测试结果.

番外: Raid的写惩罚

Raid级别 写惩罚
0 1
1 2
5 4
6 6
10 2
  1. RAID-0
  2. 直接的条带,数据每次写入对应物理磁盘上的一次写入
  3. RAID-110
  4. RAID-1 RAID-10的写惩罚很简单理解,因为数据的镜像存在的,所以一次写入会有两次。
  5. RAID-5
  6. RAID-5由于要计算校验位的机制存在,
  7. 需要读数据、读校验位、写数据、写校验位四个步骤,所以RAID-5的写惩罚值是4
  8. RAID-6RAID-6由于有两个校验位的存在,与RAID-5相比,
  9. 需要读取两次校验位和写入两次校验位,所以RAID-6的写惩罚值是6

dd命令的简单学习的更多相关文章

  1. 支持 dd 命令的简单的 GUI 实用程序

    Kindd-支持 dd 命令的简单的 GUI 实用程序 "Kindd",一个属于dd 命令的图形化前端.它是自由开源的.用 Qt Quick 所写的工具.总的来说,这个工具对那些对 ...

  2. java 命令对象简单学习实现:

    命令模式:首先我们要知道命令模式的基本定义:来自客户端的请求传入一个对象,从而使你可用不同的请求对客户进行参数化.用于“行为请求者”与“行为实现者”解耦,可实现二者之间的松耦合,以便适应变化.分离变化 ...

  3. dd命令简单易用,例如

    dd命令简单易用,例如 bs单位,count为写入的范围区间,例如以下举例: 例:使用dd清除vote disk和ocr(裸设备)  $dd if=/dev/zero of=/dev/rrac_ocr ...

  4. Linux——帮助命令简单学习笔记

    Linux帮助命令简单学习笔记: 一: 命令名称:man 命令英文原意:manual 命令所在路径:/usr/bin/man 执行权限:所有用户 语法:man [命令或配置文件] 功能描述:获得帮助信 ...

  5. Shell学习(八)——dd命令

    一.dd命令的解释 dd:用指定大小的块拷贝一个文件,并在拷贝的同时进行指定的转换. 注意:指定数字的地方若以下列字符结尾,则乘以相应的数字:b=512:c=1:k=1024:w=2 参数注释: 1. ...

  6. [转]dd命令、cp命令详解+dd命令、cp命令对比 ---delong

    出处:http://blog.csdn.net/sun_app/article/details/18263299 1.dd命令详解 1)中文man手册dd的解释 NAME       dd - 转换和 ...

  7. (6)dd命令安装Linux

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

  8. 使用dd命令备份Linux分区

    为了备份分区,开始使用的是Remastersys,但最终生成的iso文件仅有几十K,应该是软件bug,且此软件不再更新,后尝试使用Linux Respin,但github一直连接不上. 其实可以尝试使 ...

  9. linux dd命令详解

    Linux-dd命令详解 dd 是 Linux/UNIX 下的一个非常有用的命令,作用是用指定大小的块拷贝一个文件,并在拷贝的同时进行指定的转换. 名称: dd 使用权限: 所有使用者dd 这个指令在 ...

  10. 使用dd命令克隆整个系统(转)

    神奇的ghost的原理是什么呢?不就是数据复制吗?Linux下的dd命令不就是最强大的数据复制工具!          既然如此,我为什么要使用g4l这样复杂的工具呢?一条dd命令不就可以帮我实现任意 ...

随机推荐

  1. 从5个函数带你理解K8s DeltaFIFO

    摘要:DeltaFIFO是K8s中用来存储处理数据的Queue,相较于传统的FIFO,它不仅仅存储了数据保证了先进先出,而且存储有K8s资源对象的类型.是连接Reflector(生产者)和indexe ...

  2. CIO们开始将软件供应链升级为安全优先级top

    开源之所以在软件开发中大量使用的原因是它提供了经过良好测试的构建块,可以加速复杂应用程序和服务的创建.但是第三方软件组件以及包和容器的便利性同时也带来了风险--软件供应链攻击. 软件供应链攻击日益普遍 ...

  3. 一文读懂火山引擎A/B测试的实验类型(3)——多链接实验

    更多技术交流.求职机会,欢迎关注字节跳动数据平台微信公众号,回复[1]进入官方交流群 一. 概述 多链接实验,也称为Split url实验,用户根据分流结果访问不同版本的url. 举个例子: 当您有两 ...

  4. Jenkins Pipeline 流水线 - 声明式 Demo

    Jenkins Pipeline 流水线 流水线既能作为任务的本身,也能作为 Jenkinsfile 使用流水线可以让我们的任务从UI手动操作,转换为代码化,像dockerfile 一样.从shell ...

  5. JAVA PDF 截取N页,生成新文件,转图片,多个PDF 合并

    JAVA PDF 截取N页,生成新文件,转图片,多个PDF 合并 <dependency> <groupId>com.itextpdf</groupId> < ...

  6. Mac下安装mysqlclient出错解决「mysql_config not found」

    错误信息如下图 解决方法 安装mysql-client brew install mysql-client 设置环境变量 export PATH=$PATH:/usr/local/Cellar/mys ...

  7. MyBatis 核心组件 —— Configuration

    概述 Mybatis 的核心组件如下所示: Configuration:用于描述 MyBatis 的主配置信息,其他组件需要获取配置信息时,直接通过 Configuration 对象获取.除此之外,M ...

  8. Python上下文管理器的高级使用

    在文件处理和网络编程时,对于打开的文件不管最后内容处理是否符合预期都要在结束时关闭文件.这时常见的处理方法是try catch finally 的方法 f = open("demo.txt& ...

  9. 关于 VS Code 用户自定义代码片段的官方 $ 命令记录

    关于 VS Code 的定义用户代码片段的部分 $ 命令 TM_SELECTED_TEXT:当前选定的文本或空字符串: 注:选定后通过在命令窗口点选「插入代码片段」插入. TM_CURRENT_LIN ...

  10. 一、@Configuration、@Conponent 、@ComponentScan 注解等

    一句话概括 区别: @Configuration 中所有带 @Bean 注解的方法都会被动态代理,因此调用该方法返回的都是同一个实例.2. 可以直接调用方法,不需要 @Autowired 注入后使用. ...