Linux 磁盘空间告急时的应急处理策略

发布时间 - 2026-01-29 00:00:00    点击率:
这是典型的“已删除但未释放文件”问题:进程仍占用已被rm删除的文件句柄,导致df显示满而du统计小;可用lsof +L1或lsof|grep deleted定位,重启进程或kill释放,禁用echo>/proc//fd/清空。

df 显示磁盘已满,但 du 统计总和远小于该值

这是典型的“已删除但未释放文件”问题:某个进程仍在占用已被 rm 删除的文

件句柄,导致磁盘空间无法回收。

执行 lsof +L1 可列出所有被删除但仍被打开的文件(+L1 表示 link count = 0);若无输出,尝试 lsof | grep deleted(部分旧版 lsof 不支持 +L1)。

常见场景包括:日志轮转后旧进程未重载、容器内应用未响应 SIGUSR1、长时间运行的 tail -f 指向已被删的日志。

  • 确认后,可选择重启对应进程(如 systemctl restart nginx),或直接 kill 进程(kill -9 )强制释放
  • 不建议用 echo > /proc//fd/ 清空文件内容——可能破坏进程逻辑,且对只读 fd 无效
  • 若为容器环境,需进入容器命名空间排查:nsenter -t -m -u -i -n -p -- /bin/sh,再查 /proc/self/fd/

快速定位大目录:du 和 ncdu 的取舍

du -sh /* 2>/dev/null | sort -hr 是最轻量的顶层扫描方式,但会跳过权限不足目录(如 /root/var/lib/lxc)。

若需深度扫描且机器有交互终端,优先用 ncduncdu / 支持键盘导航、实时排序、按 d 安全删除,比纯 du 更直观。

  • 无 ncdu 时,可用 du -h --max-depth=1 /var 2>/dev/null | sort -hr 逐级下钻,避免一次性扫全盘耗时过长
  • 注意 du 默认统计逻辑大小,对稀疏文件(如 qcow2 镜像)可能严重低估实际占用,此时应加 --apparent-size 对比
  • 别在 /proc/sys/dev 上跑 du——这些是虚拟文件系统,du 会卡住或报错

清理 /var/log 下的 journald 日志

systemd-journald 默认不限制日志体积,长期运行的服务器可能积累数十 GB 的 /var/log/journal/ 数据。

先查当前用量:journalctl --disk-usage;再按需清理:

  • 保留最近 3 天:journalctl --vacuum-time=3d
  • 限制总大小为 500M:journalctl --vacuum-size=500M
  • 永久生效:编辑 /etc/systemd/journald.conf,取消注释并修改 SystemMaxUse=500MMaxRetentionSec=1month
  • 注意:设太小会导致 journalctl -u sshd 查不到历史记录;生产环境建议至少留 100M

临时腾空间:用 truncate 清空正在写入的大文件

当发现某个正在被追加的日志(如 /var/log/syslog 或应用自定义 log)占满磁盘,又不能停服务时,truncate 是最安全的清空手段。

> fileecho "" > file 不同,truncate -s 0 file 不改变 inode、不中断写入流,进程仍可继续写入。

  • 务必确认目标文件确实在被持续写入(lsof +L1 | grep filels -l /proc/*/fd/ | grep file
  • 禁止对数据库数据文件、qcow2 镜像、二进制可执行文件使用 truncate——会直接损坏数据
  • 操作前建议先备份 inode:ls -i /path/to/file,清空后检查是否仍是同一 inode,确保没被重建

真正棘手的情况往往不是空间不够,而是清理后空间立刻又被填满——这说明有异常写入源(如无限循环日志、coredump 未关闭、监控 agent 本地缓存暴增)。这时候得盯住 inotifywait -m -e create,modify /var/logfatrace 实时抓写入行为。


# linux  # node  # nginx  # app  # ai  # red  # echo  # NULL  # count  # sort  # 命名空间  # 循环  # var  # 数据库  # 清空  # 已被  # 这是  # 句柄  # 镜像  # 重启  # 但未  # 长时间  # 仍是  # 自定义 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: Laravel怎么处理异常_Laravel自定义异常处理与错误页面教程  Laravel的路由模型绑定怎么用_Laravel Route Model Binding简化控制器逻辑  php json中文编码为null的解决办法  简历在线制作网站免费版,如何创建个人简历?  HTML5空格和nbsp有啥关系_nbsp的作用及使用场景【说明】  网站建设保证美观性,需要考虑的几点问题!  Linux网络带宽限制_tc配置实践解析【教程】  Laravel怎么生成二维码图片_Laravel集成Simple-QrCode扩展包与参数设置【实战】  北京网站制作的公司有哪些,北京白云观官方网站?  个人摄影网站制作流程,摄影爱好者都去什么网站?  Laravel模型事件有哪些_Laravel Model Event生命周期详解  Python正则表达式进阶教程_复杂匹配与分组替换解析  Laravel如何实现邮件验证激活账户_Laravel内置MustVerifyEmail接口配置【步骤】  如何生成腾讯云建站专用兑换码?  Laravel如何编写单元测试和功能测试?(PHPUnit示例)  如何自定义safari浏览器工具栏?个性化设置safari浏览器界面教程【技巧】  微信小程序 wx.uploadFile无法上传解决办法  如何用搬瓦工VPS快速搭建个人网站?  高防服务器租用如何选择配置与防御等级?  Gemini怎么用新功能实时问答_Gemini实时问答使用【步骤】  在线ppt制作网站有哪些软件,如何把网页的内容做成ppt?  PHP怎么接收前端传的文件路径_处理文件路径参数接收方法【汇总】  电视网站制作tvbox接口,云海电视怎样自定义添加电视源?  实现点击下箭头变上箭头来回切换的两种方法【推荐】  网站图片在线制作软件,怎么在图片上做链接?  Laravel如何使用API Resources格式化JSON响应_Laravel数据资源封装与格式化输出  Laravel如何配置和使用缓存?(Redis代码示例)  Bootstrap CSS布局之列表  如何快速重置建站主机并恢复默认配置?  php嵌入式断网后怎么恢复_php检测网络重连并恢复硬件控制【操作】  Laravel storage目录权限问题_Laravel文件写入权限设置  HTML 中动态设置元素 name 属性的正确语法详解  猎豹浏览器开发者工具怎么打开 猎豹浏览器F12调试工具使用【前端必备】  Laravel全局作用域是什么_Laravel Eloquent Global Scopes应用指南  edge浏览器无法安装扩展 edge浏览器插件安装失败【解决方法】  微信小程序 input输入框控件详解及实例(多种示例)  WordPress 子目录安装中正确处理脚本路径的完整指南  免费视频制作网站,更新又快又好的免费电影网站?  如何注册花生壳免费域名并搭建个人网站?  Laravel如何升级到最新的版本_Laravel版本升级流程与兼容性处理  Laravel Facade的原理是什么_深入理解Laravel门面及其工作机制  高防服务器租用首荐平台,企业级优惠套餐快速部署  Laravel如何与Vue.js集成_Laravel + Vue前后端分离项目搭建指南  如何快速搭建支持数据库操作的智能建站平台?  如何自己制作一个网站链接,如何制作一个企业网站,建设网站的基本步骤有哪些?  PythonWeb开发入门教程_Flask快速构建Web应用  Laravel怎么防止CSRF攻击_Laravel CSRF保护中间件原理与实践  Laravel 419 page expired怎么解决_Laravel CSRF令牌过期处理  Laravel怎么配置S3云存储驱动_Laravel集成阿里云OSS或AWS S3存储桶【教程】  网站页面设计需要考虑到这些问题