当Linux根目录(即 / )磁盘空间被占满时,系统可能出现服务崩溃、无法写入文件、甚至无法登录等严重问题。解决该问题需要系统性地诊断空间占用情况,并针对不同种类的垃圾文件进行清理。以下是专业、安全的解决方案。

第一步:诊断根目录空间使用情况
使用 df -h 命令确认根目录的使用率。例如输出显示 /dev/sda1 占用100%,则确定根目录已满。随后使用 du -sh /* 查看根目录下各个一级子目录的占用大小,快速定位占用最大的目录。更精细的检查可以使用 du -sh /var /usr /tmp /home /opt 等关键目录。也可以安装 ncdu(交互式磁盘分析工具)或 baobab(图形化磁盘使用分析器)来直观查看。
第二步:清理日志文件(最常见原因)
系统日志通常占用大量空间,尤其是 /var/log/journal/(systemd-journald 日志)和 /var/log/ 下的传统日志文件。执行以下命令:
sudo journalctl --vacuum-size=200M —— 将日志总大小限制为200MB。
sudo rm -rf /var/log/*.log /var/log/*.gz /var/log/*.old —— 清理旧日志(谨慎操作,建议先通过 ls -lh /var/log/ 查看)。
如果日志由 rsyslog 或 syslog-ng 管理,可检查并修改 /etc/logrotate.conf 或 /etc/logrotate.d/ 中的轮转策略,增加轮转频率或保留份数。
第三步:清理包管理缓存
对于 Debian/Ubuntu 系统:
sudo apt clean —— 清除 /var/cache/apt/archives/ 下的所有已下载的deb包。
sudo apt autoremove —— 删除不再需要的依赖包和旧内核。
对于 RHEL/CentOS/Fedora 系统:
sudo yum clean all 或 sudo dnf clean all —— 清除 /var/cache/yum/ 或 /var/cache/dnf/ 缓存。
sudo package-cleanup --oldkernels --count=2 —— 保留最新的2个内核,删除其余旧内核。
第四步:清理临时文件
/tmp 和 /var/tmp 是临时文件存放目录。重启系统后 /tmp 通常会自动清空,但长期运行的服务器可能积累大量文件。执行:
sudo rm -rf /tmp/* —— 注意不要删除 /tmp 目录本身,只删除其内容。
sudo rm -rf /var/tmp/*
也可使用 tmpwatch 或 systemd-tmpfiles 自动清理策略。
第五步:清理 Snap 包缓存(如果使用 Snap)
Snap 的缓存位于 /var/lib/snapd/cache/,会随着时间增长占用大量空间。执行:
sudo rm -rf /var/lib/snapd/cache/*
此外,snap list 可查看已安装的snap应用,移除不再使用的snap包释放空间。
第六步:清理 Docker 数据(如果使用 Docker)
Docker 默认将镜像、容器、卷保存在 /var/lib/docker/,极易撑满根分区。使用以下命令:
docker system prune -a -f —— 删除所有停止的容器、未使用的网络、悬空镜像和构建缓存。
docker volume prune -f —— 删除未挂载的匿名卷。
更彻底的清理:docker system df 查看占用,然后手动删除不需要的镜像。
第七步:查找并清理大文件
使用 find 命令找出超过特定大小(例如100MB)的文件:
sudo find / -type f -size +100M -exec ls -lh {} \;
通常这些大文件可能是 core dump(位于 /var/crash/ 或 /var/lib/systemd/coredump/)、数据库的二进制日志、用户下载的大文件或意外的转储文件。根据实际情况删除或移动这些文件。
第八步:检查并调整日志轮转与保留策略
编辑 /etc/logrotate.conf 或对应服务的日志轮转配置,设置更短的轮转周期(如 daily 改为 hourly)和更少的保留份数。对于 systemd-journald,可修改 /etc/systemd/journald.conf 中的 SystemMaxUse= 参数限制日志最大使用量,然后执行 sudo systemctl restart systemd-journald。
第九步:扩大根分区(硬件层面解决方案)
如果以上清理后仍空间不足,且根分区有扩展余地(如使用 LVM 或磁盘有未分配空间),可考虑扩大根分区。对于 LVM,使用 lvextend 和 resize2fs 扩展逻辑卷。对于 非LVM 的传统分区,可使用 gparted 或其他分区工具(需在 Live CD 下操作)。但此操作风险较高,建议在数据备份后进行。
第十步:临时性紧急措施
如果系统已无法正常启动或执行命令,可进入 单用户模式 或 救援模式,挂载根文件系统为读写模式后,执行上述清理命令。也可以尝试删除 /root/.cache、/home/*/.cache 等用户缓存目录。
重要注意事项
1. 在执行 rm -rf 命令前,务必确认路径无误,避免误删系统文件导致系统崩溃。
2. 清理 /var/log/ 时,不要删除当前正在写入的日志文件(可通过 lsof | grep '/var/log' 检查),仅删除已轮转的旧文件。
3. 清理旧内核时,确保至少保留一个当前运行的内核版本,避免无法启动。
4. 建议在清理前使用 du 或 ncdu 记录大小,确认清理效果。
5. 定期配置 logrotate、tmpwatch、journald 等自动清理机制,预防根目录再次爆满。
通过以上步骤,可以系统性地解决Linux根目录满了的问题,并建立长效的空间管理策略。

查看详情

查看详情