菜鸟科技网

Ubuntu dd命令如何正确使用?

dd 是一个在 Linux 和类 Unix 系统中用于转换和复制文件的强大工具,它的名字据称来自 "dd",即 "Data Description"(数据描述)的缩写,或者是一个双关语,来自 IBM 的 JCL 语句 DD (Data Definition)。

Ubuntu dd命令如何正确使用?-图1
(图片来源网络,侵删)

dd 命令的核心功能是低级别的复制,它直接读取输入文件(或设备)的原始字节,并将其原封不动地写入输出文件(或设备),不关心文件系统或数据结构,这使得它在很多特殊场景下非常有用。


dd 命令的基本语法

dd 命令的基本语法非常简单:

dd if=<input_file> of=<output_file> [options]
  • if= (Input File): 指定输入源,它可以是一个普通文件(如 ~/my.iso),也可以是一个设备文件(如 /dev/sdb 代表一个U盘,/dev/zero 代表一个无限的数据源)。
  • of= (Output File): 指定输出目标,同样,可以是文件或设备。
  • [options]: 其他选项,用于控制复制过程,如 bs, count, status 等。

核心选项详解

理解以下几个关键选项是掌握 dd 的关键。

a. if=of= (输入与输出)

这是 dd 最核心的两个选项。

Ubuntu dd命令如何正确使用?-图2
(图片来源网络,侵删)
  • 示例: 复制一个文件

    # 将文件 a.txt 复制到 b.txt
    dd if=a.txt of=b.txt
  • 示例: 备份整个硬盘

    # 警告:这会清空目标硬盘的所有数据!
    # 假设 /dev/sda 是源硬盘,/dev/sdb 是目标硬盘
    dd if=/dev/sda of=/dev/sdb

b. bs= (块大小)

bs 指定每次读取和写入的块大小,单位通常是字节,默认值是 512 字节。

  • 格式: bs=<size>
  • 示例: 使用 1MB 的块大小进行复制
    # 1M 代表 1 * 1024 * 1024 字节
    dd if=/dev/sda of=/dev/sdb bs=1M
  • 为什么重要?
    • 性能: 较大的 bs 值可以显著提高复制速度,尤其是在复制大文件或硬盘时,因为它减少了 I/O 操作的次数。
    • 单位: 你可以使用 K (千字节), M (兆字节), G (吉字节) 等来简化书写。1M 通常比 1048576 更易读。

c. count= (块数量)

count 指定要从输入文件中复制的块数量,块大小由 bs 决定。

Ubuntu dd命令如何正确使用?-图3
(图片来源网络,侵删)
  • 格式: count=<number_of_blocks>
  • 示例: 只复制硬盘的前 1GB 数据
    # bs=1M 表示每块 1MB,count=1024 表示复制 1024 块
    # 总共复制 1024 * 1MB = 1GB
    dd if=/dev/sda of=sda_backup.img bs=1M count=1024
  • 用途: 通常用于创建镜像备份,而不是完整复制整个设备。

d. status= (状态输出)

dd 默认不显示进度,这会让用户感到不安。status 选项可以解决这个问题。

  • progress (推荐): 显示实时的传输统计信息,包括已复制的字节数、速度和预计剩余时间。
    dd if=/dev/sda of=/dev/sdb bs=1M status=progress
  • none: 不显示任何状态信息。
  • noxfer: 只在完成时显示最终摘要。

实用场景与示例

dd 的真正威力体现在以下场景中。

创建可启动的 USB 驱动器

这是最常见的用途之一,你需要把一个 ISO 镜像文件 "烧录" 到一个 U 盘中,使其成为可启动的安装盘。

步骤:

  1. 找到你的 U 盘设备名

    • 插入 U 盘。
    • 打开终端,运行 lsblksudo fdisk -l
    • 你会看到类似 /dev/sda, /dev/sdb, /dev/nvme0n1 等设备,新插入的 U 盘是 /dev/sdb 或类似设备。请务必确认设备名,因为下一步会彻底清除该设备的数据!
  2. 使用 dd 命令进行烧录

    • 假设你的 ISO 文件是 ~/Downloads/ubuntu-22.04.3-desktop-amd64.iso,你的 U 盘是 /dev/sdb
    # 强烈建议使用 status=progress 来查看进度
    sudo dd if=~/Downloads/ubuntu-22.04.3-desktop-amd64.iso of=/dev/sdb bs=4M status=progress
    • 注意:
      • of=/dev/sdb 是直接写入设备,整个 U 盘的所有数据都会被覆盖!
      • bs=4M 是一个常用的块大小,能提供不错的速度。
      • 这个命令执行时不会有太多输出,直到完成。status=progress 会让你安心。

