iostat不能监控SSD磨损程度,仅统计I/O性能指标;需配合smartctl读取SMART属性(如Percentage Used)评估寿命,并结合pidstat/iotop定位高IO进程,实现性能与健康双重监控。

iostat 本身不能监控固态硬盘(SSD)的磨损程度,它只负责统计内核块层的 I/O 行为(如吞吐、延迟、队列等),不读取 SSD 的 SMART 属性或 NAND 寿命计数器。但 iostat 是评估 SSD 读写性能表现与负载压力最常用、最直接的工具之一——尤其在判断是否出现性能退化、响应延迟升高或请求堆积时非常关键。
要全面掌握 SSD 状态,需将 iostat 与其它工具配合使用:用 iostat 看“用了多少、怎么用的”,用 smartctl 看“还能用多久”。
? 一、用 iostat -x 观察 SSD 实时性能特征
SSD 和传统机械盘行为差异大,不能只看 %util。重点字段和解读如下:
await(平均 I/O 延迟)r_await(读等待+服务时间)、w_await(写等待+服务时间)
✅ 正常值:SSD 通常 < 1–2 ms;若持续 > 5 ms,需警惕(可能写放大、垃圾回收阻塞、控制器过载)
❌ 注意:await高 ≠ 一定是 SSD 故障,也可能是上层应用大量随机小 IO 或队列深度设置不合理avgqu-sz(平均队列长度)
✅ SSD 理想值一般 ≤ 1(NVMe 多队列设备可容忍更高,但长期 > 队列深度 × 0.8 就有积压风险)
⚠️ 若avgqu-sz持续 > 4 且w_await同步上升,说明写请求在排队,可能触发后台 GC 压力%util要谨慎看待
Linux 5.0+ 内核中,对 NVMe/多队列 SSD,%util已被标记为 deprecated(弃用)
它仅表示“设备任意时刻有 I/O 的时间占比”,SSD 并行能力强,%util = 100%很常见,不代表卡死
✅ 更应关注rkB/s/wkB/s是否逼近该 SSD 的标称顺序读写上限(如 PCIe 4.0 x4 NVMe 通常 6–7 GB/s)-
r/s和w/s(IOPS)结合rkB/s/wkB/s判断 IO 模式- 高
w/s+ 低wkB/s→ 大量小写(如数据库日志、元数据更新),易加速磨损 - 高
wkB/s+ 低w/s→ 大块顺序写(如备份、视频转码),对 SSD 更友好 -
r/s > 10k且rkB/s < 20MB/s→ 典型随机读瓶颈,可能受 DRAM 缓存或 TLC/QLC 层级影响
- 高
? 推荐命令(每秒刷新,聚焦某 SSD,如 /dev/nvme0n1):
iostat -dxk 1 /dev/nvme0n1
?️ 二、补充监控:用 smartctl 查 SSD 磨损与健康状态
iostat 不提供磨损信息,必须用 smartctl(来自 smartmontools)读取 SMART 数据:
-
安装并确认设备支持:
sudo apt install smartmontools # Debian/Ubuntu sudo yum install smartmontools # RHEL/CentOS sudo smartctl -i /dev/nvme0n1 # 查看基础信息
-
读取关键磨损指标(NVMe 示例):
sudo smartctl -a /dev/nvme0n1 | grep -E "(Percentage|Data_Units|Media_Wearout)"
关注字段:
linux-sysadmin下载Linux系统管理专家,覆盖12大模块:用户权限、SSH、存储、网络、systemd、防火墙、日志监控、备份恢复、TLS证书、Ansible、容器、IaC。提供配置、验证、加固、监控、备份、自动化、故障排查、回滚闭环。关键词:useradd、sudo、sshd_config、chmod、SEL...
-
Percentage Used:厂商定义的“已用寿命百分比”,0–100%,接近 100% 表示接近 Endurance Limit -
Data Units Written:累计写入量(换算成 TBW),对比 SSD 规格书中的 TBW 值 -
Media Wearout Indicator(部分型号):0–100,越低越老化
⚠️ 注意:不同厂商命名不同(如 Samsung 叫
Percentage Used,Intel 叫Media Wearout Indicator),务必查对应型号手册。 -
? 三、结合 pidstat 和 iotop 定位“谁在高频写 SSD”
高磨损往往来自特定进程的持续小写。单靠 iostat 只知“盘忙”,不知“谁在写”:
-
查实时进程级 IO 速率(KB/s):
pidstat -d 1
-
找当前活跃写入进程(需 root):
sudo iotop -o -d 1 -P # -P 显示进程而非线程,-o 只显示有 IO 的
常见高磨损源头:
- 数据库 WAL 日志刷盘(PostgreSQL
wal_writer、MySQLinnodb_io_capacity设置过低) - 容器镜像频繁 pull/push(
/var/lib/docker所在 SSD) - 日志轮转服务(
rsyslog、journalctl --vacuum-size=...频繁重写)
? 四、建立简易长期监控(避免突发恶化)
iostat 默认不保存历史,建议搭配简单脚本记录关键指标:
# 每5分钟记录一次 nvme0n1 的 await、avgqu-sz、wkB/s
echo "$(date),$(iostat -dxk 1 1 | awk '/nvme0n1/{print $10,$11,$7}')" >> /var/log/ssd-perf.log再配合 gnuplot 或 grafana + node_exporter 可视化趋势,早于 smartctl 报警前发现性能缓慢劣化。
不复杂但容易忽略:SSD 性能下降常是渐进过程,iostat 提供的是“正在发生什么”,smartctl 告诉你“还能撑多久”,两者缺一不可。


















