当前位置: 首页 > news >正文

别再只会用df -h了!用ncdu可视化揪出Linux服务器磁盘爆满的元凶(附Docker日志清理脚本)

别再只会用df -h了!用ncdu可视化揪出Linux服务器磁盘爆满的元凶(附Docker日志清理脚本)

收到服务器磁盘告警时,大多数运维工程师的第一反应是执行df -h查看磁盘使用情况。这个命令确实能快速告诉我们哪个分区满了,但它就像医院里的体温计——只能告诉你发烧了,却无法诊断病因。当/dev/sda显示100%使用率时,真正的挑战才刚刚开始:如何在数百GB的数据海洋中,精准定位那几个吞噬空间的"巨鲸文件"?

传统做法是du -sh *一层层手动排查,这就像在迷宫里蒙眼摸索,不仅效率低下,还容易遗漏隐藏在深层目录中的大文件。而ncdu(NCurses Disk Usage)的出现,彻底改变了这场"寻宝游戏"的规则。这个基于终端的可视化工具,能在几秒内扫描整个目录树,用交互式界面直观展示每个文件夹的空间占比,甚至支持直接删除文件——所有操作无需离开键盘。

1. 从告警到定位:磁盘排查工具进化论

1.1 传统三板斧的局限性

当服务器弹出"no space left on device"警告时,老派运维可能会祭出这三件套:

df -h # 查看分区使用概览 du -sh /* # 根目录下各文件夹大小 ls -lhS /var/log/ # 按大小排序显示文件

这种方法存在三个致命缺陷:

  1. 层级穿透困难:需要手动进入每个可疑目录重复执行du
  2. 结果不直观:数字堆砌难以快速识别异常点
  3. 操作风险高:误删关键文件的风险始终存在

1.2 ncdu的降维打击

安装这个不足1MB的工具只需一条命令:

sudo apt install ncdu # Debian/Ubuntu sudo yum install ncdu # RHEL/CentOS

其核心优势通过这个对比表一目了然:

功能特性df/du组合ncdu
扫描速度逐层手动执行慢全自动递归扫描快
结果呈现纯数字列表交互式百分比柱状图
导航效率需多次cd切换目录单界面键盘快捷跳转
危险操作防护直接执行rm需确认删除操作
排序灵活性需额外管道操作内置多维度排序

提示:首次使用建议添加--exclude-kernfs参数跳过虚拟文件系统:
ncdu --exclude-kernfs /

2. ncdu实战:揪出磁盘空间的隐形杀手

2.1 高效导航技巧

启动扫描后,你会看到类似这样的界面:

