必须使用dd命令:该命令以字节级方式读取整块设备,生成含mbr/gpt、全部分区、文件系统及未分配空间的原始镜像,适用于裸机灾难恢复。

dd 命令在 Linux 运维中是底层数据操作的核心工具,既能做裸盘级镜像备份,也能测磁盘真实 I/O 性能。关键在于理解它绕过文件系统、直接读写块设备的特性,同时必须严格核对设备路径,否则极易误写系统盘导致宕机或数据丢失。
制作裸盘或分区镜像
裸盘镜像是指按字节完整复制物理设备(如 /dev/sda)或分区(如 /dev/sda1)到一个文件,可用于灾难恢复、系统迁移或取证分析。
- 整盘镜像:用 dd if=/dev/sda of=/backup/sda.img bs=4M status=progress conv=fsync。注意 of= 后是文件路径,不是设备;bs=4M 平衡速度与内存占用;conv=fsync 确保所有数据落盘,避免缓存未刷导致镜像不完整。
- 单分区镜像:如备份系统根分区,dd if=/dev/sda2 of=/backup/sda2.img bs=4M status=progress conv=noerror,fsync。加 noerror 可跳过坏扇区继续备份,适合老旧硬盘。
- 只备份 MBR(前 512 字节):dd if=/dev/sda of=mbr.bin bs=512 count=1,恢复时反向执行即可修复引导。
把镜像还原到物理设备
这是高危操作,目标设备内容会被完全覆盖,执行前务必用 lsblk 或 fdisk -l 二次确认设备名(例如 /dev/sdb 是 U 盘,不是 /dev/sdb1)。
- 整盘恢复:dd if=sda.img of=/dev/sda bs=4M status=progress conv=fsync。注意源镜像和目标设备容量需匹配,小镜像写入大硬盘会留下未初始化空间。
- 启动盘制作:dd if=ubuntu-24.04.iso of=/dev/sdb bs=4M status=progress conv=fsync。U 盘必须是整块设备(/dev/sdb),写入分区(/dev/sdb1)会导致无法启动。
测试磁盘真实读写性能
dd 测试的关键是绕过 page cache,反映硬件真实吞吐能力。使用 oflag=direct(写)和 iflag=direct(读)强制直通磁盘,避免缓存干扰。
- 写性能测试:dd if=/dev/zero of=/mnt/testwrite bs=1M count=1024 oflag=direct。生成 1GB 零文件,输出中 “bytes/sec” 即为持续写速。
- 读性能测试:dd if=/mnt/testwrite of=/dev/null bs=1M iflag=direct。从刚写入的文件读取并丢弃,测得的是纯读速。
- 注意:测试文件需放在待测磁盘上(如 /mnt 是挂载点),且建议多次运行取稳定值;小块(如 bs=4K)可测随机 IO,大块(bs=1M)更反映顺序吞吐。
安全操作要点
dd 没有撤销机制,命令一旦执行,后果立即生效。
- 永远先用 lsblk 查清目标设备,区分 sda/sdb、sda/sda1;可临时拔掉无关磁盘减少误操作风险。
- 首次执行前,在命令末尾加 --dry-run 不生效(dd 本身不支持),但可用 echo 预览:echo "dd if=... of=..." 确认无误再删掉 echo 执行。
- 生产环境建议加 status=progress 实时看进度,避免误以为卡死而中断;加 conv=fsync 防止断电丢数据。











