Linux中dd命令详解

Linux 中 dd 命令详解(全面版)

dd 是 Linux 中一个非常强大且危险的低级数据复制和转换工具,全称 “data duplicator”“disk destroyer”(因误操作可毁盘而得外号)。它以块为单位直接读写设备或文件,绕过文件系统缓存,适合备份、克隆磁盘、擦除数据、制作启动盘等场景。

基本语法

dd [参数] if=输入源 of=输出目标 [其他选项]
  • if(input file):输入文件或设备(默认标准输入)。
  • of(output file):输出文件或设备(默认标准输出)。
  • bs(block size):每次读写的块大小(单位:字节)。
  • count:复制的块数量。
  • skip:从输入跳过指定块数。
  • seek:在输出跳过指定块数。
  • conv:转换选项(如 notrunc、sync)。

注意:dd 默认不显示进度,使用时需谨慎,写错 of 参数可能直接毁坏系统磁盘

常用参数详解

参数说明示例值
if=FILE输入文件或设备if=/dev/sda
of=FILE输出文件或设备of=/dev/sdb
bs=BYTES块大小(同时设置 ibs 和 obs),推荐使用 4K、1M 等bs=4M
ibs=BYTES输入块大小ibs=512
obs=BYTES输出块大小obs=4M
count=N复制 N 个块count=100
skip=N从输入开头跳过 N 个块skip=1
seek=N在输出开头跳过 N 个块(不覆盖前 N 块)seek=1024
conv=OPTION转换选项,多个用逗号分隔conv=notrunc,noerror,sync
status=LEVEL显示进度(Linux 现代版本支持)status=progress

conv 常见选项

  • notrunc:不截断输出文件(默认会截断)。
  • noerror:出错时继续执行(忽略读错误)。
  • sync:每个块不足时用 NULL 填充(配合 noerror 防止数据错位)。
  • fdatasync:写完后同步数据到磁盘。
  • sparse:尝试创建稀疏文件(节省空间)。

经典使用场景与示例

  1. 完整克隆硬盘(磁盘到磁盘)
   sudo dd if=/dev/sda of=/dev/sdb bs=64K conv=noerror,sync status=progress
  • 将整个 sda 磁盘克隆到 sdb(包括分区表)。
  • 极度危险:确认 of 设备正确!
  1. 备份整个磁盘到镜像文件
   sudo dd if=/dev/sda of=/backup/sda-full.img bs=4M status=progress
  1. 从镜像文件恢复到磁盘
   sudo dd if=/backup/sda-full.img of=/dev/sdb bs=4M status=progress
  1. 制作 Linux USB 启动盘(推荐方式)
   sudo dd if=ubuntu-24.04-desktop-amd64.iso of=/dev/sdc bs=4M status=progress && sync
  • 注意:of= 是整个设备(如 /dev/sdc),不是分区(如 /dev/sdc1)。
  • 完成后执行 sync 确保数据刷盘。
  1. 备份 MBR(主引导记录,前 446 字节)
   sudo dd if=/dev/sda of=mbr.bin bs=446 count=1
  1. 备份整个分区表 + MBR(前 512 字节)
   sudo dd if=/dev/sda of=partition-table.bin bs=512 count=1
  1. 擦除磁盘(安全删除数据)
  • 快速清零(不彻底,但快):
    bash sudo dd if=/dev/zero of=/dev/sda bs=4M status=progress
  • 彻底擦除(用随机数据,防恢复):
    bash sudo dd if=/dev/urandom of=/dev/sda bs=4M status=progress
  1. 只复制指定大小的数据
   sudo dd if=/dev/sda of=first-10GB.img bs=1G count=10
  1. 跳过开头部分复制(例如跳过 MBR)
   sudo dd if=/dev/sda of=data-part.img bs=512 skip=1
  1. 测试磁盘读写速度
    • 写速度:
      bash dd if=/dev/zero of=testfile bs=1G count=1 oflag=dsync
    • 读速度(需先清缓存):
      bash sudo sh -c "echo 3 > /proc/sys/vm/drop_caches" dd if=testfile of=/dev/null bs=1G

实用技巧与注意事项

  • 显示进度:现代 dd(GNU coreutils 8.24+)支持 status=progress,强烈推荐加。
  • 加速技巧
  • 使用较大 bs(如 4M、64M),但不要过大(内存不足会慢)。
  • 添加 oflag=direct 绕过缓存(写操作更快)。
  • 安全建议
  • 先用 lsblkfdisk -l 确认设备名。
  • 使用 pv 工具显示更美观的进度条:
    bash sudo apt install pv sudo dd if=/dev/sda | pv | dd of=/dev/sdb bs=4M
  • 或直接用 pv
    bash sudo pv /dev/sda > /dev/sdb
  • 中断恢复:dd 被 Ctrl+C 中断后,可用 kill -USR1 $(pidof dd) 发送信号显示当前进度。
  • 常见错误
  • “No space left on device”:输出磁盘空间不足。
  • “Input/output error”:硬件故障,加 conv=noerror 可继续。

替代工具推荐

  • 磁盘克隆ddrescue(更智能,擅长坏道磁盘恢复)。
  • 启动盘制作cp、Rufus(Windows)、Etcher(图形化)。
  • 快速复制rsynccp(文件级更快)。

总结:dd 是 Linux 系统管理员的瑞士军刀,但“用得好是神器,用错毁全盘”。新手请先在虚拟机或非重要设备练习,并三思而后 dd

文章已创建 3707

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

相关文章

开始在上面输入您的搜索词,然后按回车进行搜索。按ESC取消。

返回顶部