2026-05-05 21:44:08 +00:00
|
|
|
#!/usr/bin/env bash
|
2026-05-08 21:18:22 +00:00
|
|
|
set -euo pipefail
|
2026-05-05 21:44:08 +00:00
|
|
|
|
|
|
|
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
|
|
|
# shellcheck source=00_env.sh
|
|
|
|
|
. "$SCRIPT_DIR/00_env.sh"
|
|
|
|
|
|
|
|
|
|
exit_code=0
|
|
|
|
|
|
|
|
|
|
section "Disk Space Overview"
|
|
|
|
|
if require_cmd df; then
|
|
|
|
|
df -h 2>&1 | tee -a "$LOG_FILE"
|
|
|
|
|
else
|
|
|
|
|
critical "df is required for disk overview"
|
|
|
|
|
exit 1
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
section "Inode Overview"
|
|
|
|
|
df -i 2>&1 | tee -a "$LOG_FILE" || warning "Unable to collect inode usage"
|
|
|
|
|
|
|
|
|
|
section "Filesystems Sorted By Usage"
|
|
|
|
|
df -P -h | awk 'NR == 1 { next } { print $5, $6, $1, $2, $3, $4 }' | sort -rn | while read -r used mount fs size used_space avail; do
|
|
|
|
|
percent="$(usage_percent_number "$used")"
|
|
|
|
|
level="$(status_for_percent "$percent")"
|
|
|
|
|
printf '%s: %s used on %s (%s, size=%s used=%s avail=%s)\n' "$level" "$used" "$mount" "$fs" "$size" "$used_space" "$avail" | tee -a "$LOG_FILE"
|
|
|
|
|
done
|
|
|
|
|
|
|
|
|
|
section "Threshold Summary"
|
|
|
|
|
while read -r fs size used avail pct mount; do
|
|
|
|
|
percent="$(usage_percent_number "$pct")"
|
|
|
|
|
level="$(status_for_percent "$percent")"
|
|
|
|
|
|
|
|
|
|
if (( percent >= EMERGENCY_THRESHOLD )); then
|
|
|
|
|
critical "$mount is ${pct} full on $fs (size=$size used=$used avail=$avail)"
|
|
|
|
|
exit_code=1
|
|
|
|
|
elif (( percent >= CRIT_THRESHOLD )); then
|
|
|
|
|
warning "$mount is ${pct} full on $fs (size=$size used=$used avail=$avail)"
|
|
|
|
|
elif (( percent >= WARN_THRESHOLD )); then
|
|
|
|
|
warning "$mount is ${pct} full on $fs (size=$size used=$used avail=$avail)"
|
|
|
|
|
else
|
|
|
|
|
ok "$mount is ${pct} full on $fs"
|
|
|
|
|
fi
|
|
|
|
|
done < <(df -P -h | awk 'NR > 1 { print $1, $2, $3, $4, $5, $6 }')
|
|
|
|
|
|
|
|
|
|
exit "$exit_code"
|