用心打造
VPS知识分享网站

VPS磁盘突然100%怎么办?别急着删文件!跟我这样排查

昨天网站还正常,今天 WordPress 后台开始报错,Docker 容器起不来,MySQL 莫名其妙停止,甚至连更新文件都失败。

登录服务器一看,磁盘已经 99% 甚至 100%。

很多人这时候第一反应就是进 /var/log 一顿删,或者直接运行各种网上找来的清理命令。磁盘空间确实可能回来,但也很容易把真正有用的日志、Docker 数据甚至数据库文件一起处理掉。

我现在遇到磁盘爆满,第一步不是删除,而是先找清楚 空间到底被谁吃掉了。

VPS磁盘突然100%怎么办?别急着删文件!跟我这样排查

第一步先看哪个分区满了

先执行

df -h

重点看 Use%。

一台常见的小 VPS 可能会看到类似结果

/dev/vda1 50G 47G 1.2G 98% /

这就说明根分区已经接近塞满。

这里还要注意一点,磁盘总共 50GB,并不代表全部都被网站文件占用了。日志、Docker、数据库、缓存、系统包,都会不断消耗空间。

先确认哪个分区满,再继续往下找。

第二步找到最大的目录

知道 / 快满了以后,我一般直接从根目录开始查。

运行

du -xh --max-depth=1 / 2>/dev/null | sort -h

它会把根目录下面各个目录的占用列出来。

常见的大户基本集中在几个位置。

/var 很大,重点怀疑日志、数据库和 Docker。

/home 很大,可能是网站文件、用户文件或者备份。

/usr 很大,往往和软件、依赖、系统文件有关。

/opt 很大,则要看看自己是不是把程序、Docker 数据或者下载文件放进去了。

假设发现 /var 占了 30GB,再继续查

du -xh --max-depth=1 /var 2>/dev/null | sort -h

一层一层往下找,比直接全盘搜索大文件快得多。

日志经常是最隐蔽的空间杀手

服务器刚装好时,日志几乎感觉不到存在。

跑几个月以后就不一样了。

Nginx、PHP、MySQL、系统服务、Fail2ban、Docker 都可能不断写日志。

可以先看看系统日志占用了多少

journalctl --disk-usage

有些机器这里就能占掉几 GB。

确定旧日志已经没有排查价值,可以保留最近 7 天

journalctl --vacuum-time=7d

也可以限制 systemd 日志总大小

journalctl --vacuum-size=500M

这种方式比直接跑

rm -rf /var/log/*

安全得多。

日志可以清,但别把整个日志目录一刀切。

以后网站真出问题,最有价值的线索往往就在这些文件里面。

Docker 用户一定要查这一块

我见过很多 VPS 磁盘爆满,最后真正的原因都是 Docker。

先运行

docker system df

这里会显示镜像、容器、本地卷和构建缓存各占多少空间。

经常出现这样的情况。

服务器里真正运行的容器只有两三个,镜像却留下了十几个旧版本,构建缓存又占掉几 GB。

不再使用的悬空镜像,可以先运行

docker image prune

构建过程中留下的缓存比较多,还可以查看

docker builder prune

这两个命令我都更愿意先看确认信息,再决定是否清理。

至于网上很常见的

docker system prune -a

我不建议新手看见磁盘满就直接执行。

它清理得比较彻底,没弄清楚服务器里哪些镜像以后还要用,很容易给自己增加额外工作。

WordPress 网站还要看看备份文件

这个问题特别常见。

很多人给 WordPress 装了备份插件,设置每天自动备份,后来就彻底忘了。

一个网站完整备份可能只有 500MB,看起来不算大。

每天留一份,一个月就是 15GB。

服务器只有 40GB、50GB 硬盘,很快就会被吃掉。

尤其宝塔、WordPress 插件、定时脚本同时都在备份时,可能同一个网站实际上存了好几套副本。

我会重点检查网站目录、/www/backup、用户 Home 目录以及自己设置的备份路径。

备份不是越多越安全,放在同一台 VPS 上的几十份备份,价值其实很有限。

真正重要的备份最好同步到另一台机器或者对象存储。

MySQL 数据库别直接手动删文件

查磁盘时看到 /var/lib/mysql 特别大,很多人会想进去看看有没有能删的。

这里一定要谨慎。

数据库目录不能像普通日志一样随便删除文件。

先进入 MySQL 看数据库大小,或者通过面板确认哪个库增长最快,再判断是不是某个 WordPress 插件一直在写垃圾数据。

访问统计、搜索日志、安全插件、任务队列,这几类表特别容易越积越大。

处理数据库数据时,我更建议从应用或数据库层面清理,而不是直接动 MySQL 的底层文件。

磁盘满了可以慢慢查,数据库删错了恢复起来就麻烦多了。

还有一种情况,大文件藏得特别深

目录看起来都不夸张,磁盘却还是用了几十 GB,这时候可以直接找大文件。

例如查找大于 1GB 的文件

find / -xdev -type f -size +1G 2>/dev/null

很容易找到忘记删除的安装包、数据库导出文件、压缩包、旧镜像或者异常日志。

我之前就碰到过一个网站日志,程序报错后疯狂重复写同一条内容,一晚上文件涨到了十几 GB。

这类问题光清掉文件还不够。

还要找到为什么它会持续增长。

不然今天释放 10GB,过两天磁盘还会再次满掉。

清理完别急着关 SSH

空间释放出来以后,我一般再检查一次

df -h

确认磁盘占用已经降下来。

接着看 MySQL、Nginx、PHP-FPM 和 Docker 容器是不是都恢复正常。

有些服务在磁盘 100% 时已经崩掉,空间恢复以后并不会自己重新启动。

网站能正常访问以后,再观察一会日志和磁盘使用量。

空间还在快速上涨,说明根因还没有解决。

我现在会尽量让 VPS 保留一点余量

50GB 的磁盘,我不太愿意长期用到 48GB。

服务器不是电脑硬盘,剩 1GB 还能凑合存几个文件。

数据库、日志、系统更新、Docker 都需要不断写入数据,空间太紧以后,各种奇怪的问题会接连出现。

我更习惯让系统盘至少保留 15% 左右的可用空间。

平时偶尔看一眼

df -h

比等网站挂了再清理舒服得多。

VPS 磁盘爆满其实不难处理。

真正重要的是别急着删。

先确认哪个分区满,再找到最大的目录,最后确定到底是日志、Docker、备份、数据库还是异常文件。

按这个顺序查,大部分磁盘问题都能很快定位,而且不容易把有用的数据一起清掉。

赞(0)
未经允许不得转载;国外VPS测评网 » VPS磁盘突然100%怎么办?别急着删文件!跟我这样排查
分享到