一、简介:为什么必须学会dd?
启动盘是 Linux 生命线:系统崩溃、新机器装系统、现场救援,都靠 U 盘启动。
磁盘镜像是运维刚需:批量装机、取证备份、云主机快照,底层全是
dd在干活。dd 几乎无处不在:再小的嵌入式系统、再大的云机房,都自带
dd,无需网络。
学会dd,等于拥有“磁盘克隆相机”——一键拍照,一键还原。
二、核心概念:4 个参数走天下
| 概念 | 含义 | 入门口诀 |
|---|---|---|
if= | input file 源 | 读谁 |
of= | output file 目标 | 写谁 |
bs= | block size 一次读写多少字节 | 越大越快,通常 4M |
status=progress | 实时显示百分比 | 必加,防呆等 |
记住“if 读 of 写 bs 块 progress 看”,就不会再写反磁盘!
三、环境准备:3 分钟搭好实验台
系统:任意 Linux(Ubuntu 20.04+ / CentOS 8+ / Debian 11+)
U 盘:≥8 GB,数据会全清,请提前备份
镜像:
Ubuntu 22.04 桌面版
ubuntu-22.04-desktop-amd64.iso或其他发行版 ISO 均可,下文以 Ubuntu 为例
权限:需要
sudo读写底层设备
四、命令与示例:从“制作启动盘”到“备份整盘”
每条命令都可直接复制,建议边读边敲,加深印象。
4.1 查找 U 盘设备号(防写反!)
# 方法 1:看容量最直观 lsblk -dp | grep -E 'disk.*8G|disk.*16G|disk.*32G' # 方法 2:实时监听插入 sudo watch -n 1 'dmesg | tail -20'典型输出:
/dev/sdb 14.9G
记住/dev/sdb,下文全程用${USB}代指,请替换成你自己的。
4.2 制作 Linux 启动盘(5 分钟完成)
# 设置变量,避免敲错 ISO=~/Downloads/ubuntu-22.04-desktop-amd64.iso USB=/dev/sdb # 一定确认无误! # 1. 卸载已挂载分区(重要) sudo umount ${USB}?* 2>/dev/null || true # 2. 正式写入 sudo dd if=$ISO of=$USB bs=4M status=progress oflag=sync说明:
bs=4M一次性 4 MB,速度比默认 512 字节快 10 倍oflag=sync确保写完再返回,防止 U 盘缓存造假
耗时:约 3~5 分钟(USB3.0 下 15 MB/s ≈ 200 s)
完成后,你就得到一只可启动的 Ubuntu 安装盘,可用于:
给裸机装系统
现场救援
chroot修复 grub启动 Live 环境拷数据
4.3 创建整盘镜像(系统热备份)
# 把系统盘 /dev/nvme0n1 备份到外部硬盘 sudo dd if=/dev/nvme0n1 of=/mnt/backups/nvme0n1.img \ bs=4M status=progress oflag=direct场景:
云主机无法快照,用
dd做离线全备工控设备无还原卡,定期镜像回滚
提示:目标磁盘需 ≥ 源盘容量,否则写满报错。
4.4 仅备份 MBR(512 字节,分区表+引导代码)
# 备份 sudo dd if=/dev/sda of=mbr.bak bs=512 count=1 # 恢复(误删分区表时救命) sudo dd if=mbr.bak of=/dev/sda bs=512 count=1场景:
双系统误装 Windows,分区表被改,用此前 512 字节瞬间复活。
4.5 增量压缩:让镜像小 70%
# 边读边压缩 sudo dd if=/dev/sdb bs=4M | gzip > sdb.img.gz # 还原 gunzip -c sdb.img.gz | sudo dd of=/dev/sdb bs=4M优点:空块自动压缩,500 GB 盘 → 80 GB 镜像。
4.6 制作 Windows 启动盘(同样适用)
# 官方 Win10 ISO 同样能用 dd ISO=Win10_22H2_Chinese.iso USB=/dev/sdb sudo dd if=$ISO of=$USB bs=4M status=progress注意:Windows ISO 已包含 UEFI 引导,dd 完即可 UEFI 启动安装。
五、常见问题与解答(FAQ)
| 问题 | 现象 | 解决 |
|---|---|---|
dd: writing to '/dev/sdb': No space left on device | 目标盘容量 < ISO | 换更大 U 盘;ISO 别选 DVD 版 |
| 写反盘符,系统盘被覆盖 | 电脑立刻卡死 | 无急救可能,写前必须 lsblk 确认 |
| 进度条不动 | 误以为卡住 | 加status=progress,或另开终端sudo kill -USR1 $(pgrep dd) |
| U 盘不能启动 | BIOS 无 UEFI 选项 | 进入 BIOS 关闭 Secure Boot,开启 Legacy/UEFI 双启动 |
| 速度只有 2 MB/s | 落在 USB2.0 口 | 换蓝色/USB3.0 口,再lsusb -t确认速率 |
六、实践建议与最佳实践
写前快照:用
lsblk -fp拍照保存,防止手滑。统一变量:脚本里用
${USB}替代手动敲盘符,降低失误。校验镜像(重要):
# 生成 md5 md5sum ubuntu.iso > ubuntu.iso.md5 # 写入后校验 U 盘 sudo dd if=${USB} bs=4M count=$(($(stat -c%s ubuntu.iso)/4M)) | md5sum -c ubuntu.iso.md5制作后只读挂载检查
sudo mkdir /mnt/usb sudo mount ${USB}1 /mnt/usb ls /mnt/usb # 能看到 EFI、boot 目录即成功 sudo umount /mnt/usb定期备份 MBR
把mbr.bak纳入 Git,系统升级前自动提交,回滚秒级完成。云主机无物理盘
用dd把/dev/vda导到对象存储,配合 cron 每月一次全量镜像。
七、总结:一张脑图带走全部要点
dd 磁盘操作 ├─ 制作启动盘:ISO → U 盘 (bs=4M status=progress) ├─ 整盘镜像:/dev/sda → .img(可选 gzip) ├─ MBR 备份:前 512 字节 ├─ 校验:md5sum / 只读挂载 └─ 提速:USB3.0 + bs=4M + oflag=sync掌握dd,你就拥有了:
随身系统工厂:任何 ISO 都能 5 分钟变启动盘
灾难恢复时光机:整盘镜像一键回到昨天
底层急救瑞士军刀:MBR、分区表、引导扇区随意存取
立刻打开终端,找一块空 U 盘,复制本文命令敲一遍——你的第一张 Linux 启动盘,马上诞生!