⚠ 危险命令

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/sdbof=/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,建议用 shrednvme 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 一下确保真写完:syncoflag=sync
  • bs 太小会慢——通常 4M-64M
  • macOS 上 dd 用 bs=4m(小写)