Linux dd实战

dd命令用于读取、转换并输出数据。

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