云服务器磁盘满了怎么办:定位大文件、清理与扩容的三步处理
云服务器磁盘满了怎么办:定位大文件、清理与扩容的三步处理
磁盘空间满了是云服务器上最常见、也最容易被忽视的故障之一。磁盘一满,数据库写不进去、日志打不出来、网站直接报 500,甚至连 SSH 登录都会变慢。很多小项目第一次出问题就是栽在这里。本文记录一套实操流程:先定位、再清理、最后才是扩容。
第一步:确认是哪块盘满了
先用 df -h 看整体情况,重点关注根分区 / 的使用率。一般超过 85% 就要处理,不要等到 100%。
df -h
如果根分区满了,再用 du 按目录找大户。直接对根目录跑 du -sh /* 容易被 /proc、/sys 这类虚拟文件系统干扰,建议加上 --exclude 排除:
du -sh /* --exclude=/proc --exclude=/sys 2>/dev/null | sort -rh | head -10
找到最大的目录后逐层往下钻,比如 /var 占了 30G,就继续 du -sh /var/* | sort -rh | head。两三层就能定位到具体元凶。
如果想更快,可以装 ncdu:apt install ncdu 或 yum install ncdu,跑 ncdu / 就能在终端里交互式浏览各目录大小,按 d 还能直接删除,比反复敲 du 省事得多。
第二步:清理最常见的四类空间占用
定位到大文件之后,先分清能不能删。按出现频率排序:
1. 日志文件。 /var/log 是重灾区。先看最大的日志文件是哪个服务产生的,再决定是删还是轮转。临时救急可以直接清空正在写的文件,注意要用重定向而不是 rm:
: > /var/log/nginx/access.log
直接 rm 正在被进程写的文件,磁盘空间并不会释放——进程还握着文件句柄,空间要等进程重启才回收。用 : > 截断文件,空间立刻释放,服务也不用重启。事后记得给这个日志配上 logrotate,避免下次再满。
2. Docker 镜像与容器日志。 跑 Docker 的机器要重点查两处:一是 docker system df 看镜像、容器、卷各占多少;二是容器日志,默认 json-file 驱动的日志不限制大小,单个容器能写出几十 G。清理命令:
docker system prune -a --volumes
但要注意,prune -a 会删掉所有未被使用的镜像,--volumes 会删匿名卷,生产环境执行前先确认没有要保留的数据。根治办法是在 /etc/docker/daemon.json 里给日志加轮转:
{
"log-driver": "json-file",
"log-opts": {
"max-size": "10m",
"max-file": "3"
}
}
改完重启 Docker 生效。
3. 包管理缓存。 Debian/Ubuntu 的 apt clean、CentOS 的 yum clean all 能清掉几百兆到几 G 的安装包缓存,安全无副作用,顺手做。
4. 已删除但未释放的文件。 如果 df 显示满了,du 却算不出那么多空间,大概率是被删的文件还被进程占着。用 lsof | grep deleted 找出来,重启对应服务或杀掉进程即可释放。
第三步:清理不够再扩容
如果清理完还是不够用,或者数据本身就是业务增长带来的,那就该扩容了。华为云上流程是:控制台给云硬盘扩容 → 服务器里执行 growpart 扩分区 → resize2fs(ext4)或 xfs_growfs(xfs)扩文件系统。注意顺序不能反,先云上扩、再系统里扩。扩容前先做快照,万一操作失误还能回滚。
扩容之后顺手做两件事:一是给磁盘使用率设个告警,华为云的云监控可以按 80%、90% 两档发短信或邮件;二是把这次清理出的规则固定下来——日志轮转、Docker 日志上限、定期 apt clean,写进运维清单,下次就不用再救火。
小结
磁盘满了的处理顺序是固定的:df 确认 → du/ncdu 定位 → 区分能删不能删 → 清理日志、镜像、缓存 → 不够再扩容。大部分情况下清理就能解决,扩容是最后手段。关键是事后把告警和轮转配好,让问题下次在 80% 就被发现,而不是在 100% 才被发现。
- 点赞
- 收藏
- 关注作者
评论(0)