服务器磁盘空间不足需按“df -h定位高占用分区→df -i排查inode耗尽→du -sh * | sort -hr精准定位大目录→logrotate轮转/ truncate清空日志/ lsof +l1释放已删文件句柄→docker system prune清理无用资源”流程处置,严禁盲目rm删除。
☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 多模态理解力帮你轻松跨越从0到1的创作门槛☜☜☜

当服务器磁盘空间不足导致服务响应变慢、日志写入失败或容器无法启动时,需快速定位并清理真实占用空间的大文件或目录,而非仅依赖表面命令输出。
确认磁盘使用率和挂载点
登录服务器后,先执行 df -h 查看各分区使用情况,重点关注 【Use% 列超过90%的挂载点,如 / 或 /var;若显示 100% 但 df 未报错,可能是已删除但进程仍占句柄的文件在持续写入。
接着运行 df -i 检查 inode 使用率——即使磁盘空间充足,inode 耗尽也会导致“no space left on device”错误,此时 df -h 显示仍有大量空间。
定位实际占用空间的目录
进入高占用挂载点根目录(如 cd /var),执行:du -sh * 2>/dev/null | sort -hr | head -20
这一步列出当前目录下前20个最大子目录,【注意:必须加 2>/dev/null 抑制权限拒绝报错,否则大量 Permission denied 行会冲散真实结果】。若输出中 log、cache、www 或 docker 目录异常突出,就进入该目录继续深挖。
例如发现 /var/log 占用过大,进入后执行:du -sh */* 2>/dev/null | sort -hr | head -10,快速定位到具体服务日志子目录。
用于在用户想通过浏览器自动化与 Google Gemini 或 ChatGPT 交互时。触发短语包括“ask Gemini”“ask ChatGPT”“ask GPT”“让...”。
安全清理日志文件
方法一:使用 logrotate 强制轮转
查看对应服务的 logrotate 配置(如 /etc/logrotate.d/nginx),确认 size 和 rotate 参数后,直接运行:logrotate -f /etc/logrotate.d/nginx。这会按规则压缩旧日志并删除超出数量的归档,比手动删更安全。
方法二:清空正在写入的日志文件(慎用)
若某日志文件(如 /var/log/syslog)已达数GB且仍在增长,不能直接 rm,否则可能中断写入进程。应使用重定向清空:truncate -s 0 /var/log/syslog 或 > /var/log/syslog。这保留文件 inode 和进程句柄,不中断服务。
方法三:查找并删除已删除但仍被占用的文件
运行 lsof +L1 列出所有链接数为0但仍有进程打开的文件,典型输出形如:rsyslogd 1234 root 1w REG 8,1 2457600000 123456 /var/log/syslog (deleted)
此时重启对应进程(如 systemctl restart rsyslog)即可释放空间,【切勿 kill -9 进程,可能引发日志丢失或服务异常】。
清理 Docker 无用资源
第一步:删除已停止的容器、悬空镜像和未使用的卷docker system prune -af --volumes。此命令会清除所有未被任何容器引用的资源,【执行前务必确认没有需保留的匿名卷数据,该操作不可逆】。
第二步:检查大镜像层docker images --format "{{.Repository}}:{{.Tag}} {{.Size}}" | sort -k2 -hr | head -10,识别体积异常大的镜像,结合 docker history <image></image> 查看哪一层贡献了主要体积,针对性优化构建过程。
第三步:清理构建缓存docker builder prune -f。CI/CD 频繁构建后缓存常达数十GB,此命令专清 buildkit 缓存,不影响运行中容器。










