服务器磁盘满了怎么办:Linux 磁盘占用排查与清理实战

举报
yd_274341061 发表于 2026/11/06 12:00:35 2026/11/06
【摘要】 服务器跑着跑着突然报“No space left on device”,网站挂了、日志写不进去,这种情况很多运维都遇到过。本文按“先定位、再清理、最后预防”的顺序,把磁盘占满的排查和处置流程走一遍。## 一、先看整体占用```bashdf -h```重点看 Use% 接近 100% 的分区。注意 `/` 根分区和 `/var`、`/home` 这些独立挂载点要分开看,很多时候只是某个小分区满...

服务器跑着跑着突然报“No space left on device”,网站挂了、日志写不进去,这种情况很多运维都遇到过。本文按“先定位、再清理、最后预防”的顺序,把磁盘占满的排查和处置流程走一遍。

## 一、先看整体占用

```bash
df -h
```

重点看 Use% 接近 100% 的分区。注意 `/` 根分区和 `/var`、`/home` 这些独立挂载点要分开看,很多时候只是某个小分区满了。

## 二、定位大目录

```bash
du -sh /* 2>/dev/null | sort -hr | head -10
du -sh /var/* 2>/dev/null | sort -hr | head -10
```

逐层向下钻,很快能锁定具体目录。`du` 加 `2>/dev/null` 可以屏蔽无权限的报错噪音。

## 三、几种“看不见”的占用

**1. 已删除但被进程占用的文件**

```bash
lsof | grep deleted
```

日志被 rm 了但进程还持有句柄,空间不会释放。重启对应进程或 `kill -HUP` 即可回收。

**2. 日志文件暴涨**

```bash
find /var/log -type f -size +500M -exec ls -lh {} \;
```

常见元凶是 nginx access.log、应用日志、系统 journal:

```bash
journalctl --vacuum-size=200M
truncate -s 0 /var/log/nginx/access.log
```

注意:用 `truncate` 清空正在写的日志是安全的,直接 `rm` 反而可能让进程继续往已删除的文件句柄写,空间不释放。

**3. Docker 垃圾**

```bash
docker system df
docker system prune -a --volumes
```

镜像层、停止的容器、悬空 volume 往往能清出好几个 G。

## 四、安全清理清单

- `/var/log` 下历史日志、压缩包(保留最近 7 天)
- `/tmp` 超过 7 天未访问的文件
- 包管理缓存:`apt clean` 或 `yum clean all`
- 旧内核:保留当前运行版本,其余可删
- 数据库 binlog:确认备份后在 MySQL 中 `PURGE BINARY LOGS`

清理前务必确认文件用途,尤其不要随手删 `/var/lib` 下的数据目录。

## 五、预防:让磁盘不再失控

```bash
# 1. 给关键日志加 logrotate
# /etc/logrotate.d/myapp
/var/log/myapp/*.log {
    daily
    rotate 7
    compress
    missingok
    copytruncate
}
```

```bash
# 2. 加磁盘监控告警(crontab 每10分钟检查)
*/10 * * * * df -h / | awk 'NR==2 {gsub("%","",$5); if ($5>85) print "disk high"}'
```

```bash
# 3. 配好日志切割 + 定期清理临时文件
find /tmp -type f -mtime +7 -delete
```

## 总结

磁盘满的处理顺序是:`df` 看分区 → `du` 找目录 → `lsof` 查被占用文件 → 针对性清理 → logrotate 和监控兜底。大部分情况下半小时内能恢复,关键是别在没确认文件用途时直接 rm。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0)

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。