首页 > 技术文章 > Linux dd命令

xiongty 2021-05-07 10:58 原文

1、dd命令基本信息

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

    在Unix上,硬件的设备驱动(如硬盘)和特殊设备文件(如/dev/zero和/dev/random)就像普通文件一样,出现在文件系统中;只要在各自的驱动程序中实现了对应的功能,dd也可以读取或写入到这些文件。这样,dd也可以用在备份硬件的引导扇区、获取一定数量的随机数据等任务中。

简单来说 Linux dd 命令用于读取、转换并输出数据,可从标准输入或文件中读取数据,根据指定的格式来转换数据,再输出到文件、设备或标准输出。

/dev/null----空设备(无底洞/桶),你可以向它输出任何数据都会被抛弃,如果不想有输出内容可以写入它来实现不打印输出 (定向/重定向) 

/dev/zero---输入设备,可以用来初始化文件,该设备无穷尽地提供0,可以用于向设备或文件写入字符串0--可以使用任何你需要的文件大小。

2、参数说明

  • if=文件名:输入文件名,默认为标准输入。即指定源文件。
  • of=文件名:输出文件名,默认为标准输出。即指定目的文件。
  • ibs=bytes:一次读入bytes个字节,即指定一个块大小为bytes个字节。
    obs=bytes:一次输出bytes个字节,即指定一个块大小为bytes个字节。
    bs=bytes:同时设置读入/输出的块大小为bytes个字节。
  • cbs=bytes:一次转换bytes个字节,即指定转换缓冲区大小。
  • skip=blocks:从输入文件开头跳过blocks个块后再开始复制。
  • seek=blocks:从输出文件开头跳过blocks个块后再开始复制。
  • count=blocks:仅拷贝blocks个块,块大小等于ibs指定的字节数。
  • conv=<关键字>,关键字可以有以下11种:
    • conversion:用指定的参数转换文件。
    • ascii:转换ebcdic为ascii
    • ebcdic:转换ascii为ebcdic
    • ibm:转换ascii为alternate ebcdic
    • block:把每一行转换为长度为cbs,不足部分用空格填充
    • unblock:使每一行的长度都为cbs,不足部分用空格填充
    • lcase:把大写字符转换为小写字符
    • ucase:把小写字符转换为大写字符
    • swap:交换输入的每对字节
    • noerror:出错时不停止
    • notrunc:不截短输出文件
    • sync:将每个输入块填充到ibs个字节,不足部分用空(NUL)字符补齐。
  • --help:显示帮助信息
  • --version:显示版本信息

3、使用示例

 (1)数据转换:

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

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

不同情况的dd格式

从CD-ROM中创建ISO磁盘镜像:
dd if=/dev/sr0 of=myCD.iso bs=2048 conv=noerror,sync
克隆一个分区到另一个:
dd if=/dev/sda2 of=/dev/sdb2 bs=4096 conv=noerror
克隆硬盘“ad0”到“ad1”:
dd if=/dev/ad0 of=/dev/ad1 bs=1M conv=noerror

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

(2)磁盘擦除

有时需要擦除废弃磁盘,可以使用以下方法

检查驱动器上是否有数据,并将其输出到标准输出:
dd if=/dev/sda

用零擦除磁盘:(在大多数较现代的磁盘中,用零擦除会使其中的数据永久丢失。)
dd if=/dev/zero of=/dev/sda bs=4k
用零擦除磁盘会使它的数据无法被软件恢复。然而数据仍可能用特殊的实验室技术恢复。

用随机数据填充:
dd if=/dev/urandom of=/dev/sda

注意:利用随机的数据填充硬盘,在某些必要的场合可以用来销毁数据。。

(3)本地盘整备:

将本地的/dev/sdb整盘备份到/dev/sdd
dd if=/dev/sdb of=/dev/sdd

(4)本地盘备份到指定路径文件/恢复:

将/dev/sdb全盘数据备份到指定路径的test文件
dd if=/dev/sdb of=/root/test

将备份文件恢复到指定盘
dd if=/root/test of=/dev/sdb

备份/dev/sdb全盘数据,并利用gzip工具进行压缩,保存到指定路径
dd if=/dev/sdb | gzip > /root/test.gz

将压缩的备份文件恢复到指定盘
gzip -dc /root/test.gz | dd of=/dev/sdb

(5)测试磁盘的读写性能

读
dd if=/root/test00 bs=64k | dd of=/dev/null
time dd if=/home/test01 of=/dev/null
写
dd if=/dev/zero bs=1024 count=1000000 of=/root/test00
dd if=/dev/zero of=/home/test01 bs=800k count=1000

通过以上两个命令输出的命令执行时间,可以计算出硬盘的读、写速度。

(6)修复硬盘

dd if=/dev/sdb of=/dev/sdb

当硬盘较长时间放置不使用后,磁盘上会产生magnetic fluxpoint,可能导致I/O错误 可能导致硬盘报废。上边的命令有可能使这些数据起死回生。且这个过程是安全,高效的

 

以上列举内容均为常用命令,最常用于对磁盘的读写测试。

本文部分内容摘自百度百科,其他详细内容请自行查阅。

推荐阅读