dd命令的简单学习

dd,命令,简单,学习 · 浏览次数 : 306

小编点评

**dd命令简介:** `dd` 是一个用于复制、转换和格式化文件或设备的命令行工具。它可以用于以下目的: * **复制文件:**使用 `dd if=/dev/source of=/dev/target bs=8k count=100` 命令可以从 `source` 文件中复制 100 个字节的内容到 `target` 文件中。 * **转换文件:**使用 `dd if=/dev/source of=/dev/target bs=8k conv=notrunc` 命令可以从 `source` 文件中复制 8 字节的每个字节到 `target` 文件中,并将所有字节转换为小端格式。 * **格式化文件:**使用 `dd if=/dev/zero of=/dev/target bs=8k count=100` 命令可以从 `source` 文件中复制 100 个字节的零值到 `target` 文件中。 * **测试文件速度:**使用 `dd if=/dev/zero of=/dev/null bs=8k count=100` 命令可以从 `source` 文件中复制 100 个字节的零值到 `null` 文件中,并使用 `time` 命令记录文件读写速度。 **dd的常见选项:** * **append:**在文件的末尾追加内容。 * **direct:**使用直接 I/O 存取模式,避免使用缓存。 * **directory:**指定文件路径的 prefix。 * **dsync:**使用同步 I/O 存取模式。 * **fullblock:**为输入积累完整块。 * **nonblock:**使用无阻塞 I/O 存取模式。 * **noatime:**不更新存取时间。 * **nocache:**禁用缓存。 * **skip_bytes:**跳过指定字节的字节数。 * **seek_bytes:**指定从文件开头跳过的字节数。 * **name:**指定 job 的名字。 * **numjobs:**指定并发执行的作业数量。 * **time_based:**在指定时间文件后读写完成,则继续执行。 * **runtime:**指定停止进程的运行时间。 * **group_reporting:**当同时指定了 `numjobs` 了时,输出结果按组显示。

正文

dd命令简介

dd
Copy a file, converting and formatting according to the operands.
dd 可以理解为是 disk dump 磁盘转储的含义

他不仅仅可以用于测试磁盘的简要读写速度
还可以进行文件备份转储等.

命令介绍

time dd if=/dev/zero of=test bs=8k count=20k oflag=dsync oflag=dsync
time dd if=test of=/dev/null bs=8k oflag=dsync
time dd if=test of=/var/test bs=64k oflag=dsync

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

参数说明

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

dd其他功能介绍

dd if=/dev/hdx of=/dev/hdy
将本地的/dev/hdx整盘备份到/dev/hdy 
dd if=/dev/hdx of=/path/to/image
将/dev/hdx全盘数据备份到指定路径的image文件
dd if=/dev/hdx | gzip >/path/to/image.gz
备份/dev/hdx全盘数据,并利用gzip工具进行压缩,保存到指定路径恢复:
dd if=/path/to/image of=/dev/hdx
将备份文件恢复到指定盘
gzip -dc /path/to/image.gz | dd of=/dev/hdx
将压缩的备份文件恢复到指定盘

dd if=/dev/hdx of=/path/to/image count=1 bs=512
备份磁盘开始的512Byte大小的MBR信息到指定文件恢复:
       
dd if=/path/to/image of=/dev/hdx
将备份的MBR信息写到磁盘开始部分
dd if=/dev/mem of=/root/mem.bin bs=1024
将内存里的数据拷贝到root目录下的mem.bin文件
dd if=/dev/cdrom of=/root/cd.iso
拷贝光盘数据到root文件夹下,并保存为cd.iso文件 

!!!!慎用
dd if=/dev/urandom of=/dev/hda1
利用随机的数据填充硬盘,在某些必要的场合可以用来销毁数据。执行此操作以后,/dev/hda1将无法挂载,创建和拷贝操作无法执行。

From: http://blog.chinaunix.net/uid-11728685-id-5825650.html

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

  • 不建议使用dd进行性能测试的原因
1. dd命令的IO模型单一,只能测试顺序IO,不能测试随机IO。
2. dd命令可设置的参数较少,并且测试结果不一定能反映出磁盘的真实性能。
3. dd命令的设计初衷就不是用例测试性能的,在dd的手册中可以看到。
4. 无法设置队列深度,因此不推荐用dd命令来测试最大读IOPS。
  • fio的部分相关参数
常用参数:

