feat(lib): add require_disk_space helper and enforce pre-flight disk checks
- add `require_disk_space` function to lib/common.sh with dedup logic for shared filesystems - gate cloudpanel, coolify, pterodactyl installs behind a 2–3 GB disk check - gate uptime-kuma, proxmox update, harden, update-server, and server-benchmark behind 300–1024 MB disk checks - fail early with a clear error before apt installs or config writes can leave the system in a partial state
This commit is contained in:
@@ -171,6 +171,42 @@ require_debian_ubuntu() {
|
||||
fi
|
||||
}
|
||||
|
||||
# Verify enough free disk space before doing apt installs or writing config.
|
||||
# Fails early with a clear message so we don't get half-installed packages or
|
||||
# files truncated mid-write when the disk is full.
|
||||
#
|
||||
# Usage:
|
||||
# require_disk_space # 500MB on /var (apt cache + lists)
|
||||
# require_disk_space 1024 # 1024MB on /var
|
||||
# require_disk_space 1024 /var /opt # 1024MB on each listed path
|
||||
#
|
||||
# Duplicate filesystems (e.g. /var on the same fs as /) are checked once.
|
||||
require_disk_space() {
|
||||
local min_mb=${1:-500}
|
||||
shift 2>/dev/null || true
|
||||
local paths=("$@")
|
||||
[ ${#paths[@]} -eq 0 ] && paths=(/var)
|
||||
|
||||
local path avail fs seen=" " rc=0
|
||||
for path in "${paths[@]}"; do
|
||||
fs=$(df -P "$path" 2>/dev/null | awk 'NR==2 {print $1}')
|
||||
if [ -z "$fs" ]; then
|
||||
err "Cannot read disk usage for ${path}"
|
||||
rc=1
|
||||
continue
|
||||
fi
|
||||
[[ "$seen" == *" $fs "* ]] && continue
|
||||
seen="$seen$fs "
|
||||
|
||||
avail=$(df -Pm "$path" 2>/dev/null | awk 'NR==2 {print $4}')
|
||||
if [ "${avail:-0}" -lt "$min_mb" ]; then
|
||||
err "Not enough disk space on ${path} (${fs}): ${avail}MB free, ${min_mb}MB required."
|
||||
rc=1
|
||||
fi
|
||||
done
|
||||
return $rc
|
||||
}
|
||||
|
||||
# Re-exec the current script via sudo if not already root. Preserves env and
|
||||
# arguments. Call near the top of a sub-script:
|
||||
# require_root "$0" "$@"
|
||||
|
||||
Reference in New Issue
Block a user