dd 命令详解
更新时间:2026-08-28。本文是「一个命令一个文档」系列,聚焦
dd——文件系统与 LVM 命令族(见文件系统与 LVM 命令族)。它按"块"读写,能直接对设备或镜像做低层复制,威力大也最危险。
dd 按指定的块大小和数量,从一个输入(if)逐块复制到输出(of),期间可做简单转换。它绕开文件系统、直接操作字节流,所以常用来做启动盘、磁盘镜像。
一、基本用法
bash
dd if=/dev/sda of=/dev/sdb bs=4M status=progress # 整盘克隆(sda→sdb)
dd if=image.iso of=/dev/sdc bs=4M status=progress # 把 ISO 写入 U 盘做启动盘
dd if=/dev/zero of=testfile bs=1M count=100 # 造一个 100MB 的全零文件关键参数:
if=输入、of=输出、bs=块大小(越大越快但占内存)、count=块数。status=progress显示实时进度——老版本 dd 默认静默,没这选项你会以为卡了。做启动盘就是"ISO 写进设备"。
二、常见转换
bash
dd if=in.txt of=out.txt conv=ucase # 转大写
dd if=in.bin of=out.bin conv=swab # 字节交换(处理大小端)
dd if=/dev/sda1 of=part.img bs=4M # 只备份某个分区为镜像
conv=支持大小写转换、字节序交换、填充等。把分区 dd 成.img是做磁盘镜像/备份的常用手法;配合压缩可省空间。
三、踩坑:dd 是"销毁数据"头号嫌疑
bash
# 把 of 写错成真实硬盘,数据瞬间被覆盖且不可恢复
dd if=image.iso of=/dev/sda # 灾难!本想写 U 盘 sdc,却写进了系统盘 sdadd 常被称为"磁盘毁灭命令"(data destroyer),因为它不检查、不确认,直接覆盖。铁律:执行前反复核对
of和if;可以用lsblk先确认设备名,宁可在测试文件上先试。写错 of 即便只覆盖开头几个块,分区表就毁了。
四、dd vs 别的复制
| 工具 | 层级 |
|---|---|
| cp | 文件级(走文件系统) |
dd | 块级(直接字节流,可操作设备/分区) |
| cat | 流式字节,但无块大小/转换控制 |
要"复制文件内容"用 cp;要"整盘/分区/镜像、绕过文件系统"才用 dd。dd 的优势在块级与转换,劣势在太危险、没确认。
五、实战:安全做启动盘(先确认设备)
bash
lsblk # 先看清 U 盘是 /dev/sdc
dd if=fedora.iso of=/dev/sdc bs=4M status=progress conv=fsync # conv=fsync 确保写完落盘一句话总结
dd = 块级复制/转换:if→of、bs 块大小、status=progress 看进度、conv= 做转换;做启动盘/磁盘镜像必备。但它是"数据毁灭者"——执行前务必核对 of,写错设备不可恢复。文件级复制用 cp。