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
dd if=/dev/sda of=/dev/sdb bs=4M status=progress⚠️ 目标盘会被完全覆盖!确认设备名再回车!
2️⃣ 制作 U 盘启动盘(ISO → USB)
dd if=ubuntu-22.04.iso of=/dev/sdb bs=4M status=progress && syncsync 确保写入缓存刷到设备
不使用 sync 可能导致 U 盘损坏
- Linux 写磁盘是“延迟写入”
- Linux 为了提高性能,会:
- 先把数据写入 Page Cache(内存缓存)
- 稍后再由内核慢慢刷到真实设备
- 所以即使 dd显示 100%,内核可能还没真正写到 U 盘
后面添加了 sync 命令,确保内核把缓存刷到设备,避免数据丢失。
会在dd命令结束后, 立刻执行 sync 命令, 确保数据立刻写入设备. 防止缓存的数据未能完全写入设备, 导致数据丢失.
U 盘通常是 /dev/sdb,不要用分区(如 sdb1)
3️⃣ 备份 MBR(前 512 字节)
dd if=/dev/sda of=mbr.bak bs=512 count=1恢复:
dd if=mbr.bak of=/dev/sda bs=512 count=14️⃣ 创建指定大小空文件(稀疏/全零)
创建 1G 空文件
dd if=/dev/zero of=test.img bs=1M count=1024稀疏文件(不立刻占用空间):
dd if=/dev/zero of=sparse.img bs=1M seek=1024 count=05️⃣ 生成随机数据文件
dd if=/dev/urandom of=rand.bin bs=1M count=106️⃣ 清空磁盘/U 盘(慎用!)
dd if=/dev/zero of=/dev/sdb bs=4M status=progress三、重要注意事项(必看 ⚠️)
dd 不做检查、不提示确认,写错 of= 会直接毁掉系统盘
操作磁盘前用 lsblk / fdisk -l 确认设备名
推荐使用: dd ... bs=4M status=progress && sync
普通用户常不建议手动用 dd 做磁盘备份(可用 clonezilla 等更安全工具)
四、与 conv 相关常用选项
conv=noerror,sync # 遇到读错误不中断,用空填充 conv=notrunc # 不截断输出文件
示例(坏道磁盘镜像):
dd if=/dev/sda of=disk.img bs=4M conv=noerror,sync status=progress如果你有具体用途(比如:做启动盘、全盘备份、擦除硬盘、测试磁盘读写速度),可以告诉我,我帮你给出最安全、精确的 dd 命令。
