#!/bin/bash # Migrate VMIDs 100-130 and 7800-7811 using backup/restore method # This handles storage differences between nodes set -euo pipefail SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" source "$SCRIPT_DIR/load-physical-inventory.sh" 2>/dev/null || true RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' BLUE='\033[0;34m' CYAN='\033[0;36m' NC='\033[0m' log_info() { echo -e "${BLUE}[INFO]${NC} $1"; } log_success() { echo -e "${GREEN}[✓]${NC} $1"; } log_warn() { echo -e "${YELLOW}[⚠]${NC} $1"; } log_error() { echo -e "${RED}[✗]${NC} $1"; } log_section() { echo -e "\n${CYAN}=== $1 ===${NC}\n"; } SOURCE_NODE="r630-02" TARGET_NODE="r630-01" TARGET_STORAGE="thin1" BACKUP_STORAGE="local" # VMs to migrate VMIDS_100_130=(100 101 102 103 104 105 130) VMIDS_7800_7811=(7800 7801 7802 7810 7811) ALL_VMIDS=("${VMIDS_100_130[@]}" "${VMIDS_7800_7811[@]}") log_section "VM Migration to r630-01 (Backup/Restore Method)" log_info "Source Node: $SOURCE_NODE" log_info "Target Node: $TARGET_NODE" log_info "Target Storage: $TARGET_STORAGE" log_info "VMs to migrate: ${#ALL_VMIDS[@]} containers" echo "" log_warn "This will migrate the following VMs using backup/restore:" echo " VMIDs 100-130: ${VMIDS_100_130[*]}" echo " VMIDs 7800-7811: ${VMIDS_7800_7811[*]}" echo "" read -p "Continue with migration? (yes/no): " confirm if [[ "$confirm" != "yes" ]]; then log_info "Migration cancelled." exit 0 fi log_section "Starting Migration" FAILED=() SUCCESS=() for vmid in "${ALL_VMIDS[@]}"; do log_info "Migrating VMID $vmid..." # Check if VM exists if ! sshpass -p "password" ssh -o StrictHostKeyChecking=no root@192.168.11.12 \ "pct list 2>/dev/null | grep -q \"^$vmid\"" 2>/dev/null; then log_warn "VMID $vmid not found on source, skipping" continue fi # Step 1: Create backup on source node log_info " Creating backup..." BACKUP_RESULT=$(sshpass -p "password" ssh -o StrictHostKeyChecking=no root@192.168.11.12 \ "vzdump $vmid --storage $BACKUP_STORAGE --compress gzip --mode stop 2>&1") if [ $? -ne 0 ]; then log_error " Backup failed for VMID $vmid" FAILED+=($vmid) continue fi # Get backup filename BACKUP_FILE=$(echo "$BACKUP_RESULT" | grep -o "vzdump-lxc-$vmid-[0-9]*.tar.gz" | tail -1) if [ -z "$BACKUP_FILE" ]; then log_error " Could not determine backup filename for VMID $vmid" FAILED+=($vmid) continue fi log_info " Backup created: $BACKUP_FILE" # Step 2: Restore on target node log_info " Restoring to $TARGET_NODE..." RESTORE_RESULT=$(sshpass -p "password" ssh -o StrictHostKeyChecking=no root@192.168.11.12 \ "pct restore $vmid /var/lib/vz/dump/$BACKUP_FILE --storage $TARGET_STORAGE --target $TARGET_NODE 2>&1") if [ $? -eq 0 ]; then log_success " VMID $vmid migrated successfully" SUCCESS+=($vmid) # Step 3: Delete from source (optional) log_info " Removing from source node..." sshpass -p "password" ssh -o StrictHostKeyChecking=no root@192.168.11.12 \ "pct destroy $vmid 2>&1" || true else log_error " Restore failed for VMID $vmid: $RESTORE_RESULT" FAILED+=($vmid) fi echo "" done log_section "Migration Summary" log_info "Successful migrations: ${#SUCCESS[@]}" if [ ${#SUCCESS[@]} -gt 0 ]; then echo " VMIDs: ${SUCCESS[*]}" fi if [ ${#FAILED[@]} -gt 0 ]; then log_warn "Failed migrations: ${#FAILED[@]}" echo " VMIDs: ${FAILED[*]}" fi log_section "Verification" log_info "Checking VMs on $TARGET_NODE..." sshpass -p "password" ssh -o StrictHostKeyChecking=no root@192.168.11.11 \ "pct list 2>/dev/null | grep -E '$(IFS='|'; echo "${ALL_VMIDS[*]}")'" 2>/dev/null || true log_section "Migration Complete" if [ ${#FAILED[@]} -eq 0 ]; then log_success "All VMs migrated successfully!" else log_warn "Some migrations failed. Please check the errors above." fi