1. 先看是容量满,还是 inode 用尽#
磁盘还有空间却无法创建文件,可能是 inode 耗尽;删除大文件后空间不释放,可能是进程仍占用已删除文件。先收集事实,再决定清理对象。
df -hT
df -i
sudo du -xhd1 /var /home /opt 2>/dev/nulldf -hT 看文件系统容量,df -i 看 inode,du -x 限制在同一文件系统内,避免扫到其他挂载盘。逐层进入占用大的目录,不要一开始就扫描或删除整个根目录。
2. 从可重建的缓存和有保留策略的日志开始#
Ubuntu/Debian 的已下载安装包缓存可用包管理器清理。systemd 日志先看当前大小,再按自己的故障追溯需求选择保留时长或容量。
sudo apt clean
sudo journalctl --disk-usage例如需要保留近 14 天日志,可以在确认要求后使用 sudo journalctl --vacuum-time=14d。它清理的是符合条件的归档日志,并非保证当前日志立刻缩到某个大小。不要删除仍在写入的业务日志文件,应配置 logrotate 或应用自己的轮转。
3. 找大文件时只列出,不直接删除#
sudo find /var /home /opt -xdev -type f -size +200M -printf '%s %p\n' 2>/dev/null | sort -nr | head -20常见对象是历史备份、上传文件、数据库日志和容器镜像。先确认谁在使用、是否有另一份备份、是否还在保留期限内。数据库数据文件和事务日志不能当普通缓存删除;Docker 也应先用 docker system df 查看,谨慎处理卷。
如果 df 很满而 du 对不上,可以安装并使用 lsof +L1 查看已删除仍打开的文件。确认所属服务后安排正常 reload/restart 释放句柄,不要随意终止数据库进程。
4. /boot 满时让包管理器删除旧内核#
uname -r
dpkg -l 'linux-image*'
sudo apt autoremove --dry-run先确认当前运行内核,保留至少一个已知可启动的备用内核,再阅读 dry-run 列表。只有列表合理时才执行真正的 autoremove。不要使用通配符手工删除 /boot/vmlinuz* 或 /lib/modules/*,否则包管理状态和引导配置可能失配。
升级已中断时,释放足够空间后再按软件包修复完成配置。需要重启验证新内核前,确认控制台可以使用。

5. 清理后建立容量预警#
重新运行 df -hT 和 df -i,确认目标文件系统恢复余量,再测试网站上传、数据库写入和备份任务。把日志轮转、备份保留数量和容器镜像清理写成可审阅的计划。
如果业务数据本身持续增长,删除缓存只能短暂缓解。评估扩容、对象存储或备份迁移,参考套餐升级与备份恢复。
完成后检查
不要删除当前内核,也不要把 rm -rf 用在尚未确认的系统目录。