dd 指令, 备份及回复资料工具


dd 是十分实用的 Linux / Unix 小工具, 它可以转换及复制档案。dd 指令可以 clone 硬盘, 备份及复原原始设备档案等。以下文章会介绍 dd 的常用例子。

dd 使用方法很简单, 默认会读取 stdin 及写入 stdout,如果要指定读取及写入的档案, 使用 “if” 及 “of” 选项。以下是 dd 常见的使用例子, 使用 dd 备份硬盘的 MBR, 假设要备份的硬盘 MBR 是 /dev/dsa, 可以使用以下指令语法:

/linux/dd

  • $ sudo dd if=/dev/sda bs=512 count=1 of=mbr.img

要使用 dd 备份 MBR 需要 root 权限, 所以要用 sudo 执行, 或 su 到 root。然后设定 dd 指令后面用 if 选项指读取 /dev/sda, 用 of 指定输出到 mbr.img。

而 bs 及 count 表示要读取的 block size 及 block 数量。由于 dd 默认 block size 是 512 bytes, 所以 bs=512 可以省略。

上面指令执行后, 会建立档案 mbr.img, 是 MBR 的备份档, 会看到类似以下的输出:

1+0 records in
1+0 records out
512 bytes copied, 0.000179891 s, 2.8 MB/s

dd 指令另一个常见例子是硬盘克隆, 例如要备份硬盘 /dev/sda, 可以用以下指令:

$ sudo dd if=/dev/sda of=/dev/another-disk

以上指令会把 /dev/sda 克隆到 /dev/another-disk, 而使用上要十分小心, 因为 dd 会直接把资料复制到目标硬盘, 目硬盘的资料会全部被删除, 而不会有惊告。

上面的指令在备份时会很慢, dd 默认的 block size 很少, 可以把 block size 加大, 它的备份速度会加快不少, 例如:

$ sudo dd if=/dev/sda of=/dev/another-disk bs=16M

可以看到上面把 block size 设定成 16MB, 这个数值在现今大多数电脑执行也没问题, 如果是较旧的电脑, 可以把数值调小一点。

dd 默认执行时不会输出内容, 这样很难看到备份的进度, 这样可以加入 status=progress, 这便会有实时的执行进度:

$ sudo dd if=/dev/sda of=/dev/another-disk bs=16M status=progress

另一个常见例子是要把硬盘内的资料删除, 这样只要把输入装置设定成 /dev/zero, 而输出装置设定成要删除资料的硬盘:

$ sudo dd if=/dev/zero of=/dev/delete-disk bs=16M status=progress

Leave a Reply