fix inode with os-abstracting df

This commit is contained in:
Jonas Maier 2025-12-04 16:22:09 +01:00
parent 90b26dc5e0
commit 8066f31409
Signed by: jonas
SSH Key Fingerprint: SHA256:yRTjlpb3jSdw2EnZLAWyB4AghBPI8tu42eFXiICyb1U
4 changed files with 171 additions and 22 deletions

View File

@ -23,6 +23,8 @@ run_module() {
check
}
. ./util.sh
ls modules | while IFS= read -r module; do
[ -f "modules/$module" ] || continue
( run_module "modules/$module" )

View File

@ -3,19 +3,24 @@
THRESHOLD=90
name='Filesystem Usage'
available=1
recommend=1
check() {
df -P | while IFS= read -r line; do
case "$line" in
Filesystem*|"") continue ;;
/dev/loop*) continue ;;
esac
if df_has_inodes / >/dev/null 2>&1; then
available=1
else
available=0
fi
fs=$(printf '%s\n' "$line" | awk '{print $1}')
usep=$(printf '%s\n' "$line" | awk '{print $5}' | tr -d '%')
mountp=$(printf '%s\n' "$line" | awk '{print $6}')
check() {
mountpoints | while IFS= read -r mountp; do
fs=$(df_fs "$mountp")
usep=$(df_blocks_capacity "$mountp" | tr -d '%')
case "$fs" in
tmpfs|devtmpfs|overlay|shm|udev|proc|sysfs|cgroup*|devfs|/dev/loop*)
continue
;;
esac
if [ "$usep" -ge "$THRESHOLD" ] 2>/dev/null; then
warn "$mountp" "$usep" "$fs mounted at $mountp is $usep% full"

View File

@ -3,23 +3,26 @@
THRESHOLD=90
name='Filesystem Inode Usage'
available=1
recommend=1
if df_has_inodes / >/dev/null 2>&1; then
available=1
else
available=0
fi
check() {
df -i -P | while IFS= read -r line; do
case "$line" in
Filesystem*|"") continue ;;
/dev/loop*) continue ;;
mountpoints | while IFS= read -r mountp; do
fs=$(df_fs "$mountp")
usep=$(df_inodes_capacity "$mountp" | tr -d '%')
case "$fs" in
tmpfs|devtmpfs|overlay|shm|udev|proc|sysfs|cgroup*|devfs|/dev/loop*)
continue
;;
esac
fs=$(printf '%s\n' "$line" | awk '{print $1}')
use_count=$(printf '%s\n' "$line" | awk '{print $3}')
usep=$(printf '%s\n' "$line" | awk '{print $5}' | tr -d '%')
mountp=$(printf '%s\n' "$line" | awk '{print $6}')
if [ "$use_count" -eq 0 ] 2>/dev/null; then
# likely a file system with no inodes, skip it
if [ "$(df_has_inodes "$mountp")" -ne 1 ]; then
continue
fi

139
util.sh Normal file
View File

@ -0,0 +1,139 @@
#! /bin/sh
# posix compatible utility functions
mountpoints() {
case "$(uname -s)" in
Linux|FreeBSD)
df -P | awk 'NR>1 {print $6}'
;;
*)
return 1
;;
esac
}
df_fs() {
case "$(uname -s)" in
Linux|FreeBSD)
df -P "$1" | awk 'NR>1 {print $1}'
;;
*)
return 1
;;
esac
}
# returns the size in 1K blocks
df_blocks() {
case "$(uname -s)" in
Linux|FreeBSD)
df -Pk "$1" | awk 'NR>1 {print $2}'
;;
*)
return 1
;;
esac
}
df_blocks_used() {
case "$(uname -s)" in
Linux|FreeBSD)
df -Pk "$1" | awk 'NR>1 {print $3}'
;;
*)
return 1
;;
esac
}
df_blocks_avail() {
case "$(uname -s)" in
Linux|FreeBSD)
df -Pk "$1" | awk 'NR>1 {print $4}'
;;
*)
return 1
;;
esac
}
df_blocks_capacity() {
case "$(uname -s)" in
Linux|FreeBSD)
df -Pk "$1" | awk 'NR>1 {print $5}'
;;
*)
return 1
;;
esac
}
df_has_inodes() {
case "$(uname -s)" in
Linux)
df -i "$1" | awk 'NR>1 { if ($5 == "-") print 0; else print 1 }'
;;
FreeBSD)
df -i "$1" | awk 'NR>1 { if ($8 == "-") print 0; else print 1 }'
;;
*)
return 1
;;
esac
}
df_inodes() {
case "$(uname -s)" in
Linux)
df -i "$1" | awk 'NR>1 { print $2 }'
;;
FreeBSD)
df -i "$1" | awk 'NR>1 { print $6+$7 }'
;;
*)
return 1
;;
esac
}
df_inodes_used() {
case "$(uname -s)" in
Linux)
df -i "$1" | awk 'NR>1 { print $3 }'
;;
FreeBSD)
df -i "$1" | awk 'NR>1 { print $6 }'
;;
*)
return 1
;;
esac
}
df_inodes_free() {
case "$(uname -s)" in
Linux)
df -i "$1" | awk 'NR>1 { print $4 }'
;;
FreeBSD)
df -i "$1" | awk 'NR>1 { print $7 }'
;;
*)
return 1
;;
esac
}
df_inodes_capacity() {
case "$(uname -s)" in
Linux)
df -i "$1" | awk 'NR>1 { print $5 }'
;;
FreeBSD)
df -i "$1" | awk 'NR>1 { print $8 }'
;;
*)
return 1
;;
esac
}