dd 是什么
dd 按块复制数据,不解析文件系统结构:整盘镜像、镜像还原、擦除介质、生成测试文件都是它的常见用途。它的特点是只认设备与块,不做任何确认提示,因此参数一旦写错就是不可逆的数据破坏,属于必须谨慎对待的高风险命令。
基本信息
| 用途 | 整盘或分区镜像、镜像恢复、生成测试文件 |
|---|---|
| 关键参数 | if 输入、of 输出、bs 块大小、count 块数 |
| 进度显示 | status=progress(GNU coreutils 版 dd 支持) |
| 数据落盘 | conv=fsync 在结束时强制同步,避免缓存未刷出 |
磁盘镜像与恢复
磁盘镜像与恢复
dd if=/dev/sda of=/backup/sda-$(date +%F).img bs=4M status=progress conv=fsync
# 恢复镜像到目标盘(危险操作,会覆盖目标盘全部数据)
# dd if=/backup/sda-2026-10-12.img of=/dev/sda bs=4M status=progress conv=fsync
# 只读采样前 1MB,用于查看分区表结构
# dd if=/dev/sda bs=512 count=2048 of=/tmp/mbr-sample.bin常用参数
| 参数 | 含义 | 常用取值 |
|---|---|---|
| if 与 of | 输入设备与输出设备 | 写反会覆盖源盘,执行前反复确认 |
| bs | 每次读写的块大小 | 4M 兼顾速度与内存占用 |
| count 与 skip | 复制的块数与起始偏移 | 用于局部采样或分段恢复 |
| status | 输出进度信息 | progress 适合大容量镜像 |
| conv | 转换与同步行为 | fsync 保证结束时落盘 |
安全使用要点
- 先确认设备名:插入外置盘后用 lsblk 核对容量与型号,避免凭记忆写 of
- 运行中系统直接镜像属于崩溃一致快照,数据库场景应停写或先做存储快照
- 镜像本身不含文件系统校验:恢复后要用对应工具做一致性检查
- 大容量镜像耗时很长,建议后台执行并保留日志,避免终端断开中断任务
- 坏盘抢救优先用 ddrescue:它会记录失败块位置并支持断点续跑
dd 不识别文件系统、不提示确认:of 写错设备即不可逆数据丢失。生产场景优先使用 ddrescue 或存储快照工具,并先在测试环境演练。
块大小影响速度:过小会频繁系统调用拖慢速度,过大则占用更多内存,机械盘与网络存储上常用 1M 到 4M 之间取值。