一、前言:根分区爆满的危害与应急处理
Linux根分区(/)是系统的核心,存储着操作系统内核、配置文件、日志文件、缓存数据等关键内容。当根分区使用率达到100%时,会引发一系列严重问题:系统无法写入日志、应用程序无法启动、数据库写入失败甚至文件损坏(如SQLite数据库损坏)、远程连接异常等,严重影响服务器正常运行。
本文将教你快速定位根分区爆满的原因,通过安全、快速的方法释放空间,缓解紧急情况,同时提供长期维护建议,避免问题再次发生。
二、紧急诊断:3步定位根分区爆满原因
当服务器出现卡顿、应用报错时,首先通过以下命令快速判断根分区状态,定位占用空间的核心文件/目录。
第一步:确认根分区是否真的爆满
# 以人类可读格式查看所有分区使用情况,重点关注挂载点为/的行
df -h
若输出中“/”对应的Use%为100%或接近100%,则确认根分区爆满;同时注意其他分区(如/datas)的使用情况,若有空闲空间,可作为后续扩容的备选。
第二步:定位占用空间最大的目录
根分区爆满的核心原因的是某个目录/文件占用过多空间,通过以下命令快速定位:
# 递归统计根分区下所有目录的大小,筛选出GB级占用的目录(适合快速定位)
sudo du -h / | grep ' [0-9]G'
# 更精确:列出根分区下占用空间最大的前20个文件/目录,按大小倒序排列
sudo du -ah / | sort -rh | head -n 20
常见的“空间大户”包括:/var/log(系统日志)、/var/cache(包管理器缓存)、/tmp(临时文件)、/home(用户数据)等。
第三步:查找超大无用文件
若目录统计后仍未找到核心占用文件,可直接查找大于1GB的文件(可调整阈值为100M):
# 查找根分区下所有大于1GB的文件,输出文件路径
sudo find / -type f -size +1G
重点关注日志文件、备份文件、临时生成的大文件(如数据库备份、日志归档),这些文件往往是占用空间的主要原因。
三、紧急释放空间:6种安全方法(按优先级排序)
释放空间的核心原则:优先删除无用、非核心文件,不影响系统正常运行,避免误删系统关键文件(如/lib、/bin目录下的文件)。
方法1:清理系统日志(最常用、最安全)
/var/log目录下的系统日志的会持续累积,尤其是错误日志、审计日志,容易占用大量空间:
# 1. 查看日志文件大小,定位最大日志
ls -lh /var/log
# 2. 清空日志内容(保留文件本身,避免破坏日志系统)
sudo truncate -s 0 /var/log/syslog
sudo truncate -s 0 /var/log/messages
# 3. 压缩归档旧日志(若需保留日志,可压缩节省空间)
sudo find /var/log -name "*.log" -exec gzip {} ;
长期建议:配置logrotate日志轮转,自动压缩、删除旧日志,避免日志失控。
方法2:清理包管理器缓存
Linux系统通过yum(CentOS)、apt(Ubuntu)安装软件时,会缓存安装包,长期累积会占用大量空间:
# CentOS/RHEL系统(yum/dnf)
sudo yum clean all
# Ubuntu/Debian系统(apt)
sudo apt-get clean
sudo apt-get autoclean
sudo apt-get autoremove
清理后,可释放几十到几百MB空间,具体取决于缓存的安装包数量。
方法3:清理临时文件
/tmp目录存储系统和应用的临时文件,部分文件不会自动清理,累积后会占用空间:
# 清空/tmp目录下所有临时文件(确保无正在使用的临时文件)
sudo rm -rf /tmp/*
长期建议:将/tmp挂载为tmpfs,系统重启时自动清空,避免临时文件堆积。
方法4:删除旧内核版本
系统升级内核后,旧内核会保留在/boot目录下,占用空间(尤其是/boot分区较小时):
# 查看已安装的内核版本
dpkg --list | grep linux-image # Ubuntu/Debian
rpm -qa | grep kernel # CentOS/RHEL
# 删除旧内核(替换为实际旧内核版本号,保留当前使用的内核)
sudo apt-get purge linux-image-x.x.x-x # Ubuntu/Debian
sudo yum remove kernel-x.x.x-x # CentOS/RHEL
注意:务必保留当前正在使用的内核(通过uname -r查看),避免删除后无法开机。
方法5:移动大文件到其他分区
若根分区有大量用户数据(如网站文件、数据库备份),可将其移动到空闲分区(如/datas),再创建符号链接,不影响应用访问:
# 示例:移动/var/www(网站文件)到/datas目录
sudo mv /var/www /datas/www
# 创建符号链接,保持原路径不变
sudo ln -s /datas/www /var/www
方法6:删除无用的大文件
通过find命令找到的超大文件,确认无用后(如旧备份、过期日志、测试文件),直接删除:
# 替换为实际无用文件路径,谨慎操作!
sudo rm /path/to/large/unused/file
警告:删除文件前务必确认文件无用,避免误删核心数据(如数据库文件、系统配置文件)。
四、长期维护:避免根分区再次爆满
- 定期监控磁盘使用:设置定时脚本,当根分区使用率超过90%时,自动发送告警(如邮件、短信);
- 开启日志轮转:配置logrotate,自动处理日志文件,避免日志无限累积;
- 合理规划分区:安装系统时,给根分区分配足够空间(建议不小于50G),将数据文件、日志文件单独挂载到其他分区;
- 定期清理:每月清理一次包管理器缓存、临时文件,每季度检查旧内核、无用大文件。