Ubuntu日志中的磁盘I/O问题解决指南
iostat -x 1(需安装sysstat包)监控磁盘利用率(%util)、读写速率(rkB/s/wkB/s)及I/O等待时间(await),若%util接近100%或await过高,则表明存在I/O瓶颈。也可通过vmstat 1查看bi(块输入)、bo(块输出)列,数值持续高位则需进一步排查。iotop -o -P(需root权限)实时查看各进程的磁盘读写速率,重点关注DISK READ/WRITE列数值高的进程(如privileged cont)。结合lsof -p <PID>检查进程打开的文件,若涉及/var/log下的日志文件(如syslog、kern.log),则可能是日志记录过多导致。dmesg | grep -i "error\|fail\|i/o"或journalctl -xe | grep -i "disk\|i/o"查看是否有磁盘错误(如I/O error、Buffer I/O error)、文件系统错误(如EXT4-fs error)或硬件掉线记录,这些日志能直接指向问题源头(如硬盘故障、驱动问题)。journalctl --vacuum-size=500M将日志文件压缩至500MB以内,或journalctl --vacuum-time=2weeks删除两周前的日志,避免日志文件无限增长占用大量磁盘I/O。也可手动删除/var/log下旧日志(如syslog.1、kern.log.1),但需注意保留近期关键日志。/etc/rsyslog.conf或/etc/rsyslog.d/50-default.conf,将不必要的日志级别从info调整为warning或error(如将*.*;auth,authpriv.none -/var/log/syslog改为*.warning;auth,authpriv.none -/var/log/syslog),减少不必要的日志输出。修改后重启rsyslog服务:sudo systemctl restart rsyslog。avahi-daemon),编辑其配置文件(如/etc/avahi/avahi-daemon.conf),将log-level=info改为log-level=warning,然后重启服务:sudo systemctl restart avahi-daemon,降低其对磁盘I/O的占用。deadline调度器(减少寻道延迟),执行echo deadline | sudo tee /sys/block/sda/queue/scheduler(sda为实际硬盘设备名);noop或none调度器(无需内核调度,发挥SSD并行优势),执行echo noop | sudo tee /sys/block/sda/queue/scheduler。修改后需重启系统或重新加载内核模块使设置生效。/etc/sysctl.conf,添加以下参数优化脏页写入(减少频繁磁盘写入):vm.dirty_ratio = 10 # 当脏页占内存10%时触发写入
vm.dirty_background_ratio = 5 # 后台进程开始写入的阈值
vm.swappiness = 10 # 减少内存交换到磁盘的频率(0-100,值越小越倾向于使用内存)
执行sudo sysctl -p使参数生效。sudo fstrim -v /),延长SSD寿命。smartctl -a /dev/sda(需安装smartmontools包)查看硬盘SMART信息,重点关注Reallocated_Sector_Ct(重映射扇区数)、Current_Pending_Sector(待修复扇区数)、Offline_Uncorrectable(不可修复扇区数),若这些值大于0,说明硬盘存在坏道,需备份数据并更换硬盘。free -m查看内存可用率,若可用内存低于15%,系统会频繁使用Swap分区(硬盘上的虚拟内存),导致磁盘I/O飙升。此时需增加物理内存或优化内存占用进程(如关闭不必要的程序)。clamav扫描系统,排除勒索软件或挖矿程序伪装成系统进程占用磁盘I/O的可能:sudo apt install clamav
sudo freshclam # 更新病毒库
sudo clamscan -r / --exclude-dir="^/sys|^/proc" # 全盘扫描(跳过系统目录)
若发现恶意文件,需立即隔离并删除。