如何确定 VirtualBox 虚拟机已完成快照恢复

如何确定 VirtualBox 虚拟机已完成快照恢复

我有一个使用 VirtualBox 的 ubuntu 主机和一个 Windows 10 客户机。我编写了一个 Bash 脚本来控制我的虚拟机。我想关闭我的虚拟机并恢复快照,然后重新启动它。但这里有一个问题。当我像这样运行代码时:

VBoxManage snapshot $vmid restore $snapshotname
VBoxManage startvm $vmid

第二个命令运行后,会出现有关 vm 会话被锁定的错误。

是否有任何代码可以等到虚拟机的快照恢复完成?

答案1

简单的解决方案是在脚本中添加足够长的等待时间以完成恢复。

更复杂的解决方案是使用 VirtualBox 主 API - IConsole 接口参考 在一些受支持的编程语言中。

以下 C# 示例来自帖子 如何使用 virtualbox api 恢复快照

VirtualBox.VirtualBox virtualBox = new VirtualBox.VirtualBox();
IMachine vmMachine = virtualBox.FindMachine("Windows 8");
Session session = new Session();
vmMachine.LockMachine(session, LockType.LockType_Shared);
IConsole console = session.Console;

// Restore snapshot
ISnapshot snapShot = vmMachine.FindSnapshot("Snapshot 1");

IProgress snapShotProgress = console.RestoreSnapshot(snapShot);
snapShotProgress.WaitForCompletion(300000);

// unlock before launch VMProcess
session.UnlockMachine();

IProgress launchVmProgess = vmMachine.LaunchVMProcess(session, "gui", "None");

launchVmProgess.WaitForCompletion(300000);

相关内容