Linux系统中使用dd命令测试USB和SSD硬盘的读写速度

Linux系统中使用`dd`命令测试USB和SSD硬盘的读写速度 - 图1

问题介绍

新买了个U盘,为了测试小读写速率,从https://linux.cn上找到了这篇文章,这里稍微记录下,方便回顾。

解决方案

主要基于dd指令。

:::info 注意,这里的 dd 指令会强制写入特定存储区域的首部地址,测试之前请确保存储介质中无有用数据。否则就完了。 :::

挂载上驱动盘,从终端进入此盘目录下。然后使用dd命令,首先写入number_of_blocks数量的block_size固定大小的块的一个文件,接着读取这个文件。dd命令通用语法格式如下:

  1. dd if=path/to/input_file of=/path/to/output_file bs=block_size count=number_of_blocks

当写入到驱动盘的时候,我们简单的从无穷无用字节的源/dev/zero读取,当从驱动盘读取的时候,我们读取的是刚才的文件,并把输出结果发送到无用的/dev/null。在整个操作过程中, dd 命令会跟踪数据传输的速度并且报告出结果。

SSD

写入速度

首先让我们写入固态硬盘

  1. $ dd if=/dev/zero of=./largefile bs=1M count=1024
  2. 1024+0 records in
  3. 1024+0 records out
  4. 1073741824 bytes (1.1 GB) copied, 4.82364 s, 223 MB/s

这里使用的文件实际上是相当大的。你可以尝试用更小的尺寸如 64K 甚至是 4K 的。

读取速度

现在读回这个文件。但是,得首先清除内存的缓存,以确保这个文件确实是从驱动盘读取的

运行下面的命令来清除内存缓存。

  1. $ sudo sh -c "sync && echo 3 > /proc/sys/vm/drop_caches"

现在读取此文件。

  1. $ dd if=./largefile of=/dev/null bs=4k
  2. 165118+0 records in
  3. 165118+0 records out
  4. 676323328 bytes (676 MB) copied, 3.0114 s, 225 MB/s

在 Arch Linux 的维基页上有一整页的关于不同的厂商,如英特尔、三星、Sandisk 等提供的各类固态硬盘 读/写速度的信息。点击如下的 url 可以查看相关信息。

https://wiki.archlinux.org/index.php/SSD_Benchmarking

U盘

首先把驱动盘插入端口,并挂载上,使其可读。然后从命令行下面进入挂载的文件目录下。

写入测试

这个实验中,用dd命令向驱动盘写入一个有 10000 块,每块 8K 字节的文件。

  1. # dd if=/dev/zero of=./largefile bs=8k count=10000
  2. 10000+0 records in
  3. 10000+0 records out
  4. 81920000 bytes (82 MB) copied, 11.0626 s, 7.4 MB/s

因此,写入速度约为7.5兆字节/秒。这是一个很低的数字。

读取测试

把相同的文件读取回来,测试速度。首先运行如下命令清除内存缓存。

  1. $ sudo sh -c "sync && echo 3 > /proc/sys/vm/drop_caches"

现在就可以使用dd命令来读取文件了。

  1. # dd if=./largefile of=/dev/null bs=8k
  2. 8000+0 records in
  3. 8000+0 records out
  4. 65536000 bytes (66 MB) copied, 2.65218 s, 24.7 MB/s

读取速度出来大约是25兆字节/秒,这大致跟廉价 USB 驱动盘的标准相匹配吧。

参考链接