VPS磁盘满了,最直接有效的清理方法是定位大文件目录、清理日志文件并移除未使用的软件包,这三步能快速释放大部分空间。
检查磁盘占用:用命令找出吃空间的罪魁祸首
在动手清理之前,你得先知道空间到底被谁吃了,直接登录VPS,用几个基础命令扫一遍,目标就清晰了。
用df命令看整体情况
运行df -h,能看到每个分区的总大小、已用和可用空间,如果/dev/vda1这类设备使用率超过90%,甚至100%,那就是它满了,重点关注根分区,大部分VPS默认只有一个分区。参考2
用du命令逐级定位
du -sh /可以列出根目录下每个一级目录的大小,如果/var很大,就继续du -sh /var/,层层深入,通常日志目录/var/log、缓存目录/var/cache、数据库数据目录/var/lib/mysql是重灾区。
用ncdu交互式查看(可选)
如果觉得手动敲命令麻烦,可以安装ncdu(apt install ncdu),它能以图形化界面显示目录大小,用方向键上下浏览,方便快速找到大文件。
查找单个大文件
find / -type f -size +100M -exec ls -lh {} ; 这条命令能找出所有超过100MB的文件,直接告诉你它们的路径和大小,对于磁盘空间紧张的情况,往往几个大文件就占用了大部分空间。
VPS日志清理:释放空间的关键步骤
日志文件是磁盘空间膨胀的常见原因,尤其是运行时间久、访问量大的网站或服务,多数情况下,日志文件占用了可用空间的30%以上。
清理系统日志(syslog)
系统日志通常保存在/var/log/syslog或/var/log/messages,文件大小可能达到几GB,使用truncate -s 0 /var/log/syslog可以清空内容而不删除文件,避免影响正在写入的进程,也可以直接删除然后重建,但清空方式更稳妥。
清理journal日志
使用systemd的系统,日志存储在/var/log/journal中,如果从未清理过,可能占用数百MB甚至更多,可以用journalctl --vacuum-size=200M将日志大小限制在200MB,或者用journalctl --vacuum-time=3d只保留最近3天的日志,这个操作立竿见影。
清理应用日志(Nginx、MySQL、PHP等)
-
Nginx访问日志和错误日志
:默认在/var/log/nginx/下,可以删除旧的日志文件(如access.log.1)或者直接清空当前日志:truncate -s 0 /var/log/nginx/access.log,注意,清空后不会影响Nginx继续写入,但建议重启一下服务让日志句柄重新加载。 - MySQL日志:包括二进制日志、慢查询日志、错误日志,二进制日志可以通过
PURGE BINARY LOGS BEFORE NOW();清理,其他日志可以手动清空或配置日志轮转,如果数据库运行正常,可以考虑关闭日志保存策略,只保留必要部分。 - PHP-FPM慢日志:位于
/var/log/php-fpm/,同样可以用truncate清空。
配置日志轮转,避免反复手动清理
编辑/etc/logrotate.conf或对应服务的日志轮转配置,设置日志大小上限和保留份数,例如对Nginx,可以配置size 100M和rotate 4,让日志达到100MB就自动轮转,最多保留4份旧日志,这样以后就不用每隔几个月手动清理一次了。参考2
VPS磁盘空间不足的清理方法:从缓存和临时文件入手
除了日志,系统缓存和临时文件也占了不小份额,对于低配VPS磁盘清理,这部分尤其重要,因为空间本来就小,积少成多就会爆满。
清理包管理器缓存
- apt缓存:运行
apt-get clean可以清除下载的.deb安装包,这些包存放在/var/cache/apt/archives/,可能占用几百MB,如果系统稳定不需要重新安装,可以直接清空。 - yum缓存:CentOS系统用
yum clean all,同样清理下载的rpm包。 - pip缓存:Python项目如果用过pip,缓存可能占用不少空间,运行
pip cache purge。
清理临时文件
/tmp目录有时会残留大量文件,比如解压的安装包、临时下载的文件,可以执行rm -rf /tmp/,但要注意不要删除正在被进程使用的文件(会造成句柄丢失),如果系统重启频繁,/tmp通常会被清空,但长期不重启的VPS建议手动清理。
清理缩略图缓存(桌面环境)
如果VPS装了桌面环境(比如Xfce、Gnome),用户目录下可能有大量缩略图缓存,位于~/.cache/thumbnails/
,直接删除即可。
清理Docker缓存(如果使用Docker)
Docker会保留镜像、容器层、构建缓存,运行docker system prune -a可以清理所有停止的容器、未使用的镜像和网络,能释放大量空间,注意,这会删除所有已停止的容器,如果容器需要保留数据,请先备份。
移除不需要的软件包和旧内核
很多VPS用户会安装各种软件测试,之后忘记卸载,或者系统更新后留下旧内核,这些文件看似不大,但加起来可能占用几GB。
自动移除无用依赖
apt-get autoremove(Ubuntu/Debian)或yum autoremove(CentOS 7+)可以移除那些自动安装且不再被任何软件包依赖的库,运行前可以用apt-get --dry-run autoremove预览一下会被删除的包,确认没有重要组件。
清理旧内核
内核更新后,旧的内核镜像不会自动删除,运行dpkg --list | grep linux-image查看所有已安装的内核,一般保留当前正在使用的内核版本(通过uname -r查看),其余可以卸载,例如apt-get purge linux-image-5.4.0-26-generic,清理后还能释放/boot分区空间,有时甚至能释放1GB以上。
卸载不常用的软件
用dpkg -l或rpm -qa列出所有软件包,手动删除那些不再使用的,比如数据库、搜索引擎、缓存服务等,如果只测试过就不再使用,可以直接apt-get remove --purge。
处理大文件:数据库日志和备份文件
除了日志,大文件通常来自数据库文件、备份归档、下载的文件等。参考2
查找并清理旧备份
很多用户会把备份文件放在/root/或/home/下,时间一长积累多个版本,用find / -name ".tar.gz" -o -name ".sql"找出备份文件,删除不需要的,如果备份策略是每周一次,建议只保留最近2-3份。
数据库文件压缩或迁移
如果数据库本身占用空间很大,比如/var/lib/mysql目录有几十GB,可能需要考虑优化数据库表、删除历史数据,或者迁移到更大的存储卷,对于MySQL,可以用OPTIMIZE TABLE命令回收空间,但注意这会在操作期间锁定表,对于生产环境,建议在低峰期执行。
清理服务自动生成的临时文件
某些服务(如PHP Sessions、Samba临时文件)会在
/tmp或/var/tmp下生成大量小文件,可以用find /tmp -type f -atime +7 -delete删除7天前未被访问的文件。
低配VPS磁盘清理的特别提醒
如果你的VPS是1GB甚至更小的磁盘,以上方法依然适用,但需要额外注意inode问题。
检查inode是否耗尽
df -i可以查看inode使用情况,如果inode满了,即使磁盘空间还有剩余,也无法创建新文件,这种情况通常是因为目录下存在大量小文件(比如PHP Session文件、缓存碎片),解决方法是删除大量无用的小文件,或者使用lsof | grep deleted找到被删除但仍被进程占用的文件,重启相关进程释放inode。
避免频繁写日志的配置
对于低配VPS,可以适当降低日志级别,比如Nginx的访问日志,可以设置为只记录错误日志,或者直接关闭访问日志,在nginx.conf中将access_log off;,这样能从根本上减少日志增长。
使用轻量级工具监控磁盘
安装ncdu或duf这类轻量级工具,定期查看磁盘使用率,也可以设置cron任务,当磁盘使用率超过80%时自动发送邮件提醒。
VPS磁盘满了不是死局,按先定位、再清理日志、最后移除无用包的顺序,通常能释放30%以上空间,如果清理后依然不够用,说明业务量确实上来了,可以考虑升级磁盘或迁移数据,养成定期检查日志和清理缓存的习惯,能让VPS跑得更稳。
VPS磁盘满了怎么清理释放空间常见问题解答
VPS磁盘满了会导致什么后果?
服务无法正常写入文件,网站可能返回500错误,数据库会停止运行,SSH登录也可能失败,严重时系统会进入只读模式,需要联系服务商或者通过救援模式进行清理。
日志文件可以全部删除吗?
不建议全部删除,部分日志(如syslog、auth.log)记录了系统历史事件,对排查问题有用,常规做法是清理过期日志,保留最近3-7天的内容,如果确认不影响故障排查,可以只保留最近1天的日志。
清理磁盘后空间没有立即释放怎么办?
通常是因为文件被进程占用,删除后进程仍持有文件句柄,运行lsof | grep deleted找到被删除但仍占用的文件,然后重启对应进程,如果不知道具体进程,直接重启系统也能释放空间。
首发原创文章,作者:王坚,如若转载,请注明出处:https://idctop.com/article/530549.html



