diff --git a/restore.sh b/restore.sh index 6139663..7916928 100644 --- a/restore.sh +++ b/restore.sh @@ -298,11 +298,22 @@ print(cfg.get('path', '')) if [[ -n "$STORAGE_BASE" ]]; then if [[ "$BACKUP_TYPE" == "ct" ]]; then - # CT-Images liegen unter private/ oder rootdir/ - if [[ -d "${STORAGE_BASE}/private/${VM_ID_RESTORED}" ]]; then - IMAGE_DIR="${STORAGE_BASE}/private/${VM_ID_RESTORED}" - else - IMAGE_DIR="${STORAGE_BASE}/rootdir/${VM_ID_RESTORED}" + # CT auf dir-Storage: alle möglichen Pfade durchsuchen + # Reihenfolge: images/ → private/ → rootdir/ (je nach Storage-Konfiguration) + IMAGE_DIR="" + for candidate in "${STORAGE_BASE}/images/${VM_ID_RESTORED}" "${STORAGE_BASE}/private/${VM_ID_RESTORED}" "${STORAGE_BASE}/rootdir/${VM_ID_RESTORED}"; do + if [[ -d "$candidate" ]] && [[ -n "$(ls -A "$candidate" 2>/dev/null)" ]]; then + IMAGE_DIR="$candidate" + echo " CT-Image gefunden unter: $IMAGE_DIR" + break + else + echo " Nicht gefunden: $candidate" + fi + done + # Falls kein Verzeichnis gefunden → find als letzter Versuch + if [[ -z "$IMAGE_DIR" ]]; then + IMAGE_DIR=$(find "$STORAGE_BASE" -maxdepth 2 -type d -name "$VM_ID_RESTORED" 2>/dev/null | head -1 || echo "") + [[ -n "$IMAGE_DIR" ]] && echo " CT-Image via find: $IMAGE_DIR" fi else IMAGE_DIR="${STORAGE_BASE}/images/${VM_ID_RESTORED}" @@ -316,6 +327,16 @@ else fi echo " WARNUNG: Storage-Pfad nicht ermittelt, nutze Fallback: $IMAGE_DIR" fi + +# Letzter Fallback falls IMAGE_DIR noch leer +if [[ -z "$IMAGE_DIR" ]]; then + if [[ "$BACKUP_TYPE" == "ct" ]]; then + IMAGE_DIR="/var/lib/vz/private/${VM_ID_RESTORED}" + else + IMAGE_DIR="/var/lib/vz/images/${VM_ID_RESTORED}" + fi + echo " WARNUNG: Kein Image-Verzeichnis gefunden, nutze Fallback: $IMAGE_DIR" +fi echo " Image-Dir: $IMAGE_DIR" ACTUAL_DISK_BYTES=$(du -sb "$IMAGE_DIR" 2>/dev/null | awk '{print $1}' || echo "0")