--- / -------------------------------------------------- 96.3GiB [##########] /var 12.1GiB [# ] /usr 4.7GiB [ ] /home

通过这些快捷键实现闪电导航:

  • j/k:上下移动光标(Vim党狂喜)
  • Enter:进入选中目录
  • <:返回上级目录
  • n/s:按名称/大小排序(反复按切换升降序)
  • d:标记删除当前文件(实际删除需确认)

2.2 典型磁盘杀手排查

根据笔者处理过的数百起磁盘告警案例,这些目录最可能藏有"空间怪兽":

  1. Docker存储/var/lib/docker(特别是aufs/diff目录)
  2. 日志文件/var/log/journal/(systemd日志)
  3. 临时文件/tmp/var/tmp
  4. 缓存数据/var/cache/apt/archives/

注意:删除前建议先用ls -lh查看文件详情,避免误删正在使用的交换文件或数据库

3. Docker空间清理终极方案

当ncdu指向/var/lib/docker时,说明容器已成为磁盘空间的头号公敌。以下是经过实战检验的清理组合拳:

3.1 基础清理命令

# 删除所有停止的容器、悬空镜像和未使用网络 docker system prune -f # 彻底清理(包括未被任何容器引用的镜像) docker system prune -a --volumes

3.2 日志清理脚本

将以下脚本保存为clean_docker_logs.sh

#!/bin/bash echo "===== Docker日志清理开始 =====" logs=$(find /var/lib/docker/containers -name '*-json.log') for log in $logs; do if [ -f "$log" ]; then echo "清空 $log" truncate -s 0 "$log" fi done echo "===== 共清理 ${#logs[@]} 个日志文件 ====="

赋予执行权限并运行:

chmod +x clean_docker_logs.sh sudo ./clean_docker_logs.sh

3.3 高级空间回收

对于使用devicemapper存储驱动的情况,额外执行:

# 查看元数据空间使用 docker info | grep 'Data Space Used' # 回收thin pool空间 docker run --privileged --pid=host docker/desktop-reclaim-space

4. 防患于未然:磁盘空间监控体系

4.1 自动化监控方案

配置Prometheus+Grafana实现预警:

# prometheus.yml 片段 scrape_configs: - job_name: 'node_disk' static_configs: - targets: ['node-exporter:9100']

关键监控指标:

  • node_filesystem_avail_bytes{fstype!="tmpfs"} / node_filesystem_size_bytes * 100
  • rate(node_disk_written_bytes_total[1h])

4.2 日志轮转配置

/etc/logrotate.d/docker中添加:

/var/lib/docker/containers/*/*.log { rotate 7 daily compress delaycompress missingok copytruncate }

最后记得定期执行logrotate -f /etc/logrotate.conf使配置生效。

http://www.jsqmd.com/news/800064/

相关文章:

  • 终极Obsidian笔记模板指南:20+专业模板快速构建个人知识库
  • Tera数据库:从入门到精通,打造互联网级分布式存储系统
  • FPGA合成工具优化策略与硬件设计实践
  • 【嵌入式Linux应用开发基础】进程间通信:套接字
  • BNO055与JY901传感器选型实战:从硬件连接到精度实测
  • AI编程脚手架:用Claude代码模板提升开发效率与规范
  • 贾跃亭出任FF全球CEO,Jerry任董事长,升级为物理AI生态系统公司
  • 第二章-08-创建目录命令(mkdir)
  • 别再只存model.state_dict()了!深入理解PyTorch的state_dict,优化你的模型保存策略
  • OSINT自动化框架openeir:模块化设计与情报收集流水线构建
  • 杭州品深电源科技有限公司2026通信电源厂家精选:电源定制厂家/电源模块厂家优选杭州品深电源科技 - 栗子测评
  • 【带余除法】信息学奥赛一本通C语言解法(题号1009)
  • 避开BUUCTF《Life on Mars》的思维陷阱:当information_schema查询结果‘不对劲’时,你的排查清单应该有哪些?
  • 从零学会基础算法前缀和差分:数组区间求和离散化基础
  • 跨平台AI模型库ailia-models:400+预训练模型与高性能推理引擎深度解析
  • 路由器4444260419
  • AI智能体工具链故障自救:构建经验驱动的AgentRX恢复系统
  • 老味餐厅自研 APP:从线下到线上的营收翻倍之路
  • 基于MCP协议构建图数据库AI助手:Graphiti-MCP-Server架构与实战
  • Python 与 Conda 编程实战指南:从环境配置到项目运行完整入门
  • 3步解锁B站缓存视频:m4s无损转MP4的终极解决方案
  • 工业视觉YOLO检测框偏移问题:Letterbox预处理与坐标系转换
  • STM32软硬件SPI驱动MAX31865实现PT100高精度测温与Shell交互
  • LetsFG开源项目:本地化AI智能体航班搜索与预订引擎实战指南
  • 告别网络盲区:用RTL8811CU让旧笔记本变身Linux双频WiFi网卡/AP二合一网关
  • Godot引擎开发实战:高效利用代码食谱仓库加速游戏原型设计
  • 语义理解 查询时
  • ARM A64指令集SBFIZ位域操作详解与应用
  • 【Excel提效 No.069】一句话搞定正则表达式批量替换文本(保护个人敏感信息)
  • DOL-CHS-MODS开源项目本地化与个性化配置指南