CentOS系统磁盘空间100%是一个常见但严重的问题,可能导致系统服务异常、程序崩溃甚至系统无法响应,本文将详细分析磁盘占满的原因、排查步骤、解决方案及预防措施,帮助管理员快速定位并解决问题。
磁盘占满的常见原因
磁盘空间耗尽通常由以下因素导致:
- 日志文件过大:系统或应用日志未定期清理,如
/var/log
目录下的日志文件。 - 临时文件堆积:
/tmp
或/var/tmp
目录中的临时文件未清理。 - 用户数据激增:网站数据、数据库文件或用户上传文件未限制大小。
- 软件包缓存:
yum
或dnf
的缓存文件占用过多空间。 - 误操作:错误地将大文件写入系统分区。
磁盘空间排查步骤
查看磁盘使用情况
使用df -h
命令查看各分区使用率:
df -h
重点关注、/var
、/tmp
等分区。
定位大文件目录
使用du
命令扫描大文件目录:
du -sh /* | sort -rh | head -10
或针对特定目录(如/var
):
du -sh /var/* | sort -rh | head -10
检查日志文件
查看/var/log
目录下的日志大小:
ls -lh /var/log/
重点关注messages
、secure
、cron
等日志文件。
检查用户目录
使用du
扫描用户家目录:
du -sh /home/* | sort -rh | head -5
检查磁盘inode使用率
若磁盘空间未占满但无法写入文件,可能是inode耗尽:
df -i
解决方案
清理日志文件
- 使用
logrotate
工具自动轮转日志(通常已配置)。 - 手动清理大日志文件(需谨慎):
> /var/log/messages # 清空日志,非删除文件
- 删除旧日志备份:
find /var/log -name "*.gz" -delete
清理临时文件
- 清理
/tmp
目录:rm -rf /tmp/*
- 清理
yum
缓存:yum clean all
清理用户数据
- 通知用户清理无用文件。
- 使用
find
命令查找并删除大文件:find /home -type f -size +100M -exec ls -lh {} ;
扩容磁盘
若清理后空间仍不足,需考虑扩容:
- 云服务器:通过控制台扩容后,使用
growpart
和resize2fs
调整分区。 - 物理机:添加新磁盘并挂载到指定目录。
软链接转移
将大目录(如/var/lib/docker
)迁移到大磁盘并创建软链接:
mv /var/lib/docker /data ln -s /data/docker /var/lib/docker
预防措施
- 定期清理:设置
logrotate
轮转策略,定期清理临时文件。 - 监控告警:使用
nagios
、zabbix
等工具监控磁盘使用率,设置80%告警。 - 限制用户配额:通过
quota
工具限制用户磁盘使用量。 - 分离数据分区:将数据目录(如
/data
)单独挂载分区。
常见问题排查工具
工具名 | 功能描述 | 示例命令 |
---|---|---|
df | 查看磁盘使用率 | df -h |
du | 查看目录/文件大小 | du -sh /var |
ncdu | 交互式磁盘扫描工具 | ncdu /var |
lsof | 查找打开的文件 | lsof +L1 (查看无链接文件) |
inotifywait | 实时监控文件系统变化 | inotifywait -rm /var/log |
FAQs
Q1: 为什么磁盘空间未占满但无法创建新文件?
A: 可能是inode耗尽,使用df -i
检查inode使用率,若inode占满需清理小文件或重建文件系统。
Q2: 如何避免日志文件再次占满磁盘?
A: 配置logrotate
轮转策略,例如设置/var/log
下日志文件每天轮转并保留7天备份,并在/etc/logrotate.conf
中添加相关配置。
【版权声明】:本站所有内容均来自网络,若无意侵犯到您的权利,请及时与我们联系将尽快删除相关内容!
发表回复