AI辅助声明:本文内容经过AI辅助整理和优化,结合2026年最新运维实践进行更新。
更新说明:补充了最新的磁盘清理工具和最佳实践。
运维服务器时,磁盘满了是个常见问题。当硬盘占用率超过80%,就该动手清理了。这里整理了我实际用到的命令和方法。
先看磁盘用了多少
1 | df -h |
输出示例:
1 | Filesystem Size Used Avail Use% Mounted on |
重点关注使用率高的分区,90%那根分区就是重点清理对象。
查看具体哪个目录占空间:
1 | # 看根目录下各文件夹大小 |
找大文件
查找超过100MB的文件:
1 | find / -size +100M -type f 2>/dev/null |
参数说明:
-size +100M:大于100MB-type f:只找文件,跳过目录2>/dev/null:屏蔽权限错误提示
查找大日志文件:
1 | find /var/log -name "*.log" -size +50M |
清理时的注意事项
重要:删之前确认是什么文件,别手快删了重要数据。
可以直接删的静态文件
1 | rm -rf /path/to/large-file |
这类文件通常可以删:
- 过期的备份包
- 下载的临时安装包
- 旧版本程序
- 归档的过期日志
不能删只能清空的动态日志
Nginx、MongoDB这些服务正在写的日志文件,不能直接删,因为进程还占用着文件句柄,删了也不会释放空间。正确的做法是清空内容:
1 | echo "" > /var/log/mongodb/mongod.log |
或者用 truncate:
1 | truncate -s 0 /var/log/mongodb/mongod.log |
常见日志清理
Nginx 日志
1 | # 清空访问日志 |
MongoDB 日志
1 | echo "" > /var/log/mongodb/mongod.log |
MongoDB 可以配置日志轮转,在配置文件里加:
1 | systemLog: |
系统日志
1 | sudo truncate -s 0 /var/log/syslog |
自动化清理方案
logrotate 配置
1 | /var/log/myapp/*.log { |
crontab 定时任务
1 | # 每天凌晨2点清空MongoDB日志 |
监控脚本
简单的磁盘监控脚本:
1 |
|
磁盘规划建议
- 把
/var/log单独分区,避免日志占满根分区 - 数据库文件放在独立分区
- 预留至少20%的空闲空间
总结几个原则:定期检查(df -h)、安全清理(先确认再删)、自动化管理(logrotate + crontab)、提前规划(分区分离)。