一、简介:为什么必须学会 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 分钟搭好实验台

  1. 系统:任意 Linux(Ubuntu 20.04+ / CentOS 8+ / Debian 11+)

  2. U 盘:≥8 GB,数据会全清,请提前备份

  3. 镜像

    • Ubuntu 22.04 桌面版 ubuntu-22.04-desktop-amd64.iso

    • 或其他发行版 ISO 均可,下文以 Ubuntu 为例

  4. 权限:需要 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 确认速率

六、实践建议与最佳实践

  1. 写前快照:用 lsblk -fp 拍照保存,防止手滑。

  2. 统一变量:脚本里用 ${USB} 替代手动敲盘符,降低失误。

  3. 校验镜像(重要):

    # 生成 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
  4. 制作后只读挂载检查

    sudo mkdir /mnt/usb
    sudo mount ${USB}1 /mnt/usb
    ls /mnt/usb   # 能看到 EFI、boot 目录即成功
    sudo umount /mnt/usb
  5. 定期备份 MBR
    mbr.bak 纳入 Git,系统升级前自动提交,回滚秒级完成。

  6. 云主机无物理盘
    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 启动盘,马上诞生!

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