dd命令详解

本文详细介绍了Linux/UNIX下的dd命令及其多种应用场景,包括文件备份、磁盘性能测试等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

定义

DD是 Linux/ UNIX 下的一个非常有用的命令,作用是用指定大小的块拷贝一个文件,并在拷贝的同时进行指定的转换。

dd指令使用 
语法格式
dd   [option] 
dd指令选项详解

if=file:输入文件名,缺省为标准输入

of=file:输出文件名,缺省为标准输出
ibs=bytes:一次读入 bytes 个字节(即一个块大小为 bytes 个字节)
obs=bytes:一次写 bytes 个字节(即一个块大小为 bytes 个字节)
bs=bytes:同时设置读写块的大小为 bytes ,可代替 ibs 和 obs
cbs=bytes:一次转换 bytes 个字节,即转换缓冲区大小
skip=blocks:从输入文件开头跳过 blocks 个块后再开始复制
seek=blocks:从输出文件开头跳过 blocks 个块后再开始复制。(通常只有当输出文件是磁盘或磁带时才有效)
count=blocks:仅拷贝 blocks 个块,块大小等于 ibs 指定的字节数
conv=ASCII:把EBCDIC码转换为ASCIl码。 
conv=ebcdic:把ASCIl码转换为EBCDIC码。 
conv=ibm:把ASCIl码转换为alternate EBCDIC码。 
conv=block:把变动位转换成固定字符。 
conv=ublock:把固定位转换成变动位。 
conv=ucase:把字母由小写转换为大写。 
conv=lcase:把字母由大写转换为小写。 
conv=notrunc:不截短输出文件。 
conv=swab:交换每一对输入字节。 
conv=noerror:出错时不停止处理。 
conv=sync:把每个输入记录的大小都调到ibs的大小(用NUL填充)。 
注意:指定数字的地方若以下列字符结尾乘以相应的数字:b=512, c=1, k=1024, w=2, xm=number m,kB=1000,K=1024,MB=1000*1000,M=1024*1024,GB=1000*1000*1000,G=1024*1024*1024 


dd使用实例 
假设了如下的情况:
要备份的数据文件:30720KB
block 0 =8 KB.
raw offset 64 KB.
设定 bs=8k
1、从raw设备备份到raw设备
dd if=/dev/rsd1b of=/dev/rsd2b bs=8k skip=8 seek=8 count=3841 
2、裸设备到文件系统
dd if=/dev/rsd1b of=/backup/df1.dbf bs=8k skip=8 count=3841 
3、文件系统到裸设备
dd if=/backup/df1.dbf of=/dev/rsd2b bs=8k seek=8 
4、文件系统到文件系统,你可以为了提升I/O把bs设为较高的数值
dd if=/oracle/dbs/df1.dbf of=/backup/df1.dbf bs=1024k 
5、备份/dev/hdx全盘数据,并利用gzip工具进行压缩,保存到指定路径(bzip2工具也一样可使用)
dd  if=/dev/hdx  |  gzip > /path/to/image.gz 

6、生成1G的虚拟块设备Sparse File(稀疏文件)
dd if=/dev/zero of=1G.img bs=1M seek=1000 count=0 

Sparse File是什么,稀疏文件,也就是说,是一个拥有空的空间的文件,磁盘块将并没分配给这些文件。如果这些空的空间填满ASCII的NULL字符,那么文件才会是实际的大小。
7、拷贝光盘数据到backup文件夹下,并保存为cd.iso文件,再进行刻录
dd  if=/dev/cdrom  of=/backup/cd.iso
cdrecord -v cd.iso
 
8、将内存里的数据拷贝到backup目录下的mem.bin文件
dd if=/dev/mem of=/backup/mem.bin bs=1024 
9、将软驱数据备份到当前目录的disk.img文件
dd if=/dev/fd0 of=disk.img count=1 bs=1440k 
10、将备份文件恢复到指定盘
dd if=/backup/df1.dbf of=/dev/rsd1b 
11、将压缩的备份文件恢复到指定盘
gzip -dc /path/to/image.gz | dd of=/dev/hdx 

12、测试磁盘写能力

time dd if=/dev/zero of=/test.dbf bs=8k count=300000 
因为/dev/zero是一个伪设备,它只产生空字符流,对它不会产生IO,所以,IO都会集中在of文件中,of文件只用于写,所以这个命令相当于测试磁盘的写能力。
13、测试磁盘读能力
time dd if=/dev/sdb1 of=/dev/null bs=8k 
因为/dev/sdb1是一个物理分区,对它的读取会产生IO,/dev/null是伪设备,相当于黑洞,of到该设备不会产生IO,所以,这个命令的IO只发生在/dev/sdb1上,也相当于测试磁盘的读能力。
14、测试同时读写能力
time dd if=/dev/sdb1 of=/test1.dbf bs=8k 
这个命令下,一个是物理分区,一个是实际的文件,对它们的读写都会产生IO(对/dev/sdb1是读,对/test1.dbf是写),假设他们都在一个磁盘中,这个命令就相当于测试磁盘的同时读写能力

15、备份磁盘开始的512Byte大小的MBR信息到指定文件
dd  if=/dev/hdx  of=/path/to/image  count=1  bs=512 
16、恢复MBR
dd if=/mnt/windows/linux.lnx of=/dev/hda bs=512 count=1

17、 得到最恰当的block size。 通过比较dd指令输出中所显示的命令执行时间(选时间最少的那个),即可确定系统最佳的block size大小
dd if=/dev/zero bs=1024 count=1000000 of=/root/1Gb.file
dd if=/dev/zero bs=2048 count=500000 of=/root/1Gb.file
dd if=/dev/zero bs=4096 count=250000 of=/root/1Gb.file
dd if=/dev/zero bs=8192 count=125000 of=/root/1Gb.file



本文转自:http://czmmiao.iteye.com/blog/1748748
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值