Files
proxmox/scripts/validation/verify-storage-config.sh

120 lines
4.4 KiB
Bash
Executable File

#!/usr/bin/env bash
# Verify Storage Configuration
# Checks if storage is configured for optimal deployment performance
set -euo pipefail
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
PROJECT_ROOT="$(cd "$SCRIPT_DIR/../.." && pwd)"
source "$PROJECT_ROOT/lib/common.sh" 2>/dev/null || {
log_info() { echo "[INFO] $1"; }
log_success() { echo "[✓] $1"; }
log_error() { echo "[ERROR] $1"; }
log_warn() { echo "[WARN] $1"; }
}
# Load configuration
load_config "$PROJECT_ROOT/config/proxmox.conf" 2>/dev/null || true
log_info "========================================="
log_info "Storage Configuration Verification"
log_info "========================================="
log_info ""
# Check if running on Proxmox host
if ! command_exists pvesm; then
log_error "pvesm command not found. This script must be run on Proxmox host."
exit 1
fi
# Get configured storage
CONFIGURED_STORAGE="${PROXMOX_STORAGE:-local-lvm}"
log_info "Configured storage: $CONFIGURED_STORAGE"
# List available storage
log_info ""
log_info "=== Available Storage ==="
pvesm status 2>/dev/null || {
log_error "Failed to list storage. Are you running as root?"
exit 1
}
log_info ""
log_info "=== Storage Details ==="
# Check if configured storage exists
if pvesm status 2>/dev/null | grep -q "^$CONFIGURED_STORAGE"; then
log_success "Configured storage '$CONFIGURED_STORAGE' exists"
# Get storage details
STORAGE_TYPE=$(pvesm status 2>/dev/null | grep "^$CONFIGURED_STORAGE" | awk '{print $2}')
STORAGE_STATUS=$(pvesm status 2>/dev/null | grep "^$CONFIGURED_STORAGE" | awk '{print $3}')
STORAGE_TOTAL=$(pvesm status 2>/dev/null | grep "^$CONFIGURED_STORAGE" | awk '{print $4}')
STORAGE_USED=$(pvesm status 2>/dev/null | grep "^$CONFIGURED_STORAGE" | awk '{print $5}')
STORAGE_AVAIL=$(pvesm status 2>/dev/null | grep "^$CONFIGURED_STORAGE" | awk '{print $6}')
log_info " Type: $STORAGE_TYPE"
log_info " Status: $STORAGE_STATUS"
log_info " Total: $STORAGE_TOTAL"
log_info " Used: $STORAGE_USED"
log_info " Available: $STORAGE_AVAIL"
# Check storage type
log_info ""
log_info "=== Storage Type Analysis ==="
if [[ "$STORAGE_TYPE" == "lvm" ]] || [[ "$STORAGE_TYPE" == "lvmthin" ]] || [[ "$STORAGE_TYPE" == "zfspool" ]] || [[ "$STORAGE_TYPE" == "dir" ]]; then
if echo "$CONFIGURED_STORAGE" | grep -q "local"; then
log_success "Storage is local (recommended for deployment performance)"
log_info " Local storage provides:"
log_info " • Faster container creation (15-30 min saved)"
log_info " • Faster OS template installation"
log_info " • Lower latency for I/O operations"
else
log_warn "Storage appears to be network-based"
log_info " Network storage considerations:"
log_info " • Slower container creation"
log_info " • Higher latency"
log_info " • May benefit from caching"
log_info ""
log_info " Recommendation: Use local storage if possible for deployment"
fi
else
log_warn "Storage type '$STORAGE_TYPE' detected"
log_info " Verify this is optimal for your deployment needs"
fi
# Check available space (estimate requirement: ~100GB per container, 67 containers = ~6.7TB)
log_info ""
log_info "=== Storage Capacity Check ==="
ESTIMATED_NEED="6.7T" # Rough estimate for 67 containers
log_info "Estimated storage needed: ~$ESTIMATED_NEED (for 67 containers)"
log_info "Available storage: $STORAGE_AVAIL"
# Note: Actual space check would require parsing storage sizes
log_info " Verify sufficient space is available for deployment"
else
log_error "Configured storage '$CONFIGURED_STORAGE' not found"
log_info ""
log_info "Available storage options:"
pvesm status 2>/dev/null | awk '{print " - " $1 " (" $2 ")"}'
log_info ""
log_info "To fix: Update PROXMOX_STORAGE in config/proxmox.conf"
exit 1
fi
log_info ""
log_info "=== Storage Performance Recommendations ==="
log_info ""
log_info "For optimal deployment performance:"
log_info " ✓ Use local storage (local-lvm, local, local-zfs)"
log_info " ✓ Ensure sufficient available space"
log_info " ✓ Monitor storage I/O during deployment"
log_info " ✓ Consider SSD-based storage for faster operations"
log_info ""
log_success "Storage configuration verification complete"