⚠ 危险命令
dd 在 Linux 圈被戏称为 "disk destroyer"——写错 of= 路径会瞬间清盘。每次用之前看清 of= 是什么。
实战
写镜像到 U 盘 / SD 卡
sudo dd if=ubuntu.iso of=/dev/sdb bs=4M status=progress oflag=sync
# if = input file
# of = output file(**这里写错就完蛋**)
# bs = block size(4M 是个合理值)
# status=progress 显示进度
# oflag=sync 写完再退(确保真写完)
⚠ of=/dev/sdb ≠ of=/dev/sdb1:
/dev/sdb= 整块盘/dev/sdb1= 第一个分区
烧镜像通常写整盘(/dev/sdb)。
备份整盘到镜像
sudo dd if=/dev/sda of=/backup/sda.img bs=4M status=progress
镜像 → 磁盘还原
sudo dd if=/backup/sda.img of=/dev/sda bs=4M status=progress
从 /dev/urandom 拿真随机
# 100 MB 随机数据
dd if=/dev/urandom of=randomfile bs=1M count=100
# 测试磁盘写入速度
dd if=/dev/zero of=test.dat bs=1M count=1000 oflag=direct
抹掉磁盘(销毁前)
# 写全 0(快)
sudo dd if=/dev/zero of=/dev/sdb bs=4M status=progress
# 写随机(多一遍更"擦干净")
sudo dd if=/dev/urandom of=/dev/sdb bs=4M status=progress
⚠ SSD 上dd 不可靠擦除——SSD 有 wear leveling,建议用 shred 或 nvme format。
MBR 备份 / 恢复
# 备份 MBR(前 512 字节)
sudo dd if=/dev/sda of=mbr.bin bs=512 count=1
# 恢复
sudo dd if=mbr.bin of=/dev/sda bs=512 count=1
常用参数
| 参数 | 含义 |
|---|---|
if=FILE |
input |
of=FILE |
output(写错就毁) |
bs=N |
block size(影响速度) |
count=N |
复制 N 个 block |
skip=N |
input 跳过前 N 块 |
seek=N |
output 跳过前 N 块 |
conv=notrunc |
不截断 output |
conv=fsync |
写完 sync |
oflag=sync |
同上 |
status=progress |
显示进度 |
看进度(老 dd)
sudo dd if=/dev/sda of=/backup/sda.img bs=4M &
PID=$!
while kill -USR1 $PID 2>/dev/null; do
sleep 10
done
新版 dd 直接 status=progress 就行。
安全替代
| dd 用途 | 更安全替代 |
|---|---|
| 烧 U 盘 | Etcher / Rufus(GUI 防误操作) |
| SSD 擦除 | nvme format / hdparm --security-erase |
| 磁盘镜像 | ddrescue(可恢复坏块) |
| 测试速度 | fio(更精确) |
坑
- 写错
of=永远是灾难——把根盘当 U 盘写镜像 = 系统瞬间死 - 拷贝完 sync 一下确保真写完:
sync或oflag=sync bs太小会慢——通常 4M-64M- macOS 上 dd 用
bs=4m(小写)