在众多磁盘性能测试工具中,dd 命令因其简单易用和易于获得而深受广大运维工程师的喜爱。在这篇文章中,我们将探讨如何将它与 hdparm 命令一起使用,快速有效地评估磁盘性能。
01
—
为什么选择dd
不久前,一个客户的数据库突然变得很慢,让我去优化,我使用 dd
命令进行了检查:
发现磁盘的读取速度低至 25.8 kB/s,显然数据库并不是瓶颈,而是存储系统出了故障。这是使用dd进行测试的一个实际例子,这种测试在英文里叫sanity check,直译成测试存储是否神智清醒😀。
虽然 fio
、orion
和 lometer
等专业磁盘测试工具提供了更全面的分析,但 dd
具有以下优势:
关于号主,姚远:
02
—
测量写入速度
dd if=/dev/zero of=test.img bs=1G count=1 conv=fdatasync
/dev/zero
: 提供空字符的输入文件。test.img
: 输出文件。bs=1G
: 块大小。count=1
: 块数。conv=fdatasync
: 跳过缓存,直接写磁盘,相当于选项 “oflag=dsync”。示例:
说明:“/u02” 位于 HDD,而 “/u04” 位于 SSD,可以看到SSD的磁盘写速度比HDD快大约1倍。
警告: 避免使用 dd
直接写入块设备(例如:/dev/sda
),因为它可能会擦除数据。
03
—
测量读取速度
为了获得准确的读取速度,在测试前使用下面的命令清除缓存:
$ `sync && sudo echo 3 > /proc/sys/vm/drop_caches`
然后使用下面的命令一次性读取1GB的数据,用于进行读测试:
$ dd if=/u02/test1.img of=/dev/null bs=1G count=1
其中/dev/null
是操作系统自带的空文件,用于丢弃输入的数据。
示例:
可以看到SSD的磁盘读速度是HDD的 5倍。
03
—
使用hdparm
另一个Linux系统自带的命令hdparm
也可以用于对磁盘的性能进行快速评估。这个工具对设备的访问是块级别,测试的结果会比对文件系统性的访问要快。
示例:
$ hdparm -Tt /dev/sdb
示例:
可以看到从缓存读的速度是一样的,但从磁盘读时,SSD的速度大约是HDD的7倍。
03
—
总结
虽然 dd
和 hdparm
提供的测试结果不够详尽,但对于需要快速磁盘性能评估的工程师来说,它们通常够用。如果需要进一步深入分析磁盘的性能,可以考虑使用fio等更强大的工具。