VPS 磁盘空间不足?30 分钟释放空间的 6 种方法
本站部分链接为联盟推广链接。通过这些链接购买,我可能获得佣金...
这不仅不会增加您的实际费用,通常还能让您享受到专属折扣。所有上榜推荐均基于真实项目环境下的自费实测,排名完全由客观测评数据决定。详细规则请查阅《免责声明》。
VPS 磁盘满了这种事,发现的时候通常已经出问题了,WordPress 上传图片失败、数据库写入报错、网站直接白屏、SSH 登上去什么命令都跑不了。我自己踩过,也帮忙处理过好几次,每次都是紧张几分钟,但只要按顺序排查,基本上半小时内能找到问题所在。
这篇文章按照”释放最快/最多”的顺序来排,从最可能占大头的来,逐一清理。
先确认:磁盘到底用了多少、谁在占
ssh 登进服务器之后,第一件事跑这两条命令:
df -h
这条命令显示各个挂载点的磁盘使用情况。重点看根目录 / 那一行,Use% 如果已经到 95%+ 甚至 100%,就是这里出了问题。
然后定位是哪个目录占用最大:
du -sh /* 2>/dev/null | sort -rh | head -20
这条命令把根目录下各个一级目录的占用从大到小排出来,通常一眼就能看出 /var、/home、/root 哪个是大头。找到大头之后再往里钻:
bash
du -sh /var/* 2>/dev/null | sort -rh | head -20
这两条命令是整个排查过程的起点,不要跳过。如果你用宝塔面板,也可以在面板首页的系统信息里直接看磁盘使用率,但命令行给的信息更精确。
相关命令操作也可以参考这篇:VPS 常见问题排查手册
方法一:清理系统日志(最常见的大头)
日志文件是磁盘慢慢被吃掉的最常见原因。一台跑了几个月的 VPS,/var/log 目录轻轻松松积累几个 G,甚至更多。
快速查看日志目录占用:
du -sh /var/log/* 2>/dev/null | sort -rh | head -20
针对性清理:
# 清理 systemd journal 日志,只保留最近 3 天
journalctl --vacuum-time=3d
# 或者按大小限制,只保留 200MB 以内
journalctl --vacuum-size=200M
这两条命令通常能立刻释放几百 MB 到几个 G,效果最直接。
宝塔面板有时候自己的日志也会变得很大,在 /www/wwwlogs/ 目录下查一下:
du -sh /www/wwwlogs/* | sort -rh | head -10
已经归档的旧日志(.gz 结尾的)可以直接删:
find /var/log -name "*.gz" -delete
find /var/log -name "*.1" -delete
执行完再跑一次 df -h,看看释放了多少。
方法二:清理 APT/YUM 包缓存
系统每次安装或更新软件包,都会在本地留一份缓存。时间久了,/var/cache/apt 或 /var/cache/yum 就会积累大量过期的包文件。
Debian/Ubuntu 系统:
apt clean
apt autoremove -y
apt clean 清掉所有已下载的包缓存,autoremove 卸载不再被任何包依赖的孤立包。这两条命令合起来经常能释放 500MB~2GB。
CentOS/Rocky/AlmaLinux 系统:
yum clean all
dnf clean all
清完再确认:
du -sh /var/cache/apt
du -sh /var/cache/yum
方法三:清理 WordPress 媒体文件和数据库日志
如果 VPS 上跑的是 WordPress,媒体库是另一个需要检查的地方。WordPress 每次上传图片,都会自动生成多个尺寸的缩略图(thumbnail-150×150、medium-300×300、large-1024×768 等),一张原图可能生成 5~8 个副本。跑了一两年的站,/www/wwwroot/你的域名/wp-content/uploads/ 轻松上 G。
查看 WordPress 上传目录的占用:
du -sh /www/wwwroot/*/wp-content/uploads/
这里不建议盲目删除,因为缩略图是 WordPress 正常运行需要的。但可以做两件事:
清理孤立媒体文件: 安装 WordPress 插件 Media Cleaner 或 WP-Sweep,扫描出媒体库中没有被任何文章引用的孤立图片,然后批量删除。
清理 MySQL 二进制日志(binlog): 如果数据库开启了 binlog,/www/server/data/ 目录下会有大量 mysql-bin.000xxx 文件。先确认是否存在:
ls -lh /www/server/data/mysql-bin.* 2>/dev/null
如果存在,可以在宝塔面板 → 数据库 → phpMyAdmin → SQL 命令行执行:
PURGE BINARY LOGS BEFORE DATE_SUB(NOW(), INTERVAL 7 DAY);
这条命令删掉 7 天前的所有 binlog,保留最近 7 天的。
如果你用宝塔面板的数据库备份功能,默认备份文件存放在 /www/backup/database/,积累多了也会很大,定期清理旧备份文件:
ls -lh /www/backup/database/
WordPress 的配置和调优也可以看这里:WordPress 安装后必做的基础设置
方法四:清理 Docker 残留(如果有跑 Docker)
如果 VPS 上装了 Docker,镜像、容器、volume 是最容易悄悄吃掉几十 GB 的地方,很多人完全没注意到。
先看 Docker 占用多少:
docker system df
这条命令列出镜像(Images)、容器(Containers)、本地卷(Local Volumes)各自的占用。
一键清理:
# 删除所有停止运行的容器、未被使用的镜像、悬空 volume
docker system prune -a --volumes
注意:这条命令会删掉所有没有正在运行的容器用到的镜像和 volume。如果有停止状态的容器你还想保留,先用 docker ps -a 确认一下。
单独清理未使用的镜像:
docker image prune -a
Docker 生产环境用起来,磁盘管理是必须重视的事,有时候一次 system prune 能释放十几个 G。
方法五:清理 /tmp 和 /root 下的临时文件
/tmp 目录按道理系统重启会自动清理,但有些长期不重启的 VPS 里,/tmp 会积累大量临时文件。/root 目录下有时候也会有人手动下载了安装包然后忘了删。
# 查看 /tmp 占用
du -sh /tmp
# 安全清理(删 7 天前的文件)
find /tmp -mtime +7 -exec rm -rf {} + 2>/dev/null
# 查看 /root 下有没有大文件
du -sh /root/* 2>/dev/null | sort -rh | head -10
常见的遗留文件有:下载过的系统安装包(.tar.gz、.zip)、测试时下载的文件、旧版本宝塔/1Panel 升级包等,确认不需要的直接删掉。
方法六:检查并清理旧内核(Ubuntu/Debian)
Ubuntu/Debian 系统每次内核更新,旧内核不会自动删除,时间久了 /boot 分区会被占满,甚至导致无法更新软件。
查看当前使用的内核:
uname -r
查看所有已安装的内核:
dpkg --list | grep linux-image
自动清理旧内核(保留当前内核):
apt autoremove --purge
这条命令会自动识别并删掉不再需要的旧内核包。如果 /boot 已经满了,可能连这条命令都跑不了,这种情况下需要先手动删一两个旧内核再执行 autoremove。
做完之后:把 Swap 也配上
清理完磁盘,顺手检查一下服务器有没有开 Swap。很多 VPS 默认不带 Swap,内存一紧张就触发 OOM 直接 kill 进程,而 Swap 可以作为内存不足时的缓冲。配 Swap 不占用磁盘空间(只是把一块磁盘空间用作虚拟内存),对 1GB 内存的小 VPS 特别有用。
具体操作可以看这篇:VPS 添加 Swap 虚拟内存教程
长期防范:别让磁盘再悄悄满
几个容易落地的习惯:
日志保留策略要设。/etc/logrotate.conf 里配置 rotate 周期和保留数量,或者用 journalctl --vacuum-size 定期执行。
备份文件不要只往 VPS 本地存。本地磁盘已经紧张,备份再堆本地是在挖坑。备份应该推到对象存储或云端,本地只保留最近 1~2 份。
Docker 镜像要定期清理。如果有 CI/CD 流水线在跑,每次 build 都会生成新镜像,很快就堆满。配个定时任务定期 docker image prune。
VPS 服务器使用过程中的其他常见问题,可以参考:VPS 常见问题排查手册
更多 VPS 推荐选购:VPS 推荐汇总
