磁盘读写超时报错本质是I/O请求超时,需分层排查:先用iostat看负载,再用iotop/pidstat定位进程,接着lsof查文件,最后smartctl/dmesg/df检查硬件与文件系统健康,并按序修复只读挂载。

磁盘读写超时报错,通常表现为进程卡住、服务响应慢、日志里出现 I/O error、Read-only file system 或 device timeout 等提示。这类问题本质是底层 I/O 请求无法在预期时间内完成,可能源于硬件故障、驱动异常、文件系统损坏或资源争抢。排查需分层推进:先确认现象层级,再逐级下钻。
看整体磁盘负载是否饱和
用 iostat -x 1 每秒刷新一次,重点关注以下几项:
- %util ≥ 95%:磁盘持续满负荷,说明已成瓶颈;
- await 显著高于 svctm(比如 await > 20ms,svctm :请求大量排队,不是磁盘慢,而是等不及;
- avgqu-sz 长期 > 2:I/O 队列积压,系统在“堵车”;
- r/s 或 w/s 异常高(如上万):结合业务判断是否合理,比如突发日志刷盘或数据库批量写入。
若发现某块盘(如 sda)指标异常,就锁定它继续查;若多盘都高,需结合 dstat -cdm 看是否内存不足引发 swap 频繁读写。
定位具体是哪个进程在疯狂读写
优先使用 iotop -oP(只显示有 I/O 的进程),观察 IO> 列和 SWAPIN 列:
Linux系统管理专家,覆盖12大模块:用户权限、SSH、存储、网络、systemd、防火墙、日志监控、备份恢复、TLS证书、Ansible、容器、IaC。提供配置、验证、加固、监控、备份、自动化、故障排查、回滚闭环。关键词:useradd、sudo、sshd_config、chmod、SEL...
- 如果某个进程的
DISK WRITE持续占满带宽(如 >100MB/s),基本就是它拖垮了磁盘; - 若
SWAPIN很高,说明该进程因内存不足被频繁换入换出,间接导致磁盘压力; - 没有 iotop?可用
pidstat -d 2 3替代,输出含 PID、每秒读写字节数。
确认进程后,进一步查它在操作哪些文件:lsof -p <PID> | grep -E '(REG|DIR)' | sort -k7 -rn | head -5
重点关注大文件、日志路径(如 /var/log/)、数据库数据目录(如 /var/lib/mysql/)。
检查磁盘硬件与文件系统健康状态
超时往往伴随物理层问题。执行三步快速筛查:
- 运行
smartctl -H /dev/sda:若返回FAILED,立即停用该盘; - 运行
dmesg | tail -40 | grep -i "error\|timeout\|buffer\|ata\|nvme":找最近的 I/O 错误、重试、链路中断等内核报错; - 运行
df -h和df -i:排除空间或 inode 耗尽导致的“假性超时”(写不进会卡住)。
若 dmesg 中反复出现 end_request: I/O error 或 link is slow,大概率是硬盘、线缆或控制器故障。
验证并尝试恢复文件系统可写性
若已出现 Read-only file system,说明内核已触发保护机制。按顺序操作:
- 查当前挂载状态:
mount | grep sda1,确认是否含ro,; - 尝试强制重挂载读写:
mount -o remount,rw /dev/sda1(仅对未严重损坏有效); - 失败则卸载后修复:
umount /dev/sda1 && e2fsck -f -y /dev/sda1(ext4)或xfs_repair /dev/sda1(XFS); - 修复前务必确认无关键进程占用,必要时从 Live 系统操作。
不复杂但容易忽略

















