Skip to content

dd 命令详解

dd 是 Linux/Unix 下非常强大但也非常危险的命令,用于按指定块大小逐字节复制/转换数据,常用来做磁盘克隆、制作启动盘、备份 MBR、生成空文件或随机数据等。

一、基本语法

dd if=输入文件 of=输出文件 [选项]

常用参数: • if=(input file):输入源,默认标准输入

• of=(output file):输出目标,默认标准输出

• bs=:块大小(block size)

• count=:读取的块数量

  • skip=:从输入跳过多少块 • seek=:从输出跳过多少块

• status=progress:显示进度(推荐)

• conv=notrunc,noerror,sync 等:转换/容错控制

二、常见使用示例

1️⃣ 整盘/分区克隆

将 sda 整盘克隆到 sdb

bash
dd if=/dev/sda of=/dev/sdb bs=4M status=progress

⚠️ 目标盘会被完全覆盖!确认设备名再回车!

2️⃣ 制作 U 盘启动盘(ISO → USB)

bash
dd if=ubuntu-22.04.iso of=/dev/sdb bs=4M status=progress && sync

sync 确保写入缓存刷到设备
不使用 sync 可能导致 U 盘损坏

  • Linux 写磁盘是“延迟写入”
  • Linux 为了提高性能,会:
    • 先把数据写入 Page Cache(内存缓存)
    • 稍后再由内核慢慢刷到真实设备
  • 所以即使 dd显示 100%,内核可能还没真正写到 U 盘

后面添加了 sync 命令,确保内核把缓存刷到设备,避免数据丢失。
会在dd命令结束后, 立刻执行 sync 命令, 确保数据立刻写入设备. 防止缓存的数据未能完全写入设备, 导致数据丢失.

U 盘通常是 /dev/sdb,不要用分区(如 sdb1)

3️⃣ 备份 MBR(前 512 字节)

bash
dd if=/dev/sda of=mbr.bak bs=512 count=1

恢复:

bash
dd if=mbr.bak of=/dev/sda bs=512 count=1

4️⃣ 创建指定大小空文件(稀疏/全零)

创建 1G 空文件

bash
dd if=/dev/zero of=test.img bs=1M count=1024

稀疏文件(不立刻占用空间):

bash
dd if=/dev/zero of=sparse.img bs=1M seek=1024 count=0

5️⃣ 生成随机数据文件

bash
dd if=/dev/urandom of=rand.bin bs=1M count=10

6️⃣ 清空磁盘/U 盘(慎用!)

bash
dd if=/dev/zero of=/dev/sdb bs=4M status=progress

三、重要注意事项(必看 ⚠️)

  1. dd 不做检查、不提示确认,写错 of= 会直接毁掉系统盘

  2. 操作磁盘前用 lsblk / fdisk -l 确认设备名

  3. 推荐使用: dd ... bs=4M status=progress && sync

  4. 普通用户常不建议手动用 dd 做磁盘备份(可用 clonezilla 等更安全工具)

四、与 conv 相关常用选项

conv=noerror,sync # 遇到读错误不中断,用空填充 conv=notrunc # 不截断输出文件

示例(坏道磁盘镜像):

bash
dd if=/dev/sda of=disk.img bs=4M conv=noerror,sync status=progress

如果你有具体用途(比如:做启动盘、全盘备份、擦除硬盘、测试磁盘读写速度),可以告诉我,我帮你给出最安全、精确的 dd 命令。