我有一个使用 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);