Linux 服务器磁盘空间不足,如何快速清理?
当你收到磁盘空间告警或发现服务器运行缓慢时,很可能是磁盘满了。
别担心,本文用最直接的方式带你一步步清理空间,全程只需终端命令,零基础也能搞定。
先搞清楚空间去哪了
在动手清理之前,先定位哪些目录占用了大量空间。
用下面两个命令快速扫描:
df -h # 查看各分区使用情况,%Use% 列显示占用百分比
du -sh /* 2>/dev/null | sort -rh | head -10 # 显示根目录下占用最大的10个子目录
如果根分区(/)使用率超过80%,就需要重点处理。
上面第二个命令会输出类似 /var 5.2G、/home 3.8G 的信息,接下来针对这些大目录深入清理。
清理日志文件和系统缓存
日志和缓存是磁盘空间的常见“隐形杀手”,尤其是运行时间较长的服务器。
清理 systemd journal 日志(绝大多数现代 Linux 发行版都使用):
# 查看当前日志占用
journalctl --disk-usage
# 只保留最近3天的日志
sudo journalctl --vacuum-time=3d
清理软件包缓存(以 apt 为例):
sudo apt clean # 清理所有下载的.deb包缓存
sudo apt autoremove # 删除不再需要的依赖包
清理临时文件:
sudo rm -rf /tmp/* # 小心:不要删除/tmp目录本身
sudo rm -rf /var/tmp/*
tip:日志清理后一般能释放几百 MB 到数 GB,具体取决于日志保留时长。
删除不再需要的大文件或旧内核
如果你发现 /var/log/ 下某个日志文件特别大(比如 messages、syslog),可以安全清空:
sudo truncate -s 0 /var/log/syslog # 清空文件内容而不删除文件
对于使用 apt 的系统,旧内核也占用不少 /boot 空间:
# 查看已安装的内核
dpkg --list | grep linux-image
# 删除旧内核(保留当前运行的内核)
sudo apt autoremove --purge
手动检查大文件:
find / -type f -size +500M -exec ls -lh {} \; 2>/dev/null
如果发现不需要的大文件(如旧的备份、日志存档),用 rm 命令删除。
处理特别占空间的目录(如 /var/lib/docker)
如果你使用了 Docker,镜像和容器日志会占据大量空间:
docker system prune -a --volumes # 删除所有停止的容器、无用镜像、网络和卷
不要跑容器?
检查 /var/lib/mysql 或 /home 下是否有旧的网站备份或数据库文件,可以考虑压缩或迁移到其他存储。
验证清理效果并预防复发
完成后再次运行 df -h,查看根分区的使用率是否明显下降。
如果仍然很高,可能是某个应用持续写日志,比如 Nginx 或 MySQL。
你可以配置日志轮转(logrotate)来自动压缩和删除旧日志。
频率问题:清理日志后系统日志服务会立即开始写新日志,这是正常的。
建议每周执行一次以上清理命令,或者设置定时任务(cron)自动执行。
避坑提醒:
- 不要直接
rm -rf /var/log/,这会删除日志目录结构,导致服务无法写日志。 - 删除
/tmp文件时确保没有进程正在使用。 - 清理前最好确认哪些是重要数据,尤其是数据库文件和网站文件。
如果你的磁盘空间经常告警,建议升级磁盘或挂载新盘作为数据目录,从根源解决问题。
上面这些命令足够应对大多数“磁盘空间不足”的突发情况,照着做就能腾出可用空间。