如何在 Linux 中使用 dd 命令如何在 Linux 中使用 dd 命令如何在 Linux 中使用 dd 命令如何在 Linux 中使用 dd 命令
  • 业务
  • 目标
  • 支持
  • 登录
找到的结果: {phrase} (显示: {results_count} 共: {results_count_total})
显示: {results_count} 共: {results_count_total}

加载更多搜索结果...

搜索范围
模糊匹配
搜索标题
搜索内容

如何在 Linux 中使用 dd 命令

发表 admin at 2025年2月28日
类别
  • 未分类
标签

dd 命令用于执行许多重要的操作。 dd 命令最常见和最广泛的用途是从ISO或IMG映像文件制作可启动的USB驱动器。我经常使用它来制作不同 Linux 发行版的可启动 USB 驱动器。但 dd 命令还有其他用途。例如,dd 命令可用于备份分区表、转换文本和文件、将引导加载程序安装到硬盘驱动器、SSD 或 USB 驱动器。 dd命令还可以用于测试存储设备的性能,例如硬盘的延迟、硬盘的读写速度等。

在本文中,我将向您展示 Linux 中 dd 命令的一些常见用法。我将使用 Debian 9 Stretch 进行演示。但它应该可以在任何其他 Linux 发行版上运行。让我们开始吧。

使用 dd 制作可启动 USB 驱动器:

使用 dd 命令制作您最喜欢的操作系统的可启动 USB 驱动器非常简单。您所需要的只是一个 USB 驱动器和一个您想要制作可启动 USB 的操作系统的 ISO 或 IMG 映像。

假设您已经下载了 Alpine Linux 的 ISO 映像,并且该文件以 alpine-standard-3.8.0-x86_64 的形式保存到 ~/Downloads 目录中.iso

现在,您可以使用以下命令列出所有连接的存储或块设备:

$ sudo lsblk

如您所见,列出了所有连接的存储或块设备。这里,/dev/sdb 是我的 USB 驱动器。它有两个分区,/dev/sdb1 和 /dev/sdb2。但是当你制作USB可启动驱动器时,你必须使用/dev/sdb,整个块设备,而不是任何分区。

现在使用以下命令制作 Alpine Linux 的可启动 USB 驱动器:

$ sudo dd if=~/Downloads/alpine-standard-3.8.0-x86_64.iso of=/dev/sdb bs=1M

这里,if=~/Downloads/alpine-standard-3.8.0-x86_64.iso选项用于告诉dd输入文件位于路径 ~/Downloads/alpine-standard-3.8.0-x86_64.iso 和 of=/dev/sdb 选项用于告诉dd输出文件位于路径/dev/sdb中。 bs=1M 告诉 dd 从 ~/Downloads/alpine-standard-3.8.0-x86_64.iso 读取并写入 >/dev/sdb 一次 1 MB 数据。

如您所见,ISO 文件被复制到块设备 /dev/sdb 中。现在您可以使用它来安装 Alpine Linux。

这个命令的破坏性非常大。 dd 命令会擦除块设备中的分区表和其他元数据、标志。所以你一定要小心。

显示进度条:

默认情况下,dd 命令不显示任何进度条。但您可以使用 status=progress 选项告诉 dd 显示它。

例如,要将数据从 /dev/sda 复制到 /dev/sdb 一次 1 MB 并显示进度条,请运行以下命令:

$ sudo dd if=/dev/sda of=/dev/sdb bs=1M status=progress

如您所见,显示了进度条。您可以看到复制了多少数据以及复制的速率。

使用 dd 测量存储设备的读写性能:

您可以使用dd非常轻松地测量存储设备的读写速度。当然,有许多图形软件确实提供了此信息,但命令行爱好者会发现这非常有趣。

首先,您必须在文件系统上安装分区或存储设备。如果您的存储设备上没有分区,您可以随时使用fdisk命令创建它,并将其格式化为您想要的文件系统(例如FAT32、 >EXT4、NTFS、XFS 等)。在这里,我假设您确实有一个分区 /dev/sdb1 并且它的格式为 EXT4。

假设您要将/dev/sdb1分区挂载到/mnt目录,然后运行以下命令:

$ sudo mount /dev/sdb1 /mnt

可以看到,/dev/sdb1分区挂载在/mnt目录下。

$ df -h

现在让我们使用dd在/mnt目录中创建一个1 GB的文件testrw:

$ sudo dd if=/dev/zero of=/mnt/testrw bs=1G count=1 oflag=direct

这里,count=1的意思是,从/dev/zero中读取bs=1G即1G字节,并将其写入/ mnt/testrw 文件。

oflag=direct 选项用于禁用磁盘缓存。如果启用磁盘缓存,您将不会获得非常准确的结果。

注意:请记住,对于此操作,您的计算机上必须至少有 1 GB 的可用内存或 RAM。如果您买不起那么多的可用 RAM,请减小 bs 大小。例如,设置 bs=128M 甚至更少,bs=64M。

如您所见,我的 USB 驱动器的写入速度约为每秒 6.1 MB。

您还可以使用以下命令测试存储设备的读取速度:

$ sudo dd if=/mnt/testrw of=~/Downloads/test bs=1G count=1 oflag=direct

如您所见,我的读取速度为每秒 4.3 MB。

使用 dd 测试存储设备延迟:

存储设备的延迟是指访问该设备所需的时间。这是一个重要的参数,我们可以借助dd命令来确定。

为了测试延迟,我们可以写入或读取小块数据(一次约 512 字节)X 次,看看需要多长时间。然后我们可以很容易地计算出读取或写入单个数据块需要多长时间。这称为存储设备的延迟。

例如,假设您要计算写入延迟。现在运行以下命令将 512 字节块写入大约 1000 次:

$ sudo dd if=/dev/zero of=/mnt/testX bs=512 count=1000 oflag=direct

正如您所看到的,写入1000块512字节数据大约需要16.4541秒。现在,写入单个数据块大约需要(16.4541s/1000=0.0164 s)0.0164 秒。因此该存储设备的写入延迟约为 0.0164 秒。

您可以用同样的方式计算读取延迟。

这就是如何使用 dd 并用它测试 I/O 设备的性能。感谢您阅读本文。

©2015-2025 Norria support@alaica.com