Linux系统中使用dd
命令测试USB和SSD硬盘的读写速度
问题介绍
新买了个U盘,为了测试小读写速率,从https://linux.cn上找到了这篇文章,这里稍微记录下,方便回顾。
解决方案
主要基于dd
指令。
:::info
注意,这里的 dd
指令会强制写入特定存储区域的首部地址,测试之前请确保存储介质中无有用数据。否则就完了。
:::
挂载上驱动盘,从终端进入此盘目录下。然后使用dd
命令,首先写入number_of_blocks
数量的block_size
固定大小的块的一个文件,接着读取这个文件。dd
命令通用语法格式如下:
dd if=path/to/input_file of=/path/to/output_file bs=block_size count=number_of_blocks
当写入到驱动盘的时候,我们简单的从无穷无用字节的源/dev/zero
读取,当从驱动盘读取的时候,我们读取的是刚才的文件,并把输出结果发送到无用的/dev/null
。在整个操作过程中, dd
命令会跟踪数据传输的速度并且报告出结果。
SSD
写入速度
首先让我们写入固态硬盘
$ dd if=/dev/zero of=./largefile bs=1M count=1024
1024+0 records in
1024+0 records out
1073741824 bytes (1.1 GB) copied, 4.82364 s, 223 MB/s
这里使用的文件实际上是相当大的。你可以尝试用更小的尺寸如 64K 甚至是 4K 的。
读取速度
现在读回这个文件。但是,得首先清除内存的缓存,以确保这个文件确实是从驱动盘读取的。
运行下面的命令来清除内存缓存。
$ sudo sh -c "sync && echo 3 > /proc/sys/vm/drop_caches"
现在读取此文件。
$ dd if=./largefile of=/dev/null bs=4k
165118+0 records in
165118+0 records out
676323328 bytes (676 MB) copied, 3.0114 s, 225 MB/s
在 Arch Linux 的维基页上有一整页的关于不同的厂商,如英特尔、三星、Sandisk 等提供的各类固态硬盘 读/写速度的信息。点击如下的 url 可以查看相关信息。
U盘
首先把驱动盘插入端口,并挂载上,使其可读。然后从命令行下面进入挂载的文件目录下。
写入测试
这个实验中,用dd
命令向驱动盘写入一个有 10000 块,每块 8K 字节的文件。
# dd if=/dev/zero of=./largefile bs=8k count=10000
10000+0 records in
10000+0 records out
81920000 bytes (82 MB) copied, 11.0626 s, 7.4 MB/s
因此,写入速度约为7.5兆字节/秒。这是一个很低的数字。
读取测试
把相同的文件读取回来,测试速度。首先运行如下命令清除内存缓存。
$ sudo sh -c "sync && echo 3 > /proc/sys/vm/drop_caches"
现在就可以使用dd
命令来读取文件了。
# dd if=./largefile of=/dev/null bs=8k
8000+0 records in
8000+0 records out
65536000 bytes (66 MB) copied, 2.65218 s, 24.7 MB/s
读取速度出来大约是25兆字节/秒,这大致跟廉价 USB 驱动盘的标准相匹配吧。