插件窝 干货文章 Linux系统中遇到的常见磁盘空间占用过高问题及其解决方案

Linux系统中遇到的常见磁盘空间占用过高问题及其解决方案

文件 清理 日志 目录 1059    来源:    2025-04-17

Linux系统磁盘空间占用过高问题及解决方案

常见问题分析

1. 日志文件过大

  • /var/log 目录下日志文件不断增长
  • 系统日志、应用日志未定期轮转清理

2. 临时文件堆积

  • /tmp 目录下临时文件未被清理
  • 应用程序产生的临时文件未及时删除

3. 软件包缓存

  • /var/cache 目录下软件包缓存占用空间
  • 特别是 aptyum 等包管理器的缓存

4. 用户文件占用

  • 用户家目录下大文件堆积
  • 下载目录、媒体文件等占用大量空间

5. 已删除文件仍被进程占用

  • 文件被删除但仍有进程在使用
  • 空间未被真正释放

解决方案

1. 快速定位大文件/目录

# 查看磁盘使用情况
df -h

# 查找大文件(从根目录开始查找大于100M的文件)
find / -type f -size +100M -exec ls -lh {} \;

# 查找大目录
du -h --max-depth=1 / | sort -h
du -h --max-depth=1 /var | sort -h

2. 日志文件管理

# 查看日志文件大小
ls -lh /var/log/

# 清理旧日志(保留最近7天)
find /var/log -type f -mtime +7 -delete

# 配置日志轮转
vim /etc/logrotate.conf

3. 清理软件包缓存

对于Debian/Ubuntu:

apt-get clean
apt-get autoclean

对于CentOS/RHEL:

yum clean all
dnf clean all

4. 清理临时文件

# 清理/tmp目录
rm -rf /tmp/*

# 清理系统临时文件
rm -rf /var/tmp/*

5. 处理已删除但未释放空间的文件

# 查找被删除但仍被进程占用的文件
lsof | grep deleted

# 重启相关进程或系统以释放空间
systemctl restart service-name

6. 自动化清理脚本

创建定期清理脚本 /usr/local/bin/cleanup.sh:

#!/bin/bash

# 清理日志
find /var/log -type f -mtime +7 -delete

# 清理包缓存
if [ -f /etc/debian_version ]; then
    apt-get clean
    apt-get autoclean
elif [ -f /etc/redhat-release ]; then
    yum clean all
fi

# 清理临时文件
rm -rf /tmp/*
rm -rf /var/tmp/*

# 发送通知
echo "Disk cleanup completed on $(date)" | mail -s "Disk Cleanup Report" admin@example.com

设置定时任务:

chmod +x /usr/local/bin/cleanup.sh
crontab -e
# 添加以下内容(每周日凌晨3点执行)
0 3 * * 0 /usr/local/bin/cleanup.sh

预防措施

  1. 设置日志轮转策略:配置合理的日志轮转周期和保留数量
  2. 监控磁盘空间:设置监控告警,如使用 monitprometheus
  3. 定期维护计划:建立定期清理维护计划
  4. 用户配额管理:对用户设置磁盘配额限制
  5. 分离存储:将日志、临时文件等放在独立分区

通过以上方法和预防措施,可以有效管理和控制Linux系统的磁盘空间使用。