Some checks failed
Deploy to Phoenix / deploy (push) Has been cancelled
Co-authored-by: Cursor <cursoragent@cursor.com>
50 lines
1.7 KiB
Bash
Executable File
50 lines
1.7 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
# Run fstrim in all running LXC containers on Proxmox hosts (reclaim thin pool space).
|
|
# Usage: ./scripts/maintenance/fstrim-all-running-ct.sh [--dry-run]
|
|
# Requires: SSH key-based access to ml110, r630-01, r630-02.
|
|
# See: docs/04-configuration/STORAGE_GROWTH_AND_HEALTH.md
|
|
|
|
set -euo pipefail
|
|
|
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
PROJECT_ROOT="$(cd "$SCRIPT_DIR/../.." && pwd)"
|
|
[[ -f "${PROJECT_ROOT}/config/ip-addresses.conf" ]] && source "${PROJECT_ROOT}/config/ip-addresses.conf" 2>/dev/null || true
|
|
|
|
ML110="${PROXMOX_HOST_ML110:-192.168.11.10}"
|
|
R630_01="${PROXMOX_HOST_R630_01:-192.168.11.11}"
|
|
R630_02="${PROXMOX_HOST_R630_02:-192.168.11.12}"
|
|
|
|
DRY_RUN=0
|
|
[[ "${1:-}" == "--dry-run" ]] && DRY_RUN=1
|
|
|
|
run_ssh() { ssh -o ConnectTimeout=10 -o StrictHostKeyChecking=no root@"$1" "$2" 2>/dev/null || true; }
|
|
|
|
fstrim_host() {
|
|
local host_ip="$1" host_name="$2"
|
|
local vmids
|
|
vmids=$(run_ssh "$host_ip" "pct list 2>/dev/null | awk 'NR>1 && \$2==\"running\" {print \$1}'" || true)
|
|
if [[ -z "$vmids" ]]; then
|
|
echo " $host_name ($host_ip): no running containers or unreachable"
|
|
return 0
|
|
fi
|
|
for vmid in $vmids; do
|
|
if [[ $DRY_RUN -eq 1 ]]; then
|
|
echo " [dry-run] $host_name VMID $vmid: would run fstrim -v /"
|
|
else
|
|
out=$(run_ssh "$host_ip" "pct exec $vmid -- fstrim -v / 2>&1" || true)
|
|
echo " $host_name VMID $vmid: ${out:-done}"
|
|
fi
|
|
done
|
|
}
|
|
|
|
echo "=== fstrim all running CTs (reclaim thin pool space) ==="
|
|
[[ $DRY_RUN -eq 1 ]] && echo "(dry-run: no changes)"
|
|
echo ""
|
|
|
|
fstrim_host "$ML110" "ml110"
|
|
fstrim_host "$R630_01" "r630-01"
|
|
fstrim_host "$R630_02" "r630-02"
|
|
|
|
echo ""
|
|
echo "Done. Schedule weekly via cron or run with daily-weekly-checks weekly."
|