# 磁盘或 /boot 已满：安全找出占用者

磁盘满可能来自容量不足，也可能来自 inode 用尽。先确定哪个分区和目录增长，再清理能确认用途的内容。

更新日期：2026-09-16

规范地址：https://stock.iftalking.com/guides/disk-cleanup/

## 1. 先看是容量满，还是 inode 用尽

磁盘还有空间却无法创建文件，可能是 inode 耗尽；删除大文件后空间不释放，可能是进程仍占用已删除文件。先收集事实，再决定清理对象。

```bash
df -hT
df -i
sudo du -xhd1 /var /home /opt 2>/dev/null
```

`df -hT` 看文件系统容量，`df -i` 看 inode，`du -x` 限制在同一文件系统内，避免扫到其他挂载盘。逐层进入占用大的目录，不要一开始就扫描或删除整个根目录。

## 2. 从可重建的缓存和有保留策略的日志开始

Ubuntu/Debian 的已下载安装包缓存可用包管理器清理。systemd 日志先看当前大小，再按自己的故障追溯需求选择保留时长或容量。

```bash
sudo apt clean
sudo journalctl --disk-usage
```

例如需要保留近 14 天日志，可以在确认要求后使用 `sudo journalctl --vacuum-time=14d`。它清理的是符合条件的归档日志，并非保证当前日志立刻缩到某个大小。不要删除仍在写入的业务日志文件，应配置 logrotate 或应用自己的轮转。

## 3. 找大文件时只列出，不直接删除

```bash
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 满时让包管理器删除旧内核

```bash
uname -r
dpkg -l 'linux-image*'
sudo apt autoremove --dry-run
```

先确认当前运行内核，保留至少一个已知可启动的备用内核，再阅读 dry-run 列表。只有列表合理时才执行真正的 autoremove。不要使用通配符手工删除 `/boot/vmlinuz*` 或 `/lib/modules/*`，否则包管理状态和引导配置可能失配。

升级已中断时，释放足够空间后再按[软件包修复](https://stock.iftalking.com/guides/packages/)完成配置。需要重启验证新内核前，确认控制台可以使用。

![清理内核后重启前，确认实例控制台可用](https://stock.iftalking.com/tutorial-media/provider-kiwivm-overview.jpg)

*图示说明：服务商官方知识库公开截图（旧版界面），用于对照功能名称；当前菜单位置可能调整。图中的套餐、IP、端口和日期仅为示例。*

## 5. 清理后建立容量预警

重新运行 `df -hT` 和 `df -i`，确认目标文件系统恢复余量，再测试网站上传、数据库写入和备份任务。把日志轮转、备份保留数量和容器镜像清理写成可审阅的计划。

如果业务数据本身持续增长，删除缓存只能短暂缓解。评估扩容、对象存储或备份迁移，参考[套餐升级](https://stock.iftalking.com/guides/upgrade-plan/)与[备份恢复](https://stock.iftalking.com/guides/backup-restore/)。


## 完成后检查

不要删除当前内核，也不要把 rm -rf 用在尚未确认的系统目录。

## 参考资料

- [Ubuntu Server 文档](https://documentation.ubuntu.com/server/)
- [服务商官方说明](https://bandwagonhost.com/kb.php?action=displayarticle&id=30)