备份和恢复硬盘/分区

a. 完整备份硬盘

将整个硬盘 /dev/sda 备份为一个镜像文件。

# 创建 sda 的完整镜像
sudo dd if=/dev/sda of=~/sda_backup.img bs=4M status=progress

b. 从镜像恢复硬盘

将刚才创建的镜像文件恢复到硬盘 /dev/sdb

# 从镜像恢复到硬盘
sudo dd if=~/sda_backup.img of=/dev/sdb bs=4M status=progress

c. 备份单个分区

假设你想备份 /dev/sda1 分区。

# 备份 sda1 分区
sudo dd if=/dev/sda1 of=~/sda1_backup.img bs=4M status=progress

安全擦除硬盘数据

标准的删除操作只是标记空间为可写,数据并未真正消失。dd 可以用全零覆盖整个硬盘,从而彻底擦除数据。

# 用全零填充 /dev/sdb,擦除所有数据
# 这可能需要很长时间,取决于硬盘大小
sudo dd if=/dev/zero of=/dev/sdb bs=4M status=progress
  • /dev/zero: 这是一个特殊的设备文件,它会不断地提供零(NULL 字节)。

  • 更安全的方法: 使用随机数据填充两次(DoD 5220.22-M 标准)。

    # 第一遍:用随机数据填充
    sudo dd if=/dev/urandom of=/dev/sdb bs=4M status=progress
    # 第二遍:再用全零填充
    sudo dd if=/dev/zero of=/dev/sdb bs=4M status=progress

测试硬盘读写速度

这是一个快速了解硬盘性能的技巧。

  • 写速度测试:

    # 创建一个 1GB 的测试文件,并记录时间
    dd if=/dev/zero of=~/testfile.img bs=1G count=1 oflag=direct
    • oflag=direct: 绕过系统缓存,直接写入磁盘,能更真实地反映硬件速度。
  • 读速度测试:

    # 读取刚才创建的 1GB 文件,并记录时间
    dd if=~/testfile.img of=/dev/null bs=1G iflag=direct
    • iflag=direct: 同样,绕过系统缓存进行读取。
    • of=/dev/null: 将所有读取的数据丢弃到一个“黑洞”设备中,这只是为了测量读取速度,不关心数据内容。

⚠️ 重要警告:dd 是一个危险的命令!

dd 被戏称为 "Disk Destroyer"(磁盘毁灭者)或 "Delete Data"(删除数据),因为它功能强大且直接,几乎没有安全检查

  • 不要弄错 ifof 如果你把 ifof 写反了,dd if=/dev/sdb of=/dev/sda,你会把 U 盘的内容写入你的主硬盘,导致系统崩溃和数据丢失。
  • 确认设备名! 在运行 dd 之前,务必使用 lsblksudo fdisk -l 仔细检查你要操作的设备名,操作硬盘是不可逆的。
  • 它不会覆盖已有文件! of 指定的文件已存在,dd 会直接覆盖它,从头开始写入。

dd 的现代替代品

虽然 dd 很经典,但也有一些更现代、更安全的工具,特别是用于创建启动盘:

  • gnome-disks (或 disks): Ubuntu 自带的图形化磁盘工具,有“还原磁盘映像”功能,可以安全地将 ISO 写入 USB,它会自动处理分区和引导,非常安全。
  • balenaEtcher: 一个跨平台的、非常受欢迎的 USB 启动盘制作工具,界面友好,操作简单。
  • Ventoy: 一个功能更强大的工具,你只需将 ISO 文件复制到 U 盘即可制作成多启动盘,无需每次都格式化和写入。
  • 学习 dd:对于系统管理员和高级用户来说,dd 是一个必须掌握的基础工具,尤其是在没有图形界面的服务器环境中。
  • 日常使用:对于普通用户,在制作启动盘时,强烈推荐使用 gnome-disksbalenaEtcher,它们更安全、更方便,只有在进行底层磁盘操作(如备份、擦除)时,才需要动用 dd
分享:
扫描分享到社交APP
上一篇
下一篇