如何使用VirtualBox API还原快照



我正在尝试通过SDK提供的Vboxapi来管理一些虚拟机。到目前为止,我设法启动了VM,还原快照,但是我无法还原快照并查看结果...

def launch_vm(target):
    manager = VirtualBoxManager(None, None)
    vbox = manager.vbox
    session = manager.mgr.getSessionObject(vbox)
    pinfo("Reverting to snapshot '%s'" % target['vm_snapshot_name'])
    try:
        vm = vbox.findMachine(target['vm_name'])
        snap = vm.findSnapshot(target['vm_snapshot_name']);
        progStart = vm.launchVMProcess(session, "gui", "");
        progStart.waitForCompletion(5000);
        vm.lockMachine(session,1)
        progress = session.console.restoreSnapshot(snap)
        progress.waitForCompletion(5000);
        session.unlockMachine()
    except Exception, e:
        perror(e)

我收到此错误消息:

[错误] 0x80BBBB0007(给定的会话很忙)

我可能不称呼好功能...谢谢!

我使用C#中的VirtualBox API恢复了快照。

查看您的代码,您正在尝试在启动VMProcess后恢复快照。文档说"机器不得运行,否则操作将失败"。https://www.virtualbox.org/sdkref/interface_i_console.html

也将自动锁定您通过的会话,这可能是您让会话很忙的原因。下面的代码是我如何运行部分的方式,希望它能有所帮助。

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);

首先,启动vmprocess将锁定机器,因此您无需再次锁定。

第二,您的在线快照,现场还是离线?

您必须关心的另一件事是,waitforcompletion()函数不等待操作系统启动,它只是启动操作系统,这被认为已完成,因此您可能需要自己繁忙循环才能等待用于OS加载。

相关内容

  • 没有找到相关文章

最新更新