Chinaunix首页 | 论坛 | 博客
  • 博客访问: 120683
  • 博文数量: 43
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 400
  • 用 户 组: 普通用户
  • 注册时间: 2016-10-14 10:31
文章分类

分类: 信息化

2016-12-19 10:09:50

dd是一个和上的命令,主要功能为转换和复制文件。

在Unix上,硬件的设备驱动(如)和特殊(如/dev/zero/dev/random)就像普通文件一样,出现在文件系统中;dd也可以读取(有时也能写入)这些文件。这样,dd也可以用在备份硬件的、取得一定数量的随机数据等任务中。dd程序也可以在复制时处理数据,例如转换、或在与编码间互换。


dd命令可用于各种用途。

数据转换 

dd可以在文件、设备、分区和卷之间复制数据。数据可以从其中任何地方输入或输出;但输出到分区时有重要差异。此外在传输过程中,数据可以用conv选项修改以适应介质。

如果最后一个块有意外长度,试图使用复制整个磁盘可能会忽略掉它;然而dd却可能成功。源和目标磁盘应该具有相同的大小。

不同情况的dd格式
dd if=/dev/sr0 of=myCD.iso bs=2048 conv=noerror,sync 从CD-ROM中创建。
dd if=/dev/sda2 of=/dev/sdb2 bs=4096 conv=noerror 一个到另一个。
dd if=/dev/ad0 of=/dev/ad1 bs=1M conv=noerror 克隆硬盘“ad0”到“ad1”。

noerror选项意味着如果发生错误,程序也将继续运行。sync选项表示填充每个块到指定字节。

备份和恢复主引导记录 

可以修复主引导记录。主引导记录可以转移到文件,或从中转移出来。

要复制软盘的前两个扇区:

dd if=/dev/fd0 of=MBRboot.img bs=512 count=2 

要创建整个的镜像(包括):

dd if=/dev/sda of=MBR.img bs=512 count=1 

要创建仅含引导代码的镜像(不包括):

dd if=/dev/sda of=MBR_boot.img bs=446 count=1 

数据修改 

dd可以原地修改数据。

用空字节覆盖文件的前512个字节:

dd if=/dev/zero of=path/to/file bs=512 count=1 conv=notrunc

转换选项notrunc意味着不缩减输出文件,也就是说,如果输出文件已经存在,只改变指定的字节,然后退出,并保留输出文件的剩余部分。没有这个选项,dd将创建一个512字节长的文件。

在不同的分区中复制磁盘分区到磁盘映像文件中:

dd if=/dev/sdb2 of=partition.image bs=4096 conv=noerror

磁盘擦除 

出于安全方面的考虑,有时需要擦除丢弃的磁盘。

检查驱动器上是否有数据,并将其输出到标准输出:

dd if=/dev/sda

用零擦除磁盘:

dd if=/dev/zero of=/dev/sda bs=4k conv=notrunc

bs=4k选项使dd一次读取或写入4。在较现代的系统中,这可以使整个进程大大加快。注意用随机数据填充磁盘总是比用零慢的多,因为随机数据必须先由CPU生成。在大多数较现代的磁盘中,用零擦除会使其中的数据永久丢失。

用零擦除磁盘会使它的数据无法被软件恢复。需要注意的是,由于,数据仍然可能通过特殊的实验室技术恢复。

程序可作为执行相同任务的高级工具。

数据恢复 

1984年,GNU dd开启了(OSS)数据、文件、驱动器和分区的历史。dd进程一次处理一个块,它的算法只是在用户界面显示运行状态。1999年10月,一个C语言的程序dd_rescue发布了。它的算法一次能处理两个块。但改进dd_rescue的数据恢复算法、2003年的shell脚本作者现在推荐GNU ddrescue它是一个发布于2004年的C++程序,与大多数的Linux发行版一起发行。在开源软件中,GNU ddrescue有最先进的块大小变换算法。(ddrescue和dd_rescue尽管名字相近,但却是不同的程序。然而,Linux发行版却将dd_rescue包装为“ddrescue”,将GNU ddrescue包装为“gddrescue”)。

GNU ddrescue既稳定又安全。下面是一个未经测试的用法,使用了ddrescue31个选项中的3个:

ddrescue -n /dev/old_disk /dev/new_disk # 快速扫描无错误区域,然后停止 ddrescue -d -r1 /dev/old_disk /dev/new_disk # 工作时直接访问磁盘的错误区域 

另一个开源程序savehd7使用更复杂的算法,但它需要安装自己的语言解释器。

驱动器性能基准测试 

对驱动器进行基准测试,使用1024字节块分析连续读取和写入的性能:

dd if=/dev/zero bs=1024 count=1000000 of=file_1GB dd if=file_1GB of=/dev/null bs=64k

用随机数据生成文件 

用100个随机字节生成文件:

dd if=/dev/random of=myrandom bs=100 count=1 

将文件转换为大写 

将文件转换为大写:

dd if=filename of=filename1 conv=ucase

创建任意大小的空文件 

创建1GiB的,或增加现有文件的大小:

dd if=/dev/zero of=mytestfile.out bs=1 count=0 seek=1G
阅读(2099) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~