一、根目录爆满的常见症状
当你的Linux服务器突然变得反应迟钝,或者执行命令时频繁出现"no space left on device"错误时,十有八九是根目录空间告急了。就像我们的手机存储满了会卡顿一样,Linux系统也需要足够的空间来"呼吸"。
常见症状包括:
- 系统命令无法执行,报错"bash: cannot create temp file for here-document: No space left on device"
- 服务无法启动,日志中显示磁盘空间不足
- 连最简单的tab补全都失效了
- 系统日志(/var/log/messages)中频繁出现空间警告
二、快速定位空间占用大户
在动手清理之前,我们需要先找到真正的"空间杀手"。就像医生治病要先诊断一样,盲目删除文件可能会造成严重后果。
2.1 使用df命令查看整体情况
# 查看磁盘使用情况(人类可读格式)
df -h
# 示例输出:
Filesystem Size Used Avail Use% Mounted on
/dev/vda1 50G 48G 1.2G 98% /
这个命令能一目了然地看到哪个分区快满了。上例显示根目录(/)已经使用了98%,情况危急。
2.2 使用du命令深入分析
# 查看根目录下各文件夹大小(按大小排序)
du -h --max-depth=1 / | sort -h
# 示例输出:
12K /lost+found
16M /etc
145M /boot
1.2G /home
4.8G /var
42G /usr
这个命令揭示了/usr和/var是主要空间占用者。接下来我们可以继续深入这些目录分析。
2.3 使用ncdu工具可视化分析
如果你喜欢更直观的方式,可以安装ncdu:
# 安装ncdu(以CentOS为例)
yum install -y ncdu
# 扫描根目录
ncdu /
这个工具会以交互式界面显示目录大小,按大小排序,支持键盘导航,非常适合不熟悉命令的新手。
三、针对性清理策略
找到问题所在后,我们就可以有的放矢地进行清理了。下面介绍几个常见目录的清理方法。
3.1 清理/var目录
/var目录存放的是经常变化的文件,包括日志、缓存、数据库文件等,是最常见的"肥宅"。
3.1.1 日志文件清理
# 查看最大的日志文件
ls -lhS /var/log/*.log
# 清空特定日志文件(比如syslog)
> /var/log/syslog
# 或者使用logrotate工具管理日志
logrotate -f /etc/logrotate.conf
3.1.2 清理旧的内核文件
# 查看已安装的内核版本
rpm -q kernel
# 删除旧内核(保留最新的2-3个)
package-cleanup --oldkernels --count=2
3.2 清理/usr目录
/usr目录主要存放用户安装的软件,一般不推荐直接删除文件,但可以清理缓存。
3.2.1 清理yum/dnf缓存
# 清理yum缓存
yum clean all
# 或者更彻底的清理
rm -rf /var/cache/yum/*
3.2.2 清理不需要的语言包
# 查看已安装的语言包
localectl list-locales
# 删除不需要的语言包(比如只保留en_US)
dnf remove langpacks-*
dnf install langpacks-en
3.3 清理临时文件
# 清理/tmp目录
rm -rf /tmp/*
# 或者使用系统工具
systemctl start tmp.mount
3.4 清理用户家目录
有时候用户会在家目录存放大文件而不自知:
# 查找大于100M的文件
find /home -type f -size +100M -exec ls -lh {} \;
# 查找7天前的大文件
find /home -type f -size +50M -mtime +7 -exec ls -lh {} \;
四、进阶清理技巧
对于更复杂的情况,我们需要一些进阶技巧。
4.1 查找并删除大文件
# 在整个系统中查找大于100M的文件
find / -type f -size +100M -exec ls -lh {} \; 2>/dev/null
# 查找并删除7天前的日志文件
find /var/log -type f -name "*.log" -mtime +7 -exec rm -f {} \;
4.2 处理被删除但仍占空间的文件
有时候文件被删除但进程仍在使用,空间不会立即释放:
# 查找被删除但仍被进程占用的文件
lsof | grep deleted
# 然后可以重启相关进程或直接kill进程
kill -9 <PID>
4.3 使用autoclean自动清理
Debian/Ubuntu系统可以使用:
apt-get autoclean
apt-get autoremove
五、预防措施
清理只是治标,建立预防机制才是治本之道。
5.1 设置磁盘配额
# 安装配额工具
yum install quota
# 启用配额
mount -o remount,usrquota,grpquota /
quotacheck -cum /
quotaon -v /
5.2 配置日志轮转
编辑/etc/logrotate.conf,确保日志文件会定期轮转和压缩。
5.3 监控磁盘空间
可以设置cron任务定期检查:
# 每天检查一次
0 0 * * * df -h > /root/disk_usage.log
或者使用监控工具如Prometheus、Zabbix等。
六、总结与建议
通过以上方法,大多数根目录空间不足的问题都能得到解决。但需要注意:
- 删除文件前一定要确认其用途
- 系统关键文件不要随意删除
- 重要的日志文件可以先备份再清理
- 定期维护比临时清理更重要
记住,Linux系统就像我们的家,定期打扫才能保持整洁高效。希望这篇指南能帮助你摆脱磁盘空间的困扰!
评论