先确认是否真的存在磁盘读写异常,通过系统工具快速定位,操作步骤如下:
最小化安装的系统默认不带该工具,直接执行对应命令安装:
yum install sysstat -yapt install sysstat -y执行命令获取5秒内的磁盘状态:iostat -x 1 5
判断异常的标准:如果输出中%util字段连续超过80%,同时rMB/s(读)、wMB/s(写)接近磁盘标称最大读写速度,即可判定存在读写异常。普通SATA机械盘最大持续读写约150MB/s,普通SSD约500MB/s,可自行对比。
确认异常后,立刻定位是哪个进程、哪个目录导致的异常:
先安装iotop工具:
yum install iotop -yapt install iotop -y执行命令,只显示正在产生读写的进程:sudo iotop -o
输出第一列是进程ID,最后一列是进程名称,可直接看到哪个进程持续产生大量IO。
如果进程定位后需要找到对应异常文件,直接执行以下命令找出所有大于1GB的文件:
``` find / -type f -size +1G -exec ls -lh {} \; ```如果怀疑是大量小文件占满inode,执行以下命令找出inode占用最多的10个目录:
``` find / -xdev -printf '%h\n' | sort | uniq -c | sort -k 1 -n | tail -10 ```
输出最后一行就是inode占用最多的目录,直接进入清理即可。
按照定位结果,对应不同原因执行修复:
如果是无关异常进程,直接执行命令杀死进程:kill -9 你的进程ID
如果是业务进程因为日志过大导致的持续读写,按照以下步骤操作:
cat /dev/null > /你的日志路径/日志文件名.log,执行后立刻释放空间,不影响进程运行。/etc/logrotate.d/你的应用名,填入以下可直接复用的配置:该配置会每天自动切割日志,保留最近7天的压缩日志,不需要额外修改即可使用。
先执行两个命令确认占用:df -h查看磁盘块空间使用率,df -i查看inode使用率,只要任意一项使用率达到100%,就会出现无法写入的读写异常。
块空间占满通过上文的find命令找到大文件,清空或删除即可;inode占满通过上文的命令找到小文件目录,删除无用临时文件即可释放inode。
如果读写时出现Input/output error报错,大概率是文件系统损坏,修复步骤:
device is busy,执行fuser -mv 你的挂载点找出所有占用进程,杀死后再卸载,卸载命令:umount /dev/你的分区名e2fsck -f /dev/你的分区名xfs_repair /dev/你的分区名mount /dev/你的分区名 你的挂载点执行命令查看磁盘硬件报错:dmesg | grep -i error,如果输出有IO error、medium error等关键词,说明磁盘存在坏道或硬件故障,云服务器直接提交工单更换数据盘,物理服务器直接更换硬盘迁移数据即可。
修复完成后执行以下步骤验证:
iostat -x 1 3,确认%util降到30%以下,读写速度恢复正常水平df -h和df -i,确认使用率都低于100%dd if=/dev/zero of=/tmp/test bs=1M count=100 oflag=direct,写入速度符合磁盘标称水平即为正常,测试完成后删除测试文件:rm /tmp/test











易频IT社区是综合性互联网IT技术门户网站,专注分享网络技术、服务器运维、网络安全、编程开发、系统架构、云计算、大数据等行业干货,实时更新IT行业资讯、零基础教程、实战案例,为IT从业者、技术爱好者提供专业的学习交流平台。
Copyright © 2021-2026 易频IT社区. All Rights Reserved. 备案号:闽ICP备2023013482号 网站地图