通过命令行控制 VirtualBox
通过主机操作系统的命令行使用 Oracle VM VirtualBox 的 VBoxManage 工具,您可控制 Oracle VM VirtualBox 设置、创建新 VM 并处理现有 VM。
命令行有时是用于与计算机通信的主要工具,有时甚至是唯一的工具。如今,GUI 工具发展迅猛,但很多操作系统依旧提供了命令行来帮助用户通过脚本和自动化方式,轻松与系统及系统组件交互。
Oracle VM VirtualBox 也不例外,这是一款可让您同时运行多个操作系统的跨平台虚拟化软件。它自带 GUI 工具 VirtualBox Manager,后者用于控制 Oracle VM VirtualBox 设置及其虚拟机 (VM)。另一方面,您可以使用 Oracle VM VirtualBox 的命令行界面 (CLI) VBoxManage。本文说明了如何通过主机操作系统的命令行使用 VBoxManage 控制 Oracle VM VirtualBox。
Oracle VM VirtualBox 界面高阶视图
Oracle VM VirtualBox 提供了以下工具,可在 Oracle VM VirtualBox 中控制虚拟化引擎设置、创建新 VM 以及处理现有 VM:
VirtualBox Manager,用于控制 Oracle VM VirtualBox 的 GUI
VBoxManage,Oracle VM VirtualBox 的 CLI
主 API,使用组件对象模型 (COM/XPCOM) 实施
Web 服务,为 Web 应用映射了几乎整个主 API
VirtualBox Manager 和 VBoxManage 在后台与主 API 交互,而客户端程序可直接使用主 API 来控制 Oracle VM VirtualBox。这些工具可同时使用,而且使用某一工具进行的更改在使用另一工具时立即可见。例如,使用 CLI 执行的更改会立即体现在 GUI 中,反之亦然。
通过图解法展示 Oracle VM VirtualBox 的架构,如图 1 所示:
图 1.与 Oracle VM VirtualBox 交互的接口
有些人可能会感到疑惑:“Oracle VM VirtualBox 存在编程接口是可以理解的,但有了方便的 GUI 替代工具之后,为什么还会有 CLI 工具?”答案是,只有 VBoxManage CLI 才能确保访问虚拟化引擎的所有功能,以及为 VM 提供一些高级和试验性配置设置。此外,在 Linux 和 Oracle Solaris 主机上,VirtualBox Manager GUI 依赖于 Qt 和 Simple DirectMedia Layer (SDL) 库,这意味着如果您的 Linux 或 Oracle Solaris 服务器未安装 X 窗口系统,您将无法使用 GUI。
与之相反,VBoxManage 无需在服务器上安装 X 窗口系统,这样在没有图形前端因而只能运行控制台应用的服务器上,VBoxManage 也可以提供控制 Oracle VM VirtualBox 的功能。使用 CLI 的另一个优点是,它允许使用脚本来自动完成 Oracle VM VirtualBox 操作,避免了重复的用户交互。
准备工作环境
在开始使用 Oracle VM VirtualBox 之前,您必须将其安装于主机操作系统(Oracle VM VirtualBox 的最新版本可在 Oracle VM VirtualBox 下载页面上找到)。它可以安装在以下任何操作系统上:Windows、Mac OS X、Oracle Solaris 和 Linux。有关支持的主机操作系统详细列表,请参阅 Oracle VM VirtualBox 用户手册中“支持的主机操作系统”部分。此外,在此页面上可找到有关支持的来宾操作系统的最新信息。请注意,在安装 Oracle VM VirtualBox 之前,您可能需要安装一些其他程序包。有关详细信息,请参阅 Oracle VM VirtualBox 用户手册。
VBoxManage 与 VirtualBox Manager
虽然在 GUI 工具中只需几次单击即可完成工作听起来非常简单,但 CLI 作为替代工具,可提供更简单的方式与您所在的系统交互。在使用 GUI 时,您可通过按钮和菜单隐式访问命令集,但通常不知道后台中采用的命令和参数。
在 CLI 中,您明确地使用命令,根据需要操作其参数。此外,GUI 工具通常无法提供对完整的可用命令集的访问,仅提供对最常用命令的访问。CLI 相比 GUI 的另一个优势是可脚本化,这一功能将一系列命令放在单个可执行文本文件中,以后可将该文件作为单个命令执行。这对于重复性操作尤为有用,例如为某个应用创建多个 VM。
GUI 的支持者可能会争辩说,GUI 与 CLI 相比更直观。要了解 GUI 的工作过程,通常无需查看文档,可通过查看 GUI 中提供的按钮来了解可能的操作。VirtualBox Manager 是用户友好型 GUI 的一个很好的示例。它向您显示已安装 VM(如有)的列表,并提供若干按钮用于创建新 VM 和处理现有 VM,如图 2 所示:
图 2.用于 Oracle VM VirtualBox 的 VirtualBox Manager GUI
当然,CLI 看起来并不那么易于使用。但是,学习可执行操作的方式相当简单。当您在主机操作系统的命令行中键入 VBoxManage 命令时,系统将显示可用选项和子命令的完整列表(参阅图 3)。
图 3.用于 Oracle VM VirtualBox 的 VBoxManage CLI
如您所见,您可查看使用 VBoxManage 的详细信息。您的工作是采用正确的 VBoxManage 命令、子命令和参数组合完成所需的任务。在本文的其余部分,我们将介绍如何使用 VBoxManage 命令在 Oracle VM VirtualBox 中完成一些非常有趣的任务。
观察现有虚拟机
如果您的 VM 已经在 Oracle VM VirtualBox 中注册(假设是在 GUI 的帮助下),使用 VBoxManage 时做的第一件事很有可能是查看这些 VM 的列表。这可以通过 VBoxManage list 命令后跟 vms 子命令来完成:
$ VBoxManage list vms
"Oracle Virtual Sysadmin Days" {e8744abc-96bb-4251-9dfe-b0cd059ff6bb}
"Oracle Developer Days" {c465cc52-dc11-4153-82d8-b5718182c117}
如果该命令未输出任何内容,表明您目前没有 VM 在 Oracle VM VirtualBox 中注册,或运行 VBoxManage 所用的用户身份不是创建这些 VM 的用户。如果是后面这种情况,您需要以正确的用户身份登录,然后重新发出命令。但是,如果您目前没有 VM,则第一步应该是创建 VM,如下一部分“创建 VM”中所述。
若要查看当前正在运行的 VM,您可以使用 VBoxManage list 的 runningvms 子命令:
$ VBoxManage list runningvms
"Oracle Developer Days" {c465cc52-dc11-4153-82d8-b5718182c117}
VBoxManage list 命令可与选项 -l 一起使用,指示 list 命令输出一个详细列表(为节省空间,以下内容有删减):
$ VBoxManage list -l runningvms
Name: Oracle Developer Days
Groups: /
Guest OS: Oracle
UUID: c465cc52-dc11-4153-82d8-b5718182c117
Config file: /root/VirtualBox VMs/Oracle Developer Days/Oracle Developer Days.vbox
Snapshot folder: /root/VirtualBox VMs/Oracle Developer Days/Snapshots
Log folder: /root/VirtualBox VMs/Oracle Developer Days/Logs
Hardware UUID: c465cc52-dc11-4153-82d8-b5718182c117
Memory size: 900MB
Page Fusion: off
VRAM size: 12MB
CPU exec cap: 100%
HPET: off
Chipset: piix3
Firmware: BIOS
Number of CPUs: 1
Synthetic Cpu: off
CPUID overrides: None
Boot menu mode: message and menu
Boot Device (1): DVD
Boot Device (2): HardDisk
...
创建 VM
如果您是刚开始使用 Oracle VM VirtualBox 且其中未注册 VM,则第一步应创建 VM。您可在 VBoxManage 中使用 createvm 命令完成此操作。实际上,创建 VM 的过程已简化为创建一个新的 XML VM 定义文件。然后,您可在 VBoxManage registervm 命令的帮助下注册 VM,并将 VM 的定义导入 Oracle VM VirtualBox。或者,您可使用 --register 选项和 createvm 命令,让 Oracle VM VirtualBox 立即注册所创建的 VM。
实际上,createvm 命令的唯一强制参数是 VM 名称。详细信息可随后通过 modifyvm 命令的各个参数来具体说明。不过,modifyvm 和 createvm 均支持 ostype 可选参数,您可以利用该参数告知 Oracle VM VirtualBox 将在 VM 中安装什么来宾操作系统。
使用以下命令可检查支持的操作系统类型,这会输出一长列的支持的操作系统类型,包括 Oracle Linux(64 位)以及众多其他类型:
$ VBoxManage list ostypes
...
ID: Oracle_64
Description: Oracle (64 bit)
Family ID: Linux
Family Desc: Linux
64 bit: true
...
在下面示例中,假设您将要在所创建的 VM 中安装 Oracle Linux(64 位)作为来宾操作系统。(当然,您可以在来宾计算机中尝试其他操作系统;有关详细信息,请参考此网页。)
$ VBoxManage createvm --name OracleLinux6Test --ostype Oracle_64 --register
如果一切顺利,输出应类似于下文所示:
Virtual machine 'OracleLinux6Test' is created and registered.
UUID: 067c9e4f-183a-47a9-8506-6c18ed920c2b
Settings file: '/oracle/VirtualBox VMs/OracleLinux6Test/OracleLinux6Test.vbox'
此时需要注意的一点是,所创建的 VM 为空。虽然您在创建 VM 时指定了操作系统类型,您仍需为 VM 设置 CPU、RAM、网络和磁盘配置,并且随后需将来宾操作系统安装到 VM 中。此内容将在以下章节中讨论。
设置 VM 的属性
您可能会注意到,Oracle VM VirtualBox 需要您提供很少的信息即可创建和注册新 VM,并将 VM 的许多属性设置为默认值。但是,为了满足您的需求并遵循将要安装的来宾操作系统的要求,您可能需要修改 VM 的属性。
如需查看所创建 VM 的当前设置,您可发出以下命令:
$ VBoxManage showvminfo OracleLinux6Test
检查输出内容可帮助您查看应该设置或修改哪些设置。建议您首先进行以下设置。
$ VBoxManage modifyvm OracleLinux6Test --cpus 2 --memory 2048 --vram 12
在设置 VM 的 RAM 数量时,您应考虑来宾操作系统的要求,以及将要在其上运行的软件组件的需求。在您运行 VM 时,将从主机中获取提供给 VM 的 RAM 数量。因此,请确保主机留有足够的内存,以便在您启动需要同时工作的所有 VM 之后正常运行。该建议也适用于分配给来宾计算机的虚拟 CPU 数量:分配的虚拟 CPU 数量不得超过主机上的物理核心数量。
设置属性后,您可通过 VBoxManage showvminfo 命令检查该属性。由于此命令会显示大量输出,在 Linux、Oracle Solaris 和 Mac OS 系统上使用 grep 命令筛选输出会很有帮助,如下例所示:
$ VBoxManage showvminfo OracleLinux6Test | grep "Memory size"
Memory size: 2048MB
配置虚拟网络适配器
通过 VBoxManage modifyvm 命令可进行的其他重要设置还包括网络设置。您可以使用此命令,在主机系统的物理网络接口上配置虚拟网卡,从而使 VM 与外部环境交互。
假设您希望使用 Oracle VM VirtualBox 的桥接网络选项配置虚拟网络接口。在执行此操作之前,您需要确定主机系统有哪些网络接口可用,以便选择一个接口用于指定的虚拟网络接口。
注意:Oracle VM VirtualBox 支持您为一个 VM 配置最多八个虚拟 PCI 网卡。在为新建 VM 发出的 VBoxManage showvminfo 命令的输出中,您可以看到默认情况下 Oracle VM VirtualBox 为一个 VM 配置一个虚拟适配器,将其设置为在网络地址转换 (NAT) 网络模式中运行。在下方的示例中,适配器的模式从 nic1 更改为 bridged(用于桥接网络)。
若要列出主机系统上的可用接口,如果您的主机在类似于 UNIX 的操作系统上运行,您可以使用 ifconfig 实用程序(在 Windows 上请使用 ipconfig)。
然后,您可以创建桥接虚拟适配器,如下所示:
$ VBoxManage modifyvm OracleLinux6Test --nic1 bridged --bridgeadapter1 eth0
当然,在配置插入到 VM 中的网络适配器时,并非只能选择桥接网络选项。有关详细信息,请参阅 Oracle VM VirtualBox 用户手册中的“虚拟网络”一章。
将虚拟介质附加到 VM
与真正的计算机一样,VM 需要存储设备,例如硬盘,以便从中进行引导以及存储和检索系统及用户数据。现在,我们来为 VM 创建一个虚拟硬盘。这实际上需要三步。
第一步,创建新的虚拟硬盘映像。使用以下命令,创建磁盘映像文件(采用 Oracle VM VirtualBox 的 VDI 格式)。如果指定的路径不存在,Oracle VM VirtualBox 将创建丢失的目录。
$ VBoxManage createhd --filename /path/to/hard_drive_image/OracleLinux6Test.vdi --size 5120
--variant Standard
0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100%
Disk image created. UUID: c69e22d2-1560-44cc-85f6-d81979c81990
通过选择变量 Standard,指示 Oracle VM VirtualBox 创建动态分配的映像文件,而选择变量 Fixed 将导致创建固定大小的映像。这两个变量之间的差别在于,动态分配的映像最初在真正的硬盘上占用非常小的存储空间,然后随着所用空间量的增长而增长。因此,为动态分配映像指定的大小仅指定映像容量的上限。相反,在创建固定大小的映像时,size 参数指定的空间量将立即分配,最终可能导致磁盘空间的利用率低下。
在指定映像大小时,您应考虑来宾操作系统以及待安装软件组件的需求。不过,有趣的是,您之后可使用 VBoxManage modifyhd 命令随时扩展映像容量(在撰写本文时,只有 VDI 和 VHD 格式的动态分配变量支持此功能)。
现在您已创建虚拟硬盘,接下来需要添加该硬盘使用的存储控制器:
$ VBoxManage storagectl OracleLinux6Test --name "SATA Controller" --add sata --bootable on
注意:选择串行 ATA (SATA) 作为控制器类型时,请确保您的来宾操作系统提供了高级主机控制器接口 (AHCI) 设备支持。AHCI 是 SATA 控制器的标准接口。请注意,像 Windows XP 等较早的操作系统不支持 AHCI。在这种情况下,您应使用集成驱动电路 (IDE) 控制器。
最后,您需要将硬盘附加到控制器:
$ VBoxManage storageattach OracleLinux6Test --storagectl "SATA Controller"
--port 0 --device 0 --type hdd
--medium /path/to/hard_drive_image/OracleLinux6Test.vdi
通过一个 SATA 控制器,您最多可将 30 个虚拟硬盘连接到一个 VM。在使用 IDE 控制器时,您只能使用 4 个虚拟存储设备,其中通常包括虚拟 CD/DVD 驱动器。
在 VM 上安装来宾操作系统
如前所述,在创建 VM 并设置其属性之后,您还需在 VM 上安装来宾操作系统。安装选项包括使用 ISO 映像或插入了安装介质的主机 CD/DVD 驱动器。可从 Oracle E-Delivery 免费下载适用于 Oracle Linux 的 ISO 映像。下载 ISO 安装文件后,您可以直接使用,也可以将其部署到 DVD 光盘,然后使用 DVD 光盘进行安装。
接下来,您需要将 VM 配置为从安装介质引导,这样将在 VM 首次启动时开始安装。不论您使用的是安装 DVD 还是 ISO 映像,都需要创建虚拟 CD/DVD 驱动器并将其连接到安装介质。与虚拟硬盘驱动器相似,虚拟 CD/DVD 驱动器需要存储控制器。虽然对于许多操作系统而言,此操作可使用 SATA 控制器完成,不过以下示例演示了为 CD/DVD 驱动器添加 IDE 控制器。
$ VBoxManage storagectl OracleLinux6Test --name "IDE Controller" --add ide
假设您将要从 DVD 安装光盘安装来宾操作系统。将安装光盘插入主机的 CD/DVD 驱动器,然后发出以下命令,将 VM 的虚拟 CD/DVD 驱动器连接到主机上的物理 CD/DVD 驱动器:
$ VBoxManage storageattach OracleLinux6Test --storagectl "IDE Controller"
--port 0 --device 0 --type dvddrive --medium host:/dev/dvd
使用以下命令查看获得的结果,其中应该输出与 VM 的 IDE 控制器相关的信息:
$ VBoxManage showvminfo OracleLinux6Test | grep "IDE Controller"
Storage Controller Name (0): IDE Controller
IDE Controller (0, 0): /dev/sr0 (UUID: 00445644-0000-0000-2f64-65762f737230)
现在您可引导 VM 并使用以下命令启动来宾计算机安装,该命令默认在 GUI 模式中启动,并使用标准的来宾操作系统安装程序引导您完成操作:
$ VBoxManage startvm OracleLinux6Test
您只需按照屏幕上的说明操作,即可完成安装。图 4 显示了在首次启动 VM 时应该显示的第一个 Oracle Linux 6.5 安装屏幕。
图 4.来宾操作系统的安装在首次引导 VM 时开始
完成操作系统的安装之后,您可在来宾计算机内干净地关闭 VM,这同时也将使 Oracle VM VirtualBox 关闭 VM。您还可以使用以下命令从 Oracle VM VirtualBox 进行关闭,这相当于按一下物理计算机上的电源按钮:
$ VBoxManage controlvm OracleLinux6Test acpipowerbutton
编程为响应此命令的操作系统将自动关闭。您可以使用以下命令强制关闭 VM,这相当于长按计算机的电源按钮:
$ VBoxManage controlvm OracleLinux6Test poweroff
最后,由于操作系统安装在来宾计算机中,您可以从 VM 配置中删除 DVD:
$ VBoxManage storageattach OracleLinux6Test --storagectl "IDE Controller"
--port 0 --device 0 --type dvddrive --medium none >
下一部分说明如何在没有显示器的计算机上启动 VM。
在无外设服务器上启动 VM
Oracle VM VirtualBox 提供了一种选项,允许您通过 VirtualBox 远程显示协议 (VRDP) 监控 VM。如果您的服务器没有可用物理显示器且您希望在其他计算机上显示 VM,该功能尤为有用。
Oracle VM VirtualBox 通过 Oracle VM VirtualBox Extension Pack 程序包中的 VirtualBox 远程桌面扩展 (VRDE) 接口提供远程计算机显示,可从 Oracle VM VirtualBox 下载页面下载该程序包。确保选取的扩展程序包与已安装的 Oracle VM VirtualBox 版本相同。
安装扩展包之后,您可启用 VRDE 服务器,如下所示:
$ VBoxManage modifyvm OracleLinux6Test --vrde on
通过运行以下命令确保正确安装:
$ VBoxManage showvminfo testMachine | grep VRDE
VRDE: enabled (Address 0.0.0.0, Ports 3389, MultiConn: off, ReuseSingleConn: off, Authentication type: null)
VRDE property: TCP/Ports = "3389"
VRDE property: TCP/Address =
...
VRDE Connection: not active
现在您可以启动 VM 进行远程访问,使用 VBoxManage startvm 命令指定类型 headless,这会启动 VM 但不生成可见输出,并提供在其他计算机上远程显示的 VRDP 数据:
$ VBoxManage startvm OracleLinux6Test --type headless
Waiting for VM "OracleLinux6Test" to power on...
VM "OracleLinux6Test" has been successfully started.
然后,您可从使用任意标准 RDP 查看器的其他计算机连接 VM。例如,在 Windows 中,您可在常规安装中使用远程桌面连接工具。开始时,请在命令行中键入 mstsc 命令,这应调用图 5 中显示的对话框:
图 5.Windows 中的默认 RDP 查看器
在此对话框中,对于以无外设模式运行 VM 的主机,您必须指定 IP 地址以及用于连接到该主机的用户名和密码。然后,单击连接以与 VM 建立连接。
如果一切正常,您应在 RDP 查看器窗口中看到来宾操作系统的第一个安装屏幕,如图 6 所示。(您可以回想一下,此示例假定这是 VM 的首次引导。)
图 6.从 Windows 主机远程安装来宾操作系统,使用随 Windows 提供的 RDP 查看器
现在您可遵循屏幕上显示的安装说明操作,就像是坐在运行 VM 的主机前一样。
导入 Oracle VM VirtualBox 模板
Oracle 具有多个适用于 Oracle VM VirtualBox 的预构建开发人员 VM,提供了一种快捷方式来安装和体验已打包至可部署设备中的完整软件堆栈。VBoxManage import 命令可将以 OVA 格式打包的此类设备导入到 Oracle VM VirtualBox 中。
假设您希望将 Oracle Linux 6.5 从 OracleLinux65.ova 程序包导入到 Oracle VM VirtualBox 中,您已从 Oracle Linux 上机操作将程序包下载到系统中。首先,您可能需要检查待导入设备的可用选项。这可以使用 VBoxManage import 命令的 --dry-run 选项完成。
$ VBoxManage import /path/to/OracleLinux65.ova --dry-run
查看输出,您将发现适用的选项。在以下示例中,您指定要分配的 RAM 和 CPU 的数量,当然还要接受许可协议以避免“在接受许可协议之前无法导入”错误:
$ VBoxManage import /path/to/OracleLinux65.ova --vsys 0 --memory 1024 --cpus 2 --eula accept
导入进程可能需要几分钟来完成,在此之后,您应看到以下消息:
Successfully imported the appliance.
导入成功完成后,VirtualBox Manager 的左侧窗格中应显示 Oracle Virtual Sysadmin Days VM 图标。当然,您可以使用 VBoxManage 命令通过命令行操作 VM。
总结
使用 CLI 时,不提供引导您设置新 VM 或编辑现有 VM 设置的实用向导。但是,如本文所述,当您需要对所使用的系统进行命令级访问时,CLI 必不可少。与隐藏了大量细节的 GUI 不同,使用 CLI 可了解到所有详细信息。因此,在使用 VBoxManage CLI 设置完新 VM 之后,您应对 Oracle VM VirtualBox VM 的工作过程及其包含的关键组件有更深入的了解。
另请参阅
Oracle VM VirtualBox 用户手册
Oracle VM VirtualBox 编程指南和参考 (PDF)
Oracle VM VirtualBox 下载页面
Oracle Linux 安装指南
关于作者
Yuli Vasiliev 是一位软件开发人员、自由撰稿人和顾问,目前专攻开源开发、Java 技术、商务智能 (BI)、数据库、面向服务的架构 (SOA) 以及近来的虚拟化。他撰写了一系列有关 Oracle 技术的书籍,最近的作品是 Oracle 商务智能:业务分析和报告简介(Packt,2010 年)。
Revision 1.0, 06/25/2014