#!/usr/bin/env bash set -o errexit set -o nounset set -o pipefail 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"