Shell脚本如何恢复虚拟机快照

wen 实用脚本 1

本文目录导读:

Shell脚本如何恢复虚拟机快照

  1. VMware (使用 vmrun 命令)
  2. VirtualBox (使用 VBoxManage 命令)
  3. KVM/QEMU (使用 virsh 命令)
  4. 综合脚本示例(支持多个平台)
  5. 批量恢复脚本
  6. 错误处理和日志记录
  7. 使用注意事项
  8. 简化使用方法

在Shell脚本中恢复虚拟机快照,主要取决于你使用的虚拟化平台,以下是几种常见平台的脚本方法:

VMware (使用 vmrun 命令)

#!/bin/bash
# 虚拟机路径
VM_PATH="/path/to/your/vm.vmx"
# 快照名称
SNAPSHOT_NAME="my_snapshot"
# 恢复到指定快照
vmrun revertToSnapshot "$VM_PATH" "$SNAPSHOT_NAME"
# 恢复并启动虚拟机
vmrun revertToSnapshot "$VM_PATH" "$SNAPSHOT_NAME" && vmrun start "$VM_PATH" nogui
# 查看可用快照列表
vmrun listSnapshots "$VM_PATH"

VirtualBox (使用 VBoxManage 命令)

#!/bin/bash
# 虚拟机名称或UUID
VM_NAME="my_vm"
# 快照名称
SNAPSHOT_NAME="backup_snapshot"
# 恢复到指定快照
VBoxManage snapshot "$VM_NAME" restore "$SNAPSHOT_NAME"
# 恢复到当前快照
VBoxManage snapshot "$VM_NAME" restorecurrent
# 查看快照列表
VBoxManage snapshot "$VM_NAME" list

KVM/QEMU (使用 virsh 命令)

#!/bin/bash
# 虚拟机名称
VM_NAME="my_vm"
# 快照名称
SNAPSHOT_NAME="clean_state"
# 恢复虚拟机快照
virsh snapshot-revert "$VM_NAME" "$SNAPSHOT_NAME"
# 查看可用快照
virsh snapshot-list "$VM_NAME"
# 恢复并启动(如果虚拟机已关机)
virsh snapshot-revert "$VM_NAME" "$SNAPSHOT_NAME" --running
# 强制恢复(即使有冲突)
virsh snapshot-revert "$VM_NAME" "$SNAPSHOT_NAME" --force

综合脚本示例(支持多个平台)

#!/bin/bash
# 配置
VM_NAME="test_vm"
SNAPSHOT_NAME="weekly_backup"
PLATFORM="vmware"  # 可选: vmware, virtualbox, kvm
revert_snapshot() {
    case "$PLATFORM" in
        vmware)
            vmrun revertToSnapshot "/path/to/$VM_NAME.vmx" "$SNAPSHOT_NAME"
            ;;
        virtualbox)
            VBoxManage snapshot "$VM_NAME" restore "$SNAPSHOT_NAME"
            ;;
        kvm)
            virsh snapshot-revert "$VM_NAME" "$SNAPSHOT_NAME"
            ;;
        *)
            echo "未知平台: $PLATFORM"
            exit 1
            ;;
    esac
    if [ $? -eq 0 ]; then
        echo "快照恢复成功: $VM_NAME -> $SNAPSHOT_NAME"
    else
        echo "快照恢复失败"
        exit 1
    fi
}
# 执行恢复
revert_snapshot

批量恢复脚本

#!/bin/bash
# 定义虚拟机列表
VMS=("vm1" "vm2" "vm3")
SNAPSHOT_NAME="clean_state"
echo "开始批量恢复虚拟机快照..."
for vm in "${VMS[@]}"; do
    echo "正在恢复 $vm ..."
    virsh snapshot-revert "$vm" "$SNAPSHOT_NAME"
    if [ $? -eq 0 ]; then
        echo "$vm 恢复成功"
    else
        echo "警告: $vm 恢复失败"
    fi
done
echo "批量恢复完成"

错误处理和日志记录

#!/bin/bash
LOG_FILE="/var/log/vm_snapshot_revert.log"
VM_NAME="production_server"
SNAPSHOT_NAME="pre-update"
log_message() {
    echo "$(date '+%Y-%m-%d %H:%M:%S') - $1" | tee -a "$LOG_FILE"
}
revert_with_validation() {
    # 检查虚拟机是否存在
    if ! virsh dominfo "$VM_NAME" &>/dev/null; then
        log_message "错误: 虚拟机 $VM_NAME 不存在"
        exit 1
    fi
    # 检查快照是否存在
    if ! virsh snapshot-info "$VM_NAME" "$SNAPSHOT_NAME" &>/dev/null; then
        log_message "错误: 快照 $SNAPSHOT_NAME 不存在"
        exit 1
    fi
    log_message "开始恢复快照: $VM_NAME -> $SNAPSHOT_NAME"
    # 执行恢复
    virsh snapshot-revert "$VM_NAME" "$SNAPSHOT_NAME"
    RESULT=$?
    if [ $RESULT -eq 0 ]; then
        log_message "快照恢复成功"
    else
        log_message "快照恢复失败 (退出码: $RESULT)"
        exit 1
    fi
}
# 执行
revert_with_validation

使用注意事项

  1. 权限问题:大多数命令需要root权限或sudo
  2. 虚拟机状态:某些平台要求虚拟机在特定状态下才能恢复快照
  3. 数据备份:恢复前确保重要数据已备份
  4. 磁盘空间:确保有足够的空间进行快照操作

简化使用方法

# 保存脚本为 revert_snapshot.sh
chmod +x revert_snapshot.sh
./revert_snapshot.sh
# 或者直接一行命令
virsh snapshot-revert "my_vm" "clean_state"

根据你的实际虚拟化平台选择相应的命令即可。

抱歉,评论功能暂时关闭!