服务器磁盘满了怎么办?零基础排查清理与扩容完整教程
一、为什么服务器磁盘会突然爆满?
很多新手站长遇到网站突然打不开、SSH 登录报错 "No space left on device",第一反应是服务器坏了。
其实八成原因是磁盘空间占满了。
日常积累的日志、临时文件、过期备份、Docker 镜像、数据库 Binlog 等都会不知不觉吃掉磁盘。
本文从零带你排查、清理、扩容,全程可落地。
二、先摸清家底:查看磁盘使用情况
不管是阿里云、腾讯云还是自建服务器,第一步永远是用命令查看整体占用。
SSH 登录后执行:
df -h
你会看到类似输出:
Filesystem Size Used Avail Use% Mounted on
/dev/vda1 40G 38G 2.1G 95% /
- Use% 超过 90% 就要处理了。
- 如果根目录
/接近满,赶紧释放空间。
如果你用宝塔面板:
登录面板 → 左侧“监控” → 查看“磁盘”图表,或者直接看首页顶部的实时磁盘剩余。
三、找出“吃空间”的元凶
知道根目录满了之后,需要定位哪个目录或文件最大。
方法1:逐层扫描(推荐新手)
cd /
sudo du -sh * | sort -rh | head -10
这会列出根目录下占用最大的前十个目录。
重点关注 /var(日志)、/tmp(临时文件)、/opt(第三方软件)、/home(用户数据)等。
方法2:一键查找大文件(>1GB)
sudo find / -type f -size +1G -exec ls -lh {} \; 2>/dev/null
如果找到的是日志或缓存文件,基本可以安全删除。
宝塔用户可视化操作:
宝塔左侧“文件” → 进入根目录 → 点击右上角“大小排序”,手动查看大文件夹。
还可以用“工具箱”里的“磁盘占用分析”功能,直接显示每个目录的占比。
四、安全清理:哪些能删,哪些别动
1. 清理系统日志(最有效)
sudo journalctl --vacuum-time=3d # 只保留3天日志,大幅释放
du -sh /var/log/journal # 确认释放前/后
如果用 rsyslog,删除 /var/log 下的老文件(注意不要删 .log 正在写入的文件)。
2. 清理包管理器缓存
# CentOS/RHEL
sudo yum clean all
# Ubuntu/Debian
sudo apt-get clean
3. 删除过期备份和无用 Docker 镜像
如果装了 Docker:
docker system prune -af # 清理未使用镜像、容器、网络
宝塔用户: 左侧“软件商店” → “已安装” → 对应软件设置里可以清理日志。
例如 Nginx 日志可在配置中设置自动切割。
4. 清理回收站与临时文件
sudo rm -rf /tmp/*
sudo rm -rf /var/tmp/*
特别注意: 不要删除 /bin、/sbin、/lib、/etc 等系统目录下的任何文件。
如果不确定,先备份再删。
五、如果清理不够,如何扩容?
清理后若依然空间紧张(比如网站数据持续增长),建议直接扩容云硬盘。
以腾讯云 / 阿里云为例:
- 在云控制台找到服务器,点击“磁盘” → “扩容”。
- 调整到所需大小(例如从40G扩到80G),付费后等待几分钟。
- SSH 登录执行扩容命令让系统识别新空间:
# 查看磁盘分区号,假设是 /dev/vda1
sudo growpart /dev/vda 1
sudo resize2fs /dev/vda1
查看确认:df -h 应该看到新容量。
宝塔用户注意: 扩容后需要在面板左侧“软件商店” → “系统工具” → 安装“磁盘扩容”插件,按提示执行。
六、避坑与高频问题
Q:删了日志后服务会异常吗?
不会。日志文件是持续写入的,删除老文件后新日志会继续生成。保险起见,建议先备份再删。
Q:du 命令卡住怎么办?
可以用 timeout 30 du -sh /var 设置超时,或者先从最可能的目录开始查。
Q:云盘扩容后 df 没变化?
可能是忘记执行 resize2fs 或分区号不对。先执行 lsblk 确认设备名,再重试。
Q:宝塔清除缓存会误删网站文件吗?
宝塔“缓存清理”只清理面板自身的临时文件,不影响网站。如果使用“文件管理”手动删除,请确认路径。
七、验证清理效果
执行完上述操作后,再次运行:
df -h
对比之前的 Use% 数值,可用空间应该明显增加。
建议监控一周,观察磁盘增长趋势。
如果空间依然快速减少,可能是程序有 bug 写死循环日志,检查 web 服务日志大小。
长期建议: 设置日志自动轮转(logrotate)、定期清理任务、或购买云监控报警,磁盘使用率超过 80% 时就收到提醒,避免再次爆满。
按照上面的步骤操作,绝大多数磁盘满问题都能解决。
遇到异常时,优先回看避坑和高频问题部分,或者用 df -i 检查 inode 是否占满(小文件过多)。
希望这篇教程能帮你顺利腾出空间,服务器稳定运行。