Linux LVM根分区磁盘爆满排查指南从定位到清理的完整解决方案当服务器突然告警磁盘空间不足时那种紧迫感每个运维人员都深有体会。特别是当根分区(/dev/mapper/vg_xxx-lv_root)显示100%占用时系统随时可能崩溃。本文将带你系统化解决这个问题不仅提供应急处理方案还会分享如何预防此类问题再次发生。1. 快速诊断三步定位磁盘占用元凶遇到磁盘爆满时盲目删除文件可能造成严重后果。我们推荐以下系统化的排查流程1.1 第一步确认磁盘使用情况首先用df命令确认问题所在分区df -hT关键观察点Filesystem确认是/dev/mapper/vg_xxx-lv_root占用100%Mounted on确认挂载点为根目录/Type了解文件系统类型(ext4/xfs)这对后续扩容很重要典型输出示例Filesystem Type Size Used Avail Use% Mounted on /dev/mapper/vg_centos-root xfs 50G 50G 20K 100% /1.2 第二步定位大文件目录使用du命令找出占用空间最大的目录du -hx --max-depth1 / | sort -h这个命令组合的巧妙之处在于-h人类可读格式显示大小-x不跨越文件系统边界(避免统计挂载点)--max-depth1只显示一级子目录sort -h按人类可读的大小排序常见占用大户目录/var日志、数据库文件/usr系统软件/home用户数据/opt第三方应用1.3 第三步精确查找大文件锁定可疑目录后使用find命令定位具体的大文件find /var -type f -size 500M -exec ls -lh {} \; | sort -k5 -h -r参数解析-type f只查找文件-size 500M大于500MB的文件-exec ls -lh {} \;显示详细信息sort -k5 -h -r按第五列(大小)逆序排序2. 常见罪魁祸首及专业处理方案根据多年运维经验以下是最常见的磁盘占用元凶及其安全清理方法2.1 MySQL日志文件处理MySQL相关日志通常位于/var/lib/mysql/主要包括binlogmysql-bin.000xxx错误日志mysqld.log慢查询日志slow.log安全清理方案对于binlog文件绝对不要直接rm删除正确的做法是-- 登录MySQL后执行 PURGE BINARY LOGS BEFORE 2023-01-01 00:00:00; -- 清理指定日期前的日志 -- 或 PURGE BINARY LOGS TO mysql-bin.000010; -- 清理到指定日志文件 -- 或设置自动过期(推荐) SET GLOBAL expire_logs_days 3; -- 只保留3天日志对于错误日志安全的做法是清空而非删除 /var/log/mysqld.log # 清空日志文件2.2 系统日志文件处理系统日志通常位于/var/log/常见占用空间的文件messages系统主日志secure安全相关日志audit/audit.log审计日志专业处理建议使用logrotate配置自动轮转cat /etc/logrotate.d/syslog典型配置示例/var/log/messages { daily rotate 7 compress delaycompress missingok notifempty create 0640 root adm }手动清理旧日志# 保留最近7天日志 find /var/log -type f -name *.log -mtime 7 -exec truncate -s 0 {} \;2.3 已删除但未释放空间的文件处理有时文件已被删除但进程仍持有文件句柄空间并未释放。使用lsof工具检测lsof | grep deleted | sort -nrk7处理方案记录占用进程的PID评估是否可以重启该进程必要时用kill -HUP PID优雅重启进程3. 高级排查技巧与预防措施3.1 Inode耗尽问题排查即使磁盘空间足够inode耗尽也会导致No space left错误。检查方法df -i # 查看inode使用情况解决方案删除小文件find / -type f -size -1k -exec rm {} \;调整文件系统inode数量(需重新格式化)3.2 Docker磁盘空间管理Docker会占用大量空间在/var/lib/docker/overlay2/容器存储层未清理的镜像、容器清理命令docker system prune -a # 清理所有未使用的资源 docker volume prune # 清理未使用的卷3.3 LVM扩容终极解决方案当清理无法解决问题时考虑扩容LVM# 查看当前VG空间 vgs # 扩容物理卷 pvresize /dev/sdaX # 扩容逻辑卷 lvextend -L 10G /dev/mapper/vg_centos-root # 扩展文件系统 resize2fs /dev/mapper/vg_centos-root # 对于ext4 xfs_growfs /dev/mapper/vg_centos-root # 对于xfs4. 长效预防机制建设监控预警配置Prometheus监控磁盘使用率设置80%阈值告警日志管理规范统一日志收集到ELK配置合理的logrotate策略定期维护# 每周清理临时文件 find /tmp -type f -atime 7 -delete # 每月检查大文件 find / -type f -size 1G -exec ls -lh {} \;架构优化将日志、数据分离到独立分区使用云原生存储方案动态扩容一套完整的磁盘空间管理策略应该像优秀的城市规划既要解决当下的交通拥堵也要为未来发展预留空间。通过本文介绍的系统化方法你不仅能快速解决当前的磁盘危机更能建立起长效预防机制让服务器运行更加稳健可靠。