资讯动态

Ubuntu下固态硬盘性能测试全攻略:从fio工具到结果解读

发布时间:2026/8/7 11:28:10 来源:尧图企业网站定制
1. 项目概述为什么要在Ubuntu下测固态硬盘如果你刚给Ubuntu系统换上了一块新的固态硬盘或者感觉用了两三年的老盘最近有点“力不从心”那么第一件该做的事绝对不是立刻开始装软件、拷数据。一个更明智、也更专业的做法是先给它跑个分。这个“跑分”指的就是使用专业的固态硬盘速度测试工具对硬盘的读写性能进行一次全面的体检。你可能会有疑问系统用着感觉挺快还有必要测吗答案是肯定的。感觉是会骗人的但数据不会。一块固态硬盘的性能尤其是写入速度会随着使用时间的增长、剩余容量的减少以及主控芯片的负载均衡策略而发生变化。通过测试你可以验证标称性能确认你买到的盘是否达到了厂商宣传的读写速度避免买到“体质”不佳或存在问题的产品。建立性能基线在新盘刚装好系统、数据不多时进行一次测试记录下最佳状态的数据。未来当系统变慢时可以再次测试对比快速判断是否是硬盘性能下降导致了瓶颈。排查系统问题如果测试结果远低于预期可能不是硬盘本身的问题而是系统设置如AHCI模式是否开启、驱动、甚至是SATA/USB接口的速率限制导致的。测试工具能帮你定位问题方向。评估升级效果从SATA SSD升级到NVMe SSD或者从PCIe 3.0升级到PCIe 4.0测试数据能给你最直观的性能提升感受。在Ubuntu这个开源世界里我们拥有众多强大且免费的命令行和图形界面测试工具。它们远比Windows下某些“一键跑分”软件来得深入和灵活能让你真正理解硬盘在不同工作负载下的表现。接下来我将带你深入这些工具的核心不仅告诉你“怎么用”更会解释“为什么这么用”以及“数据背后的含义”。2. 核心工具选型与原理深度解析在Ubuntu下测试固态硬盘我们主要会用到两类工具综合基准测试工具和深度分析/压力测试工具。选择哪种取决于你的测试目的。2.1 综合基准测试双雄fio与hdparmfio(Flexible I/O Tester)这是存储性能测试领域的“瑞士军刀”也是业界公认的标准。它之所以强大在于其无与伦比的灵活性和可配置性。核心原理fio通过模拟各种真实的I/O输入/输出模式来测试存储设备。你可以精确定义读写比例、块大小、队列深度、线程/进程数、测试模式顺序、随机等参数。它绕过了操作系统的高速缓存Cache直接对裸设备进行测试结果更能反映硬盘的原始性能。为什么选择它当你需要评估数据库、虚拟机、编译环境等特定应用场景下的硬盘性能时fio可以模拟出近乎真实的负载。例如数据库操作多为小文件随机读写而视频编辑则是大文件顺序读写fio都能精准模拟。hdparm这是一个更古老、更直接的硬盘参数获取和性能测试工具。核心原理hdparm -tT命令主要测试的是硬盘的缓存读取和缓冲磁盘读取速度。-T测试的是操作系统内存和硬盘控制器缓存之间的传输速度实际上更多是CPU和内存的性能-t测试的是从硬盘盘体经过缓存读取数据的速度。为什么选择它它的测试速度极快几秒钟就能给出一个大概的读取速度参考。但它有几个重大局限1) 只测试读取不测试写入而写入速度对SSD至关重要2) 测试结果受系统缓存影响大可能不够准确3) 对NVMe硬盘的支持有限。因此它通常只用作一个快速的、粗略的参考。选型建议对于严肃的性能评估fio是绝对的首选。hdparm可以作为一个开机自检式的快速预览。在接下来的实操中我们将以fio为核心展开。2.2 图形化利器GNOME Disks 与 KDE Partition Manager对于不习惯命令行的用户Ubuntu自带的图形化工具提供了便捷的测试入口。GNOME Disks (gnome-disk-utility)这是GNOME桌面环境默认的磁盘管理工具内置了简单的基准测试功能。操作路径打开Disks选择目标SSD点击右上角菜单选择“Benchmark Disk...”。测试内容它主要进行顺序读写测试可以自定义样本数量和数据大小。图形化结果展示直观。优缺点优点是简单易用无需记忆命令缺点是测试模式单一主要是顺序读写可配置参数极少无法进行随机读写、混合负载等深度测试结果仅供参考。KDE Partition Manager在KDE Plasma桌面环境下这个工具也提供了类似的基准测试功能体验与GNOME Disks类似。选型建议图形化工具适合新手快速了解硬盘的大致性能水平或者在进行磁盘分区、格式化等操作时顺手做一个简单测试。它们无法替代fio进行的专业、定制化测试。2.3 信息侦察兵smartctl(SMART工具)测试速度之前了解硬盘的健康状态是前提。这就是smartctl的用武之地它属于smartmontools软件包。核心原理SMARTSelf-Monitoring, Analysis and Reporting Technology是硬盘内置的一套自我监测、分析和报告技术。smartctl可以读取这些原始数据。关键信息通过它你可以查看硬盘的通电时间、通电次数、坏块数量、介质磨损指示器对SSD尤其重要表示闪存颗粒的寿命消耗百分比等。为什么先用它一块健康状态堪忧的硬盘例如磨损度已达95%其性能测试结果是没有参考价值的。测试前先用sudo smartctl -a /dev/nvme0n1NVMe盘或sudo smartctl -a /dev/sdaSATA盘检查一下是良好的习惯。3. 实战使用fio进行全方位性能压测现在让我们进入最核心的实操环节。我将设计一套从简单到复杂覆盖主要应用场景的fio测试方案。3.1 环境准备与重要警告首先安装fiosudo apt update sudo apt install fio -y至关重要的安全警告警告fio测试尤其是写入测试会覆盖你指定测试区域的数据请务必确认测试目标是一个空分区、一个新盘或者你已经备份了该分区上的所有重要数据切勿在生产环境或存有重要数据的硬盘上直接运行写入测试确定你的硬盘设备标识符SATA SSD或普通硬盘通常是/dev/sda,/dev/sdb等。NVMe SSD通常是/dev/nvme0n1,/dev/nvme1n1等。如果你想测试某个特定分区更安全可以是/dev/sda1,/dev/nvme0n1p2等。使用lsblk或sudo fdisk -l命令来确认设备名。3.2 标准四件套测试顺序与随机读写这是最经典的测试组合能反映硬盘在极端理想情况大文件连续操作和极端恶劣情况小文件零散操作下的性能。1. 顺序读取 (Sequential Read)模拟读取单个大文件如电影、光盘镜像的场景。sudo fio --nameseq_read --filename/dev/nvme0n1 --ioenginelibaio --direct1 --rwread --bs1M --size10G --numjobs1 --runtime60 --time_based --group_reporting参数拆解--direct1绕过系统缓存直写硬盘结果更真实。--rwread测试模式为读取。--bs1M块大小为1MB适合顺序操作。--size10G测试总数据量为10GB。可根据你的硬盘容量调整建议至少是硬盘缓存的数倍。--numjobs1单线程操作。--runtime60测试运行60秒即使未完成size指定的量也会停止。--time_based保证至少运行指定时间。--group_reporting汇总所有线程的测试结果。2. 顺序写入 (Sequential Write)模拟写入单个大文件的场景。再次警告会擦除数据sudo fio --nameseq_write --filename/dev/nvme0n1 --ioenginelibaio --direct1 --rwwrite --bs1M --size10G --numjobs1 --runtime60 --time_based --group_reporting3. 随机读取 (Random Read)模拟操作系统启动、软件加载、数据库查询等场景大量随机读取小文件。sudo fio --namerand_read --filename/dev/nvme0n1 --ioenginelibaio --direct1 --rwrandread --bs4k --size10G --numjobs8 --runtime60 --time_based --group_reporting关键变化--rwrandread随机读取。--bs4k块大小为4KB这是大多数文件系统和数据库操作的基本单位。--numjobs8启动8个并行线程/进程模拟高并发访问更能压榨出IOPS每秒输入输出操作数性能。4. 随机写入 (Random Write)模拟系统日志记录、邮件接收、小文件下载等场景。对SSD压力最大数据会丢失sudo fio --namerand_write --filename/dev/nvme0n1 --ioenginelibaio --direct1 --rwrandwrite --bs4k --size10G --numjobs8 --runtime60 --time_based --group_reporting3.3 解读测试结果报告运行上述任一命令后fio会输出一份详细的报告。我们看关键几行Run status group 0 (all jobs): READ: bw2547MiB/s (2671MB/s), 2547MiB/s-2547MiB/s (2671MB/s-2671MB/s), io149GiB (160GB), run60001-60001msecbw(bandwidth)带宽即顺序读写的速度单位 MiB/s (MB/s)。这是衡量大文件传输能力的关键指标。lat (usec): min10, max8633, avg31.44, stdev16.74 ... cpu : usr4.08%, sys20.00%, ctx15226723, majf0, minf245 IO depths : 10.1%, 20.1%, 40.1%, 80.1%, 160.1%, 320.1%, 64100.0% submit : 00.0%, 4100.0%, 80.0%, 160.0%, 320.0%, 640.0%, 640.0% complete : 00.0%, 4100.0%, 80.0%, 160.0%, 320.0%, 640.0%, 640.0% issued rwts: total38174720,0,0,0 short0,0,0,0 dropped0,0,0,0 latency : target0, window0, percentile100.00%, depth64对于随机读写测试我们更关注另一项数据IOPS。它通常在报告开头以iops形式给出例如iops165k。如果没有可以通过计算得到总IO操作数 / 运行时间。例如上面报告最后一行issued rwts: total38174720,...表示完成了38,174,720次读取操作运行60秒则平均IOPS约为 38,174,720 / 60 ≈ 636,245。这是一个非常高的随机读取IOPS值。lat(latency)延迟单位微秒(usec)或毫秒(msec)。avg是平均延迟这个值越低响应越快对系统流畅性影响越小。随机读写测试中的延迟指标尤为重要。实操心得对比测试结果时要同类型对比。顺序读写看bw(MB/s)随机读写看IOPS和lat(延迟)。一块优秀的NVMe SSD顺序读写应轻松突破2000MB/s高端盘可达7000MB/s以上随机读写IOPS则应达到数十万甚至百万级别。而SATA SSD的极限通常在550MB/s左右随机读写IOPS在数万到十万级别。3.4 进阶测试模拟真实混合负载单纯的读写分离测试还不够真实。我们可以用fio模拟更复杂的场景例如70%读30%写的混合随机访问这更接近许多服务器应用。sudo fio --namemixed_randrw --filename/dev/nvme0n1 --ioenginelibaio --direct1 --rwrandrw --rwmixread70 --bs4k --size10G --numjobs4 --runtime120 --time_based --group_reporting--rwrandrw随机混合读写。--rwmixread70指定读写混合比例中读取操作占70%。这个测试的结果会分别给出读和写的IOPS与带宽能综合评估硬盘在复杂负载下的性能稳定性。4. 图形化测试与结果可视化对于喜欢直观感受的用户可以结合图形化工具和脚本。使用GNOME Disks进行快速测试打开“磁盘”应用。在左侧选择要测试的SSD。点击右上角的汉堡菜单三条横线选择“磁盘基准测试”。点击“开始性能测试...”。它会进行写入和读取测试。测试完成后你会看到一条速度曲线和平均速度值。这个曲线可以帮你观察速度是否稳定——高性能SSD的曲线应该是一条平稳的高位直线如果曲线后半段大幅下滑可能意味着硬盘的SLC缓存用尽进入了缓外直写阶段速度会下降。将fio结果可视化 虽然fio是命令行工具但我们可以将结果输出到文件然后用其他工具绘图。一个更简单的方法是使用现成的脚本如fio-plot。你需要先安装Python3和一些依赖然后使用fio-plot解析fio输出的JSON格式结果文件生成漂亮的对比图表。这对于对比测试多块硬盘或不同参数下的性能非常有用。5. 影响测试结果的关键因素与问题排查即使使用相同的命令在不同环境下测试结果也可能差异巨大。理解这些因素才能正确解读数据。5.1 硬件与系统层影响因素接口与协议这是最大的瓶颈。一块PCIe 4.0 x4的NVMe SSD如果插在仅支持PCIe 3.0 x2的M.2插槽上速度会减半。使用lspci -vv | grep -i nvme和sudo lshw -class storage可以查看接口信息。硬盘剩余空间与状态SSD在接近满盘时性能尤其是写入性能会显著下降。主控需要花更多时间进行垃圾回收和磨损均衡。测试最好在空盘或剩余空间较大50%时进行。系统负载测试时请关闭所有不必要的应用程序尤其是那些可能频繁读写磁盘的软件浏览器、下载工具、虚拟机等。后台活动会干扰测试结果。文件系统与挂载参数虽然我们常用--direct1绕过缓存直接测裸设备但如果你测试的是已格式化的分区如/dev/sda1文件系统的日志功能如ext4的journal也会带来少量开销。/etc/fstab中的挂载参数如noatime,nodiratime对日常使用有优化但对极限性能测试影响微乎其微。内核I/O调度器对于NVMe SSD建议将调度器设置为none(即Noop调度器)因为NVMe驱动本身已经做了很好的优化。可以使用cat /sys/block/nvme0n1/queue/scheduler查看并通过修改内核参数或使用tee命令临时更改。5.2 常见问题与排查技巧实录问题1测试速度远低于硬盘标称值例如标称3500MB/s实测只有1000MB/s。排查思路检查接口确认你的主板M.2接口支持的PCIe版本和通道数。一块PCIe 4.0的盘插在PCIe 3.0接口上速度上限就是PCIe 3.0 x4的约4000MB/s。如果插在PCIe 3.0 x2或更低的接口上上限会更低。检查散热高性能NVMe SSD在持续高负载下会过热降速。触摸硬盘散热片是否烫手。使用sudo apt install nvme-cli后用sudo nvme smart-log /dev/nvme0查看温度信息。改善机箱风道或加装散热片。确认测试方法你是否用了--direct1是否测试的是整个设备如/dev/nvme0n1而不是某个分区分区测试会受到文件系统开销影响。运行硬件检测使用sudo dmesg | grep -i error和sudo smartctl -a /dev/nvme0n1查看是否有硬件报错或警告。问题2顺序写入测试开始时速度很快但几秒后速度暴跌。原因解析这是完全正常的现象尤其是对于消费级SSD。高速的“SLC缓存”用尽后速度会回落到闪存颗粒的原始写入速度即“缓外速度”。这个缓存大小从几GB到上百GB不等是厂商平衡成本和性能的关键设计。如何评估这正是我们需要用fio并设置较大--size如100G以上和--runtime进行长时间测试的原因。观察报告中的速度曲线或bw随时间的变化可以评估出SLC缓存的大小和缓外速度。一块设计优秀的盘缓外速度不应跌落得太难看。问题3随机读写测试的IOPS波动很大每次测试结果不一致。排查思路确保系统空闲在测试前重启系统进入一个干净的桌面环境关闭所有非核心进程。增加测试规模和时长将--size调大--runtime调长如300秒让测试结果更稳定减少偶然性。检查后台服务使用iotop命令需安装实时查看磁盘I/O排查是否有其他进程在干扰。硬盘本身状态如果硬盘已经使用了很长时间且写入量很大性能可能会有所衰减。检查SMART信息中的“媒体磨损指示器”。问题4fio测试时系统卡顿甚至无响应。原因与解决这是因为fio在以极高的压力访问磁盘占用了几乎所有的I/O资源。这是正常现象也证明了测试的有效性。建议在测试时不要操作电脑。如果必须中断测试可以按CtrlC终止。如果系统完全卡死你可能需要长按电源键重启。5.3 性能数据速查与健康评估表完成测试后你可以将关键数据整理成下表方便日后对比测试项目命令关键参数核心指标我的测试结果 (示例某PCIe 3.0 NVMe SSD)健康参考范围 (SATA/NVMe)顺序读取rwread, bs1M带宽 (MB/s)2100 MB/sSATA: 500-550; NVMe: 1500-7000顺序写入rwwrite, bs1M带宽 (MB/s)1600 MB/sSATA: 400-500; NVMe: 1000-5000随机读取rwrandread, bs4k, numjobs8IOPS (千次/秒)350 k IOPSSATA: 50-100k; NVMe: 300-1000k随机写入rwrandwrite, bs4k, numjobs8IOPS (千次/秒)300 k IOPSSATA: 50-100k; NVMe: 200-800k混合随机(7读3写)rwrandrw, rwmixread70, bs4k读/写 IOPS250k / 110k取决于具体盘型SMART健康度smartctl -a媒体磨损指标5%越低越好超过80%需关注个人实操心得不要迷信一次测试的峰值数据。更可靠的做法是在系统刚装好、硬盘近乎空盘时做一次全面的基准测试把结果保存下来。以后每隔半年或感觉系统变慢时在相近的系统负载和硬盘剩余空间条件下重复测试。如果发现顺序写入或随机写入性能出现断崖式下跌例如下降超过30%而SMART健康度尚可那么你可能需要检查系统软件环境或考虑备份数据后安全擦除Secure Erase硬盘以恢复性能此操作会清除所有数据。对于日常使用随机读取IOPS和延迟对系统“跟手度”的影响其实比惊人的顺序读写速度更为重要。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价