dd命令详解

1  dd参数解析

名称:

dd - 用指定大小的块拷贝一个文件,并在拷贝的同时进行指定的转换。

 

语法:

       dd [OPERAND]

       dd OPTION

 

解析:

根据operand,拷贝一个文件,并进行转换。

bs=BYTES

      设置一次读写BYTES字节(同ibs,obs);

cbs=BYTES

       一次转换BYTES字节数;

ibs=BYTES

一次读取bytes字节;

obs=BYTES

一次写入bytes字节;

conv=CONV

      将一个文件转换为制定的格,CONV可以为参数见“CONV参数说明”;

count=BLOCKS

只拷贝输入的BLOCKS块;

if=FILE

从文件FILE中读取数据(FILE可以是文件名,也可以是设备名称);

of=FILE

向文件FILE中写入数据(FILE可以是文件名,也可以是设备名称);

seek=BLOCKS

在出文件中,跳过开头的ibs*blocks块;

skip=BLOCKS

在输入文件中,跳过开头的ibs*blocks块;

iflag=FLAGS

      指定读的方式FLAGS,参见“FLAGS参数说明”

oflag=FLAGS

      指定写的方式FLAGS,参见“FLAGS参数说明”;

status=noxfer

suppress transfer statistics

 

CONV参数说明:

ascii -转换 EBCDIC 为 ASCII。

ebcdic -转换 ASCII 为 EBCDIC。

ibm -转换ASCII 为 alternate EBCDIC.

block -把每一行转换为长度为 cbs 的记录,不足部分用空格填充。

unblock-使每一行的长度都为 cbs ,不足部分用空格填充。

lcase -把大写字符转换为小写字符。

ucase -把小写字符转换为大写字符。

nocreat -不创建心的输出文件

notruncdo -不截短输出文件

swab -交换输入的每对字节。 Unlike the Unix dd, this works when an odd number of bytes are read. If the input file contains an odd number of bytes, the last byte is simply copied (since there is nothing to swap it with).

noerror -出错时不停止。

sync -把每个输入块填充到ibs个字节,不足部分用空(NUL)字符补齐。

fdatasync -physically write output file data before finishing

fsync -同上,但也要写元数据

FLAGS参数说明:

append -append  mode  (makes  sense  only  for output; conv=notrunc sug-gested)

direct 读写数据采用直接IO方式;

directory 读写失败除非是directory;

dsync  读写数据采用同步IO;

sync   同上,但是针对是元数据

fullblock 堆积满block(accumulate full blocks of input )(iflag only);

nonblack 读写数据采用非阻塞IO方式

noatime 读写数据不更新访问时间

noctty -do not assign controlling terminal from file

nofollow -do not follow symlinks

 

OPTION说明:

--help

display this help and exit

--version

output version information and exit


2  测试实例

清单1:

要把一张软盘的内容拷贝到另一张软盘上,利用/tmp作为临时存储区。把源盘插入驱动器中,输入下述命令:

[root@RedHat home]#dd if =/dev/fd0 of = /tmp/tmpfile

拷贝完成后,将源盘从驱动器中取出,把目标盘插入,输入命令:

[root@RedHat home]# dd if = /tmp/tmpfile of =/dev/fd0

软盘拷贝完成后,应该将临时文件删除:

[root@RedHat home]#rm /tmp/tmpfile

 

清单2:

    采用dd测试硬盘的读写速度

Ø  可以通过使用dd if=/dev/zero of=/file 来测试磁盘的纯写入性能。

Ø  使用dd if=/file of=/dev/null 来测试磁盘的纯读取性能。

Ø  使用dd if=/file1 of=/file2 来测试磁盘的读写性能

测试硬盘的结果如下:

(1)测试纯写入性能

  1. root@RedHat home]# dd if=/dev/zero of=test bs=8k count=10000 oflag=direct  
  1. 10000+0 records in  
  1. 10000+0 records out  
  1. 81920000 bytes (82 MB) copied, 3.9123 s, 20.9 MB/s  

结果为20.9 MB/s。

(1)测试纯读取性能

  1. [root@RedHat home]# dd if=test of=/dev/null bs=8k count=10000 iflag=direct  
  1. 10000+0 records in  
  1. 10000+0 records out  
  1. 81920000 bytes (82 MB) copied, 0.424138 s, 193 MB/s  

结果为193 MB/s。

3 FAQ

【现象】

dd if=/dev/drbd0 of=/tmp/drbd_ldev bs=1M count=1 iflag=direct 2>/dev/null

其中/dev/drbd0挂在/var/igwb目录下。

【疑问】

1、可以使用dumpe2fs或者debugreiserfs获取drbd_ldev文件的文件系统信息,但是却不能获取touch产生文件的文件系统信息,为什么?这两者有什么差别?

2、/dev/drbd0(挂在/var/igwb目录下)文件系统格式为reiserfs,/tmp文件系统格式为ext3,dd命令执行后,产生的/tmp/drbd_ldev文件格式为什么是reiserfs而不是ext3?

【解答】

1、"dd if=/dev/drbd0 of=/tmp/drbd_ldev",该操作是将该设备上的所有内容原封不动地拷贝到drdb_ldev上。在你这个场景下,/dev/drbd0该设备上应该是一个reiserfs文件系统,那么dd出来的drbd_ldev就是一个完整的reiserfs文件系统镜像,那么drbd_ldev是包含文件系统信息的,所以dumpe2fs能获取相应的文件系统信息。而touch的文件就是一个普通文件,没有文件系统信息,自然无法获取。

 

2、drdb_ldev既然是文件系统镜像,相对它自身内部的文件系统格式当然是reiserfs。drdb_ldev在/tmp下属于ext3文件系统下的一个文件,两者不冲突。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值