Files
proxmox/scripts/maintenance/vmid5000-free-disk-and-logs.sh
defiQUG bea1903ac9
Some checks failed
Deploy to Phoenix / deploy (push) Has been cancelled
Sync all local changes: docs, config, scripts, submodule refs, verification evidence
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-21 15:46:06 -08:00

66 lines
2.5 KiB
Bash
Executable File

#!/usr/bin/env bash
# Free disk space in VMID 5000 (Explorer/Blockscout): journal, backups, logs, Docker prune.
# Logs are on a separate volume (/var/log-remote); this script frees space on ROOT.
#
# Usage: PROXMOX_HOST_R630_02=192.168.11.12 ./scripts/maintenance/vmid5000-free-disk-and-logs.sh
# or run on Proxmox host (192.168.11.12) with pct available.
#
# See: docs/04-configuration/VMID5000_STORAGE_AND_LOGS_RUNBOOK.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
VMID="${VMID_5000:-5000}"
HOST="${PROXMOX_HOST_R630_02:-192.168.11.12}"
if command -v pct &>/dev/null && pct list 2>/dev/null | grep -q "^$VMID "; then
EXEC_PREFIX="pct exec $VMID --"
run_in_ct() { $EXEC_PREFIX "$@"; }
else
echo "Not on Proxmox host with CT $VMID; using SSH to $HOST"
run_in_ct() { ssh -o ConnectTimeout=10 -o StrictHostKeyChecking=no root@"$HOST" "pct exec $VMID -- $*"; }
fi
echo "=============================================="
echo "VMID $VMID — free disk (root)"
echo "=============================================="
echo ""
echo "=== Before ==="
run_in_ct df -h /
echo ""
echo "=== Journal vacuum (keep 1d + max 100M) ==="
run_in_ct journalctl --vacuum-time=1d 2>/dev/null || true
run_in_ct journalctl --vacuum-size=100M 2>/dev/null || true
echo ""
echo "=== Old backups (keep last 2) ==="
run_in_ct "sh -c 'ls -t /var/www/html/index.html.backup.* 2>/dev/null | tail -n +3 | xargs -r rm -f'" 2>/dev/null || true
run_in_ct "sh -c 'ls -t /etc/nginx/sites-available/blockscout.backup.* 2>/dev/null | tail -n +3 | xargs -r rm -f'" 2>/dev/null || true
echo ""
echo "=== Syslog truncate + logrotate ==="
run_in_ct "sh -c ': > /var/log/syslog 2>/dev/null; logrotate -f /etc/logrotate.conf 2>/dev/null'" || true
echo ""
echo "=== Docker: truncate oversized container logs (>500M) ==="
run_in_ct find /var/lib/docker/containers -name '*-json.log' -size +500M -exec truncate -s 0 {} \; 2>/dev/null || true
echo ""
echo "=== Docker image/builder prune (no container/volume prune) ==="
run_in_ct docker image prune -af 2>/dev/null || true
run_in_ct docker builder prune -af 2>/dev/null || true
echo ""
echo "=== After ==="
run_in_ct df -h /
echo ""
run_in_ct du -sh /var/log /var/log-remote 2>/dev/null || true
echo ""
echo "=============================================="
echo "Done. Logs on separate volume: /var/log-remote"
echo "=============================================="