本文目录导读:

我来介绍几种监控inode使用率的方法:
基础监控脚本
#!/bin/bash
# 检查inode使用率
check_inode_usage() {
# 获取所有挂载点的inode使用情况
df -i | grep -v "Filesystem" | grep -v "tmpfs" | while read line; do
# 提取使用率
usage=$(echo $line | awk '{print $5}' | sed 's/%//')
mount_point=$(echo $line | awk '{print $6}')
# 设置阈值(例如80%)
threshold=80
if [ "$usage" -gt "$threshold" ]; then
echo "WARNING: Inode usage on $mount_point is $usage% (threshold: $threshold%)"
fi
done
}
check_inode_usage
增强版监控脚本
#!/bin/bash
# 配置
THRESHOLD=80 # 告警阈值
LOG_FILE="/var/log/inode_monitor.log"
EMAIL="admin@example.com"
# 函数:检查inode使用率
check_inodes() {
local critical_flag=0
# 获取所有挂载点的inode信息
df -iP | tail -n+2 | while read -r line; do
filesystem=$(echo "$line" | awk '{print $1}')
total_inodes=$(echo "$line" | awk '{print $2}')
used_inodes=$(echo "$line" | awk '{print $3}')
free_inodes=$(echo "$line" | awk '{print $4}')
usage_percent=$(echo "$line" | awk '{print $5}' | sed 's/%//')
mount_point=$(echo "$line" | awk '{print $6}')
# 跳过特殊文件系统
if [[ "$filesystem" == "tmpfs" || "$filesystem" == "devtmpfs" ]]; then
continue
fi
# 检查使用率是否超过阈值
if [ "$usage_percent" -gt "$THRESHOLD" ]; then
echo "$(date '+%Y-%m-%d %H:%M:%S') - CRITICAL: $mount_point inode usage at $usage_percent%" | tee -a "$LOG_FILE"
critical_flag=1
fi
# 检查剩余inode数量
if [ "$free_inodes" -lt "1000" ]; then
echo "$(date '+%Y-%m-%d %H:%M:%S') - WARNING: Only $free_inodes free inodes on $mount_point" | tee -a "$LOG_FILE"
fi
done
return $critical_flag
}
# 发送告警邮件
send_alert() {
local subject="Inode Usage Alert - $(hostname)"
local body="Inode usage exceeded threshold on $(hostname) at $(date)"
echo "$body" | mail -s "$subject" "$EMAIL"
}
# 主函数
main() {
echo "=== Inode Monitor Started at $(date) ===" >> "$LOG_FILE"
if check_inodes; then
echo "All inode usage is normal" >> "$LOG_FILE"
else
send_alert
fi
echo "=== Monitor Ended ===" >> "$LOG_FILE"
}
main
详细分析脚本
#!/bin/bash
# 详细inode分析
detailed_inode_analysis() {
local mount_point="$1"
echo "=== Inode Analysis for $mount_point ==="
echo ""
# 1. 总体使用情况
echo "1. Overall inode usage:"
df -i "$mount_point" | column -t
echo ""
# 2. 找到占用inode最多的目录
echo "2. Top 10 directories by inode count:"
find "$mount_point" -xdev -type d 2>/dev/null | while read dir; do
count=$(find "$dir" -xdev -type f 2>/dev/null | wc -l)
echo "$count $dir"
done | sort -rn | head -10 | awk '{print NR".", $2, "-", $1, "files"}'
echo ""
# 3. 统计文件类型
echo "3. File type distribution:"
find "$mount_point" -xdev -type f 2>/dev/null | while read file; do
extension="${file##*.}"
if [ "$extension" == "$file" ]; then
echo "no_extension"
else
echo "$extension"
fi
done | sort | uniq -c | sort -rn | head -10
echo ""
# 4. 查找大量小文件
echo "4. Directories with potentially small files (>1000 files):"
find "$mount_point" -xdev -type d 2>/dev/null | while read dir; do
count=$(find "$dir" -maxdepth 1 -type f 2>/dev/null | wc -l)
if [ "$count" -gt 1000 ]; then
echo "$dir: $count files"
fi
done | head -20
}
# 使用示例
detailed_inode_analysis "/data"
定期监控脚本(配合cron)
#!/bin/bash
# 监控并记录inode使用趋势
MONITOR_DIR="/var/log/inode_monitor"
TREND_FILE="$MONITOR_DIR/trend.csv"
ALERT_LOG="$MONITOR_DIR/alerts.log"
# 创建目录
mkdir -p "$MONITOR_DIR"
# 收集数据
collect_inode_data() {
local timestamp=$(date '+%Y-%m-%d %H:%M:%S')
# 初始化趋势文件
if [ ! -f "$TREND_FILE" ]; then
echo "timestamp,mount_point,total,used,free,usage%" > "$TREND_FILE"
fi
# 收集每个挂载点的数据
df -iP | tail -n+2 | while read -r line; do
filesystem=$(echo "$line" | awk '{print $1}')
[[ "$filesystem" =~ ^(tmpfs|devtmpfs|overlay)$ ]] && continue
mount_point=$(echo "$line" | awk '{print $6}')
total=$(echo "$line" | awk '{print $2}')
used=$(echo "$line" | awk '{print $3}')
free=$(echo "$line" | awk '{print $4}')
usage=$(echo "$line" | awk '{print $5}' | sed 's/%//')
echo "$timestamp,$mount_point,$total,$used,$free,$usage" >> "$TREND_FILE"
done
}
# 生成报告
generate_report() {
echo "=== Inode Usage Report - $(date) ==="
echo ""
echo "Current Status:"
df -i | grep -v tmpfs | grep -v devtmpfs
echo ""
# 显示趋势(最近24小时)
echo "Last 24 hours trend (hourly):"
awk -F',' 'NR>1{print $1,$2,$6}' "$TREND_FILE" | sort -u | tail -24
}
# 清理旧数据(保留30天)
cleanup_old_data() {
find "$MONITOR_DIR" -name "*.log" -mtime +30 -delete
}
# 主函数
main() {
collect_inode_data
generate_report
cleanup_old_data
}
main
使用crontab设置定时监控
# 编辑crontab crontab -e # 添加以下行(每5分钟检查一次) */5 * * * * /path/to/inode_monitor.sh # 或者每小时检查并记录 0 * * * * /path/to/inode_monitor.sh --record # 每天发送报告 0 8 * * * /path/to/inode_monitor.sh --report | mail -s "Daily Inode Report" admin@example.com
单行快速检查命令
# 快速查看inode使用率
df -i | awk '{if(NR>1 && $5+0 > 80) print $1, $5, $6}'
# 实时监控(每5秒刷新)
watch -n 5 'df -i | grep -v tmpfs'
# 查找使用inode最多的目录
find / -xdev -type d | while read dir; do echo "$(find "$dir" -maxdepth 1 -type f | wc -l) $dir"; done | sort -rn | head -10
使用建议
- 设置合适的阈值:根据系统配置调整告警阈值(通常75-90%)
- 关注特定目录:如邮件队列(
/var/spool/mqueue)、缓存目录等 - 定期清理:对于inode紧张的系统,定期清理临时文件
- 日志轮转:确保监控日志不会耗尽inode
这些脚本可以直接使用,根据实际需求调整参数即可。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播