dd是一个Unix和类Unix系统上的命令,主要功能为转换和复制文件。
在Unix上,硬件的设备驱动(如硬盘)和特殊设备文件(如/dev/zero和/dev/random)就像普通文件一样,出现在文件系统中;只要在各自的驱动程序中实现了对应的功能,dd也可以读取自和/或写入到这些文件。这样,dd也可以用在备份硬件的引导扇区、取得一定数量的随机数据等任务中。dd程序也可以在复制时处理数据,例如转换字节序、或在ASCII与EBCDIC编码间互换。
dd的名字可能来源于IBM的工作控制语言(JCL)中的DD语句,意为“Data Description”(数据描述)的缩写。该命令的语句与JCL中的相似,而与其他Unix命令较不同,因此这可能是个玩笑。
bs=4k选项使dd一次读取或写入4千字节。在现代系统中,由于传输容量(如RAID系统),一个更大的块大小可能更有利。注意用随机数据填充磁盘总是比用零慢的多,因为随机数据必须先由CPU和/或HWRNG生成,且不同的设计有不同的性能特点。(后面PRNG的/dev/urandom可能比libc中的要慢。)在大多数较现代的磁盘中,用零擦除会使其中的数据永久丢失。
用零擦除磁盘会使它的数据无法被软件恢复。然而数据仍可能用特殊的实验室技术恢复。
shred程序提供了完成相同任务的替代方法,最后,目前许多Linux发行版还提供了一个精心制作的工具wipe(做得“好”,如上面的Unix哲学),提供了更多方法擦除。
数据恢复
1984年,GNU dd开启了开源软件(OSS)恢复数据、文件、驱动器和分区的历史。dd进程一次处理一个块,它的算法只是在用户界面显示运行状态。1999年10月,一个C语言的程序[http://www.garloff.de/kurt/linux/ddrescue/ dd_rescue]发布了。它的算法一次能处理两个块。但改进dd_rescue的数据恢复算法、2003年的shell脚本[http://www.kalysto.org/utilities/dd_rhelp/index.en.html dd_rhelp]作者现在推荐[http://www.gnu.org/software/ddrescue/ddrescue.html GNU ddrescue]。它是一个发布于2004年的C++程序,与大多数的Linux发行版一起发行。在开源软件中,GNU ddrescue有最先进的块大小变换算法。(ddrescue和dd_rescue尽管名字相近,但却是不同的程序。因为如此,区分更为明确的备用名称也有使用;使用的名称有“addrescue”(freecode.com),“gddrescue”(Debian包名)和“gnu_ddrescue”(openSUSE包名)。)
GNU ddrescue既稳定又安全。
另一个开源程序savehd7使用更复杂的算法,但它需要安装自己的语言解释器。
驱动器性能基准测试
对驱动器进行基准测试(通常是单线程),使用1024字节块分析连续系统读取和写入的性能:
dd if=/dev/zero bs=1024 count=1000000 of=file_1GB
dd if=file_1GB of=/dev/null bs=1024
用随机数据生成文件
使用内核随机数驱动,用100个随机字节生成文件:
dd if=/dev/urandom 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
(更先进的工具是GNU coreutils中的fallocate或truncate。)
局限
希捷的文档警告说,“一些依赖底层硬盘访问的硬盘工具(如DD)可能不支持48位逻辑区块地址(LBA),除非进行升级”。使用超过128 GiB的ATA硬盘时需要48位LBA。然而在Linux中,dd使用内核读取或写入原始设备文件。2003年释出的2.4.23版本内核已经实现了对48位LBA的支持。
有人开玩笑说,dd意为“destroy disk”(破坏硬盘)或“delete data”(删除数据),因为在对硬盘进行底层操作时,类似颠倒输入和输出文件的一个小错误都可能造成部分或全部硬盘数据的丢失。与dd相比,dcfldd允许一个以上的输出文件,同时支持多种校验计算方法,还提供了验证模式以匹配文件,并能显示操作进度百分比。
参见
- 备份
- 硬盘克隆
- 硬盘复制
- 硬盘镜像
- Unix实用程序列表
注释
参考文献
外部链接
*
*
- [http://www.chrysocome.net/dd dd for Windows]
- [http://seed7.sourceforge.net/scrshots/savehd7.htm savehd7 - Save a potentially damaged harddisk partition]
- [http://www.gnu.org/software/ddrescue/ddrescue.html GNU ddrescue]
- [http://www.gnu.org/software/ddrescue/manual/ddrescue_manual.html GNU ddrescue手册页]
- [http://www.garloff.de/kurt/linux/ddrescue/ dd_rescue]
- [http://www.kalysto.org/utilities/dd_rhelp/index.en.html dd_rhelp]
- [http://www.softpanorama.org/Tools/dd.shtml Softpanorama dd page]
- [http://wiki.linuxquestions.org/wiki/Dd DD at Linux Questions Wiki]
- [https://web.archive.org/web/20130917155902/http://www.myfixlog.com/fix.php?fid=21 How to use ddrescue to image a damaged harddisk partition and mount it in Windows.]
- [https://web.archive.org/web/20111206091733/http://www.forensicswiki.org/wiki/Dcfldd Forensics (DD) Dcfldd]
评论 (0)