为什么需要测试磁盘性能
飞牛NAS作为一款轻量级、高性能的NAS系统,磁盘性能直接决定了文件传输速度、虚拟机响应、数据库读写等关键体验。很多用户升级硬盘后感觉“快了不少”,但缺乏量化数据支撑。本文将通过fio和DD这两个经典工具,手把手教你科学评测飞牛NAS的磁盘性能,并解读测试结果。
准备工作
进入飞牛NAS的SSH环境
飞牛NAS默认开启SSH服务,你可以通过终端工具(如Putty、Termius)连接。登录后执行以下命令确认系统版本和挂载点:
uname -a
df -h
找到你的数据盘挂载路径,例如 /vol1/1000 或 /mnt/ssd1。后续测试会基于这个目录进行。
安装fio工具
fio是业界标准的磁盘性能测试工具,飞牛NAS的软件源中已包含。直接安装即可:
sudo apt update
sudo apt install fio -y
DD工具系统内置,无需额外安装。
使用DD进行基础吞吐测试
DD适合快速评估磁盘的连续读写能力,结果直观但精度较低。我们分两步测试写和读。
测试顺序写入
创建一个1GB的文件,写入到测试目录:
dd if=/dev/zero of=/vol1/1000/test.dd bs=1M count=1024 conv=fdatasync
参数说明:if=/dev/zero 表示写入零数据,bs=1M 是块大小,count=1024 生成1GB文件,conv=fdatasync 强制写入磁盘后再结束。
输出类似:1073741824 bytes (1.1 GB) copied, 2.345 s, 458 MB/s
测试顺序读取
读取刚才写入的文件,利用Linux缓存机制:
dd if=/vol1/1000/test.dd of=/dev/null bs=1M count=1024
注意:这里需要先清空缓存,否则读的是内存数据,结果虚高。清空缓存命令:
echo 3 | sudo tee /proc/sys/vm/drop_caches
然后立即执行读取测试。结果应反映磁盘的真实顺序读取能力。
测试后的清理
测试完成后删除临时文件:
rm /vol1/1000/test.dd
使用fio进行深度性能剖析
DD只能测试单线程顺序,实际场景中还有随机读写、混合负载、不同队列深度等需求。fio可以模拟这些复杂场景。
测试随机4K读写(高IOPS场景)
这是数据库、虚拟机等应用最关心的指标。创建一个测试文件,执行4K随机读写:
fio --name=random_4k --ioengine=libaio --rw=randrw --bs=4k --size=1G --numjobs=1 --iodepth=32 --runtime=30 --time_based --group_reporting --direct=1 --filename=/vol1/1000/fio_test
参数拆解:--rw=randrw 指混合随机读写,比例默认50%读50%写。--iodepth=32 是队列深度,模拟高并发。--direct=1 绕过系统缓存,直接测试磁盘原生性能。--runtime=30 运行30秒。
输出会显示IOPS(每秒输入输出次数)和延迟。例如:read: IOPS=12.5k, BW=48.9MiB/s 表示读IOPS为12500,带宽约49MB/s。
测试顺序128K读写(大文件传输场景)
文件拷贝、视频剪辑等场景更看重顺序性能:
fio --name=seq_128k --ioengine=libaio --rw=read --bs=128k --size=1G --numjobs=1 --iodepth=1 --runtime=30 --time_based --group_reporting --direct=1 --filename=/vol1/1000/fio_test
将 --rw=read 改为 write 即可测试顺序写入。--iodepth=1 模拟单线程顺序传输。
结果中的带宽(BW)数据最有参考价值,例如:BW=562MiB/s。
测试真实混合负载(70%读30%写)
模拟NAS日常使用(有人看电影,有人备份文件):
fio --name=mix_workload --ioengine=libaio --rw=randrw --rwmixread=70 --bs=4k --size=2G --numjobs=4 --iodepth=16 --runtime=60 --time_based --group_reporting --direct=1 --filename=/vol1/1000/fio_test
--rwmixread=70 设置读占比70%。--numjobs=4 开4个并发进程,模拟多用户访问。
多盘测试与清理
如果飞牛NAS组了RAID0或RAID1,建议在对应挂载点下测试。完成后删除fio生成的临时文件:
rm /vol1/1000/fio_test
解读测试结果
关键指标说明
IOPS(Input/Output Operations Per Second):每秒I/O次数,越高代表处理小文件、随机请求的能力越强。HDD通常几百,普通SATA SSD几千,NVMe SSD可达几十万。
带宽(BW):每秒传输数据量,顺序读写场景更关注此值。千兆网络下,机械盘150MB/s足够,SSD则需500MB/s以上才能跑满万兆网卡。
延迟(Latency):平均每次I/O完成时间,以微秒或毫秒为单位。NVMe SSD延迟通常低于100微秒,机械盘可能达到十几毫秒。
不同硬盘的参考值
机械硬盘(7200转):顺序读写约150-200MB/s,随机4K IOPS约100-200。
SATA SSD(如三星870 EVO):顺序读写约550MB/s,随机4K IOPS约80000-100000。
NVMe SSD(如三星980 Pro):顺序读写约3500MB/s,随机4K IOPS约500000以上。
如果测试结果远低于预期,检查以下可能:磁盘是否接在SATA2接口?飞牛NAS是否启用了RAID校验?系统是否正在后台运行其他任务?
进阶技巧
测试不同块大小的影响
用fio的--bssplit参数可以模拟混合块大小,更贴近真实应用:
fio --name=split_test --ioengine=libaio --rw=randrw --bssplit=4k/30:64k/30:1M/40 --size=1G --numjobs=1 --iodepth=8 --runtime=30 --time_based --group_reporting --direct=1 --filename=/vol1/1000/fio_test
这表示30%的I/O是4K块,30%是64K,40%是1M,模拟数据库、日志、文件传输的混合场景。
使用zram或缓存加速后的对比
如果你在飞牛NAS上配置了zram(内存压缩缓存)或L2ARC(SSD缓存),可以分别在启用和禁用缓存的情况下测试,直观看到加速效果。例如先运行一次fio,然后挂载缓存设备再测一次,对比IOPS提升。
总结
通过DD和fio的组合测试,你可以全面掌握飞牛NAS磁盘的真实性能。DD适合快速验证顺序读写极限,fio则能深入分析随机IO、混合负载和并发能力。建议定期(如每季度)运行一次基准测试,记录数据,这样当系统变慢时,能快速发现磁盘是否老化或出现异常。性能测试不是一次性工作,而是NAS运维的常态化工具。