filename: 指定文件(设备)的名称,可以通过冒号分割同时指定多个文件,如filename=/dev/sda:/dev/sdb。这个测试时直接写裸设备,有可能写坏文件系统。
directory: 设置filename的路径前缀,在后面的基准测试中,采用这种方式来指定设备。
name: 指定job的名字,在命令行中表示新启动一个job。
direct: bool类型,如果设置成true (1),表示不使用系统的 io buffer。
thread 使用pthread_create创建线程,另一种是fork创建进程。进程的开销比线程要大,一般都采用thread测试
ioengine: I/O引擎,现在fio支持19种ioengine。默认值是sync同步阻塞I/O,libaio是Linux的native异步I/O。
iodepth: 如果ioengine采用异步方式,该参数表示一批提交保持的io单元数。该参数可参考文章“Fio压测工具和io队列深度理解和误区”。
rw: I/O模式,可选 randread,randwrite,randrw
bs: I/O block大小,默认是4k。
size: 指定job处理的文件的大小。
numjobs: 指定job的克隆数(线程)。
time_based: 如果在runtime指定的时间还没到时文件就被读写完成,将继续重复知道runtime时间结束。
runtime: 指定在多少秒后停止进程。如果未指定该参数,fio将执行至指定的文件读写完全完成。
group_reporting: 当同时指定了numjobs了时,输出结果按组显示。

Study:https://www.jianshu.com/p/23a956e09b1c

fio的样例

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

# 参数解释
filename 文件位置以及名字,可以指定不同的分区进行验证
runtime 执行时间,避免测试过久,影响生产
direct=1 不使用缓存 直接走内存.
bs 指定块大小
rw 指定测试类型
rwmixread 混写读写中的读比率. 数据库一般读多写少
size指定文件大小, 避免过大.
numjobs 测试的线程数, 不建议超过CPU的核心数
-thread 不适用fork的方式进行创建, 提高测试速度
gourp_reporting 汇总测试结果.

番外: Raid的写惩罚

Raid级别 写惩罚
0 1
1 2
5 4
6 6
10 2
RAID-0:
直接的条带,数据每次写入对应物理磁盘上的一次写入

RAID-1和10:
RAID-1 和RAID-10的写惩罚很简单理解,因为数据的镜像存在的,所以一次写入会有两次。

RAID-5:
RAID-5由于要计算校验位的机制存在,
需要读数据、读校验位、写数据、写校验位四个步骤,所以RAID-5的写惩罚值是4。

RAID-6:RAID-6由于有两个校验位的存在,与RAID-5相比,
需要读取两次校验位和写入两次校验位,所以RAID-6的写惩罚值是6。

与dd命令的简单学习相似的内容:

dd命令的简单学习

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

[转帖]FIO磁盘性能测试工具

https://www.cnblogs.com/lyhabc/p/16708771.html 简介 一般我们测试硬盘或者存储的性能的时候,会用Linux系统自带的dd命令,因为是自带命令,简单易使用,因此一些客户喜欢使用dd命令来测试磁盘的读写性能。 但是用dd命令来测试性能,有如下问题: 1. d

[转帖]FIO磁盘性能测试工具

https://www.cnblogs.com/lyhabc/p/16708771.html 简介 一般我们测试硬盘或者存储的性能的时候,会用Linux系统自带的dd命令,因为是自带命令,简单易使用,因此一些客户喜欢使用dd命令来测试磁盘的读写性能。 但是用dd命令来测试性能,有如下问题: 1. d

[转帖]dd命令祥解

http://blog.chinaunix.net/uid-11728685-id-5825650.html 先简要介绍dd的参数,后边通过几个实例介绍dd的应用,参考了其他网友的资料,在此一并感谢 小菜水平有限文中有什么错误请大家指正,关于dd还有什么好的使用方法,可以贴出来,小菜会及时更新 dd

vim工具极简总结

vim工具总结 背景 很多操作记不住. 想着总结当笔记使用. 备忘 基本总结 vim somefile 打开/新建文件 i/a/insert按键 进入插入模式 insert 连续两次 进入替换模式 esc 到命令模式 ctrl+v 进入可视模式 批量操作 命令模式下: dd 删除光标所在行. GG

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

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

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

一、测试写速度: time dd if=/dev/zero of=/tmp/test bs=8k count=1000000 测试结果:565 MB/s 二、测试读速度: time dd if=/tmp/test of=/dev/null bs=8k 测试结果:4.7GB/s 三、测试读写速度: t

[转帖]dd命令中dsync和fsync区别

在Linux系统中经常会使用dd命令来测试硬盘的写入速度,命令会涉及几个常用参数:sync、dsync、fsync与fdatasync # dd if=/dev/zero of=/tmp/1G bs=4k count=256000 oflag=dsync # dd if=/dev/zero of=/

使用 Linux dd 命令测试磁盘读写性能

使用 Linux dd 命令测试磁盘读写性能 从帮助手册中可以看出,dd命令可以复制文件,根据操作数进行转换和格式化。我这里记录一下dd命令用于测试磁盘I/O性能的过程。 dd 可从标准输入或文件中读取数据,根据指定的格式来转换数据,再输出到文件、设备或标准输出。 dd 命令用法: Usage: d

操作系统开发:BIOS/MBR基础与调试

这里在实验之前需要下载 Bochs-win32-2.6.11 作者使用的是Linux版本的,在Linux写代码不太舒服,所以最好在Windows上做实验,下载好虚拟机以后还需要下载Nasm汇编器,以及GCC编译器,为了能够使用DD命令实现磁盘拷贝,这里你可以安装windows 10 下面的子系统Ub