可靠磁盘报表需同时呈现容量使用率(%use)、inode使用率(%iuse)和剔除保留块后的可用物理空间(gib),并统一采集维度、规避空格/lvm/伪文件系统陷阱,生成带颜色预警的轻量html报表,每日定时发送。

Linux磁盘使用率不是简单用“已用空间 ÷ 总空间”就能准确反映真实压力,尤其当存在保留块(reserved blocks)或inode耗尽时,实际可用性会明显偏差。生成可靠报表,关键在于统一采集维度、排除干扰项,并明确标注预警阈值。
核心指标必须包含的三项数据
一个实用的磁盘报表不能只显示df -h的默认输出。以下三项需同时呈现,缺一不可:
-
容量使用率(%Use):基于
df -B1获取字节数计算,避免四舍五入误差;不直接信任df自带百分比(它可能忽略reserved空间) -
Inode使用率(%IUse):用
df -i提取,小文件密集场景(如日志、容器镜像缓存)下比容量更早成为瓶颈 -
可用物理空间(GiB):剔除root保留块(通常是5%)后的真实可写空间,可通过
tune2fs -l /dev/xxx | grep "Reserved block count"验证
脚本中规避常见陷阱的方法
很多自动生成报表的脚本在挂载点含空格、LVM快照或overlayfs时会出错。稳妥做法是:
- 用
findmnt -D -n -o SOURCE,TARGET,FSTYPE,OPTIONS替代df的挂载点枚举,确保路径安全 - 对每个设备单独执行
stat -f和stat -f -c,避免df批量解析时因格式变化失效 - 跳过
tmpfs、devtmpfs等内存伪文件系统(除非业务明确需要监控其用量) - 对
/boot等独立分区单独设阈值(例如85%,而非全局90%),因其增长模式特殊
生成带颜色与预警的HTML报表
纯文本报表难快速定位问题。用bash+cat生成基础HTML即可实现可视化:
- 用
printf拼接table行,按%Use > 90标红、%IUse > 95标橙、Available 加粗 - 在表头注明采集时间、主机名、内核版本,方便事后追溯
- 底部附加一行说明:“⚠️ 容量告警=≥90%,inode告警=≥95%,可用空间临界=≤2GiB”
- 不依赖外部工具(如jq或python),确保在最小化系统(如Alpine)中也能运行
定时任务与结果分发建议
报表价值取决于及时性和可达性:
- 用
crontab -e设为每天04:00执行,避开业务高峰且留出夜间清理窗口 - 输出文件按
disk-report-$(date +\%Y\%m\%d).html命名,保留最近7天,旧文件自动rm - 通过
mail -s "Disk Report $(hostname)" admin@example.com 发送,主题含主机名便于筛选 - 若对接企业微信或钉钉,用curl调用webhook,消息体精简为“⚠️ /var/log 使用率92%,inode 96%”,附链接到完整报表
不复杂但容易忽略:真正影响服务的是“还能写多少文件”,而不是“还剩多少百分比”。报表要服务于这个目的,而不是堆砌数据。











