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

Canonical: https://vpsmap.net/guides/disk-cleanup/
Updated: 2026-09-16

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

## 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/*`，否则包管理状态和引导配置可能失配。

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

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

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

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

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