如何在 Linux 或 Unix 上使用 dd 制作磁盘映像
您可以轻松地使用 dd 命令来制作分区或整个硬盘驱动器的映像。让我们看看如何在 Linux 或 Unix 机器上使用 dd 命令制作磁盘映像。
教程详细信息 | |
---|---|
难度等级 | 简单的 |
Root 权限 | 是的 |
要求 | Linux 或 Unix 终端 |
类别 | 备份管理 |
先决条件 | dd 命令 |
操作系统兼容性 | BSD • Linux • macOS • Unix |
预计阅读时间 | 5 分钟 |
什么是 dd 磁盘映像?
磁盘克隆只不过是创建整个磁盘映像的过程。这对于复制磁盘、备份、恢复等非常有用。dd 命令是一种易于使用的工具,可用于在 Linux、BSD、macOS 或类 Unix 系统上进行此类克隆。
如何克隆整个硬盘
使用 dd 制作磁盘映像的语法如下:
dd if=/dev/input/DEVICE-HERE of=/dev/OUTPUT/DEVICE-HERE bs=64K conv=noerror,sync
要在 Linux 中将 /dev/sdc (250G) 克隆到 /dev/sdd (250G),请输入:
# dd if=/dev/sdc of=/dev/sdd bs=64K conv=noerror,sync
在此示例中,我将在 FreeBSD 中将 /dev/ada0 (250G) 克隆到 /dev/adb0 (250G),并使用 dd 制作映像。例如:
# dd if=/dev/ada0 of=/dev/adb0 bs=64K conv=noerror,sync
其中,
- if=/dev/file:输入设备/文件。
- of=/dev/file:输出设备/文件。
- bs=64k:将块大小设置为 64k。您可以使用 128k 或任何其他值。
- conv=noerror:告诉 dd 继续操作,忽略所有读取错误。
- sync:如果有任何读取错误,则添加带有零的输入块,以便数据偏移保持同步。
如何使用 dd 克隆分区并制作磁盘映像
要使用 dd 将 /dev/sdc1 克隆到 /dev/sdd1 并创建映像,请输入:
# dd if=/dev/sdc1 of=/dev/sdd1 bs=128K conv=noerror,sync
示例输出:
15874+0 records in 15873+0 records out 1040252928 bytes transferred in 3.805977 secs (273320858 bytes/sec)
使用实时 CD/DVD 或 USB 驱动器通过 dd 制作磁盘映像
您可以从实时 CD 或 USB 笔式驱动器启动。启动后,请确保没有从源硬盘驱动器安装任何分区。您可以将磁盘映像存储在外部 USB 磁盘上。语法如下
dd if=/dev/INPUT/DEVICE-NAME-HERE conv=sync,noerror bs=64K | gzip -c > /path/to/my-disk.image.gz
在此示例中,为 /dev/da0 创建磁盘映像,即克隆 /dev/da0 并保存在当前目录中:
# dd if=/dev/da0 conv=sync,noerror bs=128K | gzip -c > centos-core-7.gz
图 01:dd 命令运行情况
如何恢复系统(dd 映像)
语法为:
# gunzip -c IMAGE.HERE-GZ | dd of=/dev/OUTPUT/DEVICE-HERE
例如:
# gunzip -c centos-core-7.gz | dd of=/dev/da0
提示 #1:本地磁盘空间不足?使用远程设备
您可以通过 ssh 发送图像并将其保存在名为 server1.example.com 的删除框中:
# dd if=/dev/da0 conv=sync,noerror bs=128K | gzip -c | ssh vivek@server1.example.com 'dd of=centos-core-7.gz'
您可以使用 dd 命令查看状态,如下所示:
它将显示 10GiB 磁盘的状态如下:
# dd if=/dev/da0 conv=sync,noerror bs=128K status=progress | gzip -c | ssh vivek@server1.example.com 'dd of=centos-core-7.gz'
10674372608 bytes (11 GB, 9.9 GiB) copied, 104 s, 103 MB/s 81920+0 records in 81920+0 records out 10737418240 bytes (11 GB, 10 GiB) copied, 104.726 s, 103 MB/s 25671+1 records in 25671+1 records out 13143559 bytes (13 MB, 13 MiB) copied, 104.453 s, 126 kB/s
在哪里,
- dd if=/dev/da0 conv=sync,noerror bs=128K status=progress:制作 /dev/da0 磁盘映像并将该输出传递给 gzip 命令。
- gzip -c:压缩通过管道接收的数据并将输出写入标准输出 (stdout),同时保持原始文件不变。最后,将该数据传递给 ssh 命令。
- ssh vivek@server1.example.com 'dd of=centos-core-7.gz':登录给定的服务器并运行 dd 命令,从 gzip 命令发送的压缩数据中创建一个名为 centos-core-7.gz 的新磁盘映像。
以下是从本地系统恢复图像的方法:
语法是:
这是我将看到的:
# ssh vivek@server1.example.com 'dd if=disk.img' | dd of=/dev/sdb
## OR ##
# ssh vivek@server1.example.com 'dd if=centos-core-7.gz' | gunzip -c | dd of=/dev/sdb
## add status=progress if needed ##
# ssh vivek@server1.example.com 'dd if=centos-core-7.gz status=progress' | gunzip -c | dd of=/dev/sdb
13120000 bytes (13 MB, 13 MiB) copied, 322 s, 40.8 kB/s 25671+1 records in 25671+1 records out 13143559 bytes (13 MB, 13 MiB) copied, 321.542 s, 40.9 kB/s 20971520+0 records in 20971520+0 records out 10737418240 bytes (11 GB, 10 GiB) copied, 408.628 s, 26.3 MB/s
在哪里,
- ssh vivek@server1.example.com 'dd if=centos-core-7.gz status=progress':通过 SSH 进入给定的服务器并运行 dd 命令以读取磁盘映像。使用 shell 管道将数据发送到 gunzip 命令。
- gunzip -c:解压数据并写入标准输出。将数据发送到本地机器上的 dd 命令。
- dd of=/dev/sdb :将从“ ssh ... | gunzip ”管道接收的数据写入/dev/sdb 磁盘。
技巧 #2:使用 dd 制作图像时查看进度
您需要使用 GNU/BSD dd 和 coreutils 版本 8.24,如下所示(将 传递status=progress给 dd):
# dd if=/dev/sdc1 of=/dev/sdd1 bs=128K conv=noerror,sync status=progress
gdd (GNU DD) 在 MacOS X 上运行进度条
提示#3:保存额外信息
- 了解如何仅保存和恢复 MBR。
- 不喜欢 dd?查看6 款最佳开源磁盘克隆和映像软件。
- 想要处理 Linux 或 UNIX 下损坏的磁盘?尝试 ddrescue 命令。
总结
我希望本快速教程能帮助人们在 Linux 下克隆磁盘和分区并使用 dd 命令制作磁盘映像。有关更多信息,请使用 man 命令或 help 命令查看以下手册页:
$ man dd