dd命令是linux下底层磁盘备份克隆工具,按扇区复制完整原始数据,支持全盘镜像、实时压缩和物理盘克隆,但设备名误写将导致数据覆写,需严格核对lsblk输出、卸载源盘并验证一致性。

dd 命令是 Linux 下最直接、最底层的磁盘备份与克隆工具,它不看文件系统,只认扇区——复制的是从第一个字节到最后一个字节的完整原始数据,包括 MBR/GPT 分区表、引导记录、所有分区、已用空间、未分配空间甚至隐藏区域。这意味着备份出来的镜像或克隆盘,能真正实现裸机级灾难恢复。
确认设备名,一步错全盘毁
这是最关键也最容易出错的环节。任何误写 if 或 of 都可能导致系统盘被清空。
- 运行 lsblk 或 sudo fdisk -l,重点看 TYPE 列(标为 disk 的才是整块磁盘,如 /dev/sda;part 是分区,如 /dev/sda1)和 SIZE 列,比对容量确认目标设备
- 不要依赖记忆或上次结果——热插拔硬盘、NVMe 设备(如 /dev/nvme0n1)、USB 盘都可能改变设备名
- 检查源盘是否挂载:mount | grep sda,若有输出,先执行 sudo umount /dev/sda*
- 目标盘上的所有数据将被覆盖,建议提前备份或使用全新硬盘
全盘镜像备份:生成 .img 文件
适合归档、异地保存或后续灵活恢复,镜像文件可挂载查看(需 loop 设备),也可压缩节省空间。
- 命令示例:sudo dd if=/dev/sda of=/mnt/backup/system.img bs=4M status=progress conv=fsync
- if=/dev/sda 表示读取整块源磁盘;of=路径指定镜像保存位置,确保目标目录有足够空间(镜像大小 = 源盘总容量)
- bs=4M 提升 I/O 效率;status=progress 实时显示进度;conv=fsync 确保数据真正写入物理介质,防断电丢失
- 备份完成后,建议校验前 512 字节(MBR/GPT 头):sudo dd if=/dev/sda bs=512 count=1 | sha256sum,再对比镜像文件对应部分
实时压缩备份:省空间不占临时磁盘
原始镜像体积等于磁盘容量,对大容量硬盘不友好。用管道边读边压,避免先生成超大 .img 再压缩。
- 压缩存档:sudo dd if=/dev/sda bs=4M status=progress | gzip > /mnt/backup/system.img.gz
- 恢复时不能直接 dd if=xxx.gz,必须解压流式写入:gunzip -c /mnt/backup/system.img.gz | sudo dd of=/dev/sda bs=4M status=progress
- 注意:.gz 文件无法直接挂载,也无法被 parted/fdisk 识别结构,必须先解压还原为原始 .img 或直写设备
物理盘到盘克隆:一步到位迁移系统
适用于换新硬盘、硬件升级或快速部署相同环境,要求目标盘容量 ≥ 源盘总字节数(不是已用空间)。
- 命令示例:sudo dd if=/dev/sda of=/dev/sdb bs=4M conv=notrunc,sync,noerror status=progress
- conv=notrunc 防止意外截断;noerror 让遇到坏道时跳过并填零,保障流程完成;sync 强制同步落盘
- 操作结束后务必执行 sync,等光标返回再断电或拔盘
- 验证是否一致:分别运行 sudo fdisk -l /dev/sda 和 sudo fdisk -l /dev/sdb,确认分区起始扇区、类型、大小完全一致
dd 不复杂,但容错率极低。只要设备名核对清楚、源盘卸载干净、目标空间充足,整个过程就是一条命令的事。真正需要花时间的,是前期确认和后期验证。











