一、快速定位挂载点
# 查看所有挂载点及文件系统类型
lsblk -o NAME,MOUNTPOINT,FSTYPE,SIZE,TYPE,ROTA
输出示例:
NAME MOUNTPOINT FSTYPE SIZE TYPE ROTA
sda ext4 1.8T disk 1
├─sda1 / ext4 512G part 1
└─sda2 /data xfs 1.3T part 1
nvme0n1 ext4 500G disk 0
└─nvme0n1p1 /ssd ext4 500G part 0
关键列解释:
• ROTA=1:机械硬盘(HDD)
• ROTA=0:固态硬盘(SSD/NVMe)
• FSTYPE:文件系统类型(ext4/xfs/nfs等)
二、实时I/O监控
- 使用iostat(推荐)
# 安装sysstat
sudo apt install sysstat
# 监控所有设备I/O(每秒刷新)
iostat -dxz 1
关键指标:
• %util
> 90% 表示设备饱和
• await
> 10ms 表明I/O延迟过高
• svctm
显示设备实际响应时间
- 按挂载点细分
# 使用iotop(需root)
sudo iotop -oPa --sort=DISK_READ
三、精准测速方法
- 顺序读写测试(适合机械硬盘)
# 测试写入速度(1GB文件)
sudo dd if=/dev/zero of=/挂载点/testfile bs=1G count=1 oflag=direct conv=fdatasync
# 测试读取速度
sudo dd if=/挂载点/testfile of=/dev/null bs=1G count=1 iflag=direct
# 清除测试文件
sudo rm -f /挂载点/testfile && sync
- 随机I/O测试(适合SSD/数据库场景)
# 安装fio
sudo apt install fio
# 混合读写测试(4K随机)
sudo fio --name=test --filename=/挂载点/fio_test \
--size=1G --runtime=60 --ioengine=libaio \
--rw=randrw --bs=4k --iodepth=64 \
--direct=1 --numjobs=4 --group_reporting
- 网络存储测试(NFS/SMB)
# NFS性能测试(带元数据操作)
sudo apt install nfs-common
sudo nfsiostat -s 1
# SMB/CIFS测试
sudo smbstatus -S
四、高级诊断技巧
- 查看块设备队列深度
cat /sys/block/sda/queue/nr_requests
# NVMe设备查看
nvme get-feature /dev/nvme0n1 -f 0x4 -H
- 检测磁盘调度算法
cat /sys/block/sda/queue/scheduler
# 修改为deadline(适用于HDD)
echo deadline | sudo tee /sys/block/sda/queue/scheduler
- 查看物理设备健康度
# HDD健康检测
sudo smartctl -A /dev/sda
# NVMe健康检测
sudo nvme smart-log /dev/nvme0n1
五、性能对比表格
测试场景 | HDD (SATA) | SSD (SATA) | NVMe SSD | NFS (10GbE) |
---|---|---|---|---|
顺序读 (MB/s) | 80-160 | 450-550 | 3000-7000 | 800-1000 |
顺序写 (MB/s) | 60-120 | 400-500 | 2000-5000 | 600-800 |
4K随机读 (IOPS) | 80-150 | 80k-100k | 500k-1M | 5k-10k |
延迟 (ms) | 5-10 | 0.1-0.3 | 0.01-0.1 | 0.5-2 |
六、性能瓶颈判断
- CPU瓶颈:当
iostat
显示%iowait
> 30% 且%idle
< 20% - 设备瓶颈:
iostat
中%util
接近100% 且await
显著增加 - 网络瓶颈:
iftop
显示网络带宽饱和
七、自动监控脚本
#!/bin/bash
# 实时记录各挂载点IO
while true; do
timestamp=$(date "+%Y-%m-%d %H:%M:%S")
echo "===== $timestamp =====" >> iostat.log
iostat -dxz 1 3 >> iostat.log
echo "===== Mount Points =====" >> iostat.log
df -h | grep -v tmpfs >> iostat.log
sleep 60
done
通过以上方法,可以精准定位不同挂载区的I/O性能特征。对于关键业务系统,建议定期执行压力测试并建立性能基线。