Thursday, January 8, 2009

VBox的命令行控制

现在有个问题:
* VM在启动时系统有交互, 需要人工干涉(如cd-rom,keyboard的变化等等)
* 在CLI和GUI之间方便切换(命令行方便ssh管理, GUI方便管理员排错误)

下面的做法不行:
1. GUI程序下, 启动VM, 等一切正常后, 使用VBoxManage controlvm去pause暂停VM
2. 使用CLI:VBoxVRDP去继续VM,结果报错!

[!] FAILED calling vrdpServer->SetPort(vrdpPort) at line 847!
[!] Primary RC = E_ACCESSDENIED (0x80070005) - Access denied
[!] Full error info present: true , basic error info present: true
[!] Result Code = E_ACCESSDENIED (0x80070005) - Access denied
[!] Text = The machine is not mutable (state is 2)
[!] Component = Machine, Interface: IMachine, {1e509de4-d96c-4f44-8b94-860194f710ac}
[!] Callee = IVRDPServer, {f4584ae7-6bce-474b-83d6-17d235e6aa89}

主要是如下错误:
The machine is not mutable

就是不让修改VM的旧运行参数!

发现有一个VBoxManage modifyvm的命令.但是savestat后还是不能modify参数.

是没有运行时修改的? 试了一下真的可以修改参数:

#jessinio@ubuntu-test-1:~$ sudo VBoxManage modifyvm fedora9 -vrdpport 8765
VirtualBox Command Line Management Interface Version 2.0.2
(C) 2005-2008 Sun Microsystems, Inc.
All rights reserved.

修改后, 现在要处理的就是是否可以在没有指定port的情况下, VBox会使用这个port

首先, GUI方式启动VM, 查看端口情况:没有发现自已定义的8765!!-_-!!!

savestat后, 使用VBoxVRDP还是不能启动!!

无奈下, 从CLI下启动VM:
#jessinio@ubuntu-test-1:~$ sudo VBoxVRDP -s fedora9
VirtualBox Headless Interface 2.0.2
(C) 2008 Sun Microsystems, Inc.
All rights reserved

Listening on port 8765

看可以出, 使用了8765端口!

命令行将之pause:
#jessinio@ubuntu-test-1:~$ sudo VBoxManage controlvm fedora9 savestate
VirtualBox Command Line Management Interface Version 2.0.2
(C) 2005-2008 Sun Microsystems, Inc.
All rights reserved.

0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100%

很高兴, 在GUI中看到的VM是处于saved和可以被start的!! ^_^

从GUI启动pause的VM很正常,可以ssh到VM上!!

然后进行只关键的一步: 从GUI上pause VM和从CLI中恢复VM

GUI去pause是很简单的,也很正常!现在的问题是怎么从CLI中恢复VM!从上面的历史命令行中可以看出:VBoxVRDP在没有指定port的时候会使用VM的vrdpport参数(可以由VBoxManage modifyvm命令去修改), 那么也就是说: 启动被pause的VM不应该使用--port参数!!

一切OK!事实表现从的和自己猜想的一样!! good luck!


工作中还要求这种做法:CLI -> pause -> GUI

No comments:

Post a Comment

Note: Only a member of this blog may post a comment.