前言

本文档提供有关 Oracle VirtualBox 高级功能的说明。

受众

本文档适用于具有 Oracle VirtualBox 使用经验的管理员。假定读者熟悉 Web 技术,并对 Windows 和 UNIX 平台有普遍的了解。

相关文档

该产品的文档可在以下网址找到:https://docs.oracle.com/en/virtualization/virtualbox/index.html

约定

本文档使用以下文本约定

下表总结了本文档中使用的约定。

约定

含义

粗体

粗体表示与某个操作相关的图形用户界面元素,或在文本或词汇表中定义的术语。

斜体

斜体表示书名、强调或您需要提供特定值的占位符变量。

等宽字体

等宽字体表示段落内的命令、URL、示例中的代码、屏幕上显示的文本或您输入的文本。

文档可访问性

有关 Oracle 在可访问性方面的承诺,请访问 Oracle 可访问性计划

获取 Oracle 可访问性支持

已购买支持的 Oracle 客户可通过 Oracle 可访问性学习与支持 获得电子支持。

多元化与包容性

Oracle 完全致力于多元化和包容性。Oracle 重视并珍视拥有多元化的员工队伍,这可以提升思想领导力和创新能力。作为我们构建更具包容性文化以积极影响我们的员工、客户和合作伙伴的举措的一部分,我们正在努力从我们的产品和文档中移除不敏感的词语。我们还意识到维护与客户现有技术兼容性的必要性,以及在 Oracle 的产品和行业标准不断发展的同时确保服务连续性的需要。由于这些技术限制,我们移除不敏感词语的努力是持续的,需要时间和外部合作。

第一步

欢迎使用 Oracle VirtualBox

Oracle VirtualBox 是一款跨平台虚拟化应用程序。这意味着它扩展了您现有计算机的功能,使其能够同时运行多个操作系统,在多个虚拟机(VM)中运行。例如,您可以在 Mac 上运行 Windows 和 Linux,在 Linux 服务器上运行 Windows Server,在 Windows PC 上运行 Linux 等等,所有这些都与您现有的应用程序并行运行。您可以安装并运行任意数量的虚拟机。唯一的实际限制是磁盘空间和内存。

Oracle VirtualBox 看起来很简单,但功能却非常强大。它可以运行在从小型嵌入式系统或桌面级机器,一直到数据中心部署甚至云环境的各种场景中。

在本用户指南中,我们将从简单的虚拟化介绍开始,并介绍如何使用易于使用的 Oracle VirtualBox 图形用户界面运行您的第一个虚拟机。后续章节将更详细地介绍更强大的工具和功能,但幸运的是,您不必在开始使用 Oracle VirtualBox 之前阅读整个用户指南。

您可以在 功能概述 中找到 Oracle VirtualBox 功能的摘要。对于希望了解此版本新功能的现有 Oracle VirtualBox 用户,请参阅 更改日志

为什么虚拟化有用?

Oracle VirtualBox 提供的技术和功能在以下场景中非常有用

  • 同时运行多个操作系统。 Oracle VirtualBox 使您能够一次运行一个以上的操作系统。这样,您就可以在 Linux 或 Mac 上运行为其他操作系统编写的软件,例如 Windows 软件,而无需重新启动即可使用它。由于您可以配置应该向每个操作系统呈现哪种类型的虚拟硬件,因此您可以安装旧的操作系统,如 DOS 或 OS/2,即使您真实的计算机硬件不再支持该操作系统。

  • 更轻松的软件安装。 软件供应商可以使用虚拟机来分发完整的软件配置。例如,在真实机器上安装完整的邮件服务器解决方案可能是一项繁琐的任务。借助 Oracle VirtualBox,这种复杂的设置(通常称为应用程序)可以打包到虚拟机中。安装和运行邮件服务器就像将此类应用程序导入 Oracle VirtualBox 一样简单。

  • 测试和灾难恢复。 安装完成后,虚拟机及其虚拟硬盘可以被视为一个可以任意冻结、唤醒、复制、备份和传输到主机之间的容器

    使用虚拟机可以使您构建和测试多节点网络服务,例如。可以轻松地调查网络、操作系统和软件配置方面的问题。

    此外,通过使用 Oracle VirtualBox 的另一项名为快照的功能,可以保存虚拟机的特定状态,并在必要时恢复到该状态。这样,您可以自由地试验计算环境。如果出现问题,例如安装软件后出现问题或虚拟机感染病毒,您可以轻松切换回之前的快照,避免频繁备份和还原的需要。

    可以创建任意数量的快照,允许您在虚拟机时间中穿梭。您可以在 VM 运行时删除快照以回收磁盘空间。

  • 基础设施整合。 虚拟化可以显著降低硬件和电力成本。大多数情况下,如今的计算机仅使用其潜在能力的很小一部分,并且平均系统负载很低。因此,浪费了大量的硬件资源和电力。所以,与其运行许多只被部分使用的物理计算机,不如将许多虚拟机打包到几台强大的主机上,并在它们之间平衡负载。

一些术语

在处理虚拟化以及理解本用户指南的后续章节时,熟悉一些重要的术语会很有帮助,尤其是以下术语

  • 主机操作系统(Host OS)。 这是安装了 Oracle VirtualBox 的物理计算机的操作系统。有适用于 Windows、macOS、Linux 和 Oracle Solaris 主机的 Oracle VirtualBox 版本。请参见 可用安装程序包

    大多数情况下,本用户指南会一起讨论所有 Oracle VirtualBox 版本。可能存在平台特定的差异,我们将在适当的时候指出。

  • 客户操作系统(Guest OS)。 这是在虚拟机中运行的操作系统。理论上,Oracle VirtualBox 可以在 x86 主机上运行任何 x86 操作系统,如 DOS、Windows、OS/2、FreeBSD 和 OpenBSD。但是,为了在您的机器上实现客户代码接近原生性能,我们不得不进行许多针对特定操作系统的优化。因此,虽然您喜欢的操作系统可能作为客户机运行,但我们官方支持并优化了少数几个,其中包括最常见的操作系统。

    请参见 客户操作系统

  • 虚拟机(VM)。 这是 Oracle VirtualBox 在客户机操作系统运行时为它创建的特殊环境。换句话说,您在虚拟机运行客户机操作系统。通常,虚拟机显示为计算机桌面上的一个窗口。根据您使用的 Oracle VirtualBox 的各种前端的不同,虚拟机可能显示为全屏模式,或远程显示在另一台计算机上。

    在内部,Oracle VirtualBox 将虚拟机视为一组指定其行为的参数。一些参数描述了硬件设置,例如分配的内存量和 CPU 数量。其他参数描述了状态信息,例如虚拟机是正在运行还是已保存。

    您可以在 VirtualBox Manager设置窗口中,并通过运行 VBoxManage 命令查看这些 VM 设置。请参见 VBoxManage

  • 客户机增强功能。 这指的是随 Oracle VirtualBox 一起分发的特殊软件程序包,但设计为安装在虚拟机内部,以提高客户机操作系统的性能并添加额外功能。请参见 客户机增强功能

功能概述

以下是 Oracle VirtualBox 主要功能的大致概述

  • 可移植性。 Oracle VirtualBox 可在大量 64 位主机操作系统上运行。请参见 可用安装程序包

    Oracle VirtualBox 是一种所谓的托管虚拟机管理程序,有时被称为类型 2 虚拟机管理程序。而裸机类型 1 虚拟机管理程序直接运行在硬件上,Oracle VirtualBox 需要已安装的现有操作系统。因此,它可以与该主机上的现有应用程序并行运行。

    在很大程度上,Oracle VirtualBox 在所有主机平台上功能相同,并且使用相同的文件和映像格式。这使您可以在一台主机上创建的虚拟机在另一台具有不同主机操作系统的上运行。例如,您可以在 Windows 上创建虚拟机,然后在 Linux 上运行它。

    此外,可以使用开放虚拟化格式(OVF)轻松导入和导出虚拟机,OVF 是为此目的创建的行业标准。您甚至可以导入使用不同虚拟化软件创建的 OVF。请参见 导入和导出虚拟机

    对于 Oracle Cloud Infrastructure 的用户,该功能已扩展到可以与云之间导出和导入虚拟机。这简化了应用程序的开发和生产环境的部署。请参见 将应用程序导出到 Oracle Cloud Infrastructure

  • 客户机增强功能:共享文件夹、无缝窗口、3D 虚拟化。 Oracle VirtualBox 客户机增强功能是软件程序包,可以安装在支持的客户机系统内部,以提高其性能并提供与主机系统的额外集成和通信。安装客户机增强功能后,虚拟机将支持自动调整视频分辨率、无缝窗口、加速 3D 图形等。请参见 客户机增强功能

    特别是,客户机增强功能提供了共享文件夹,允许您从客户机内部访问主机系统上的文件。请参见 共享文件夹

  • 全面的硬件支持。 除其他功能外,Oracle VirtualBox 还支持以下功能

    • 客户机多处理器(SMP)。 Oracle VirtualBox 可以为每个虚拟机提供多达 32 个虚拟 CPU,而不管您的主机上实际有多少个 CPU 核心。

    • USB 设备支持。 Oracle VirtualBox 实现了一个虚拟 USB 控制器,并允许您将任意 USB 设备连接到虚拟机,而无需在主机上安装特定于设备的驱动程序。USB 支持不限于某些设备类别。请参见 USB 设置

    • 硬件兼容性。 Oracle VirtualBox 虚拟化了大量虚拟设备,其中包括许多通常由其他虚拟化平台提供的设备。这包括 IDE、SCSI 和 SATA 硬盘控制器、多个虚拟网卡和声卡、虚拟串行端口以及输入/输出高级可编程中断控制器(I/O APIC),后者在许多计算机系统中都有。这使得从真实机器克隆磁盘映像以及将第三方虚拟机导入 Oracle VirtualBox 变得容易。

    • 完整的 ACPI 支持。 Oracle VirtualBox 完全支持高级配置和电源接口(ACPI)。这使得从真实机器或第三方虚拟机克隆磁盘映像到 Oracle VirtualBox 变得容易。凭借其独特的ACPI 电源状态支持Oracle VirtualBox 甚至可以向支持 ACPI 的客户机操作系统报告主机的电源状态。因此,对于运行在电池上的移动系统,客户机可以启用节能并向用户通知剩余电量,例如在全屏模式下。

    • 多屏分辨率。 Oracle VirtualBox 虚拟机支持远超物理屏幕分辨率的分辨率,允许它们跨越连接到主机系统的多个屏幕。

    • 内置 iSCSI 支持。 此独特功能允许您直接将虚拟机连接到 iSCSI 存储服务器,而无需经过主机系统。VM 直接访问 iSCSI 目标,而无需为容器文件中的虚拟化硬盘而需要的额外开销。请参见 iSCSI 服务器

    • PXE 网络启动。 Oracle VirtualBox 的集成虚拟网卡完全支持使用预启动执行环境(PXE)进行远程启动。

  • 多代分支快照。 Oracle VirtualBox 可以保存虚拟机状态的任意快照。您可以回溯时间,将虚拟机恢复到任何此类快照,并从那里开始另一个 VM 配置,从而有效地创建整个快照树。请参见 快照。您可以在虚拟机运行时创建和删除快照。

  • VM 组。 Oracle VirtualBox 提供了一个组功能,允许用户集体地以及单独地组织和控制虚拟机。除了基本组之外,任何 VM 还可以属于多个组,并且组可以嵌套在层次结构中。这意味着您可以拥有组的组。通常,可以对组执行的操作与可以应用于单个 VM 的操作相同:启动、暂停、重置、关闭(保存状态、发送关机、断电)、丢弃已保存状态、在文件系统中显示、排序。

  • 清晰的架构和前所未有的模块化。 Oracle VirtualBox 采用极其模块化的设计,具有明确定义的内部编程接口以及客户端和服务器代码的清晰分离。这使得它可以轻松地从多个接口同时进行控制。例如,您可以通过单击 Oracle VirtualBox 图形用户界面中的按钮来启动 VM,然后从命令行甚至远程控制该机器。请参见 备用前端

    由于其模块化架构,Oracle VirtualBox 还可以通过全面的软件开发套件(SDK)公开其全部功能和可配置性,从而实现 Oracle VirtualBox 与其他软件系统的集成。请参见 Oracle VirtualBox 编程接口

  • 远程机器显示。 VirtualBox 远程桌面扩展(VRDE)实现了对任何正在运行的虚拟机的 ao 高性能远程访问。此扩展支持 Microsoft Windows 中最初内置的远程桌面协议(RDP),并增加了对完整客户端 USB 的支持。

    VRDE 不依赖于 Microsoft Windows 中内置的 RDP 服务器。相反,VRDE 直接插入虚拟化层。因此,它适用于 Windows 以外的客户机操作系统,甚至在文本模式下,也不需要虚拟机中的应用程序支持。VRDE 在 远程显示(VRDP 支持) 中有详细描述。

    在此特殊功能之上,Oracle VirtualBox 还为您提供更多独特的功能

    • 可扩展的 RDP 身份验证。 Oracle VirtualBox 已经支持 Windows 上的 Winlogon 以及 Linux 和 Oracle Solaris 上的 PAM 进行 RDP 身份验证。此外,它还包含一个易于使用的 SDK,使您能够为其他身份验证方法创建任意接口。请参见 RDP 身份验证

    • RDP 上的 USB。 使用 RDP 虚拟通道支持,Oracle VirtualBox 还允许您将任意 USB 设备本地连接到在 Oracle VirtualBox RDP 服务器上远程运行的虚拟机。请参见 远程 USB

备用前端

Oracle VirtualBox 拥有非常灵活的内部设计,允许您使用多个接口来控制相同的虚拟机。例如,您可以用 VirtualBox Manager 窗口启动虚拟机,然后从命令行停止它。借助 Oracle VirtualBox 对远程桌面协议(RDP)的支持,您甚至可以在无头服务器上远程运行虚拟机,并将所有图形输出通过网络重定向。

标准 Oracle VirtualBox 程序包中提供了以下前端

  • VirtualBox。 这是 VirtualBox Manager,一个使用 Qt 工具包的图形用户界面。本用户指南Throughout 描述了此界面。虽然这是最简单易用的前端,但其中未包含一些更高级的 Oracle VirtualBox 功能。

  • VBoxManage。 一个用于自动化和详细控制 Oracle VirtualBox 各个方面的命令行界面。请参见 VBoxManage

  • VBoxHeadless。 一个前端,它完全不在主机上产生可见输出,但如果安装并启用了 VirtualBox 远程桌面扩展(VRDE),则可以作为 RDP 服务器。与其他的图形界面不同,无头前端不需要图形支持。例如,如果您想在没有安装 X Window 系统的无头 Linux 服务器上托管虚拟机,这将非常有用。请参见 VBoxHeadless,远程桌面服务器

  • 独立模式。 一个基于 VBoxHeadless 的前端,但不需要 VRDE 或 RDP 查看器。请参见 独立模式

如果上述前端仍不能满足您的特定需求,您还可以为作为 Oracle VirtualBox 核心的复杂虚拟化引擎创建另一个前端,因为 Oracle VirtualBox 核心在其干净的 API 中整齐地公开了其所有功能。请参见 Oracle VirtualBox 编程接口

可用的安装包

Oracle VirtualBox 在以下主机操作系统(OSs)上运行

  • x86-64 Windows 主机

    • Windows 11

    • Windows 10

    • Windows Server 2025

    • Windows Server 2022

  • Intel x86-64 macOS 主机

    • 14 (Sonoma)

    • 13 (Ventura)

    • 12 (Monterey)

    • 11 (Big Sur)

    另请参见 已知限制

  • Arm macOS 主机(64 位)

    • 14 (Sonoma)

    • 13 (Ventura)

    • 12 (Monterey)

    • 11 (Big Sur)

    另请参见 客户操作系统,了解在 Arm 主机上创建的虚拟机限制。

  • x86-64 Linux 主机。 包括以下内容

    • Ubuntu 24.10 LTS、Ubuntu 24.04 LTS、22.04 LTS 和 20.04 LTS

    • Debian GNU/Linux 12 (Bookworm) 和 11 (Bullseye)

    • Oracle Linux 9 和 8

    • CentOS/Red Hat Enterprise Linux 9 和 8

    • Fedora 41 和 40

    • SUSE Linux Enterprise server 15

    • openSUSE Leap 15.5、15.4 和 15.3

    应该可以使用基于 Linux 内核 2.6 或更高版本的绝大多数系统上的 Oracle VirtualBox,方法是使用 Oracle VirtualBox 安装程序或手动安装。请参见 在 Linux 主机上安装。但是,正式测试和支持的 Linux 发行版是我们提供专用软件包的那些。

  • Oracle Solaris 主机(仅限 64 位)。 支持以下版本,但需遵守 已知限制 中列出的限制

    • Oracle Solaris 11.4

请注意,任何被标记为实验性的功能均不受支持。欢迎提供有关此类功能的反馈和建议。

主机与客户机组合

表 1. VirtualBox 中可用的主机和客户机(VM)平台组合。 可用的主机平台及其运行的虚拟机矩阵。
主机硬件架构 主机操作系统(全部 64 位) 客户机虚拟硬件架构 客户机操作系统
x86-64(例如 Intel 或 AMD)

Windows

Windows Server

macOS(需要 Intel 硬件)

Linux(各种发行版)

Oracle Solaris

x86 和 x86-64

Windows

Windows Server

Oracle Solaris

Linux(各种发行版)

Arm64 macOS(需要 Apple silicon 硬件) Arm64 Linux(各种发行版)

Arm 主机限制

在 Arm 平台主机上使用时,存在以下限制

  • 虚拟机必须使用基于 Arm 的客户机操作系统。不支持在 Arm 主机平台上运行基于 x86 的客户机操作系统。

  • 只支持 VMSVGA 作为图形控制器。

  • 不提供无人值守安装。

  • 以下系统页面设置不适用于 Arm 客户机

    • 主板标签:芯片组、TPM

    • 处理器标签:扩展功能,如启用 PAE/NX、启用嵌套 VT-x/AMD-V

Intel 主机 CPU 要求

Intel 主机 CPU 必须具有 SSE2(Streaming SIMD Extensions 2)。

安装 Oracle VirtualBox 和扩展包

Oracle VirtualBox 有许多不同的程序包,安装取决于您的主机操作系统。如果您以前安装过软件,安装应该很简单。在每个主机平台上,Oracle VirtualBox 都使用最常见且易于使用的安装方法。如果您遇到问题或有特殊要求,请参阅 安装详细信息 以了解各种安装方法的详细信息。

Oracle VirtualBox 分为以下组件

  • 基础程序包。 基础程序包包含所有开源组件,并根据 GNU General Public License V3 获得许可。

  • 扩展包。 可以下载额外的扩展包,这些扩展包可以扩展 Oracle VirtualBox 基础程序包的功能。目前,Oracle 提供一个扩展包,可在以下网址下载:https://virtualbox.ac.cn。扩展包提供了以下附加功能

    有关如何安装扩展包的详细信息,请参见 安装扩展包

启动 Oracle VirtualBox

安装后,您可以按照以下步骤启动 Oracle VirtualBox

  • Windows 主机。程序菜单中,单击VirtualBox组中的项目。在某些 Windows 平台上,您还可以在开始菜单的搜索框中输入VirtualBox

  • macOS 主机。 在 Finder 中,双击应用程序文件夹中的VirtualBox项。您可能希望将此项拖到 Dock 上。

  • Linux 或 Oracle Solaris 主机。根据您的桌面环境,Oracle VirtualBox 项可能已放置在应用程序菜单的系统或系统工具组中。或者,您可以在终端窗口中输入VirtualBox

启动 Oracle VirtualBox 后,将显示 VirtualBox Manager 界面。请参见 配置 Oracle VirtualBox

配置 Oracle VirtualBox

在创建、添加或导入任何虚拟机之前,必须设置 Oracle VirtualBox 以便与您的网络和主机计算机协同工作。

您还可以根据需要设置偏好设置并自定义界面。

Oracle VirtualBox 偏好设置

“偏好设置”窗口提供了一系列设置,这些设置适用于当前用户的所有虚拟机。

注意

可用偏好设置取决于所选的体验级别。要显示所有偏好设置,请确保体验级别设置为专家

请参见 VirtualBox Manager 的体验级别

要显示“偏好设置”窗口,请执行以下任一操作:

  • 选择文件偏好设置

  • VirtualBox Manager 的欢迎屏幕上单击偏好设置

可用设置如下:

  • 常规。 使您能够指定 VM 文件的默认文件夹或目录,以及 VRDP 身份验证库。

  • 输入。 使您能够为 VirtualBox Manager 和各个 VM 指定键盘快捷键。例如,您可能希望指定不同的主机键。这是用于切换光标是处于 VM 还是主机 OS 窗口的焦点状态的键,请参见 捕获和释放键盘和鼠标。主机键也用于触发某些 VM 操作,请参见 输入特殊字符

  • 更新。 使您能够指定自动更新的各种设置。

  • 语言。 使您能够为 VirtualBox Manager 中的菜单、标签和文本指定使用的语言。

  • 显示。 使您能够指定屏幕分辨率及其宽度和高度。可以为所有客户机屏幕指定默认比例因子。

    可以设置所有客户机屏幕显示的默认字体缩放因子。

    可以选择其他扩展功能,以确保客户机屏幕与主机显示效果良好。

  • 代理。 使您能够配置 HTTP 代理服务器。

  • 界面。 使您能够为 VirtualBox Manager 用户界面选择颜色主题。

    注意

    此设置仅在 Windows 主机平台上可用。

VirtualBox 管理器的体验级别

当您使用 VirtualBox Manager 配置虚拟机设置时,您可以为用户界面选择一个体验级别。以下体验级别可用

  • 基本。 仅显示有限的设置和工具。使用工作流程来显示设置和配置选项。这是新安装的默认设置。

    此级别适用于首次使用 Oracle VirtualBox 的用户。

  • 专家。 显示所有可用的设置和工具。

    单个页面显示所有设置和配置选项。这是升级时已有一个已保存 VM 的用户的默认设置。

    此级别适用于需要更多虚拟机设置控制的经验丰富的用户。

可以在 VirtualBox Manager 的以下位置配置体验级别

  • 欢迎屏幕,仅适用于新安装。

  • 偏好设置窗口。

  • 虚拟机设置窗口。

无论您在哪里设置,该偏好设置都将应用于整个 VirtualBox Manager

选择体验级别

  1. 在文件菜单中,选择偏好设置
  2. 单击基本专家以选择所需的体验级别。

    可用设置和工具的数量取决于所选的体验级别。

全局工具

VirtualBox Manager 窗口的左侧窗格中,单击位于机器列表上方工具横幅中的菜单图标。将显示全局工具菜单。

下拉列表使您能够从以下全局工具中选择:

  • 欢迎。 显示 VirtualBox Manager 的欢迎消息。还包括 VirtualBox Manager 工具栏,以帮助您开始使用 Oracle VirtualBox

  • 扩展。 显示扩展包管理器工具。此工具用于安装和卸载 Oracle VirtualBox Extension Packs。请参见 扩展包管理器

  • 媒体。 显示虚拟媒体管理器工具。此工具用于管理 Oracle VirtualBox 使用的磁盘映像。请参见 虚拟媒体管理器

  • 网络。 显示网络管理器工具。此工具用于创建和配置 Oracle VirtualBox 使用的某些类型的网络。请参见 网络管理器

  • 云。 显示云配置文件编辑器工具。此工具用于配置与云服务(如 Oracle Cloud Infrastructure)的连接。请参见 使用云配置文件管理器

  • 活动。 显示VM 活动概览工具。此工具用于监控虚拟机的性能和资源使用情况。请参见 虚拟机监控

图钉图标用于在滚动机器列表条目时保持工具横幅可见。

注意

可用的工具可能因 VirtualBox Manager 用户界面所选的体验级别而异。

请参见 VirtualBox Manager 的体验级别

添加虚拟机

  • 如果您想创建全新的 VM,请单击新建并按照 创建虚拟机 中的步骤进行操作。
  • 如果您已在计算机上保存了 VM,可以通过单击添加将其添加到机器列表中。
  • 如果您在另一台计算机上有 VM,可以通过单击导入应用程序来导入它。请参见 以 OVF 格式导入应用程序
  • 如果您想在 VirtualBox Manager 中查看 OCI 实例,请参见 添加云 VM

创建虚拟机

在 VirtualBox Manager 窗口中,单击新建。将显示创建虚拟机工作流程,以指导您完成设置新虚拟机(VM)所需的步骤。

工作流程页面的确切设置取决于主机平台的架构。

如果看不到工作流程,请将体验级别更改为基本。请参见 VirtualBox Manager 的体验级别

创建后,虚拟机将显示在 VirtualBox Manager 窗口左侧的机器列表中,名称为您在工作流程第一页输入的名称。

您可以在创建 VM 后使用机器设置更改设置。

您必须提供您打算在 VM 上安装的操作系统的操作系统映像,格式为 ISO。 Oracle VirtualBox 不提供操作系统或使用它所需的任何许可证。

指定名称和操作系统

  1. 为虚拟机 (VM) 命名。输入的名称将显示在“VirtualBox 管理器”的机器列表中,也用于虚拟机的磁盘文件。请务必为每台虚拟机分配一个信息丰富的名称,描述虚拟机上运行的操作系统和软件。例如,Windows 10 with Visio。此名称还用于帮助 Oracle VirtualBox 自动建议合适的操作系统和相关字段内容。
  2. 选择存储虚拟机在计算机上的位置,称为机器文件夹。确保文件夹位置有足够的可用空间,特别是如果您打算使用快照功能。另请参阅 机器文件夹
  3. 选择您打算在新虚拟机上安装的操作系统的 ISO 镜像文件。此镜像文件可直接用于在新虚拟机上安装操作系统(作为无人值守安装的一部分),或者可以连接到新虚拟机上的 DVD 驱动器。如果镜像包含多个版本,请选择您想要使用的版本。
  4. Oracle VirtualBox 将在检测到 ISO 中的操作系统后填充“类型”、“子类型”和“版本”字段。如果无法检测到操作系统,则根据您的操作系统设置这些字段。例如,如果“类型”是 Linux,则“子类型”可能是 Oracle Linux,而“版本”可能是 Oracle Linux 8.x (64 位)。客户机操作系统的可用选项也受宿主机架构的限制。有关更多信息,请参阅 客户机操作系统

    支持的操作系统按类型分组。如果您想安装一种未列出的非常特殊的操作系统,请选择“其他”类型。根据您的选择,Oracle VirtualBox 将启用或禁用您的客户机操作系统可能需要的某些虚拟机设置。这对于 64 位客户机(请参阅 64 位客户机)尤其重要,但您必须始终将此字段设置为正确的值。

  5. 默认情况下,如果镜像支持无人值守安装,Oracle VirtualBox 将使用提供的 ISO 镜像安装所选的操作系统。另请参阅 配置无人值守客户机操作系统安装

    如果您希望手动安装操作系统,可以选择“跳过无人值守安装”来禁用无人值守客户机操作系统安装功能。在这种情况下,所选的 ISO 镜像将自动挂载到新虚拟机上的 DVD 驱动器,您必须从那里安装操作系统。

    并非所有镜像都支持无人值守安装。

  6. 单击“下一步”以 配置无人值守客户机操作系统安装(如果使用)或 设置虚拟机硬件

配置无人值守客户机操作系统安装

如果您选择无人值守客户机操作系统安装,Oracle VirtualBox 将自动在新虚拟机 (VM) 上安装操作系统。您必须提供某些用于安装的配置选项。

有关如何从命令行配置无人值守安装的详细信息,请参阅 使用 VBoxManage 命令进行无人值守客户机安装

注意

如果您选择了“跳过无人值守安装”选项,您将看不到这些选项。

  1. 输入客户机操作系统上默认用户的“用户名和密码”。
  2. 对于 Windows 客户机,请输入随 Windows 提供的“产品密钥”。

  3. 为虚拟机输入“主机名”。默认情况下,这与虚拟机名称相同。

  4. 为虚拟机输入“域名”。

  5. 如果希望为虚拟机启用无界面的模式而不是使用图形用户界面,请选择“后台安装”。
  6. 某些 x86 客户机支持无人值守的客户机增强功能安装。如果您希望 Oracle VirtualBox 在安装完操作系统后安装客户机增强功能,请选择“客户机增强功能”。将客户机增强功能安装 ISO 下载到宿主机,然后选择文件位置。
  7. 单击“下一步”以 设置虚拟机硬件

设置 VM 硬件

  1. 对于“基础内存”,请选择每次启动虚拟机 (VM) 时 Oracle VirtualBox 应分配给该虚拟机的 RAM 量。客户机操作系统将此大小报告为虚拟机的已安装 RAM。
    注意

    请仔细选择此设置。您分配给虚拟机的内存将在虚拟机运行时无法供宿主机使用。

    不要指定您无法承受的内存量,同时确保分配足够的内存供您的客户机操作系统和应用程序正常运行。例如,如果您的宿主机有 4 GB RAM,并且您为虚拟机输入 2048 MB 的基础内存,那么在虚拟机运行时,您的宿主机上还有 2 GB 可供所有其他软件使用。

    客户机操作系统可能至少需要 1 或 2 GB 的内存才能安装和启动。如果您打算一次运行多个虚拟机,请相应地规划。如果虚拟机没有足够的 RAM 来启动,它将无法启动。

    务必确保宿主机仍有足够的 RAM。如果剩余 RAM 不足,系统可能会过度地将内存交换到硬盘,这实际上会使宿主机系统停滞。

  2. 对于“处理器”,请选择要分配给虚拟机的虚拟处理器数量。不要分配超过宿主机总处理器线程的一半。
  3. 如果您希望为客户机操作系统启用可扩展固件接口 (EFI) 引导,请选择“启用 EFI”。
  4. 单击“下一步”以 指定虚拟硬盘

指定虚拟硬盘

Oracle VirtualBox 可以通过多种方式为虚拟机提供硬盘空间,请参阅 虚拟存储

最常见的方法是使用虚拟硬盘。这是一个位于您的物理硬盘上的大型镜像文件,Oracle VirtualBox 将其内容呈现给您的虚拟机,就好像它是一个完整的硬盘一样。您可以将此文件复制到另一台宿主机,并将其与其他 Oracle VirtualBox 虚拟机一起使用。

为防止宿主机上的物理硬盘空间耗尽,Oracle VirtualBox 会限制镜像文件的大小。但是,镜像文件必须足够大,才能容纳客户机操作系统和您要安装的应用程序的内容。对于 Windows 或 Linux 客户机,任何严肃的使用都需要几个 GB。镜像文件的大小限制可以稍后更改,请参阅 VBoxManage modifymedium

注意

如果您在此阶段选择“不添加虚拟硬盘”,您将需要使用 VirtualBox 管理器或 VBoxManage 命令附加硬盘,然后才能安装客户机操作系统。

创建虚拟硬盘

请按照以下步骤为该虚拟机创建虚拟硬盘。为防止宿主机上的物理硬盘空间耗尽,Oracle VirtualBox 会限制镜像文件的大小。但是,镜像文件必须足够大,才能容纳客户机操作系统和您要安装的应用程序的内容。对于 Windows 或 Linux 客户机,任何严肃的使用都需要几个 GB。镜像文件的大小限制可以稍后更改,请参阅 VBoxManage modifymedium
  1. 选择“立即创建虚拟硬盘”。这将创建一个新的空白虚拟硬盘镜像,位于虚拟机的机器文件夹中。

  2. 输入以下设置:

    • 磁盘大小。使用滑块选择新虚拟机中硬盘的最大大小。

    • 预分配全部大小。此设置决定了磁盘映像使用的镜像文件类型。选择此设置以使用 固定大小文件 作为磁盘映像。否则,Oracle VirtualBox 将使用 动态分配文件 作为磁盘映像。

      不同类型的映像文件行为如下:

      • 动态分配文件。这种类型的镜像文件仅在客户机实际在其虚拟硬盘上存储数据时才增长。因此,此文件最初很小。随着驱动器被数据填满,文件会增长到指定的大小。

      • 固定大小文件。这种类型的镜像文件会立即占用指定的文件空间,即使该虚拟硬盘空间仅有一小部分实际上在使用中。虽然占用更多空间,但固定大小的文件开销更小,因此比动态分配的文件速度稍快。

      有关更多差异详情,请参阅 磁盘映像文件 (VDI, VMDK, VHD, HDD)

使用现有虚拟硬盘

请按照以下步骤使用宿主机上已有的虚拟硬盘。确保镜像文件位于合适的位置(通常是机器文件夹),并且没有被其他虚拟机使用。
注意
磁盘映像上的数据可能会被删除。
  1. 选择“使用现有虚拟硬盘文件

  2. 选择要与新虚拟机一起使用的镜像文件,然后单击“添加”。

运行虚拟机

要启动虚拟机 (VM),您有以下选项

  • 在“VirtualBox 管理器”的机器列表中双击虚拟机的名称。

  • 在“VirtualBox 管理器”的机器列表中选择虚拟机的名称,然后单击窗口顶部的工具栏中的“启动”。

  • 转到系统用户主目录中的“VirtualBox VMs”文件夹。找到您要启动的机器的子目录,然后双击机器设置文件。此文件具有“.vbox”文件扩展名。

启动的虚拟机将出现在一个新窗口中,您将看到它开始启动,或根据需要提示您安装操作系统。虚拟机窗口中将显示通常在虚拟机监视器上看到的任何内容。

通常,您可以像使用真实计算机一样使用虚拟机。以下主题描述了运行 VM 时需要注意的几点。

首次启动新 VM

当您首次启动虚拟机时,操作系统安装过程将自动启动,使用“创建虚拟机”工作流中指定的 ISO 镜像文件。

按照屏幕上的说明安装您的操作系统。

虚拟机状态栏

虚拟机窗口底部会显示一个状态栏。状态栏包含图标,通过这些图标您可以查看和更改虚拟机的设置,如下所示

  • 将鼠标悬停在图标上可显示当前设置的详细信息。

  • 右键单击图标可更改设置。

    某些设置,例如音频,可以通过右键单击状态栏图标直接更改。对于其他设置,您需要从显示的菜单选项中进行选择。

有关可用虚拟机设置的详细信息,请参阅 配置虚拟机

表 2 描述了状态栏中的图标。

表 2. 虚拟机状态栏图标。 描述虚拟机窗口底部状态栏中的图标

图标

描述

存储 (SATA)

已连接的 SATA 存储设备(例如硬盘驱动器)的设置。

另请参阅 存储设置

存储 (IDE)

已连接的 IDE 存储设备(例如光盘 CD-ROM 驱动器)的设置。

另请参阅 存储设置

右键单击可显示添加和删除 IDE 设备的选项。

另请参阅 更改可移动介质

音频

音频输出和音频输入的设置。

右键单击可更改设置。状态栏图标会自动更新,以显示哪些设置已启用。

另请参阅 音频设置

网络

已连接的网络适配器的设置。

右键单击可连接或断开网络适配器。

另请参阅 网络设置

USB

已连接的 USB 设备的设置。

右键单击可从宿主机上可用的 USB 设备中选择,并指定 USB 过滤器。

另请参阅 USB 设置

共享文件夹

共享文件夹的设置。

右键单击可更改共享文件夹设置或添加新共享文件夹。

另请参阅 共享文件夹

显示

虚拟机显示的设置。

右键单击可显示调整窗口大小和缩放显示的选项。

另请参阅 调整机器窗口大小

录制

视频和音频录制的设置。

右键单击可显示启用和禁用录制的选项,或更改录制设置。

要启用录制,请右键单击状态栏图标,然后选择“录制”选项。图标将更改为显示电影胶片动画,如下所示

要禁用录制,请右键单击状态栏图标,然后取消选择“录制”选项。图标将恢复为默认图像。

另请参阅 录制选项卡

处理器

虚拟机使用的 CPU 的设置。

图标中的彩色条表示当前处理器活动。红色表示高 CPU 使用率,绿色表示低 CPU 使用率。

绿色乌龟图标表示宿主机上正在运行本地监视器,例如 Hyper-V。

另请参阅 处理器选项卡

鼠标集成

捕获宿主机鼠标指针的设置。

图标指示鼠标集成是开启(绿色箭头)还是关闭(黄色箭头),以及指针是否被捕获(鼠标图标有颜色)或未被捕获(鼠标图标为灰色)。

右键单击可启用或禁用鼠标集成。

另请参阅 捕获和释放键盘和鼠标

宿主机键

捕获宿主机键盘的设置。

如果键盘被捕获,图标上的箭头为绿色;如果未被捕获,则为黑色。

当宿主机键未被按下时,背景为蓝色;当被按下时,背景为白色。

当虚拟机等待输入宿主机键组合时,会出现一个复选图标。

当前宿主机键显示在图标的右侧。

右键单击可显示用于配置宿主机键组合和其他键盘快捷键的选项。

右键单击可插入特殊键组合,例如 Ctrl+Alt+Delete。

另请参阅 输入特殊字符

配置状态栏

您可以按如下方式配置状态栏

  • 隐藏状态栏,请右键单击状态栏区域,然后取消选择“显示状态栏”。

  • 显示状态栏,请从虚拟机的菜单栏中选择“视图”、“状态栏”、“显示状态栏”。

  • 修改状态栏内容,请右键单击状态栏区域,然后选择“状态栏设置”。然后您可以执行以下操作

    • 选择您想包含在状态栏中的图标。

    • 取消选择您想从状态栏中移除的图标。

    • 拖放图标以更改它们在状态栏中的顺序。

    单击复选标记按钮可保存您对状态栏所做的更改。

    有关更改状态栏的其他选项,请参阅 用户界面

捕获和释放键盘与鼠标

Oracle VirtualBox 通过一个虚拟 USB 平板设备与新的虚拟机通信,通过该设备将鼠标事件传递给客户机操作系统。如果您运行的是支持此类设备的现代客户机操作系统,鼠标支持可能会开箱即用,而无需像下面描述的那样捕获鼠标。请参阅 主板选项卡

否则,如果虚拟机仅检测到标准的 PS/2 鼠标和键盘设备,由于虚拟机中的操作系统不知道它不是在真实计算机上运行,因此它会期望对您的键盘和鼠标拥有独占控制权。但是,除非您在全屏模式下运行虚拟机,否则您的虚拟机需要与其他应用程序以及可能存在的其他虚拟机共享键盘和鼠标。

在安装完客户机操作系统并在安装客户机增强功能(如 客户机增强功能中所述)之前,您的虚拟机或计算机的其他部分可以拥有键盘和鼠标。两者不能同时拥有键盘和鼠标。您会看到第二个鼠标指针,它始终限制在虚拟机窗口的范围内。通过单击虚拟机内部来激活虚拟机。

要将键盘和鼠标的所有权返回给您的宿主机操作系统,Oracle VirtualBox 会在您的键盘上保留一个特殊按键:宿主机键。默认情况下,这是您键盘上的右 Ctrl 键。在 Mac 宿主机上,默认的宿主机键是左 Command 键。您可以使用“首选项”窗口更改此默认设置。请参阅 Oracle VirtualBox 首选项。宿主机键的当前设置始终显示在虚拟机窗口的右下角。

图 1. 虚拟机状态栏上的宿主机键设置
虚拟机状态栏上的宿主机键设置

Host Key Setting on the Virtual Machine Status Bar

这意味着以下内容:

  • 当虚拟机窗口在您的宿主机桌面上获得键盘焦点时,您的键盘由虚拟机拥有。如果您在客户机操作系统中有许多打开的窗口,则将使用在虚拟机中具有焦点的窗口。这意味着如果您想在虚拟机中输入文本,请先单击您的虚拟机窗口的标题栏。

    要释放键盘所有权,请按主机键。如上所述,这通常是右 Ctrl 键。

    请注意,当虚拟机拥有键盘时,某些键序列(如 Alt+Tab)将不再被宿主机看到,而是会发送到客户机。在按下宿主机键以重新启用宿主机键盘后,所有按键都会再次通过宿主机,因此像 Alt+Tab 这样的序列将不再到达客户机。出于技术原因,即使在拥有键盘时,虚拟机也可能无法获得所有键盘输入。例如,Windows 宿主机上的 Ctrl+Alt+Del 序列,或 X11 宿主机(如 GNOME 桌面定位指针功能)上被其他应用程序捕获的单个按键。

  • 您的鼠标仅在您单击虚拟机窗口后才会被虚拟机拥有。宿主机鼠标指针将消失,并且您的鼠标将驱动客户机的指针,而不是您的正常鼠标指针。

    请注意,鼠标所有权独立于键盘所有权。即使您单击了标题栏以在 VM 窗口中输入文本,您的鼠标也未必已被 VM 拥有。

    要释放 VM 对鼠标的所有权,请按主机键。

由于这种行为不方便,Oracle VirtualBox 为客户机系统提供了一套工具和设备驱动程序,称为Oracle VirtualBox 客户机增强功能。这些工具使虚拟机键盘和鼠标的操作更加无缝。最重要的是,客户机增强功能会抑制第二个“客户机”鼠标指针,并使您的宿主机鼠标指针直接在客户机中工作。请参阅 客户机增强功能

键入特殊字符

某些操作系统会期望特定的键组合来启动某些过程。您输入的虚拟机键组合可能会指向宿主机操作系统、Oracle VirtualBox 软件或客户机操作系统。这些按键的接收者取决于多种因素,包括键组合本身。

  • 宿主机操作系统会为自身保留某些键组合。例如,您不能使用Ctrl+Alt+Delete 组合键重新启动虚拟机中的客户机操作系统,因为此键组合被宿主机操作系统保留。即使 Windows 和 Linux 操作系统都可以拦截此键组合,宿主机操作系统也会自动重新启动。

    在 Linux 和 Oracle Solaris 宿主机上,它们使用 X Window System,Ctrl+Alt+Backspace 键组合通常会重置 X 服务器并重新启动整个图形用户界面。由于 X 服务器会拦截此组合键,因此按下它通常会重新启动您的宿主机图形用户界面,并在此过程中终止所有运行的程序,包括 Oracle VirtualBox

    在支持虚拟终端的 Linux 宿主机上,Ctrl+Alt+Fx 键组合(其中 Fx 是 F1 到 F12 的一个功能键)通常允许您在虚拟终端之间切换。与Ctrl+Alt+Delete 一样,这些组合键会被宿主机操作系统拦截,因此始终在宿主机上切换终端。

    如果您想将这些键组合发送到虚拟机中的客户机操作系统,您需要使用以下方法之一:

    • 使用虚拟机窗口的“输入”、“键盘”菜单中的项目。此菜单包括“插入 Ctrl+Alt+Delete”和“插入 Ctrl+Alt+Backspace”设置。但是,后一个设置仅影响 Linux 客户机或 Oracle Solaris 客户机。

      此菜单还包括插入主机键组合的选项。

    • 使用带宿主机键的特殊键组合,宿主机键通常是右 Control 键。Oracle VirtualBox 随后会为虚拟机转换以下键组合:

      • 宿主机键 + DelCtrl+Alt+Del 发送到客户机操作系统以重新启动。

      • 宿主机键 + BackspaceCtrl+Alt+Backspace 发送到 Linux 或 Oracle Solaris 客户机以重新启动图形用户界面。

      • 宿主机键 + 功能键。例如,使用此键组合模拟Ctrl+Alt+Fx 以在 Linux 客户机中的虚拟终端之间切换。

  • 对于其他一些键盘组合,例如Alt+Tab 以在打开的窗口之间切换,Oracle VirtualBox 允许您配置这些组合是影响宿主机还是客户机,前提是虚拟机当前具有焦点。这是所有虚拟机的一个全局设置,可以在“文件”、“首选项”、“输入”下找到。

  • 可以使用软键盘在客户机中输入键组合。请参阅 软键盘

更改可移动媒体

在虚拟机运行时,您可以在虚拟机的“设备”菜单中更改可移动介质。在这里,您可以详细选择 Oracle VirtualBox 作为 CD、DVD 或软盘驱动器呈现给您的虚拟机。

这些设置与在 VirtualBox 管理器的“设置”窗口中为虚拟机提供的设置相同。但是,由于虚拟机处于“运行”或“已保存”状态时,“设置”窗口是禁用的,因此“设备”菜单使您无需每次想要更改介质时都关闭并重新启动虚拟机。

使用“设备”菜单,您可以将宿主机驱动器附加到客户机,或选择软盘或 DVD 镜像,如 存储设置中所述。

设备”菜单还包括一个选项,用于从宿主机上的选定文件创建虚拟 ISO (VISO)。

调整机器窗口大小

VM 运行时,您可以调整其窗口大小。调整后,窗口会按如下方式缩放:

  • 如果您启用了缩放模式,则虚拟机的屏幕将被缩放到窗口大小。如果您运行了许多虚拟机并想查看其中一个在后台运行的虚拟机,这会很有用。或者,如果虚拟机输出屏幕非常小,例如您正在运行旧操作系统,放大窗口可能会很有用。

    要启用缩放模式,请按宿主机键 + C,或在虚拟机窗口的“视图”菜单中选择“缩放模式”。要退出缩放模式,请再次按宿主机键 + C

    调整窗口大小时会保留客户机屏幕的纵横比。要忽略纵横比,请在调整大小时按Shift

    有关其他说明,请参阅 已知限制

  • 如果已安装客户机增强功能并且它们支持自动调整大小,则客户机增强功能将自动调整客户机操作系统的屏幕分辨率。例如,如果您正在运行分辨率为 1024x768 像素的 Windows 客户机,然后调整了虚拟机窗口的大小使其宽度增加 100 像素,则客户机增强功能会将 Windows 显示分辨率更改为 1124x768。

    请参阅 客户机增强功能

  • 否则,如果窗口大于 VM 的屏幕,屏幕将居中。如果更小,则机器窗口将添加滚动条。

保存机器状态

当您单击虚拟机窗口右上角的关闭按钮时,就像关闭系统中的任何其他窗口一样,Oracle VirtualBox 会询问您是想保存还是关闭虚拟机。作为快捷方式,您也可以按宿主机键 + Q

这三个选项之间的区别至关重要。它们表示以下含义:

  • 保存机器状态: 使用此选项,Oracle VirtualBox 将通过将虚拟机状态完全保存到本地磁盘来冻结该虚拟机。

    以后当您再次启动虚拟机时,您会发现虚拟机从上次中断的地方继续运行。您的所有程序都将保持打开状态,您的计算机将恢复运行。因此,在某些方面,保存虚拟机状态类似于通过关闭笔记本电脑的盖子来暂停它。

  • 发送关机信号。这将向虚拟机发送一个 ACPI 关机信号,其效果与按下真实计算机上的电源按钮相同。这应该会触发虚拟机内部的正确关机机制。

  • 关闭机器: 使用此选项,Oracle VirtualBox 也会停止运行虚拟机,但保存其状态。

    注意

    这相当于拔掉真实计算机的电源插头而不将其正确关闭。如果您在关闭机器后再重新启动它,您的操作系统将必须完全重新启动,并且可能会开始对您的虚拟系统磁盘进行长时间检查。因此,通常不应执行此操作,因为它可能会导致数据丢失或虚拟机系统在磁盘上处于不一致状态。

    作为例外,如果您的虚拟机有任何快照(请参阅 快照),您可以使用此选项快速还原当前快照。在这种情况下,关闭机器将放弃当前状态,自上次快照以来所做的任何更改都将丢失。

VirtualBox 管理器”窗口中的丢弃按钮会丢弃虚拟机的已保存状态。这与关闭虚拟机具有相同的影响,并且适用相同的警告。

管理 VM

当您添加、导入或创建虚拟机时,它们将出现在机器列表中。

要更改虚拟机的硬件配置。请参阅 配置虚拟机的设置

要使用虚拟机组,请参阅 使用虚拟机组

检查通知中心以了解正在进行的任务和错误消息。单击打开通知中心以查看通知列表。错误将以警告三角形指示。

配置 VM 的设置

创建虚拟机 (VM) 后,您可能需要更改其配置。例如,您可能想添加更多内存。

更改虚拟机设置时要小心。可以在安装客户机操作系统后更改所有虚拟机设置,但某些更改如果在安装后进行,可能会导致客户机操作系统无法正常运行。

要更改虚拟机的设置
  1. 在机器列表中选择虚拟机。
  2. 确保虚拟机已关闭电源,而不是正在运行或已保存。如果虚拟机正在运行,则无法更改其基本特性。
  3. 单击设置以查看虚拟机的当前配置,并根据需要更改设置。

设置的详细信息在 配置虚拟机 中进行了描述。

使用 VBoxManage 命令行界面还可以使用更多参数。请参阅 VBoxManage

使用 VM 组

如果您想集中管理多个虚拟机,请创建虚拟机组,并在集体和单独地执行功能。

组可用功能如下:

  • 使用“VirtualBox 管理器”创建组。执行以下操作之一:

    • 将一个 VM 拖到另一个 VM 上。

    • 选择多个虚拟机,然后在右键单击菜单中选择“”。

  • 使用命令行创建和管理组。执行以下任一操作:

    • 创建组并分配 VM。例如:

      VBoxManage modifyvm "vm01" --groups "/TestGroup"

      此命令将创建名为 TestGroup 的组,并将虚拟机 vm01 附加到该组。

    • 从组中分离 VM,如果为空则删除组。例如:

      VBoxManage modifyvm "vm01" --groups ""

      此命令将从虚拟机 vm01 附加所有组,并删除空组。

  • 创建多个组。例如:

    VBoxManage modifyvm "vm01" --groups "/TestGroup,/TestGroup2"

    如果TestGroupTestGroup2组不存在,此命令将创建它们,并将虚拟机 vm01 附加到这两个组。

  • 创建嵌套组,具有组层次结构。例如:

    VBoxManage modifyvm "vm01" --groups "/TestGroup/TestGroup2"

    此命令将虚拟机 vm01 附加到TestGroup组的子组 TestGroup2

  • 使用“VirtualBox 管理器”菜单选项来控制和管理组中的所有虚拟机。例如:启动暂停重置关闭(保存状态、发送关机信号、断电)、丢弃已保存状态在文件资源管理器中显示排序

快照

通过快照,您可以保存虚拟机的特定状态以供以后使用。在任何以后的时候,您都可以恢复到该状态,即使您此后对虚拟机进行了大量更改。因此,虚拟机的快照类似于处于“已保存”状态的机器,但可以有多个快照,并且这些已保存的状态会被保留。

要查看虚拟机快照,请在“VirtualBox Manager”中单击虚拟机名称。在虚拟机的虚拟机工具菜单中,单击“快照”。将显示“快照”工具。

如果您在机器列表中选择多个 VM,则会列出每个 VM 的所有快照。

在您拍摄虚拟机快照之前,快照列表将为空,除了“当前状态”项。此项代表虚拟机生命周期中的当前时间点。

“快照”窗口包含一个工具栏,可用于执行以下快照操作

  • 拍摄。 拍摄选定虚拟机的快照。请参阅拍摄、恢复和删除快照

  • 删除。 从快照列表中删除快照。请参阅拍摄、恢复和删除快照

  • 恢复。 将虚拟机状态恢复为与选定快照相同的状态。请参阅拍摄、恢复和删除快照

  • 属性。 显示选定快照的属性。“属性”选项卡用于为快照指定名称和描述。“信息”选项卡显示快照的虚拟机设置。

  • 克隆。 显示“克隆虚拟机”向导。这使您可以基于选定的快照创建虚拟机副本。

  • 设置。 仅适用于“当前状态”快照。显示虚拟机的“设置”窗口,使您可以进行配置更改。

  • 丢弃。 对于正在运行的虚拟机,将丢弃该虚拟机的已保存状态并将其关闭。

  • 启动。 启动虚拟机。此操作适用于“当前状态”项。

创建、恢复和删除快照

快照相关操作有以下三种:

  1. 拍摄快照。 这会复制机器的当前状态,您可以随时返回到该状态。

    • 如果您的虚拟机正在运行

      在虚拟机的“Machine”菜单中选择“Take Snapshot”。

      创建快照时,虚拟机将暂停。创建快照后,虚拟机将继续正常运行。

    • 如果您的虚拟机处于“已保存”或“已关机”状态(如计算机列表中虚拟机名称旁边所示)

      显示“快照”窗口并执行以下操作之一:

      • 在“快照”窗口工具栏中单击“Take”。

      • 右键单击列表中的“Current State”项,然后选择“Take”。

    将显示一个对话框,提示您输入快照名称。此名称仅用于参考,以帮助您记住快照的状态。例如,有用的名称可以是“从头全新安装,未安装来宾增强功能”或“刚刚安装 Service Pack 3”。您还可以在“Snapshot Description”字段中添加更长的文本描述。

    您的新快照将显示在快照列表中。在新快照下方,您将看到一个名为“Current State”的项,表示您虚拟机的当前状态是基于您之前拍摄的快照的变体。如果您稍后拍摄了另一个快照,您将看到它们是按顺序显示的,并且每个后续快照都源自更早的快照。

    Oracle VirtualBox 对您可以拍摄的快照数量没有限制。唯一的实际限制是您的主机上的磁盘空间。每个快照都存储虚拟机的状态,因此会占用一定的磁盘空间。有关快照中存储的内容的详细信息,请参阅快照内容

  2. 恢复快照。 在“快照”窗口中,选择您拍摄的快照,然后单击工具栏中的“Restore”。通过恢复快照,您可以回到或前进到过去的时间。机器的当前状态将丢失,机器将被恢复到拍摄快照时的确切状态。

    注意

    恢复快照将影响连接到虚拟机的虚拟硬盘,因为虚拟硬盘的整个状态也会被还原。这意味着自快照以来创建的所有文件以及所有其他文件更改都将丢失。 为了防止此类数据丢失,同时仍能使用快照功能,可以使用 VBoxManage 接口以直写模式添加第二个硬盘,并使用它来存储您的数据。由于直写硬盘包含在快照中,因此在还原机器时它们不会被更改。请参阅特殊映像写模式

    为了避免在恢复快照时丢失当前状态,您可以在恢复操作之前创建一个新快照。

    通过恢复较早的快照并在那里拍摄更多快照,甚至可以创建一种替代现实,并在这些不同的虚拟机快照历史记录之间切换。这可能导致产生整个虚拟机快照树。

  3. 删除快照。 这不会影响虚拟机的状态,只会释放 Oracle VirtualBox 用于存储快照数据的文件,从而释放磁盘空间。要删除快照,请在“快照”窗口中选择快照名称,然后单击工具栏中的“Delete”。即使机器正在运行,也可以删除快照。

    注意

    虽然拍摄和恢复快照是相当快速的操作,但删除快照可能需要相当长的时间,因为可能需要将大量数据在多个磁盘映像文件之间复制。在操作进行过程中,临时磁盘文件也可能需要大量磁盘空间。

    在某些情况下,当虚拟机正在运行时无法处理,您将收到相应的消息,提示您需要在虚拟机关闭时执行此快照删除操作。

快照内容

将快照视为您已保留的时间点。更正式地说,快照由以下内容组成:

  • 快照包含虚拟机设置的完整副本,包括硬件配置,因此在恢复快照时,虚拟机设置也会被恢复。例如,如果您更改了硬盘配置或虚拟机的系统设置,在恢复快照时,该更改将被撤销。

    设置副本存储在计算机配置(一个XML文本文件)中,因此占用空间很小。

  • 所有连接到机器的虚拟磁盘的完整状态都将被保留。回到快照意味着对机器磁盘所做的所有更改,逐文件逐位地,都将被撤销。之后创建的文件将消失,已删除的文件将被恢复,对文件的更改将被还原。

    严格来说,这只适用于“普通”模式下的虚拟硬盘。您可以配置磁盘以通过快照以不同的方式运行,请参阅特殊映像写模式。从技术上讲,当恢复快照时,恢复的并不是虚拟硬盘本身。相反,当拍摄快照时,Oracle VirtualBox 会创建差分映像,其中仅包含自拍摄快照以来所做的更改。恢复快照时,Oracle VirtualBox 会丢弃该差分映像,从而返回到之前的状态。这既快又节省磁盘空间。有关可能很复杂的详细信息,请参阅差分映像

    差分映像本身的创建最初不会占用主机磁盘上的大量空间,因为差分映像最初是空的,并且稍后会随着每次写入磁盘的操作而动态增长。然而,在创建快照后使用机器的时间越长,差分映像的大小就会越大。

  • 如果您在机器运行时拍摄了快照,则机器的内存状态也会保存在快照中。这与关闭虚拟机窗口时保存内存的方式相同。恢复此类快照时,执行将从拍摄快照的确切点继续。

    内存状态文件的大小可以与虚拟机的内存大小相同,因此将占用相当大的磁盘空间。

移除和移动虚拟机

您可以从 Oracle VirtualBox 中删除虚拟机,或者将虚拟机及其关联文件(如磁盘映像)移动到主机上的另一个位置。

  • 删除虚拟机。 要删除虚拟机,请在“VirtualBox Manager”的虚拟机列表中右键单击虚拟机,然后选择“Remove”。

    确认对话框使您能够指定是仅从计算机列表中移除虚拟机,还是移除与虚拟机关联的文件。

    请注意,“Remove”菜单项在虚拟机运行时处于禁用状态。

  • 移动虚拟机。 要将虚拟机移动到主机上的新位置,请在“VirtualBox Manager”的虚拟机列表中右键单击虚拟机,然后选择“Move”。

    文件对话框将提示您为虚拟机指定新位置。

    移动虚拟机时,Oracle VirtualBox 配置会自动更新,以使用主机上的新位置。

    请注意,“Move”菜单项在虚拟机运行时处于禁用状态。

    您还可以使用 VBoxManage movevm 命令移动虚拟机。请参阅VBoxManage movevm

有关从 Oracle VirtualBox 中删除或移动磁盘映像文件的信息,请参阅虚拟媒体管理器

克隆虚拟机

您可以创建现有虚拟机的完整副本或链接副本。此副本称为克隆。您可以使用克隆虚拟机来试验虚拟机配置、测试不同的客户机操作系统级别或备份虚拟机。

克隆虚拟机

  1. 确保要克隆的虚拟机未运行。
  2. 单击虚拟机列表中的虚拟机名称,然后从“Machine”菜单中选择“Clone”。

  3. 为克隆输入以下详细信息。
    • Name: 克隆虚拟机的名称。
    • Path: 为克隆的虚拟机选择一个位置,否则 Oracle VirtualBox 将使用默认的虚拟机文件夹。
    • MAC Address Policy: 指定克隆虚拟机时是否保留网卡 MAC 地址。

      Generate New MAC Addresses For All Network Adapters”值会在克隆期间为每张网卡分配新的 MAC 地址。这是默认设置。当源虚拟机和克隆虚拟机都必须在同一网络上运行时,这是最佳选项。其他值允许您在克隆虚拟机中保留现有的 MAC 地址。

    • Keep Disk Names: 克隆虚拟机时保留磁盘映像名称。
    • Keep Hardware UUIDs: 克隆虚拟机时保留硬件通用唯一标识符 (UUID)。
  4. 单击“Next”。将显示“Clone Type”页面。
  5. Clone Type”选项指定是创建链接到源虚拟机的克隆,还是创建完全独立的克隆。
    • Full Clone: 将所有依赖的磁盘映像复制到新的虚拟机文件夹。完整克隆可以在没有源虚拟机的情况下完全运行。
    • Linked Clone: 基于源虚拟机磁盘映像创建新的差分磁盘映像。如果将源虚拟机的当前状态选择为克隆点,Oracle VirtualBox 将创建一个新快照。
  6. 单击“Next”。如果您的虚拟机有快照并且您选择了“Full Clone”,请使用“Snapshots”页面选择要与虚拟机一起克隆的快照树部分。
    • Current Machine State: 克隆虚拟机的当前状态。不包含快照。
    • Everything: 克隆当前机器状态及其所有快照。
  7. 单击“Finish”开始克隆操作。

克隆操作的持续时间取决于所连接磁盘映像的大小和数量。此外,克隆操作会保存快照的所有差异磁盘映像。

您还可以使用 VBoxManage clonevm 命令克隆虚拟机。请参阅VBoxManage clonevm

导入和导出虚拟机

Oracle VirtualBox 可以导入和导出以下格式的虚拟机。

关于OVF格式

OVF 是一个跨平台标准,受许多虚拟化产品支持,它能够创建现成的虚拟机,然后可以将其导入到 Oracle VirtualBox 等管理程序中。Oracle VirtualBox 可轻松进行 OVF 导入和导出,方法是使用 VirtualBox Manager 或命令行界面。

使用 OVF 可以打包虚拟设备。这些是磁盘映像,以及可以轻松分发的配置设置。这样,就可以提供完整的即用型软件包,包括带有应用程序的操作系统,这些包在导入到 Oracle VirtualBox 之前不需要任何配置或安装。

注意

OVF 标准很复杂,并且 Oracle VirtualBox 中的支持是一个持续的过程。特别是,不保证 Oracle VirtualBox 支持由其他虚拟化软件创建的所有设备。有关已知限制的列表,请参阅已知限制

OVF格式的设备可以以以下变体形式出现:

  • 它们可以包含多个文件,作为一个或多个磁盘映像,通常是广泛使用的 VMDK 格式。请参阅磁盘映像文件 (VDI, VMDK, VHD, HDD)。它们还包括一个使用 XML 方言的文本描述文件,扩展名为 .ovf。这些文件必须位于同一目录中,Oracle VirtualBox 才能导入它们。

  • 或者,上述文件可以打包到一个存档文件中,通常扩展名为 .ova。此类存档文件使用 TAR 存档格式的变体,因此可以使用任何可以解压标准 TAR 文件的实用程序在 Oracle VirtualBox 之外解压。

注意

OVF 无法描述虚拟机拍摄的快照。因此,当您导出具有快照的虚拟机时,仅会导出机器的当前状态。导出中的磁盘映像将具有与虚拟机当前状态相同的扁平化状态。

导入OVF格式的设备

以下步骤演示如何导入OVF格式的设备。

  1. 双击 OVF 或 OVA 文件。

    Oracle VirtualBox 会自动为您的主机 OS 上的任何 OVF 和 OVA 文件创建文件类型关联。

    将显示“Import Virtual Appliance”向导的“Appliance Settings”页面。此页面显示 OVF 或 OVA 文件中描述的虚拟机,并允许您更改虚拟机设置。

  2. 默认情况下,对于最初从 Oracle VirtualBox 导出的虚拟机,导入时会保留虚拟机组成员身份。您可以使用虚拟机的“Primary Group”设置更改此行为。

    以下全局设置适用于您导入的所有虚拟机:

    • Base Folder: 指定主机上用于存储导入的虚拟机的目录。

      如果设备有多个虚拟机,您可以通过编辑虚拟机的“Base Folder”设置为每个虚拟机指定不同的目录。

    • MAC Address Policy: 默认情况下,在导入之前重新初始化虚拟机网卡的 MAC 地址。您可以覆盖默认行为并在导入时保留 MAC 地址。

    • Import Hard Drives as VDI: 以 VDI 格式而不是默认的 VMDK 格式导入硬盘。

  3. 单击“Finish”导入设备。

    Oracle VirtualBox 复制磁盘映像,并使用“Appliance Settings”页面上描述的设置创建本地虚拟机。导入的虚拟机显示在 VirtualBox Manager 的虚拟机列表中。

    由于磁盘映像很大,虚拟设备中包含的VMDK映像以压缩格式交付,不能直接由虚拟机使用。因此,映像首先被解包和复制,这可能需要几分钟。

您可以使用 VBoxManage import 命令导入设备。请参阅VBoxManage import

以OVF格式导出设备

以下步骤演示如何以OVF格式导出设备。

  1. 选择“File”>“Export Appliance”以显示“Export Virtual Appliance”向导。

    在初始“Virtual Machines”页面上,您可以将多个虚拟机合并到一个 OVF 设备中。

    选择一个或多个虚拟机进行导出,然后单击“Next”。

  2. Format Settings”页面使您可以配置以下设置:

    • Format: 为输出文件选择“Open Virtualization Format”值。

      Oracle Cloud Infrastructure”值将设备导出到 Oracle Cloud Infrastructure。请参阅导出设备到 Oracle Cloud Infrastructure

    • File: 选择存储导出文件的位置。

    • MAC Address Policy: 指定导出时是否保留或重新分配网卡 MAC 地址。

    • Write Manifest File: 使您可以将清单文件包含在导出的存档文件中。

    • Include ISO Image Files: 使您可以将 ISO 映像文件包含在导出的存档文件中。

  3. 单击“Next”以显示“Appliance Settings”页面。

    您可以编辑虚拟设备的设置。例如,您可以更改虚拟设备的名称或添加产品信息,例如供应商详细信息或许可文本。

    双击相应的字段以更改其值。

  4. 单击“Finish”开始导出过程。请注意,此操作可能需要几分钟时间。

您可以使用 VBoxManage export 命令导出设备。请参阅VBoxManage export

Oracle Cloud Infrastructure 集成

本节介绍如何使用 Oracle VirtualBox 的功能与 Oracle Cloud Infrastructure 集成。

Oracle Cloud Infrastructure 集成涉及以下步骤:

准备与 Oracle Cloud Infrastructure 集成

在将 Oracle VirtualBox 用于与您的 Oracle Cloud Infrastructure 帐户集成之前,请执行以下配置步骤。

  1. 安装扩展包。 仅当您安装了 Oracle VirtualBox Extension Pack 时,才能使用云集成功能。请参阅安装 Oracle VirtualBox 和扩展包

  2. 创建密钥对。 生成用于向 Oracle Cloud Infrastructure 发送 API 请求的 API 签名密钥对。请参阅创建 API 签名密钥对

    将密钥对的公钥从客户端设备上传到云服务。请参阅将公钥上传到 Oracle Cloud Infrastructure

  3. 创建云配置文件。 云配置文件包含您的云帐户的资源标识符,例如您的用户 OCID 和密钥对的详细信息。请参阅创建云配置文件

创建API签名密钥对

要使用 Oracle VirtualBox 的云集成功能,您必须生成用于向 Oracle Cloud Infrastructure 发送 API 请求的 API 签名密钥对。

您的 API 请求将使用您的私钥进行签名,并且 Oracle Cloud Infrastructure 使用公钥来验证请求的真实性。您必须将公钥上传到 Oracle Cloud Infrastructure 控制台。

注意

此密钥对不是用于访问 Oracle Cloud Infrastructure 上计算实例的 SSH 密钥。

  1. (可选) 创建一个 .oci 目录来存储密钥对。

    $ mkdir ~/.oci

    密钥对通常安装在主目录中的 .oci 文件夹中。例如,在 Linux 系统上是 ~/.oci

  2. 生成私钥。

    使用 openssl 命令。

    • 生成带密码短语的私钥(提示输入密码短语)

      $ openssl genrsa -out ~/.oci/oci_api_key.pem -aes256 2048 
    • 生成带作为参数在命令行中输入的密码短语的私钥

      $ openssl genrsa -aes256 -passout pass:user_passphrase -out ~/.oci/oci_api_key.pem 2048
    • 生成不带密码的私钥

      $ openssl genrsa -out ~/.oci/oci_api_key.pem 2048
  3. 更改私钥的权限。

    $ chmod 600 ~/.oci/oci_api_key.pem

    生成公钥。

    $ openssl rsa -pubout -in ~/.oci/oci_api_key.pem -out ~/.oci/oci_api_key_public.pem

    如果设置了密码短语,则在提示时输入密码短语。

将公钥上传到 Oracle Cloud Infrastructure

使用以下步骤将您的公钥上传到 Oracle Cloud Infrastructure

  1. 登录到 Oracle Cloud Console

  2. 显示“User Settings”页面。

    单击“Profile”>“User Settings”。

  3. 显示您当前的API签名密钥。

    单击“Resources”>“API Keys”。

  4. 上传公钥。

    单击“Add Public Key”。

    将显示“Add Public Key”对话框。

  5. 选择以下选项之一:

    • Choose Public Key File. 此选项使您可以浏览到本地硬盘上的公钥文件。

    • Paste Public Keys. 此选项使您可以将公钥文件的内容粘贴到对话框中的窗口中。

  6. 单击“Add”以上传公钥。

创建云配置文件

Oracle VirtualBox 使用云配置文件连接到 Oracle Cloud Infrastructure。云配置文件是一个文本文件,其中包含您的密钥文件详细信息和 Oracle Cloud Identifier (OCID) 资源标识符,例如以下内容:

  • 公钥的指纹。 要获取指纹,您可以使用 openssl 命令。

    $ openssl rsa -pubout -outform DER -in ~/.oci/oci_api_key.pem | openssl md5 -c
  • 私钥在客户端设备上的位置。 指定私钥的完整路径。

  • (Optional) 私钥的密码短语。 仅当密钥已加密时才需要。

  • Region。在 Oracle Cloud Infrastructure 控制台上显示。单击“Administration”>“Tenancy Details”。

  • Tenancy OCID.Oracle Cloud Infrastructure 控制台上显示。单击“Administration”>“Tenancy Details”。

    一个链接使您能够复制租户OCID。

  • Compartment OCID.Oracle Cloud Infrastructure 控制台上显示。单击“Identity”>“Compartments”。

    一个链接使您能够复制区间OCID。

  • User OCID.Oracle Cloud Infrastructure 控制台上显示。单击“Profile”>“User Settings”。

    一个链接使您能够复制用户OCID。

您可以通过以下方式创建云配置文件:

  • 自动,通过使用“Cloud Profile Manager”。请参阅使用云配置文件管理器

    云配置文件管理器是一个 VirtualBox Manager 工具,它使您能够创建、编辑和管理您的云服务帐户的云配置文件。

  • 自动,通过使用 VBoxManage cloudprofile 命令。请参阅VBoxManage cloudprofile

  • 手动,通过在您的 Oracle VirtualBox 全局配置文件目录中创建 oci_config 文件。例如,在 Linux 主机上是 $HOME/.config/VirtualBox/oci_config

  • 手动,通过在您的 Oracle Cloud Infrastructure 配置文件目录中创建 config 文件。例如,在 Linux 主机上是 $HOME/.oci/config

    这是 Oracle Cloud Infrastructure 命令行界面使用的相同文件。

    Oracle VirtualBox 在您的全局配置文件目录中没有云配置文件文件时,会自动使用 config 文件。或者,您可以手动将此文件导入到云配置文件管理器中。

使用云配置文件管理器

要打开云配置文件管理器,请在 VirtualBox Manager 中单击“File”>“Cloud Profile Manager”。

您可以通过以下方式使用云配置文件管理器:

  • 自动创建新的云配置文件。

  • 通过从您的 Oracle Cloud Infrastructure 配置文件导入设置来创建云配置文件。

创建新的云配置文件

  1. 单击“Add”图标,然后为配置文件指定一个“Name”。

  2. 单击“Properties”并为配置文件指定以下属性值:

    • 区间OCID

    • 公钥指纹

    • 客户端设备上私钥的位置

    • 区域OCID

    • 租户OCID

    • 用户OCID

    其中一些是您的 Oracle Cloud Infrastructure 帐户的设置,您可以在 Oracle Cloud Console 中查看。

  3. (可选) 如果您使用云配置文件连接到云虚拟机,请选择“Show VMs”复选框。

    这将在 VirtualBox ManagerOCI 组下创建一个新的子组。请参阅关于 OCI 虚拟机组

  4. 单击“Apply”以保存您的更改。

    云配置文件设置将保存到您的 Oracle VirtualBox 全局设置目录中的 oci_config 文件。

您还可以使用 VBoxManage cloudprofile 来创建云配置文件。请参阅将 VBoxManage 命令与 Oracle Cloud Infrastructure 结合使用

导入云配置文件

按照以下步骤将现有的 Oracle Cloud Infrastructure 配置文件导入到云配置文件管理器中:

  1. 确保您的 Oracle Cloud Infrastructure 配置文件目录中存在 config 文件。例如,在 Linux 主机上是 $HOME/.oci/config

  2. 单击“Import”图标以打开一个提示您从外部文件导入云配置文件的对话框。

    注意

    此操作将覆盖您 Oracle VirtualBox 全局设置目录中已有的任何云配置文件。

  3. 单击“Import”。

    您的云配置文件设置将保存到您的 Oracle VirtualBox 全局设置目录中的 oci_config 文件。

  4. 单击“Properties”以显示云配置文件设置。

    双击相应的字段以更改值。

  5. 单击“Apply”以保存您的更改。

Oracle VirtualBoxOracle Cloud Infrastructure 结合使用

本节介绍如何将 Oracle VirtualBoxOracle Cloud Infrastructure 结合使用来执行以下任务:

使用云虚拟机

云虚拟机(云 VM)是一种虚拟机,代表云服务上的实例。云 VM 以与本地虚拟机相同的方式显示在 VirtualBox Manager 的虚拟机列表中。

通过使用云 VM,您可以从 VirtualBox Manager 创建、管理和控制您的 Oracle Cloud Infrastructure 实例。

注意

云 VM 不会在 Oracle VirtualBox 主机上安装、导出或导入实例。所有操作都在云服务上远程完成。

云 VM 可用于执行以下 Oracle Cloud Infrastructure 任务:

  • 创建新的 Oracle Cloud Infrastructure 实例。 请参阅创建新的云 VM

  • 使用现有的 Oracle Cloud Infrastructure 实例。 请参阅添加云 VM

  • 复制现有的 Oracle Cloud Infrastructure 实例。 请参阅克隆云 VM

  • 配置 Oracle Cloud Infrastructure 实例。 您可以更改实例的设置,例如显示名称。请参阅更改云 VM 的设置

  • 控制 Oracle Cloud Infrastructure 实例。 停止、启动和终止实例。请参阅控制云 VM

  • 创建到 Oracle Cloud Infrastructure 实例的控制台连接。请参阅为云 VM 创建实例控制台连接

关于OCI虚拟机组

所有云 VM 都显示在 VirtualBox Manager 的虚拟机列表中,位于一个名为 OCI 的特殊虚拟机组中。

云 VM 会根据用于连接它们的云配置文件进一步分组。云配置文件标识云 VM 的用户和隔间,并包含用于连接到云实例的密钥对的详细信息。请参阅创建云配置文件

已向 Oracle VirtualBox 注册的所有云配置文件都会自动列在 OCI 组中。

要启用或禁用特定云配置文件的云 VM 在 VirtualBox Manager 中的列表显示,请执行以下步骤:

  1. 显示“Cloud Profile Manager”。
  2. 为每个云配置文件选择或清除“List VMs”复选框。

创建新的云虚拟机

当您创建新的云 VM 时,会创建一个Oracle Cloud Infrastructure 实例并将其与云 VM 相关联。

执行以下步骤以创建新的云虚拟机:

  1. OCI 组中单击某个云配置文件。

    显示所选云配置文件的云虚拟机。

  2. 选择“Group”>“New Machine”。

  3. 为新云 VM 配置以下设置:

    • Location: 将托管新实例的云服务提供商。选择“Oracle Cloud Infrastructure”。

    • Profile: 用于连接到新实例的云配置文件。从可用云配置文件中进行选择。

    • Source: 新实例所基于的映像。从可用映像和引导卷中选择。

  4. 根据需要更改“Cloud Virtual Machine Settings”。您可能需要更改显示名称、形状和网络配置。

    要将 SSH 密钥添加到实例,请单击“SSH Authorised Keys”字段,然后将公钥粘贴到显示的对话框中。

  5. 单击“Finish”以使用选定的映像或引导卷创建新的 Oracle Cloud Infrastructure 实例。新实例会自动启动。

    新的云 VM 显示在 VirtualBox ManagerOCI 组中。

添加云虚拟机

当您添加云 VM 时,一个现有的 Oracle Cloud Infrastructure 实例将与该云 VM 相关联。每个实例只能添加一个云 VM。

执行以下步骤以添加云虚拟机:

  1. OCI 组中单击某个云配置文件。

    显示所选云配置文件的云虚拟机。

  2. 选择“Group”>“Add Machine”。

  3. 配置以下设置:

    • 源: 托管云虚拟机所用实例的云服务提供商。选择 Oracle Cloud Infrastructure

    • 配置文件: 用于连接到正在运行的实例的云配置文件。从可用的云配置文件中进行选择。

    • 实例: 用于云虚拟机的实例。从您的云服务上的可用实例中进行选择。

  4. 点击 完成 以添加基于所选实例的云虚拟机。

    一个名称与实例相同的云虚拟机将被添加到 VirtualBox Manager 中的 OCI 组。

  5. (可选)要更改实例的显示名称,请点击 设置 并编辑 显示名称 字段。

    VirtualBox Manager 中的云虚拟机名称会自动更新。

克隆云虚拟机

当您克隆云虚拟机时,将创建该云虚拟机所属的 Oracle Cloud Infrastructure 实例的副本,并将其关联到新的云虚拟机。

执行以下步骤克隆云虚拟机

  1. OCI 组中单击某个云配置文件。

    显示所选云配置文件的云虚拟机。

  2. 右键单击要克隆的云虚拟机,然后选择 克隆

    将显示 克隆名称 对话框。

    输入克隆的名称。

    输入的名称也将用作相关 Oracle Cloud Infrastructure 实例的显示名称。克隆的默认名称是在原始名称后附加 _clone 后缀。例如,ol9-dev_clone

  3. 点击 确定 以创建克隆和相关的 Oracle Cloud Infrastructure 实例。新实例将自动启动。

    新的云 VM 显示在 VirtualBox ManagerOCI 组中。

更改云虚拟机的设置

VirtualBox Manager 中选择云虚拟机,然后点击 设置

  • 对于 的云虚拟机,您可以更改 Oracle Cloud Infrastructure 实例的许多设置,例如显示名称、形状和磁盘大小。

  • 当您基于现有 Oracle Cloud Infrastructure 实例 添加 云虚拟机时,您只能更改显示名称。

控制云虚拟机

您可以使用 VirtualBox Manager 按如下方式控制云虚拟机

  • 启动。 使用 VirtualBox Manager 工具栏中的 启动 按钮。

  • 停止。 单击云虚拟机名称,然后选择 计算机停止。可以使用关机和断电的菜单选项来关闭云虚拟机。

  • 重置。 单击云虚拟机名称,然后选择 计算机重置。云虚拟机将被停止,然后自动重新启动。

  • 终止。 使用 VirtualBox Manager 工具栏中的 终止 按钮。

    注意

    此操作将从 Oracle Cloud Infrastructure 中删除该实例。

当您在 VirtualBox Manager 中控制云虚拟机时,计算机列表将自动使用当前实例状态(如 已停止正在运行)进行更新。

当您使用 Oracle Cloud Infrastructure 控制台控制实例时,VirtualBox Manager 会自动更新相应云虚拟机的状态。

监控云虚拟机性能

您可以通过以下方式监控云虚拟机实例的性能

  • 使用 VirtualBox Manager 中的虚拟机监控工具。

    • 显示云虚拟机的详细性能数据

      在计算机列表中单击云虚拟机名称,然后在计算机工具菜单中选择 活动

      将显示几个时间序列图表,显示资源使用情况和性能数据。要将数据保存到文件,请单击 导出

    • 显示所有云虚拟机的性能摘要

      点击 活动概览。将显示活动概览工具,显示所有正在运行的云虚拟机和主机系统的性能指标摘要。

    另请参阅 虚拟机监控

  • 使用 VBoxManage cloud instance 命令,如下所示

    • VBoxManage cloud instance metriclist 显示实例的可用指标。

    • VBoxManage cloud instance metricdata 显示实例的指标数据。

    另请参阅 VBoxManage cloud

注意

要监控云虚拟机,必须在 Oracle Cloud Infrastructure 实例上启用并运行计算实例监控插件。有关更多详细信息,请参阅 Oracle Cloud Infrastructure 文档。

移除云虚拟机

您可以使用 VirtualBox Manager 按如下方式删除云虚拟机

右键单击云虚拟机名称,然后选择 删除

  • 单击 仅删除 将云虚拟机从 VirtualBox Manager 的计算机列表中删除。

  • 单击 删除所有内容 将云虚拟机从 VirtualBox Manager 中删除,同时删除 Oracle Cloud Infrastructure 实例以及任何关联的引导卷。

为云虚拟机创建实例控制台连接

要创建实例控制台连接,云虚拟机必须处于 正在运行 状态。

  1. 右键单击云虚拟机名称,然后选择 控制台创建连接
  2. 将显示 公钥 对话框。将用于实例连接的公钥粘贴到对话框中,然后单击 确定

    默认情况下,使用SSH密钥文件夹中的第一个条目或用于您之前实例控制台连接的公钥。

  3. 单击 连接 以连接到实例。实例控制台将自动显示在主机上。

  4. (可选)单击 显示日志 以显示实例控制台连接的日志消息。

有关如何使用实例控制台连接来故障排除实例问题的详细信息,请参阅 Oracle Cloud Infrastructure 文档。

将应用导出到 Oracle Cloud Infrastructure

Oracle VirtualBox 支持将虚拟机导出到 Oracle Cloud Infrastructure 服务。导出的虚拟机将作为自定义 Linux 映像存储在 Oracle Cloud Infrastructure 上。您可以配置导出过程完成后是否创建和启动云实例。

注意

在将虚拟机导出到 Oracle Cloud Infrastructure 之前,您必须按照 准备虚拟机以导出到 Oracle Cloud Infrastructure 中所述进行准备。

使用以下步骤将虚拟机导出到 Oracle Cloud Infrastructure

  1. 选择 文件导出应用

  2. 选择要导出的虚拟机,然后单击 下一步 以显示 格式设置 页面。

  3. 格式 下拉列表中,选择 Oracle Cloud Infrastructure

  4. 配置文件 下拉列表中,选择您 Oracle Cloud Infrastructure 帐户使用的云配置文件。

  5. 计算机创建 字段中,选择一个选项来配置导出到 Oracle Cloud Infrastructure 时创建的云实例的设置。这些选项允许您执行以下操作之一:

    • 在导出虚拟机 之后 配置云实例的设置。

    • 在启动导出虚拟机 之前 配置云实例的设置。

    • 导出虚拟机时不创建云实例。

    单击 下一步 以向 Oracle Cloud Infrastructure 服务发出 API 请求,然后打开 应用设置 页面。

  6. (可选)编辑用于 Oracle Cloud Infrastructure 中导出的虚拟机的存储设置。您可以更改以下设置:

    • 用于存储导出文件的存储桶名称。

    • 是否在 Oracle Cloud Infrastructure 中存储自定义映像。

    • Oracle Cloud Infrastructure 中自定义映像的显示名称。

    • 云实例的启动模式。

      半虚拟化 模式可提高性能,适用于大多数 Oracle VirtualBox 虚拟机。

      模拟 模式适用于旧版操作系统映像。

    点击 完成 继续。

  7. (可选)根据 计算机创建 字段中的选择,应用设置 页面可能在导出之前或之后显示。此屏幕允许您配置云实例的设置,例如形状和磁盘大小。

    点击 完成。虚拟机将被导出到 Oracle Cloud Infrastructure

    根据 计算机创建 设置,在上传到 Oracle Cloud Infrastructure 完成后,可能会启动云实例。

  8. 使用 Oracle Cloud Console 监控导出过程。

您还可以使用 VBoxManage export 命令将虚拟机导出到 Oracle Cloud Infrastructure。请参阅 VBoxManage export

准备虚拟机以导出到 Oracle Cloud Infrastructure

Oracle Cloud Infrastructure 提供了导入自定义 Linux 映像的选项。在将 Oracle VirtualBox 映像导出到 Oracle Cloud Infrastructure 之前,需要准备自定义映像,以确保从自定义映像启动的实例能够正确启动,并且网络连接能够正常工作。本节提供了有关如何准备 Linux 映像以从 Oracle VirtualBox 导出的建议。

以下列表显示了在准备Oracle Linux虚拟机以供导出时要考虑的一些任务:

  • 使用 DHCP 进行网络地址分配。 将虚拟机配置为使用 DHCP 服务器分配网络地址,而不是使用静态 IP 地址。然后,Oracle Cloud Infrastructure 实例将自动分配 IP 地址。

  • 不要指定 MAC 地址。 虚拟机网络接口配置不得指定 MAC 地址。

    /etc/sysconfig/ifcfg-devicename 网络脚本中删除 HWADDR 设置。

  • 禁用持久性网络设备命名规则。 这意味着 Oracle Cloud Infrastructure 实例将使用与虚拟机相同的网络设备名称。

    1. 更改GRUB内核参数。

      net.ifnames=0biosdevname=0 添加为内核参数值到 GRUB_CMDLINE_LINUX 变量。

    2. 更新GRUB配置。

      # grub2-mkconfig -o /boot/grub2/grub.cfg
    3. 禁用任何用于网络设备命名的 udev 规则。

      例如,如果存在用于 net-persistence 的自动 udev 规则

      # cd /etc/udev/rules.d
      # rm -f 70-persistent-net.rules
      # ln -s /dev/null /etc/udev/rules.d/70-persistent-net.rules
  • 启用串行控制台。 这使您可以在实例于 Oracle Cloud Infrastructure 上运行时进行故障排除。

    1. 按如下方式编辑 /etc/default/grub 文件:

      • 从内核参数中删除 resume 设置。此设置会显著减慢启动时间。

      • GRUB_TERMINAL="gfxterm" 替换为 GRUB_TERMINAL="console serial"。这会将串行控制台配置为替代图形终端。

      • 添加 GRUB_SERIAL_COMMAND="serial --unit=0 --speed=115200"。这会配置串行连接。

      • console=tty0 console=ttyS0,115200 添加到 GRUB_CMDLINE_LINUX 变量。这会将串行控制台添加到 Linux 内核启动参数。

    2. 重新生成GRUB配置。

      # grub2-mkconfig -o /boot/grub2/grub.cfg
    3. 要验证更改,请重启计算机并运行 dmesg 命令以查找更新的内核参数。

      # dmesg |grep console=ttyS0
  • 启用半虚拟化设备支持。 您可以通过将 virtio 驱动程序添加到虚拟机的 initrd 来实现此目的。

    1. 此过程仅适用于Linux内核版本3.4或更高版本的计算机。检查虚拟机是否正在运行受支持的内核:

      # uname -a
    2. 使用 dracut 工具重建 initrd。添加 qemu 模块,如下所示:

      # dracut –-logfile /var/log/Dracut.log --force --add qemu
    3. 验证 virtio 驱动程序是否已包含在 initrd 中。

       # lsinitrd |grep virtio

有关将自定义 Linux 映像导入 Oracle Cloud Infrastructure 的更多信息,另请参阅:

https://docs.cloud.oracle.com/iaas/Content/Compute/Tasks/importingcustomimagelinux.htm

Oracle Cloud Infrastructure 导入实例

执行以下步骤将云实例从 Oracle Cloud Infrastructure 导入到 Oracle VirtualBox

  1. 选择 文件导入应用

    下拉列表中,选择 Oracle Cloud Infrastructure

    配置文件 下拉列表中,选择您 Oracle Cloud Infrastructure 帐户的云配置文件。

    计算机 字段中的列表中选择所需的云实例。

    点击 下一步 以向 Oracle Cloud Infrastructure 服务发出 API 请求,并显示 应用设置 页面。

  2. (可选)编辑新本地虚拟机的设置。

    例如,您可以编辑将用于虚拟机的名称和描述。

    点击 完成 以从 Oracle Cloud Infrastructure 导入实例。

  3. 使用 Oracle Cloud Console 监控导入过程。

您还可以使用 VBoxManage import 命令从 Oracle Cloud Infrastructure 导入实例。请参阅 VBoxManage import

导入实例:事件概述

以下描述了从 Oracle Cloud Infrastructure 导入实例时事件的顺序。

  • 从实例的引导卷创建自定义映像。

  • 自定义映像被导出到 Oracle Cloud Infrastructure 对象,并使用对象存储存储在用户指定的存储桶中。

  • Oracle Cloud Infrastructure 对象被下载到本地主机。该对象是一个 TAR 存档,其中包含实例的引导卷(QCOW2 格式)和一个包含与实例相关的元数据的 JSON 文件。

  • 实例的引导卷从存档中提取出来,并通过将引导卷转换为 VMDK 格式来创建一个新的 VMDK 映像。VMDK 映像已注册到 Oracle VirtualBox

  • 使用云实例的VMDK映像创建一个新的虚拟机。

    默认情况下,导入 Oracle Cloud Infrastructure 后,新虚拟机不会启动。

  • 成功导入后,下载的TAR归档文件将被删除。

使用云网络

云网络是一种可用于本地虚拟机连接到远程 Oracle Cloud Infrastructure 云实例的网络类型。

要创建和使用云网络,请执行以下操作:

  1. Oracle Cloud Infrastructure 上设置虚拟云网络。

    以下步骤将在 Oracle Cloud Infrastructure 上创建和配置虚拟云网络(VCN)。VCN 用于通过云隧道网络流量。

    1. 确保您拥有用于连接到 Oracle Cloud Infrastructure 的云配置文件。请参阅 创建云配置文件

    2. 运行以下 VBoxManage cloud 命令:

      VBoxManage cloud --provider="OCI" --profile="vbox-oci" network setup

      其中 vbox-oci 是您的云配置文件的名称。

      VBoxManage cloud network setup 命令提供其他选项,以便您配置 VCN 的详细信息。例如,您可以配置用于云网关实例的操作系统以及用于隧道网络的 IP 地址范围。请参阅 VBoxManage cloud

      为获得最佳效果,请使用Oracle Linux 7实例作为云网关。这是默认选项。

  2. 将新的云网络注册到 Oracle VirtualBox

    使用 网络管理器 工具中的 云网络 选项卡。请参阅 云网络选项卡

  3. 将云网络适配器添加到将使用云网络的本地虚拟机。请参阅 云网络

将 VBoxManage 命令与 Oracle Cloud Infrastructure 结合使用

本节包含一些关于如何使用 VBoxManage 命令与 Oracle Cloud Infrastructure 集成并执行常见云操作的示例。

创建云配置文件

Oracle Cloud Infrastructure 创建一个名为 vbox-oci 的云配置文件,将其作为云提供商。

VBoxManage cloudprofile --provider "OCI" --profile="vbox-oci" add \
--clouduser="ocid1.user.oc1..."  --keyfile="/home/username/.oci/oci_api_key.pem" \
--tenancy="ocid1.tenancy.oc1..."  --compartment="ocid1.compartment.oc1..."  --region="us-ashburn-1"

新的云配置文件将添加到您的 Oracle VirtualBox 全局配置目录中的 oci_config 文件中。例如,在 Windows 主机上,这通常是 $HOME/.VirtualBox/oci_config

列出云实例

列出您 Oracle Cloud Infrastructure 租用户中的实例

VBoxManage cloud --provider="OCI" --profile="vbox-oci" list instances

Oracle VirtualBox 虚拟机导出到云

导出名为 myVM 的虚拟机并创建一个名为 myVM_Cloud 的云实例

VBoxManage export myVM --output OCI:// --cloud 0 --vmname myVM_Cloud \
--cloudprofile "vbox-oci" --cloudbucket myBucket \
--cloudshape VM.Standard2.1 --clouddomain US-ASHBURN-AD-1 --clouddisksize 50  \
--cloudocivcn ocid1.vcn.oc1... --cloudocisubnet ocid1.subnet.oc1... \
--cloudkeepobject true --cloudlaunchinstance true --cloudpublicip true
      

将云实例导入到 Oracle VirtualBox

导入云实例并创建名为 oci_ImportOracle VirtualBox 虚拟机

VBoxManage import OCI:// --cloud --vmname oci_Import --memory 4000
--cpus 3 --ostype FreeBSD_64 --cloudprofile "vbox-oci"
--cloudinstanceid ocid1.instance.oc1... --cloudbucket myBucket
  

从自定义映像创建新的云实例

Oracle Cloud Infrastructure 上的自定义映像创建新的云实例

VBoxManage cloud --provider="OCI" --profile="vbox-oci" instance create \
--domain-name="oraclecloud.com" --image-id="ocid1.image.oc1..." --display-name="myInstance" \
--shape="VM.Standard2.1" --subnet="ocid1.subnet.oc1..."

终止云实例

终止您在 Oracle Cloud Infrastructure 租用户中的实例

VBoxManage cloud --provider="OCI" --profile="vbox-oci" instance terminate \
--id="ocid1.instance.oc1..." 

显示云实例性能指标

显示云实例的 CPU 使用率指标

VBoxManage cloud --provider="OCI" --profile="vbox-oci" instance metricdata \
--id="ocid1.instance.oc1..." --metric-name="CpuUtilization"

有关可用于云操作的命令的更多详细信息,请参阅 VBoxManage cloud

软键盘

Oracle VirtualBox 提供了一个 软键盘,它允许您在客户机中输入键盘字符。软键盘是一个屏幕键盘,可以用作物理键盘的替代品。有关如何使用软键盘的详细信息,请参阅 使用软键盘

注意

为获得最佳效果,请确保客户机操作系统上配置的键盘布局与软键盘使用的键盘布局匹配。 Oracle VirtualBox 不会自动执行此操作。

软键盘可在以下场景中使用

  • 当主机上的物理键盘与客户机上配置的键盘布局不同时。例如,如果客户机配置为使用国际键盘,但主机键盘是美式英语。

  • 将特殊按键组合发送到客户机。请注意,一些常见的按键组合也可在客户机虚拟机窗口的 输入键盘 菜单中找到。请参阅 输入特殊字符

  • 对于没有物理键盘的自助终端模式客户机。

  • 使用嵌套虚拟化时,软键盘提供了一种向客户机发送按键的方法。

默认情况下,软键盘包含一些常见的国际键盘布局。您可以复制并修改这些布局以满足您的需求。请参阅 创建自定义键盘布局

使用软键盘

  1. 显示软键盘。

    在客户机虚拟机窗口中,选择 输入键盘软键盘

  2. 选择所需的键盘布局。

    软键盘窗口的工具栏中显示当前键盘布局的名称。这是之前使用的键盘布局。

    单击软键盘窗口工具栏中的 布局列表 图标。将显示 布局列表 窗口。

    布局列表 窗口的条目中选择所需的键盘布局。

    键盘显示图形将更新以显示可用的输入键。

  3. 使用软键盘在客户机上输入键盘字符。

    • 软键盘上提供 Shift、Ctrl 和 Alt 等修饰键。单击一次选择修饰键,单击两次锁定修饰键。

      重置键盘并释放所有按键 图标可用于释放主机和客户机上所有按下的修饰键。

    • 要更改软键盘的外观,请单击工具栏中的 设置 图标。您可以更改键盘图形中使用的颜色,并且可以隐藏或显示键盘的某些部分,例如数字键盘或多媒体键。

创建自定义键盘布局

您可以使用提供的默认键盘布局之一作为起点来创建自定义键盘布局。

注意

要永久保存自定义键盘布局,您必须将其保存到文件中。否则,当您关闭 软键盘 窗口时,所做的任何更改都将被丢弃。

您保存的自定义键盘布局将作为 XML 文件存储在主机上,位于全局配置数据目录的 keyboardLayouts 文件夹中。例如,在 Linux 主机上,这通常是 $HOME/.config/VirtualBox/keyboardLayouts

  1. 显示 布局列表

    单击软键盘窗口工具栏中的 布局列表 图标。

  2. 复制现有键盘布局。

    高亮显示所需的布局,然后单击 复制选定布局 图标。

    将创建一个新的布局条目,其名称后缀为 -Copy

  3. 编辑新键盘布局。

    高亮显示 布局列表 中的新布局,然后单击 编辑选定布局 图标。

    输入布局的新名称。

    编辑新布局中的按键。单击要编辑的按键,然后在 标题 字段中输入新的按键标题。

    键盘图形将使用新标题进行更新。

  4. (可选)将布局保存到文件。这意味着您的自定义键盘布局将可供将来使用。

    高亮显示 布局列表 中的新布局,然后单击 将选定布局保存到文件 图标。

    您可以稍后通过高亮显示 布局列表 中的自定义布局并单击 删除选定布局 图标来将其从布局列表中删除。

虚拟机监控

VirtualBox Manager 包含以下工具,用于查看虚拟机和云虚拟机实例的运行时信息、配置详细信息和性能指标。

注意

要监控云虚拟机,必须在 Oracle Cloud Infrastructure 实例上启用并运行计算实例监控插件。有关更多详细信息,请参阅 Oracle Cloud Infrastructure 文档。

  • 虚拟机活动概览。 显示所有正在运行的虚拟机和云虚拟机实例的性能指标概览。

    请参阅 虚拟机活动概览

  • 会话信息对话框。 显示选定的客户机系统或云虚拟机的配置和运行时信息。

    请参阅 会话信息对话框

虚拟机活动概览

虚拟机活动概览工具显示所有正在运行的虚拟机和云虚拟机实例以及主机系统的多个性能指标。这提供了对各个虚拟机和主机系统使用的系统资源的概览。

要显示虚拟机活动概览工具,请打开全局 工具 菜单,然后单击 活动。将显示 虚拟机活动概览 窗口。

  • 要显示 所有 虚拟机的指标,包括未运行的虚拟机,请右键单击虚拟机列表,然后选择 列出所有虚拟机
  • 要显示云虚拟机的指标,请右键单击虚拟机列表,然后选择 显示云虚拟机
  • 要配置要显示的指标集,请单击工具栏中的 。然后,您可以按特定指标对虚拟机列表进行排序。
  • 要查看虚拟机的更多性能信息,请选择虚拟机名称,然后单击工具栏中的 虚拟机活动。将显示 会话信息 对话框的 虚拟机活动 选项卡,请参阅 会话信息对话框

会话信息对话框

会话信息对话框包含多个选项卡,显示客户机系统重要的配置和运行时信息。这些选项卡如下:

  • 配置详细信息。以表格格式显示虚拟机的系统配置。显示的信息包括存储配置和音频设置等详细信息。

  • 运行时信息。以与配置详细信息选项卡类似的表格格式显示客户机系统的运行时信息。

  • 虚拟机活动。包含多个时间序列图表,用于监控客户机资源使用情况,包括 CPU、RAM、磁盘 I/O 和网络。请注意,RAM 图表需要客户机系统上正在运行客户机增强功能。还可以直接从虚拟机活动概览工具访问虚拟机活动选项卡。请参阅 虚拟机活动概览

  • 客户机控制。有关客户机控制文件管理器使用的进程的详细信息。请参阅 客户机控制文件管理器

注意

对于云虚拟机,仅显示虚拟机活动选项卡。

要显示客户机虚拟机或云虚拟机的会话信息,请在机器列表中选择虚拟机名称,然后在机器工具菜单中单击 活动

日志查看器

每次启动虚拟机时,Oracle VirtualBox 都会创建一个日志文件,该文件记录系统配置和事件。 日志查看器 是一个 VirtualBox Manager 工具,允许您查看和分析系统日志。

要显示日志查看器,请执行以下任一操作

  • 在机器列表中单击虚拟机名称,然后在机器工具菜单中选择 日志

  • 在虚拟机中,选择 计算机显示日志

虚拟机日志消息将在日志查看器窗口的选项卡中显示。有关 Oracle VirtualBox 生成的各种日志文件的详细信息,请参阅 收集调试信息

如果在机器列表中选择多个虚拟机,则会列出每个虚拟机的日志。

日志查看器的工具栏包括以下选项

  • 保存: 将选定日志文件的内容导出到文本文件。在显示的对话框中指定目标文件名和位置。

  • 查找: 在日志文件中搜索文本字符串。

  • 过滤: 使用过滤器术语显示特定类型的日志消息。 Oracle VirtualBox 使用的常见日志消息术语,如音频和 NAT,已包含在默认设置中。从下拉列表中选择一个或多个术语。要添加您自己的过滤器术语,请在文本框字段中输入文本字符串。

  • 书签: 保存日志消息的位置,使您可以快速找到它。要创建书签,请单击行号,或选择一些文本然后单击 书签

  • 首选项: 配置日志消息窗口中使用的文本显示。

  • 刷新: 刷新您当前正在查看的日志文件。仅更新当前选项卡中的日志消息。

  • 重新加载: 刷新所有日志文件。更新每个选项卡中的日志消息。

  • 设置: 显示虚拟机的 设置 窗口,使您可以进行配置更改。

  • 放弃: 对于正在运行的虚拟机,放弃虚拟机的保存状态并关闭它。

  • 显示/启动: 对于正在运行的虚拟机,显示 显示虚拟机窗口。对于已停止的虚拟机,启动 显示用于启动虚拟机的选项。

安装详情

由于 Oracle VirtualBox 的安装因主机操作系统而异,因此以下各节提供了 Windows、macOS、Linux 和 Oracle Solaris 的安装说明。

在 Windows 主机上安装

先决条件

有关支持的 Windows 主机操作系统版本,请参阅 可用安装包

此外,您的系统上必须存在 Windows Installer。所有受支持的 Windows 平台都应如此。

Windows 安装目录安全要求

Windows 主机上的安装目录必须满足某些安全要求,才能被 Windows 安装程序接受。

这也适用于 Oracle VirtualBox 的升级。

例如,当将 Oracle VirtualBox 安装到自定义位置 X:\Data\MyPrograms\Oracle VirtualBox 时,此路径的所有父目录(即 X:\Data 和 X:\Data\MyPrograms)都必须满足以下自由访问控制列表 (DACL)。
        Users               S-1-5-32-545:(OI)(CI)(RX)
        Users               S-1-5-32-545:(DE,WD,AD,WEA,WA)
        Authenticated Users S-1-5-11:(OI)(CI)(RX)
        Authenticated Users S-1-5-11:(DE,WD,AD,WEA,WA)
      
所有父目录也必须禁用目录继承。
您可以使用 icacls Windows 命令行工具修改目录以满足安全要求。例如:
      icacls <Directory> /reset /t /c
      icacls <Directory> /inheritance:d /t /c
      icacls <Directory> /grant *S-1-5-32-545:(OI)(CI)(RX)
      icacls <Directory> /deny  *S-1-5-32-545:(DE,WD,AD,WEA,WA)
      icacls <Directory> /grant *S-1-5-11:(OI)(CI)(RX)
      icacls <Directory> /deny  *S-1-5-11:(DE,WD,AD,WEA,WA)
      
请注意,这些命令必须对所有父目录(本例中为 X:\Data 和 X:\Data\MyPrograms)重复执行。

执行安装

Oracle VirtualBox 的安装可以通过以下任一方式启动:

  • 双击可执行文件。

  • 输入以下命令:

    VirtualBox-<version>-<revision>-Win.exe -extract

    这会将安装程序以及 .MSI 文件提取到临时目录中。运行以下命令执行安装:

    msiexec /i VirtualBox-<version>-<revision>-Win.msi

以上任一方式都将显示安装 欢迎 对话框,并允许您选择安装 Oracle VirtualBox 的位置以及要安装的组件。除了 Oracle VirtualBox 应用程序外,还提供以下组件:

  • USB 支持。 此包包含 Windows 主机所需的特殊驱动程序, Oracle VirtualBox 需要这些驱动程序才能完全支持虚拟机内的 USB 设备。

  • 网络。 此包包含 Windows 主机的额外网络驱动程序, Oracle VirtualBox 需要这些驱动程序来支持桥接网络。这使得您的物理网络上的其他计算机可以访问虚拟机的虚拟网卡。

  • Python 支持。 此包包含 Oracle VirtualBox API 的 Python 脚本支持,请参阅 Oracle VirtualBox 编程接口。要使其正常工作,系统上需要已安装并正常工作的 Windows Python。

    例如,请参阅:https://pythonlang.cn/download/windows/

    注意

    需要 Python 3 版本。不再支持 Python 2.x 版本。

根据您的 Windows 配置,您可能会看到有关未签名驱动程序的警告或其他类似信息。请单击 继续 来处理这些警告,否则 Oracle VirtualBox 安装后可能无法正常运行。

安装程序将在 Windows 开始 菜单中创建一个 Oracle VirtualBox 组,该组允许您启动应用程序并访问其文档。

使用标准设置,Oracle VirtualBox 将为本地系统的所有用户安装。如果不需要此行为,您必须首先按以下方式提取安装程序:

VirtualBox.exe -extract

然后,在提取的 .MSI 文件上运行以下任一命令。这将仅为当前用户安装 Oracle VirtualBox

VirtualBox.exe -msiparams ALLUSERS=2
msiexec /i VirtualBox-<version>-Win.msi ALLUSERS=2

如果您不想安装 Oracle VirtualBox 的所有功能,可以设置可选的 ADDLOCAL 参数来显式命名要安装的功能。以下功能可用:

VBoxApplication

Oracle VirtualBox 的主二进制文件。

注意

此功能不得缺失,因为它包含工作 Oracle VirtualBox 安装的最小文件集。

VBoxUSB

USB 支持。

VBoxNetwork

所有网络支持。这包括 VBoxNetworkFlt 和 VBoxNetworkAdp 功能。

VBoxNetworkFlt

桥接网络支持。

VBoxNetworkAdp

仅主机网络支持

VBoxPython

Python 支持

例如,要仅安装 USB 支持以及主二进制文件,运行以下任一命令:

VirtualBox.exe -msiparams ADDLOCAL=VBoxApplication,VBoxUSB
msiexec /i VirtualBox-<version>-Win.msi ADDLOCAL=VBoxApplication,VBoxUSB

用户可以在安装过程中选择 NDIS5 和 NDIS6 主机网络过滤器驱动程序。这是通过命令行参数 NETWORKTYPE 完成的。NDIS6 驱动程序是大多数受支持的 Windows 主机的默认驱动程序。对于某些旧版 Windows 版本,安装程序将自动选择 NDIS5 驱动程序,此选项无法更改。

您可以通过指定 NETWORKTYPE=NDIS5 来强制安装旧版 NDIS5 主机网络过滤器驱动程序。例如,要在 Windows 7 上安装 NDIS5 驱动程序,请使用以下任一命令:

VirtualBox.exe -msiparams NETWORKTYPE=NDIS5
msiexec /i VirtualBox-<version>-Win;.msi NETWORKTYPE=NDIS5

卸载

由于 Oracle VirtualBox 使用标准的 Microsoft Windows 安装程序,因此可以随时安全地卸载 Oracle VirtualBox。在 Windows 控制面板的 添加/删除程序 列表中单击程序条目。

无人值守安装

可以使用标准 MSI 支持执行无人值守安装。

公共属性

可以使用 MSI API 指定公共属性,以控制 Windows 主机安装程序的其他行为和功能。使用以下任一命令:

VirtualBox.exe -msiparams NAME=VALUE [...]
msiexec /i VirtualBox-<version>-Win.msi NAME=VALUE [...]

以下公共属性可用。

  • VBOX_INSTALLDESKTOPSHORTCUT

    指定是否在桌面上创建Oracle VirtualBox图标。

    设置为1表示启用,设置为0表示禁用。默认为1。

  • VBOX_INSTALLQUICKLAUNCHSHORTCUT

    指定是否在快速启动栏中创建Oracle VirtualBox图标。

    设置为1表示启用,设置为0表示禁用。默认为1。

  • VBOX_REGISTERFILEEXTENSIONS

    指定文件扩展名 .vbox、.vbox-extpack、.ovf、.ova、.vdi、.vmdk、.vhd 和 .vdd 是否与Oracle VirtualBox关联。这些类型的文件将随后使用Oracle VirtualBox打开。

    设置为1表示启用,设置为0表示禁用。默认为1。

  • VBOX_START

    指定是否在成功安装后立即启动Oracle VirtualBox

    设置为1表示启用,设置为0表示禁用。默认为1。

在 macOS 主机上安装

执行安装

对于 macOS 主机,Oracle VirtualBox 包含在一个 dmg 磁盘映像文件中。请按照以下步骤在 macOS 主机上安装:

  1. 双击 dmg 文件以挂载其内容。

  2. 将打开一个窗口,提示您双击该窗口中显示的 VirtualBox.pkg 安装程序文件。

  3. 这将启动安装程序,允许您选择安装 Oracle VirtualBox 的位置。

  4. 一个 Oracle VirtualBox 图标将被添加到 Finder 的 Applications 文件夹中。

卸载

要卸载 Oracle VirtualBox,请打开磁盘映像 dmg 文件,然后双击其中显示的卸载图标。

无人值守安装

要执行 Oracle VirtualBox 的非交互式安装,您可以使用安装程序应用程序的命令行版本。

按照安装过程中的说明挂载 dmg 磁盘映像文件,或使用以下命令行:

hdiutil attach /path/to/VirtualBox-xyz.dmg

打开终端会话并运行以下命令:

sudo installer -pkg /Volumes/VirtualBox/VirtualBox.pkg -target /Volumes/Macintosh\ HD

在 Linux 主机上安装

先决条件

有关支持的主机操作系统(Linux 的各种版本),请参阅 可用的安装程序包

在开始安装之前,您可能需要在 Linux 系统上安装以下程序包。某些系统会在您安装 Oracle VirtualBox 时自动为您完成此操作。

  • Qt 6.5.3 或更高版本。

注意

仅当您想运行 Oracle VirtualBox 的图形用户界面时才需要 Qt。特别是,图形化的 VirtualBox Manager VirtualBox 需要 Qt。如果您只想运行 VBoxHeadless,则不需要 Qt。

Oracle VirtualBox 内核模块

为了在您的主操作系统旁边运行虚拟机中的其他操作系统,Oracle VirtualBox 需要与您的系统进行非常紧密的集成。为此,它将一个名为 vboxdrv 的驱动程序模块安装到系统内核中。内核是操作系统中控制您的处理器和物理硬件的部分。没有这个内核模块,您仍然可以使用 VirtualBox Manager 配置虚拟机,但它们将无法启动。

还安装了名为 vboxnetfltvboxnetadp 的网络驱动程序。它们使虚拟机能够更好地利用您计算机的网络功能,并且除了基本的 NAT 模式之外,任何虚拟机网络都需要它们。

由于将驱动程序模块与内核分开分发并非 Linux 的强项,因此 Oracle VirtualBox 安装过程会在将要使用它们的系统上创建这些模块。这意味着您可能需要从发行版安装一些用于构建过程的软件程序包。必需的程序包可能包括以下内容:

  • GNU 编译器 (GCC)

  • GNU Make (make)

  • 内核头文件

另请确保已安装所有系统更新,并且您的系统正在运行发行版最新内核。

注意

正在运行的内核和内核头文件必须更新到匹配的版本。

以下列表包含一些常见发行版所需文件的详细信息。首先,在终端中使用命令 uname -r 查找您的内核版本名称。该列表假定您未对原始安装进行太多更改,特别是您未安装其他内核类型。

  • 对于基于 Debian 和 Ubuntu 的发行版,您必须安装正确版本的 linux-headers,通常是与内核版本名称最匹配的 linux-headers-genericlinux-headers-amd64linux-headers-i686linux-headers-i686-pae。另外,如果存在 linux-kbuild 程序包,也请安装它。基本的 Ubuntu 发行版应默认安装正确的程序包。

  • 在 Fedora、Red Hat、Oracle Linux 和许多其他基于 RPM 的系统上,内核版本有时在版本名称的末尾附近会有一个字母代码或单词。例如,“uek”表示 Oracle Unbreakable Enterprise Kernel,或者“default”或“desktop”表示标准内核。在这种情况下,程序包名称为 kernel-uek-devel 或等效名称。如果没有这样的代码,通常是 kernel-devel

  • 在某些 SUSE 和 openSUSE Linux 版本上,您可能需要安装 kernel-sourcekernel-syms 程序包。

如果您怀疑模块安装出现问题,请检查您的系统是否已按照上述说明进行设置,并尝试以 root 用户身份运行以下命令:

rcvboxdrv setup

内核模块和 UEFI 安全启动

如果您正在使用 UEFI(统一可扩展固件接口)安全启动的系统上运行,您可能需要在加载以下内核模块之前对其进行签名:

  • vboxdrv

  • vboxnetadp

  • vboxnetflt

  • vboxpci

有关内核模块签名过程的详细信息,请参见您的系统文档。

执行安装

Oracle VirtualBox 以多种原生于各种常见 Linux 发行版的程序包格式提供。请参阅 可用的安装程序包。此外,还有一个替代的通用安装程序(.run),您可以在支持的 Linux 发行版上使用。

从 Debian 或 Ubuntu 程序包安装 Oracle VirtualBox

下载适合您发行版的程序包。以下示例假定您正在安装到 64 位 Ubuntu Xenial 系统。使用 dpkg 安装 Debian 程序包,如下所示:

sudo dpkg -i virtualbox-version-number_Ubuntu_xenial_amd64.deb

安装程序还将尝试为当前运行的内核构建合适的内核模块。如果构建过程不成功,您将看到一个警告,并且程序包将保持未配置状态。查看 /var/log/vbox-install.log 以找出编译失败的原因。您可能需要安装适当的 Linux 内核头文件,请参阅 Oracle VirtualBox 内核模块。在纠正任何问题后,运行以下命令:

sudo rcvboxdrv setup

这将开始第二次构建模块的尝试。

如果在程序包中找到了合适的内核模块或成功构建了模块,安装脚本将尝试加载该模块。如果失败,请参阅 Linux 内核模块加载失败 以获取更多信息。

成功安装和配置 Oracle VirtualBox 后,您可以通过在 开始菜单中单击 VirtualBox 或从命令行来启动它。请参阅 在 Linux 上启动 Oracle VirtualBox

使用替代通用安装程序 (VirtualBox.run)

替代通用安装程序执行以下步骤:

  • 将应用程序文件解压缩到目标目录 /opt/VirtualBox/,此目录无法更改。

  • 构建并安装 Oracle VirtualBox 内核模块:vboxdrvvboxnetfltvboxnetadp

  • 创建 /sbin/rcvboxdrv,这是一个用于启动 Oracle VirtualBox 内核模块的 init 脚本。

  • 创建一个名为 vboxusers 的新系统组。

  • /usr/bin 中创建符号链接到 shell 脚本 /opt/VirtualBox/VBox,该脚本执行一些健全性检查并将分发给实际的可执行文件:VirtualBoxVBoxVRDPVBoxHeadlessVBoxManage

  • 创建 /etc/udev/rules.d/60-vboxdrv.rules,一个用于 udev 的描述文件(如果存在),它使 vboxusers 组中的所有用户都可以访问 USB 设备。

  • 将安装目录写入 /etc/vbox/vbox.cfg

必须以 root 权限执行安装程序,并将 installuninstall 作为第一个参数。例如:

sudo ./VirtualBox.run install

或者,如果您没有 sudo 命令,请以 root 身份运行以下命令:

./VirtualBox.run install

将任何需要从 VirtualBox 客户机访问 USB 设备的用户名添加到 vboxusers 组。可以使用操作系统的用户管理工具,或以 root 身份运行以下命令:

sudo usermod -a -G vboxusers username
注意

某些较旧 Linux 发行版的 usermod 命令不支持 -a 选项,该选项会在不影响其他组的情况下将用户添加到指定的组。在这种情况下,请使用 groups 命令找出当前组的成员,并将所有这些组以逗号分隔的列表添加到 -G 选项后面的命令行。例如:usermod -G group1,group2,vboxusers username

执行手动安装

如果您无法使用 使用备用通用安装程序 (VirtualBox.run) 中所述的 shell 脚本安装程序,您可以执行手动安装。按如下方式运行安装程序:

./VirtualBox.run --keep --noexec

这将把安装所需的所有文件解压到当前目录下的 install 目录中。Oracle VirtualBox 应用程序文件包含在 VirtualBox.tar.bz2 中,您可以将其解压到系统上的任何目录。例如:

sudo mkdir /opt/VirtualBox
sudo tar jxf ./install/VirtualBox.tar.bz2 -C /opt/VirtualBox

要以 root 身份运行相同的示例,请使用以下命令:

mkdir /opt/VirtualBox
tar jxf ./install/VirtualBox.tar.bz2 -C /opt/VirtualBox

Oracle VirtualBox 内核模块的源代码在 src 目录中提供。要构建模块,请进入该目录并使用以下命令:

make

如果一切构建正确,运行以下命令将模块安装到适当的模块目录:

sudo make install

如果您没有 sudo,请将用户帐户切换到 root 并运行以下命令:

make install

Oracle VirtualBox 内核模块需要一个设备节点才能运行。上面的 make 命令会根据您的 Linux 系统告诉您如何创建设备节点。对于具有 /dev 目录的经典 Linux 设置、已弃用的 devfs 系统以及具有 udev 的现代 Linux 系统,过程略有不同。

在某些 Linux 发行版上,您可能会在构建模块时遇到困难。您需要分析构建系统的错误消息来诊断问题的根源。通常,请确保为构建过程使用了正确的 Linux 内核源代码。

请注意,/dev/vboxdrv 内核模块设备节点必须归 root:root 所有,并且只能由用户读/写。

接下来,您将安装内核模块的系统初始化脚本,并使用适合您的发行版的方法激活初始化脚本,如下所示:

cp /opt/VirtualBox/vboxdrv.sh /sbin/rcvboxdrv

此示例假定您将 Oracle VirtualBox 安装在 /opt/VirtualBox 目录中。

创建 Oracle VirtualBox 的配置文件,如下所示:

mkdir /etc/vbox
echo INSTALL_DIR=/opt/VirtualBox > /etc/vbox/vbox.cfg

创建以下符号链接:

ln -sf /opt/VirtualBox/VBox.sh /usr/bin/VirtualBox
ln -sf /opt/VirtualBox/VBox.sh /usr/bin/VBoxManage
ln -sf /opt/VirtualBox/VBox.sh /usr/bin/VBoxHeadless

更新和卸载 Oracle VirtualBox

在更新或卸载 Oracle VirtualBox 之前,您必须终止当前正在运行的所有虚拟机,并退出 Oracle VirtualBox 或 VBoxSVC 应用程序。要更新 Oracle VirtualBox,只需运行更新版本的安装程序即可。要卸载 Oracle VirtualBox,请按如下方式运行安装程序:

sudo ./VirtualBox.run uninstall

作为 root 用户,您可以使用以下命令:

./VirtualBox.run uninstall

您可以按如下方式卸载 .run 软件包:

/opt/VirtualBox/uninstall.sh

要手动卸载 Oracle VirtualBox,请按相反的顺序执行手动安装步骤。

Debian 软件包的自动安装

Debian 程序包在首次安装时会请求一些用户反馈。debconf 系统用于执行此任务。为防止在安装过程中进行任何用户交互,可以定义默认值。一个名为 vboxconf 的文件可以包含以下 debconf 设置:

virtualbox virtualbox/module-compilation-allowed boolean true
virtualbox virtualbox/delete-old-modules boolean true

第一行在当前内核未找到模块时启用 vboxdrv 内核模块的编译。第二行使软件包能够删除以前安装编译的任何旧 vboxdrv 内核模块。

在安装 Oracle VirtualBox Debian 程序包之前,可以按如下方式应用这些默认设置:

debconf-set-selections vboxconf

此外,还有一些通用的配置选项可以在安装前设置。请参阅 自动安装选项

RPM 软件包的自动安装

RPM 格式不提供与 debconf 系统相当的配置系统。请参阅 自动安装选项,了解如何设置 Oracle VirtualBox 提供的一些通用安装选项。

自动安装选项

要配置 .deb 和 .rpm 程序包的安装过程,您可以创建一个名为 /etc/default/virtualbox 的响应文件。可以通过以下设置来阻止自动生成 udev 规则:

INSTALL_NO_UDEV=1

可以通过以下方式阻止创建 vboxusers 组:

INSTALL_NO_GROUP=1

如果指定了以下行,则在找不到适合当前内核的模块时,程序包安装程序将不会尝试构建 vboxdrv 内核模块。

INSTALL_NO_VBOXDRV=1

vboxusers 组

Linux 安装程序会在安装过程中创建系统用户组 vboxusers。任何将要使用 Oracle VirtualBox 客户机 USB 设备的系统用户都必须是该组的成员。用户可以通过使用桌面用户和组工具,或通过以 root 身份运行以下命令来成为 vboxusers 组的成员:

sudo usermod -a -G vboxusers username

在 Linux 上启动 Oracle VirtualBox

启动 Oracle VirtualBox 程序的最简单方法是从终端运行您选择的程序(VirtualBoxVBoxManageVBoxHeadless)。这些是 VBox.sh 的符号链接,它们会为您启动所需的程序。

以下详细说明仅在您想在未安装 Oracle VirtualBox 的情况下运行它时才有用。您应该首先编译 vboxdrv 内核模块并将其插入 Linux 内核。Oracle VirtualBox 由一个服务守护进程 VBoxSVC 和几个应用程序组成。守护进程会在必要时自动启动。所有 Oracle VirtualBox 应用程序都将通过 UNIX 本地域套接字与守护进程通信。在不同的用户帐户下可以有多个守护进程实例,并且应用程序只能与在应用程序下运行的守护进程通信。本地域套接字位于系统临时文件目录 .vbox-<username>-ipc 的子目录中。在遇到通信问题或服务器启动问题时,您可以尝试删除此目录。

所有 Oracle VirtualBox 应用程序(VirtualBoxVBoxManageVBoxHeadless)都需要 Oracle VirtualBox 目录位于库路径中,如下所示:

LD_LIBRARY_PATH=. ./VBoxManage showvminfo "Windows XP"

在 Oracle Solaris 主机上安装

有关支持的主机操作系统(Oracle Solaris 的特定版本),请参阅 可用的安装程序包

如果您之前在 Oracle Solaris 主机上安装过 Oracle VirtualBox,请在安装新实例之前先卸载它。有关卸载说明,请参阅 卸载

执行安装

Oracle VirtualBox 以标准的 Oracle Solaris 程序包形式提供。下载包含 Oracle VirtualBox 64 位版本的 Oracle VirtualBox SunOS 程序包。 安装必须以 root 身份在全局区域执行。这是因为 Oracle VirtualBox 安装程序会加载内核驱动程序,而这些驱动程序无法从非全局区域加载。要验证您当前所在的区域,请执行 zonename 命令。

要开始安装,请运行以下命令:

gunzip -cd VirtualBox-version-number-SunOS.tar.gz | tar xvf -

Oracle VirtualBox 内核程序包已集成到主程序包中。按如下方式安装 Oracle VirtualBox 程序包:

pkgadd -d VirtualBox-version-number-SunOS.pkg

安装程序将提示您输入要安装的程序包。选择 1all,然后继续。接下来,安装程序会询问您是否要允许执行 postinstall 脚本。选择 y 并继续,因为执行此脚本是安装 Oracle VirtualBox 内核模块所必需的。在此确认之后,安装程序将安装 Oracle VirtualBox 并执行 postinstall 设置脚本。

在 postinstall 脚本执行完成后,您的安装即告完成。现在您可以安全地删除系统上未压缩的程序包和 autoresponse 文件。Oracle VirtualBox 安装在 /opt/VirtualBox 中。

注意

如果您需要从非全局区域使用 Oracle VirtualBox,请参阅 配置非全局区域以运行 Oracle VirtualBox

vboxuser 组

安装程序在安装支持 Oracle VirtualBox 所需 USB 功能的 Oracle Solaris 主机时,会创建系统用户组 vboxuser。任何将要使用 Oracle VirtualBox 客户机 USB 设备的系统用户都必须是该组的成员。用户可以通过使用桌面用户和组工具,或以 root 身份运行以下命令来成为该组的成员:

usermod -G vboxuser username

请注意,将活动用户添加到 vboxuser 组需要用户注销然后重新登录。这应在成功安装程序包后手动完成。

在 Oracle Solaris 上启动 Oracle VirtualBox

启动 Oracle VirtualBox 程序的最简单方法是从终端运行您选择的程序(VirtualBoxVBoxManageVBoxHeadless)。这些是 VBox.sh 的符号链接,它们会为您启动所需的程序。

或者,您可以直接从 /opt/VirtualBox 调用所需的程序。使用提供的链接更方便,因为您不必输入完整路径。

您可以通过从终端运行 VBoxQtconfig 来配置 VirtualBox Qt GUI 的某些元素,例如字体和颜色。

卸载

在 Oracle Solaris 上卸载 Oracle VirtualBox 需要 root 权限。要执行卸载,请启动一个 root 终端会话并运行以下命令:

pkgrm SUNWvbox

在确认后,这将从您的系统中删除 Oracle VirtualBox

无人值守安装

要执行 Oracle VirtualBox 的非交互式安装,有一个名为 autoresponse 的响应文件。安装程序使用此文件来响应输入,而不是提示用户。

按照 执行安装 中所述的步骤提取 tar.gz 程序包。然后打开一个 root 终端会话并运行以下命令:

pkgadd -d VirtualBox-version-number-SunOS-x86 -n -a autoresponse SUNWvbox

要执行非交互式卸载,请打开一个 root 终端会话并运行以下命令:

pkgrm -n -a /opt/VirtualBox/autoresponse SUNWvbox

配置非全局区域以运行 Oracle VirtualBox

在全局区域安装 Oracle VirtualBox 后(请参阅 在 Oracle Solaris 主机上安装 中的安装说明),在非全局区域运行 Oracle VirtualBox 所需的第一步是修改区域配置,以便能够访问位于全局区域的 Oracle VirtualBox 设备节点。这可以通过在全局区域作为区域管理员执行以下步骤来完成。

global$ zonecfg -z vboxzone
                  

vboxzone 替换为您计划在其中运行 Oracle VirtualBox 的非全局区域的名称。

使用 zonecfg(8) 将每个 Oracle VirtualBox 设备节点添加到非全局区域的 device 资源和 match 属性,如下所示:

zonecfg:vboxzone> add device
zonecfg:vboxzone:device> set match=/dev/vboxdrv
zonecfg:vboxzone:device> end
zonecfg:vboxzone> add device
zonecfg:vboxzone:device> set match=/dev/vboxdrvu
zonecfg:vboxzone:device> end
zonecfg:vboxzone> exit

在 Oracle Solaris 11 上,如果您计划使用配置为使用 USB 设备(例如 USB 指针设备或 USB 直通设备)的虚拟机,您还应该通过上述步骤传递 /dev/vboxusbmon 设备。

Oracle Solaris 11 不支持稀疏根区域,因此您需要将全局区域的 /opt/VirtualBox 循环挂载到非全局区域的相同路径。这可以通过使用 zonecfg(8) 为该目录设置 dir 属性和 special 属性来完成。例如:

zonecfg:vboxzone> add fs
zonecfg:vboxzone:fs> set dir=/opt/VirtualBox
zonecfg:vboxzone:fs> set special=/opt/VirtualBox
zonecfg:vboxzone:fs> set type=lofs
zonecfg:vboxzone:fs> add options [readonly]
zonecfg:vboxzone:fs> end
zonecfg:vboxzone> exit

在通过 zonecfg(8) 进行上述更改后,使用 zoneadm(8) 按如下方式重启区域:

global$ zoneadm -z vboxzone reboot
                  

使更改生效。然后,您将能够从配置的非全局区域的 /opt/VirtualBox 中运行 Oracle VirtualBox

安装扩展包

扩展包为 Oracle VirtualBox 基础包提供额外的功能,例如扩展的 USB 设备支持和云集成功能。请参阅 安装 Oracle VirtualBox 和扩展包

要安装 Oracle VirtualBox 扩展包,请执行以下操作:

  1. 双击扩展程序包文件名。

    Oracle VirtualBox 扩展包的文件名扩展为 .vbox-extpack

  2. 按照屏幕上的说明安装扩展包。

您也可以使用扩展包管理器工具来安装扩展包。请参阅 扩展包管理器

扩展包管理器

可以使用 VirtualBox Manager 中的 Extension Pack Manager 工具来安装和管理扩展包。

“扩展包管理器”列出了当前安装在主机上的扩展包,并使您能够安装和卸载扩展包。

要显示扩展包管理器,请转到全局 Tools 菜单,然后单击 Extensions。此时将显示扩展包管理器。

要使用扩展包管理器安装扩展包,请单击 Install 并选择一个扩展包文件。扩展包将被安装在主机上并在扩展包管理器中列出。

要使用“扩展包管理器”卸载扩展包,请执行以下操作:

  1. 在扩展包管理器窗口中选择扩展包,然后单击 Uninstall

  2. 在提示对话框中单击 Remove

    扩展包将从主机卸载并从“扩展包管理器”中删除。

或者,您也可以使用 VBoxManage 命令行来安装和管理 Oracle VirtualBox 扩展包。请参阅 VBoxManage extpack

配置虚拟机

本章提供了配置 Oracle VirtualBox 虚拟机 (VM) 的详细步骤。有关 Oracle VirtualBox 的介绍以及运行您的第一个虚拟机的步骤,请参阅 初步步骤

在决定为客户机提供哪些虚拟硬件时,您有很大的自由度。使用虚拟硬件与主机系统或其他客户机通信。例如,您可以通过以下方式使用虚拟硬件:

客户操作系统

您可以在 Oracle VirtualBox 的虚拟机 (VM) 中成功运行大多数操作系统 (OS)。

虚拟硬件决定了可用客户机操作系统的选择,主机机器也是如此。在创建虚拟机时,请确保您考虑了虚拟机配置的所有方面。

Oracle Premier Support 提供帮助,包括在需要时提供客户机增强功能,以在适当配置的虚拟机中运行部分操作系统。

x86 和 x86-64 客户操作系统

Oracle Premier Support 支持在具有 x86 或 x86-64 平台架构的虚拟机中运行以下客户机操作系统,具体取决于情况。

  • Windows 11 (64 位)。仅限已发布的版本。
  • Windows 10 (32 位和 64 位)。仅限已发布的版本。
  • Windows Server 2025 (64 位)
  • Windows Server 2022 (64 位)
  • Oracle Solaris 11 (32 位和 64 位)
  • Oracle Linux 9 (64 位)
    • Red Hat Enterprise Linux 9 (64 位)
    • CentOS Stream 9 (64 位)
  • Oracle Linux 8(64位)
    • Red Hat Enterprise Linux 8 (64 位)

Arm 客户操作系统

Oracle Premier Support 支持在具有 Arm64 平台架构的虚拟机中运行以下客户机操作系统。

  • Oracle Linux 9
    • Red Hat Enterprise Linux 9
    • CentOS Stream 9
  • Oracle Linux 8
    • Red Hat Enterprise Linux 8

其他客户操作系统

以下客户机操作系统可与 Oracle VirtualBox 一起使用,但仅获得有限支持。因此,无法保证对这些客户机操作系统的客户问题得到解决。

另请参阅 主机和客户机组合

具有 x86 或 x86-64 平台架构(视情况而定)的虚拟机可能可以运行:
  • Windows 8.1 和 8 (32 位和 64 位)
  • Windows 7(32位和64位)
  • Windows Vista SP2 及更高版本(32位和64位)
  • Windows XP(32位)
  • Windows Vista(32位)
  • Windows Server 2019(64位)
  • Windows Server 2016(64位)
  • Windows Server 2012 和 2012 R2(64位)
  • Windows Server 2008 和 2008 R2(32位和64位)
  • Windows Server 2003(32位和64位)
  • Oracle Solaris 10 8/11 Update 10 及更高版本 (32 位和 64 位)
  • CentOS Stream 8 (64 位)
  • Oracle Linux 7(64位)
    • Red Hat Enterprise Linux 7 (64 位)
    • CentOS Linux 7 (64 位)
  • Oracle Linux 6(32位和64位)
    • Red Hat Enterprise Linux 6 (32 位和 64 位)
    • CentOS 6 (32 位和 64 位)
  • Oracle Linux 5(32位和64位)
    • Red Hat Enterprise Linux 5 (32 位和 64 位)
    • CentOS 5 (32 位和 64 位)
  • Ubuntu 24.04 LTS (Noble Numbat) (64 位)
  • Ubuntu 22.04 LTS (Jammy Jellyfish) (64 位)
  • Ubuntu 20.04 LTS (Focal Fossa)(64位)
  • Ubuntu 18.04 LTS (Bionic Beaver)(64位)
  • Ubuntu 16.04 LTS (Xenial Xerus)(32位和64位)
  • Ubuntu 14.04.5 LTS (Trusty Tahr)(32位和64位)
  • SUSE Linux Enterprise Server 15(64位)
  • SUSE Linux Enterprise Server 12(64位)
  • OS/2 Warp 4.5
具有 Arm64 平台架构的虚拟机可能可以运行:
  • Oracle Linux 7
    • Red Hat Enterprise Linux 7
  • CentOS Stream 8
  • CentOS Linux 7
  • Debian 12
  • Debian 11
  • Ubuntu 24.04 LTS (Noble Numbat)
  • Ubuntu 22.04 LTS (Jammy Jellyfish)
  • Ubuntu 20.04 LTS (Focal Fossa)
  • Ubuntu 18.04 LTS (Bionic Beaver)
  • SUSE Linux Enterprise Server 15
  • SUSE Linux Enterprise Server 12

macOS 客户机

Oracle VirtualBox 允许您在支持的主机硬件上安装和运行未经修改的 macOS 和 OS X 客户机版本。此功能为实验性功能,因此不受支持。

在尝试安装 macOS 客户机之前,请注意以下重要问题:

  • macOS 是商业许可软件,包含许可和技术限制,将其使用限制在特定的硬件和使用场景。您必须理解并遵守这些限制。

    特别是,Apple 禁止在非 Apple 硬件上安装大多数版本的 macOS。

    这些许可限制也在技术层面强制执行。macOS 会验证其是否在 Apple 硬件上运行。大多数随 Apple 硬件附带的 DVD 会检查确切的型号。这些限制不会Oracle VirtualBox 规避,并且仍然适用。

  • 仅支持 Apple 已知和测试过的CPU。因此,如果您的 Intel CPU 比 macOS 版本新,或者您使用的是非 Intel CPU,则在启动时很可能会遇到“不支持的 CPU”异常恐慌。

    请确保使用随 Apple 硬件附带的 macOS DVD。

  • macOS 安装程序需要分区硬盘。因此,安装程序不会向您提供分区选择。在成功安装软件之前,请从 Tools 菜单启动 Disk Utility 并对硬盘进行分区。关闭 Disk Utility 并继续安装。

  • Oracle VirtualBox 中的 macOS 支持是一项实验性功能。请参阅 已知限制

64 位客户机

注意

对于您打算以 64 位模式使用的虚拟机,请务必启用 I/O APIC。对于 64 位 Windows 虚拟机尤其如此。请参阅 主板选项卡。对于 64 位 Windows 客户机,请确保虚拟机使用 Intel 网络设备,因为没有适用于 AMD PCNet 卡的 64 位驱动程序支持。请参阅 虚拟网络硬件

如果您使用 VirtualBox ManagerCreate VM 向导,Oracle VirtualBox 将自动为每个选定的 64 位操作系统类型使用正确的设置。请参阅 创建虚拟机

无人值守客户机安装

Oracle VirtualBox 可以自动安装客户机操作系统。您只需要提供安装介质和其他一些参数,例如默认用户的名称。

您可以通过以下方式执行无人值守客户机安装:

  • 使用创建虚拟机向导。 向导中的一个可选步骤允许您配置无人值守安装。您可以为客户机操作系统指定默认用户凭据,以及是否自动安装客户机增强功能。请参阅 创建虚拟机

    在此步骤中,Oracle VirtualBox 会扫描安装介质并更改某些参数,以确保在 Oracle VirtualBox 上运行的客户机能够无缝安装。

  • 使用 VBoxManage 命令。使用 VBoxManage 命令进行无人值守客户机安装 描述了如何为 Oracle Linux 客户机执行无人值守安装。

当您首次启动已配置为无人值守安装的虚拟机时,客户操作系统安装将自动执行。

安装操作将启动设备顺序更改为首先启动虚拟硬盘,然后是虚拟 DVD 驱动器。如果虚拟硬盘在自动安装之前为空,则虚拟机将从虚拟 DVD 驱动器启动并开始安装。

如果虚拟硬盘包含可启动操作系统,则安装操作将退出。在这种情况下,请在 BIOS 启动画面期间按 F12 手动更改启动设备顺序。

使用 VBoxManage 命令进行无人值守客户机安装

以下示例显示了如何为 Oracle Linux 虚拟机执行无人值守客户机安装。该示例使用各种 VBoxManage 命令来准备客户机虚拟机。然后使用 VBoxManage unattended install 命令来安装和配置客户机操作系统。

  1. 创建虚拟机。

    # VM="ol7-autoinstall"
    # VBoxManage list ostypes
    # VBoxManage createvm --name $VM --ostype "Oracle_64" --register

    请注意以下事项:

    • $VM 变量表示虚拟机的名称。

    • VBoxManage list ostypes 命令列出了 Oracle VirtualBox 支持的客户机操作系统,包括在 VBoxManage 命令中使用的操作系统名称。

    • 创建了一个 64 位 Oracle Linux 7 虚拟机并将其注册到 Oracle VirtualBox

    • 虚拟机具有唯一的 UUID。

    • 生成了一个 XML 设置文件。

  2. 为虚拟机创建虚拟硬盘和存储设备。

    # VBoxManage createhd --filename /VirtualBox/$VM/$VM.vdi --size 32768
    # VBoxManage storagectl $VM --name "SATA Controller" --add sata --controller IntelAHCI
    # VBoxManage storageattach $VM --storagectl "SATA Controller" --port 0 --device 0 \
    --type hdd --medium /VirtualBox/$VM/$VM.vdi
    # VBoxManage storagectl $VM --name "IDE Controller" --add ide
    # VBoxManage storageattach $VM --storagectl "IDE Controller" --port 0 --device 0 \
    --type dvddrive --medium /u01/Software/OL/OracleLinux-R7-U6-Server-x86_64-dvd.iso

    前面的命令执行以下操作:

    • 创建一个 32768 MB 的虚拟硬盘。

    • 创建一个 SATA 存储控制器并连接虚拟硬盘。

    • 为虚拟 DVD 驱动器创建一个 IDE 存储控制器,并连接 Oracle Linux 安装 ISO。

  3. (可选)配置虚拟机的一些设置。

    # VBoxManage modifyvm $VM --ioapic on
    # VBoxManage modifyvm $VM --boot1 dvd --boot2 disk --boot3 none --boot4 none
    # VBoxManage modifyvm $VM --memory 8192 --vram 128

    前面的命令执行以下操作:

    • 为虚拟机主板启用 I/O APIC。

    • 配置虚拟机的启动设备顺序。

    • 为虚拟机分配 8192 MB RAM 和 128 MB 显存。

  4. 执行操作系统的无人值守安装。

    # VBoxManage unattended install $VM \
    --iso=/u01/Software/OL/OracleLinux-R7-U6-Server-x86_64-dvd.iso \
    --user=login --full-user-name=name --user-password password \
    --install-additions --time-zone=CET

    前面的命令执行以下操作:

    • 指定 Oracle Linux ISO 作为安装 ISO。

    • 为客户操作系统上的默认用户指定登录名、全名和登录密码。

      请注意,指定的密码也用于客户机上的 root 用户帐户。

    • 在虚拟机上安装增强功能。

    • 将客户操作系统的时区设置为中欧时间 (CET)。

  5. 启动虚拟机。

    此步骤完成无人值守安装过程。

    # VBoxManage startvm $VM --type headless

    虚拟机以无头模式启动,这意味着不会打开 VirtualBox Manager 窗口。

仿真硬件

Oracle VirtualBox 虚拟化了几乎所有的主机硬件。根据虚拟机的配置,客户机将看到以下虚拟硬件:

  • 输入设备。 Oracle VirtualBox 可以模拟标准的 PS/2 键盘和鼠标。大多数客户机操作系统都支持这些设备。

    此外,Oracle VirtualBox 还可以提供虚拟 USB 输入设备,以避免捕获鼠标和键盘,如 捕获和释放键盘和鼠标 中所述。

  • 图形。 Windows 客户机的默认 Oracle VirtualBox 图形设备是 SVGA 设备。对于 Linux 客户机,默认图形设备模拟 VMware SVGA 图形设备。请参阅 屏幕选项卡

    对于传统客户操作系统,可以使用 VGA 兼容显卡设备。

  • 存储。 Oracle VirtualBox 模拟最常见的硬盘控制器类型。请参阅 硬盘控制器。虽然仅支持其中一种控制器就足以让 Oracle VirtualBox 单独运行,但这种大量的存储适配器对于与其他虚拟机监视器兼容是必需的。Windows 对其启动设备非常挑剔,如果存储控制器不同,在虚拟机监视器之间迁移虚拟机非常困难或不可能。

  • 网络。 请参阅 虚拟网络硬件

  • USB。 Oracle VirtualBox 模拟最常见的 USB 主机控制器。请参阅 USB 支持

    模拟的 USB 控制器不直接与主机上的设备通信。相反,它们与虚拟 USB 层通信,该层抽象了 USB 协议并启用了远程 USB 设备的使用。

  • 音频。 请参阅 音频设置

设置窗口

虚拟机的设置使用 Settings 窗口进行配置。

要显示 Settings 窗口,请执行以下任一操作:

  • 在机器列表中,右键单击虚拟机名称。选择 Settings 菜单选项。

  • 在机器列表中,单击虚拟机名称。选择 MachineSettings 菜单选项。

  • Details 窗格的工具栏中单击 Settings 按钮。

注意

可用设置取决于所选的体验级别。要显示所有可用设置,请确保体验级别设置为 Expert

请参见 VirtualBox Manager 的体验级别

通用设置

Settings 窗口的 General 部分下,您可以配置虚拟机的最基本方面,例如内存和必需的硬件。以下选项卡可用。

基本选项卡

General 设置类别下的 Basic 选项卡中,您可以找到以下设置:

  • Name: VM 的名称,在主 VirtualBox Manager 窗口的 VM 列表中显示。使用此名称,Oracle VirtualBox 还会保存 VM 的配置文件。如果更改名称,Oracle VirtualBox 也会重命名这些文件。因此,您只能使用您的主机操作系统中允许用于文件名的字符。

    请注意,在内部,Oracle VirtualBox 使用唯一的标识符 (UUID) 来标识虚拟机。您可以使用 VBoxManage 命令显示这些标识符。

  • Type and Subtype: VM 的客户机操作系统的类型和子类型。例如,如果 Type 是 Linux,则 Subtype 可能是 Oracle Linux。

    这些与在 New Virtual Machine 工作流程中指定的设置相同。请参阅 创建虚拟机

    虽然新创建的虚拟机的默认设置取决于所选的操作系统类型,但以后更改类型不会影响虚拟机设置。

  • 版本:虚拟机的来宾操作系统版本。这与在“新建虚拟机”工作流程中指定的设置相同。请参阅 创建虚拟机

高级选项卡

高级”选项卡中提供了以下设置:

  • 快照文件夹:默认情况下,Oracle VirtualBox 将快照数据与您的其他 Oracle VirtualBox 配置数据一起保存。请参阅 Oracle VirtualBox 存储其文件。使用此设置,您可以为每个虚拟机指定任何其他文件夹。

  • 共享剪贴板:您可以在此处选择是否应将来宾操作系统剪贴板与主机剪贴板共享。如果选择“双向”,则 Oracle VirtualBox 将始终确保两个剪贴板包含相同的数据。如果选择“从主机到客户机”或“从客户机到主机”,则 Oracle VirtualBox 将仅单向复制剪贴板数据。

    剪贴板共享需要 Oracle VirtualBox 客户机增强

    出于安全原因,共享剪贴板默认禁用。您可以随时使用虚拟机“设备”菜单中的“共享剪贴板”菜单项来更改此设置。

  • 拖放:此设置支持拖放。从主机或客户机中选择一个对象(如文件),然后直接在客户机或主机上复制或打开它。虚拟机的多种拖放模式允许限制任一方向的访问。

    要使拖放功能正常工作,需要在客户机上安装客户机增强。

    注意

    拖放默认禁用。您可以随时使用虚拟机“设备”菜单中的“拖放”菜单项来更改此设置。

    请参阅 拖放

描述选项卡

在“描述”选项卡中,您可以为虚拟机输入描述。这不会影响机器的功能,但您可能会发现此空间有助于记录虚拟机的配置以及其中安装的软件。

要为“描述”文本字段插入换行符,请按 Shift+Enter。

磁盘加密选项卡

磁盘加密”选项卡允许您加密附加到虚拟机的磁盘。

要启用磁盘加密,请选中“启用磁盘加密”复选框。

可以使用设置来配置用于加密的密码算法和加密密码。

注意

除磁盘映像外的所有与虚拟机相关的文件都以未加密形式存储。要加密这些文件,请使用 VBoxManage encryptvm 命令,如 虚拟机加密中所述。

系统设置

系统”类别将与呈现给虚拟机的基本硬件相关的各种设置分组。

注意

由于 Microsoft Windows 的激活机制对硬件更改敏感,因此如果您更改 Windows 客户机的硬件设置,其中一些更改可能会触发向 Microsoft 发出另一次激活请求。

以下选项卡可用。

主板选项卡

在“主板”选项卡上,您可以配置通常位于真实计算机主板上的虚拟硬件。

  • 基本内存:设置虚拟机运行时分配的 RAM 量。指定的内存量将从主机操作系统请求,因此在尝试启动虚拟机时必须在主机上可用或可提供为可用内存,并且在虚拟机运行时主机将无法使用。这与在“新建虚拟机”向导中设置的设置相同,如 创建虚拟机中所述。

    通常,可以在安装客户操作系统后更改内存大小。但您不得将内存减少到操作系统无法启动的量。

  • 启动顺序:确定客户机操作系统将尝试从中启动各种虚拟启动设备的顺序。与真实 PC 的 BIOS 设置类似,Oracle VirtualBox 可以指示客户机操作系统从虚拟软盘、虚拟 CD/DVD 驱动器、虚拟硬盘(所有这些均由其他虚拟机设置定义)、网络或这些都不是的任何设备启动。

    如果选择“网络”,虚拟机将尝试使用 PXE 机制通过网络启动。这需要在命令行中进行详细配置。请参阅 VBoxManage modifyvm

  • 芯片组(无法更改带有 Arm 架构的虚拟机):您可以选择将哪个芯片组呈现给虚拟机。PIIX3 是大多数客户机的默认芯片组。对于某些客户机操作系统(如 Mac OS X),PIIX3 芯片组支持不佳。因此,Oracle VirtualBox 支持 ICH9 芯片组的仿真,该芯片组支持 PCI express、三个 PCI 总线、PCI-to-PCI 桥接器和消息信号中断 (MSI)。这使得现代操作系统能够寻址更多 PCI 设备,并且不再需要 IRQ 共享。使用 ICH9 芯片组还可以配置多达 36 个网卡,而 PIIX3 最多只能配置 8 个网卡。请注意,ICH9 支持是实验性的,不建议用于不需要它的客户机操作系统。

  • TPM(无法更改带有 Arm 架构的虚拟机):启用对可信平台模块 (TPM) 安全处理器的支持。从支持的 TPM 版本中选择。

  • 指向设备:某些客户机操作系统的默认虚拟指向设备是传统的 PS/2 鼠标。如果设置为“USB 平板”,Oracle VirtualBox 会向虚拟机报告存在一个 USB 平板设备,并通过该设备将鼠标事件传达给虚拟机。另一个设置是“USB 多点触控平板”,适用于运行 Windows 8 或更高版本的客户机。

    使用虚拟 USB 平板的优点是移动被报告为绝对坐标,而不是相对位置更改。这使得 Oracle VirtualBox 能够将虚拟机窗口上的鼠标事件转换为平板事件,而无需在客户机中“捕获”鼠标,如 捕获和释放键盘与鼠标中所述。这使得使用虚拟机不那么麻烦,即使未安装客户机增强。

  • 启用 I/O APIC(无法更改带有 Arm 架构的虚拟机):高级可编程中断控制器 (APIC) 是 x86 硬件功能,已取代可编程中断控制器 (PIC)。通过 I/O APIC,操作系统可以使用超过 16 个中断请求 (IRQ),从而避免 IRQ 共享以提高可靠性。

    注意

    启用 I/O APIC 是必需的,特别是对于 64 位 Windows 客户机操作系统。如果您想在虚拟机中使用多个虚拟 CPU,这也必需。

    然而,除 Windows 之外,某些操作系统对 I/O APIC 的软件支持一直不可靠。此外,使用 I/O APIC 会略微增加虚拟化的开销,从而稍微降低客户操作系统的速度。

    注意

    所有 Windows 操作系统都会安装不同的内核,具体取决于 I/O APIC 是否可用。与 ACPI 一样,I/O APIC 因此在安装 Windows 客户机操作系统后不得关闭。但是,在安装后启用它将没有效果。

  • 硬件时钟使用 UTC 时间:如果选中,Oracle VirtualBox 将以 UTC 格式向客户机报告系统时间,而不是本地(主机)时间。这会影响虚拟实时时钟 (RTC) 的运行方式,并且可能对通常期望硬件时钟设置为 UTC 的类 UNIX 客户机操作系统有用。

  • 启用 EFI(无法更改带有 Arm 架构的虚拟机):启用可扩展固件接口 (EFI),它取代了旧式 BIOS,可能对某些高级用例有用。请参阅 备用固件 (UEFI)

  • 启用安全启动:启用安全启动,为启动客户机操作系统提供安全的环境。

此外,您可以关闭 Oracle VirtualBox 默认提供给客户机操作系统的高级配置和电源接口 (ACPI)

ACPI 是当前行业标准,允许操作系统识别硬件、配置主板和其他设备以及管理电源。由于大多数计算机都包含此功能,并且 Windows 和 Linux 支持 ACPI,因此它在 Oracle VirtualBox 中也默认启用。ACPI 只能通过命令行禁用。请参阅 VBoxManage modifyvm

注意

所有 Windows 操作系统都会安装不同的内核,具体取决于 ACPI 是否可用。这意味着 ACPI在安装 Windows 客户机操作系统后不得关闭。但是,在安装后启用它将没有效果。

处理器选项卡

在“处理器”选项卡上,您可以配置虚拟机使用的 CPU 的设置。

  • 处理器数:设置客户机操作系统可见的虚拟 CPU 核心数。Oracle VirtualBox 支持对称多处理 (SMP),并可以为每个虚拟机提供多达 32 个虚拟 CPU 核心。

    您不应配置虚拟机使用比物理上可用的 CPU 核心更多的核心。这包括真实核心,不包括超线程。

  • 执行限制:配置 CPU 执行限制。这限制了主机 CPU 花费在模拟虚拟 CPU 上的时间。默认设置为 100%,表示没有限制。设置为 50% 意味着单个虚拟 CPU 可使用多达 50% 的单个主机 CPU。请注意,限制虚拟 CPU 的执行时间可能会导致客户机计时问题。

    如果在“处理器”选项卡中设置了可能影响系统性能的执行上限,则会显示警告。

  • 启用 PAE/NX(无法更改带有 Arm 架构的虚拟机):确定主机 CPU 的 PAE 和 NX 功能是否将暴露给虚拟机。

    PAE 代表物理地址扩展。通常,如果启用且操作系统支持,即使是 32 位 x86 CPU 也可以访问超过 4 GB 的 RAM。这是通过为内存地址添加另外 4 位来实现的,因此使用 36 位,最多可寻址 64 GB。某些操作系统(如 Ubuntu Server)需要 CPU 支持 PAE,否则无法在虚拟机中运行。

  • 启用嵌套 VT-x/AMD-V(无法更改带有 Arm 架构的虚拟机):启用嵌套虚拟化,将硬件虚拟化功能直通给虚拟机。

对于运行现代服务器操作系统的虚拟机,Oracle VirtualBox 还支持 CPU 热插拔。有关详细信息,请参阅 CPU 热插拔

加速选项卡

在此选项卡上,您可以配置 Oracle VirtualBox 以使用您的主机 CPU 支持的硬件虚拟化扩展。

  • 半虚拟化接口:Oracle VirtualBox 提供半虚拟化接口以提高客户机操作系统的计时精度和性能。可用选项在 --paravirt-provider 选项下进行了记录,该选项位于 VBoxManage modifyvm 中。有关半虚拟化提供程序的更多详细信息,请参阅 半虚拟化提供程序

  • 硬件虚拟化:您可以为每个虚拟机配置硬件虚拟化功能。

    • 启用嵌套分页:如果主机 CPU 支持嵌套分页 (AMD-V) 或 EPT (Intel VT-x) 功能,那么除了硬件虚拟化之外,通过启用嵌套分页还可以实现显著的性能提升。有关技术详细信息,请参阅 嵌套分页和 VPID。有关 Intel EPT 安全建议,请参阅 CVE-2018-3646

    高级用户可能会对硬件虚拟化的技术细节感兴趣。请参阅 硬件虚拟化

在大多数情况下,“加速”选项卡上的默认设置效果很好。Oracle VirtualBox 会根据您在创建虚拟机时选择的操作系统选择合理的默认值。但在某些情况下,您可能需要更改预配置的默认值。

显示设置

以下选项卡可用于配置虚拟机的显示。

屏幕选项卡

  • 显存:设置虚拟机可用的虚拟显卡的内存大小(以兆字节为单位)。与主内存一样,指定的内存量将从主机的常驻内存中分配。根据显存量,可能提供更高的分辨率和颜色深度。

    VirtualBox Manager 将在显存量不足以将虚拟机切换到全屏模式时显示警告。最小值取决于虚拟显示器数量、屏幕分辨率、主机显示器的颜色深度以及3D 加速的使用情况。粗略估计为(颜色深度/8)x 垂直像素 x 水平像素 x 显示器数量 = 字节数。如果使用了显示加速,则可能需要额外的内存。

  • 显示器数量:使用此设置,Oracle VirtualBox 可以为虚拟机提供多个虚拟显示器。如果客户机操作系统支持多个连接的显示器,Oracle VirtualBox 可以模拟存在多个虚拟显示器。最多支持八个此类虚拟显示器。

    多个显示器的输出显示在主机上,它们运行在并排的多个虚拟机窗口中。但是,在全屏和无缝模式下,它们会使用主机连接的可用物理显示器。因此,要在全屏和无缝模式下使用多显示器,您至少需要与配置的虚拟显示器数量相同的物理显示器,否则 Oracle VirtualBox 将报告错误。

    您可以通过“视图”菜单,在全屏或无缝模式下按 Host 键 + Home 来配置客户机与主机显示器之间的关系。

    另请参见 已知限制

  • 缩放比例:启用显示尺寸的缩放。对于多显示器显示,您可以为单个显示器或所有显示器设置全局缩放比例。使用滑块选择高达 200% 的缩放比例。

    您可以为所有虚拟机设置默认缩放比例。使用首选项窗口中的“显示”选项卡。

  • 显卡控制器:指定客户机虚拟机使用的显卡类型。请注意,您必须在客户机虚拟机上安装客户机增强才能指定 VBoxSVGA 或 VMSVGA 显卡控制器。以下选项可用:

    • VBoxSVGA:使用 Windows 7 或更高版本的新虚拟机默认显卡控制器。

      与传统 VBoxVGA 选项相比,此显卡控制器提高了性能和 3D 支持。

    • VBoxVGA:为旧版客户机操作系统使用此显卡控制器。这是 Windows 7 及更早版本和 Oracle Solaris 的默认显卡控制器。

      此显卡控制器不支持 3D 加速。

    • VMSVGA:使用此显卡控制器来模拟 VMware SVGA 显卡设备。这是 Linux 客户机的默认显卡控制器。

    • 无:不模拟显卡类型。

  • 启用 3D 加速:如果虚拟机安装了客户机增强,则可以为虚拟机启用硬件加速的 3D 图形。请参阅 硬件加速图形

    启用 3D 加速后,如果主机也支持视频解码加速,虚拟机还将使用视频解码加速。主机必须是 x86_64 运行 Windows,并且虚拟机必须是 x86_64 运行 Windows 10 或 Windows 11。虚拟机可以使用主机支持的所有媒体格式的视频解码,并且在播放这些媒体格式时 CPU 负载会降低。

远程显示选项卡

在“远程显示”选项卡上,如果安装了 VirtualBox 远程显示扩展 (VRDE),您可以启用内置于 Oracle VirtualBox 中的 VRDP 服务器。这使您可以使用任何标准的 RDP 查看器(如 Microsoft Windows 自带的 mstsc.exe)远程连接到虚拟机的控制台。在 Linux 和 Oracle Solaris 系统上,您可以使用标准的开源 rdesktop 程序。这些功能在 远程显示(VRDP 支持)中有介绍。

  • 启用服务器:选中此复选框并配置远程显示连接的设置。

录制选项卡

在“录制”选项卡上,您可以为虚拟机启用视频和音频录制并更改相关设置。请注意,可以在虚拟机运行时启用和禁用这些功能。设置适用于所有选定的屏幕。

  • 启用录制:选中此复选框并选择“录制模式”选项。

  • 录制模式:您可以选择录制视频、音频或视频和音频。

    根据“录制模式”设置,“录制”选项卡上的某些设置可能会被灰色显示。

  • 文件路径:录制内容保存的文件。

  • 帧大小:录制视频的视频分辨率(以像素为单位)。下拉列表允许您从常见帧大小中进行选择。

  • 帧率:使用滑块设置要录制的每秒最大视频帧数 (FPS)。频率较高的帧将被跳过。增加此值可减少跳过的帧数并增加文件大小。

  • 视频质量:使用滑块设置视频的比特率(以千比特每秒为单位)。增加此值可以改善视频外观,但会增加文件大小。

  • 音频质量:使用滑块设置音频录制的质量。增加此值可以改善音频质量,但会增加文件大小。

  • 屏幕:对于多显示器显示,您可以选择要录制视频的屏幕。

当您调整视频和音频录制设置时,会显示五分钟视频的近似输出文件大小。

存储设置

虚拟机设置中的“存储”类别允许您将虚拟硬盘和 CD/DVD 映像及驱动器连接到虚拟机。

在真实计算机中,所谓的存储控制器将物理磁盘驱动器连接到计算机的其余部分。同样,Oracle VirtualBox 将虚拟存储控制器呈现给虚拟机。在每个控制器下,显示连接到该控制器的虚拟设备,如硬盘和 CD/DVD 驱动器。

注意

本节快速介绍了 Oracle VirtualBox 存储设置。请参阅 虚拟存储,了解 Oracle VirtualBox 中可用存储设置的完整说明。

根据您创建虚拟机时选择的客户操作系统类型,新虚拟机包含以下存储设备:

  • IDE 控制器。虚拟 CD/DVD 驱动器连接到 IDE 控制器次通道上的设备 0。

  • SATA 控制器。这是一种现代的存储控制器类型,用于更高的硬盘数据吞吐量,虚拟硬盘连接到其中。最初,您通常会有一个此类虚拟磁盘,但如上一个屏幕截图所示,您可以拥有多个。每个磁盘都由一个磁盘映像文件表示,例如此示例中的 VDI 文件。

具有 Arm 架构的虚拟机仅具有 VirtIO SCSI。

如果您使用旧版 Oracle VirtualBox 创建了虚拟机,则默认存储布局可能有所不同。那时您可能只有一个 IDE 控制器,CD/DVD 驱动器和硬盘都连接到该控制器。如果您在创建虚拟机时选择了旧版操作系统类型,也可能出现这种情况。由于旧版操作系统在没有额外驱动程序的情况下不支持 SATA,Oracle VirtualBox 将确保最初不提供这些设备。请参阅 硬盘控制器

Oracle VirtualBox 还提供了一个软盘控制器。您不能将软盘驱动器以外的设备添加到此控制器。虚拟软盘驱动器(如虚拟 CD/DVD 驱动器)可以连接到主机软盘驱动器(如果您有的话)或磁盘映像(在这种情况下必须是 RAW 格式)。

您可以自由修改这些媒体附件。例如,如果您想复制您创建的另一个虚拟磁盘中的一些文件,您可以将其连接为第二个硬盘,如上面的屏幕截图所示。您也可以添加第二个虚拟 CD/DVD 驱动器,或者更改这些项目的连接位置。以下选项可用:

  • 添加另一个虚拟硬盘,或 CD/DVD 或软盘驱动器,请选择应将它添加到的存储控制器(如 IDE、SATA、SCSI、SAS、软盘控制器),然后单击树下方的添加磁盘按钮。然后,您可以选择光驱硬盘。如果您点击了软盘控制器,则可以添加软盘驱动器。或者,右键单击存储控制器并在那里选择一个菜单项。

    将显示一个对话框,允许您选择现有磁盘映像文件或创建新的磁盘映像文件。根据磁盘映像的类型,该对话框称为硬盘选择器光盘选择器软盘选择器

    有关 Oracle VirtualBox 支持的映像文件类型的信息,请参阅 磁盘映像文件(VDI、VMDK、VHD、HDD)

    对于虚拟 CD/DVD 驱动器,映像文件通常是标准 ISO 格式。最常见的是,当您从互联网获得的 ISO 文件安装操作系统时会选择此选项。例如,大多数 Linux 发行版都是这样提供的。

    根据磁盘映像的类型,您可以在存储设置页面的右侧部分为磁盘映像设置以下属性

    • 控制器将虚拟磁盘连接到的设备插槽。IDE 控制器有四个插槽:主设备 0、主设备 1、次设备 0 和次设备 1。相比之下,SATA 和 SCSI 控制器提供多达 30 个用于连接虚拟设备的插槽。

    • 固态硬盘将虚拟磁盘作为固态设备呈现给客户机。
    • 热插拔将虚拟磁盘作为热插拔设备呈现给客户机。
    • 对于虚拟 CD/DVD 驱动器,您可以选择实时 CD/DVD。这意味着虚拟光盘在客户机系统弹出后不会被移除。

  • 移除附件,请选中它并单击底部的移除图标,或右键单击附件并选择菜单项。

可移动媒体(如 CD/DVD 和软盘)可以在客户机运行时更改。由于此时设置窗口不可用,您也可以从虚拟机窗口的设备菜单访问这些设置。

音频设置

虚拟机设置窗口中的“音频”部分决定了虚拟机是否会检测到连接的声卡,以及音频输出是否应在主机系统上播放。

要为客户机启用音频,请选中“启用音频”复选框。以下设置可用:

  • 主机音频驱动程序: Oracle VirtualBox 在主机上使用的音频驱动程序。

    所有新虚拟机默认启用“默认”选项。此选项会自动为主机平台选择最佳音频驱动程序。这使您可以在不同平台之间移动虚拟机,而无需更改音频驱动程序。

    在 Linux 主机上,根据您的主机配置,您可以在 OSS、ALSA 或 PulseAudio 子系统之间进行选择。在较新的 Linux 发行版上,优先使用 PulseAudio 子系统。

    Oracle Solaris 主机仅支持 OSS。Oracle Solaris 主机不再支持 Oracle Solaris Audio 音频后端。

  • 音频控制器:您可以在 Intel AC'97 控制器、Intel HD Audio 控制器或 SoundBlaster 16 声卡之间进行选择。

  • 启用音频输出:仅为虚拟机启用音频输出。

  • 启用音频输入:仅为虚拟机启用音频输入。

网络设置

虚拟机设置窗口中的“网络”部分使您能够配置 Oracle VirtualBox 如何将虚拟网卡呈现给您的虚拟机以及它们如何工作。

首次创建虚拟机时,Oracle VirtualBox 默认启用一张虚拟网卡并为其选择网络地址转换 (NAT) 模式。这样,客户机就可以使用主机的网络连接到外部世界,外部世界也可以连接到虚拟机内您选择对外可见的服务。

此默认设置对绝大多数 Oracle VirtualBox 用户都很好。但是,Oracle VirtualBox 在虚拟化网络方面非常灵活。它支持每个虚拟机拥有许多虚拟网卡。前四张虚拟网卡可以在 VirtualBox Manager 中进行详细配置。可以使用 VBoxManage 命令配置额外的网卡。

有许多可用的网络选项。有关更多信息,请参阅 虚拟网络

串口

Oracle VirtualBox 支持在具有 x86 架构的虚拟机中使用虚拟串行端口。Arm 虚拟机不支持串行端口。

自原始 IBM PC 以来,个人电脑一直配备一到两个串行端口,在 DOS 和 Windows 中也称为 COM 端口。串行端口通常用于调制解调器,并且在 USB 普及之前,一些计算机鼠标曾连接到串行端口。

虽然串行端口已不如以前常见,但它们仍有一些重要的用途。例如,在以太网不可用时,串行端口可用于通过直通电缆建立简单的网络。此外,对于需要进行内核调试的系统程序员来说,串行端口是必不可少的,因为内核调试软件通常通过串行端口与开发人员进行交互。通过虚拟串行端口,系统程序员可以在虚拟机上进行内核调试,而无需连接到真实的计算机。

如果启用了虚拟串行端口,客户机操作系统将看到一个标准的 16550A 兼容 UART 设备。可以使用 VBoxManage modifyvm 命令配置其他 UART 类型。支持接收和发送数据。如何将此虚拟串行端口连接到主机是可以配置的,具体细节取决于您的主机操作系统。

您可以使用“设置”选项卡或 VBoxManage 命令来设置虚拟串行端口。对于后者,请参阅 VBoxManage modifyvm 以获取有关 --uart--uart-mode--uart-type 选项的信息。

每个虚拟机最多可配置四个虚拟串口。对于每个设备,您必须设置以下内容:

  1. 端口号:这决定了虚拟机应看到的串行端口。为获得最佳效果,请使用传统的如下值:

    • COM1: I/O 基址 0x3F8, IRQ 4

    • COM2: I/O 基址 0x2F8, IRQ 3

    • COM3: I/O 基址 0x3E8, IRQ 4

    • COM4: I/O 基址 0x2E8, IRQ 3

    您还可以配置用户定义的串口。输入 I/O 基址和中断 (IRQ)。

  2. 端口模式:虚拟端口连接到的对象。对于每个虚拟串行端口,您有以下选项:

    • 断开连接:客户机会看到设备,但它会表现为没有连接电缆。

    • 主机设备:将虚拟串行端口连接到主机上的物理串行端口。在 Windows 主机上,这将是一个类似 COM1 的名称。在 Linux 或 Oracle Solaris 主机上,它将是一个设备节点,如 /dev/ttyS0Oracle VirtualBox 将简单地将从虚拟串行端口接收和发送的所有数据重定向到物理设备。

    • 主机管道:配置 Oracle VirtualBox 将虚拟串行端口连接到主机上的软件管道。这取决于您的主机操作系统,如下所示:

      • 在 Windows 主机上,数据将通过命名管道发送和接收。管道名称必须是 \\.\pipe\name 格式,其中 name 应该标识虚拟机,但可以自由选择。

      • 在 Mac OS、Linux 或 Oracle Solaris 主机上,将使用本地域套接字。套接字文件名必须选择得当,以便运行 Oracle VirtualBox 的用户有足够的权限来创建和写入它。/tmp 目录通常是一个不错的选择。

        在 Linux 上,有各种工具可以连接到本地域套接字或在服务器模式下创建它。最灵活的工具是 socat,它是许多发行版的一部分。

      在这种情况下,您可以配置 Oracle VirtualBox 是自行创建命名管道,还是在非 Windows 主机上创建本地域套接字,还是 Oracle VirtualBox 假定管道或套接字已存在。使用 VBoxManage 命令行选项,这分别称为服务器模式或客户端模式。

      对于两个虚拟机之间的直接连接,相当于零调制解调器电缆,只需配置一台虚拟机创建管道或套接字,另一台连接到它。

    • 原始文件:将虚拟串行端口输出发送到文件。此选项对于捕获诊断输出非常有用。只要运行 Oracle VirtualBox 的用户有足够的权限创建和写入文件,就可以使用任何文件。

    • TCP:用于通过 TCP/IP 转发串行流量,充当服务器,或者它可以充当连接到其他服务器的 TCP 客户端。此选项允许远程机器直接使用 TCP 连接到客户机的串行端口。

      • TCP 服务器:取消选中“连接到现有管道/套接字”复选框,并在“路径/地址”字段中指定端口号。通常是 23 或 2023。请注意,在类 UNIX 系统上,普通用户必须使用大于 1024 的端口号。

        客户端可以使用 PuTTY 等软件或 telnet 命令行工具访问 TCP 服务器。

      • TCP 客户端:要通过 Internet 或 LAN 创建虚拟直通电缆,另一端可以使用 TCP 连接,方法是在“路径/地址”字段中指定 hostname:port。如果选择“连接到现有管道/套接字”复选框,TCP 套接字将充当客户端。

每个虚拟机最多可以配置四个串行端口,但您可以从上述端口号中选择任何端口号。但是,串行端口无法可靠地共享中断。如果两个端口要同时使用,它们必须使用不同的中断级别,例如 COM1 和 COM2,而不是 COM1 和 COM3。

USB 支持

USB 设置

虚拟机设置窗口中的“USB”部分使您能够配置 Oracle VirtualBox 的高级 USB 支持。

Oracle VirtualBox 可以让虚拟机直接访问您主机上的 USB 设备。为了实现这一点,Oracle VirtualBox 将虚拟 USB 控制器呈现给客户机操作系统。

注意

一旦客户机系统开始使用 USB 设备,它将未经适当关机而从主机断开。这可能会导致数据丢失。

注意

Oracle Solaris 主机在 USB 支持方面存在一些已知限制。请参阅 已知限制

Oracle VirtualBox 还允许您的客户机使用 VirtualBox 远程桌面扩展 (VRDE) 连接到远程 USB 设备。请参阅 远程 USB

为虚拟机启用 USB

  1. 确保虚拟机未运行。
  2. 在虚拟机列表中选择虚拟机,然后单击设置
  3. 在 USB 选项卡上,选择启用 USB 控制器并为您的客户机操作系统选择所需的 USB 控制器。在大多数情况下,这将是 xHCI。仅当您的客户机操作系统不支持 xHCI 时才使用 OHCI 或 EHCI。对于某些旧版 Windows 客户机,您需要安装第三方驱动程序才能支持 xHCI。
    • OHCI 支持 USB 1.1
    • EHCI 支持 USB 2.0。这也启用 OHCI。
    • xHCI 支持高达 USB 3.0 的所有 USB 速度
  4. 通过添加USB 设备过滤器来指定哪些设备可以连接到客户机。具有匹配过滤器的 USB 设备将在连接到主机后自动传递给客户机。没有匹配过滤器的 USB 设备可以手动传递给客户机,例如使用设备USB菜单。
    • 单击USB 过滤器按钮创建一个带有空白字段的新过滤器,然后填写字段。
    • 或者,单击添加 USB 过滤器按钮创建一个带有为选定 USB 设备填写的字段的过滤器。

    为过滤器指定一个名称(以便日后参考),并指定过滤器条件。指定的条件越多,设备的选中就越精确。例如,如果仅指定供应商 ID 046d,则罗技生产的所有设备都将可供客户机使用。另一方面,如果填写了所有字段,该过滤器将仅适用于特定供应商的特定设备型号,甚至不适用于具有不同修订版和序列号的同类型其他设备。

    可用的条件如下:

    • 供应商和产品 ID。 在 USB 中,每个 USB 产品供应商都有一个全球唯一的标识号,称为供应商 ID。同样,每个产品系列也分配有一个产品 ID 号。这两个数字通常以十六进制表示,供应商和产品 ID 之间用冒号分隔。例如,046d:c016 代表供应商罗技,产品为 M-UV69a 光学滚轮鼠标。

      或者,您也可以通过名称指定制造商产品

      要列出连接到主机的所有 USB 设备及其各自的供应商 ID 和产品 ID,请使用以下命令:

      VBoxManage list usbhost

      在 Windows 上,您还可以在设备管理器中查看连接到您系统的所有 USB 设备。在 Linux 上,您可以使用 lsusb 命令。

    • 序列号。 虽然供应商 ID 和产品 ID 对于识别 USB 设备来说已经相当具体,但如果您有两个相同品牌和产品系列的设备,您还需要它们的序列号来正确地进行过滤。

    • 远程。 此设置指定设备是仅本地、仅远程(例如通过 VRDP),还是两者皆可。

    例如,您可以创建一个新的 USB 过滤器,并为罗技公司 (Logitech, Inc.) 指定供应商 ID 046d,制造商索引为 1,并且非远程。然后,主机系统上罗技公司 (Logitech, Inc.) 生产的、制造商索引为 1 的任何 USB 设备都将在客户机系统中可见。

    多个筛选器可以选择单个设备。例如,一个筛选器选择所有 Logitech 设备,另一个筛选器选择特定网络摄像头。

  5. 在 Windows 主机上,您需要拔下并重新连接 USB 设备才能在使用它之前为其创建筛选器。

  6. 确保您立即需要的过滤器在列表中被选中。选定的过滤器将在虚拟机启动时自动附加。

Windows 和 Linux 主机的实现说明

在 Windows 主机上,内核模式设备驱动程序提供 USB 代理支持。它实现了一个 USB 监视器(使 Oracle VirtualBox 能够捕获插入的设备)和一个 USB 设备驱动程序,用于为特定虚拟机声明 USB 设备。安装驱动程序后无需重启系统。此外,您无需重新插入设备即可让 Oracle VirtualBox 声明它们。

在支持的 Linux 主机上,Oracle VirtualBox 通过文件系统中的特殊文件访问 USB 设备。安装 Oracle VirtualBox 时,这些文件将提供给所有用户,它们位于 vboxusers 系统组中。为了能够从客户机系统访问 USB,请确保您是此组的成员。

共享文件夹

共享文件夹使您能够轻松地在虚拟机和您的主机之间交换数据。此功能要求在虚拟机中安装 Oracle VirtualBox 增强功能,并在共享文件夹中详细介绍。

用户界面

用户界面部分允许您更改所选虚拟机的用户界面的某些方面。

  • 菜单栏:此小部件允许您通过单击菜单名称取消选择来禁用整个菜单。可以通过取消选择条目旁边的复选框来禁用菜单项。在 Windows 和 Linux 主机上,可以通过取消选择右侧的复选框来禁用整个菜单栏。

  • 迷你工具栏:在全屏或无缝模式下,Oracle VirtualBox 可以显示一个小型工具栏,其中包含一些通常可从虚拟机菜单栏获得的项。此工具栏会缩小为一个小的灰色线条,除非您将鼠标移到它上面。通过此工具栏,您可以从全屏或无缝模式返回,控制机器执行,或启用某些设备。如果您不想看到该工具栏,请禁用全屏/无缝显示设置。

    显示在屏幕顶部设置允许您将工具栏显示在屏幕顶部,而不是底部。

    Mini工具栏在macOS主机上不可用。

  • 状态栏:此小部件允许您禁用和重新排序状态栏上的图标。通过取消选择图标旁边的复选框来禁用它,或者通过拖放图标来重新排列图标。要禁用整个状态栏,请取消选择左侧的复选框。

替代固件 (UEFI)

Oracle VirtualBox 支持统一可扩展固件接口 (UEFI),这是一个行业标准,旨在取代旧式 BIOS 成为引导计算机的主要接口以及后来的某些系统服务。

默认情况下,Oracle VirtualBox 使用虚拟机的 BIOS 固件。要为给定的虚拟机使用 UEFI,您可以在虚拟机的设置中启用 EFI。请参阅主板选项卡。或者,使用 VBoxManage 命令行界面,如下所示:

VBoxManage modifyvm "VM name" --firmware efi

要切换回使用 BIOS

VBoxManage modifyvm "VM name" --firmware bios

大多数现代 macOS 和 Windows 版本都需要 UEFI。

UEFI 在 Oracle VirtualBox 中的另一个可能用途是开发和测试 UEFI 应用程序,而无需引导任何操作系统。

EFI 中的视频模式

EFI 提供两种不同的视频接口:GOP(图形输出协议)和 UGA(通用图形适配器)。现代操作系统,如 Mac OS X,通常使用 GOP,而一些较旧的操作系统仍使用 UGA。 Oracle VirtualBox 提供了一个配置选项来控制这两种接口的图形分辨率,这使得用户几乎无关紧要。

默认分辨率为 1024x768。要为 EFI 选择图形分辨率,请使用以下 VBoxManage 命令:

VBoxManage setextradata "VM name" VBoxInternal2/EfiGraphicsResolution HxV
从以下默认分辨率列表中找到水平分辨率 H 和垂直分辨率 V。
表 3. 显示类型的默认分辨率。 常见显示类型及其默认分辨率值。
显示类型 默认水平分辨率(像素) 默认垂直分辨率(像素) 颜色深度(BPP) 显示宽高比
VGA 640 480 32 4:3
SVGA 800 600 32 4:3
XGA 1024 768 32 4:3
XGA+ 1152 864 32 4:3
HD 1280 720 32 16:9
WXGA 1280 800 32 16:10
SXGA 1280 1024 32 5:4
SXGA+ 1400 1050 32 4:3
WXGA+ 1440 900 32 16:10
HD+ 1600 900 32 16:9
UXGA 1600 1200 32 4:3
WSXGA+ 1680 1050 32 16:10
全高清 1920 1080 32 16:9
WUXGA 1920 1200 32 16:10
DCI 2K 2048 1080 32 19:10
全高清+ 2160 1440 32 3:2
未命名 2304 1440 32 16:10
QHD 2560 1440 32 16:9
WQXGA 2560 1600 32 16:10
QWXGA+ 2880 1800 32 16:10
QHD+ 3200 1800 32 16:9
WQSXGA 3200 2048 32 16:10
4K UHD 3840 2160 32 16:9
WQUXGA 3840 2400 32 16:10
DCI 4K 4096 2160 32 19:10
HXGA 4096 3072 32 4:3
UHD+ 5120 2880 32 16:9
WHXGA 5120 3200 32 16:10
WHSXGA 6400 4096 32 16:10
HUXGA 6400 4800 32 4:3
8K UHD2 7680 4320 32 16:9

如果此默认分辨率列表不能满足您的需求,请参阅自定义 VESA 分辨率。请注意,必须指定自定义视频模式中指定的颜色深度值。接受的颜色深度为 8、16、24 和 32。EFI 默认假定颜色深度为 32。

EFI 默认视频分辨率设置只能在虚拟机关闭电源时更改。

指定启动参数

目前无法在运行中的客户机内操作 EFI 变量。例如,在 Mac OS X 客户机中运行 nvram 工具来设置 boot-args 变量将不起作用。作为一种替代方法,可以将 VBoxInternal2/EfiBootArgs 附加数据传递给虚拟机,以设置 boot-args 变量。要更改 boot-args EFI 变量,请使用以下命令:

VBoxManage setextradata "VM name" VBoxInternal2/EfiBootArgs <value>

增强功能

上一章介绍了如何开始使用 Oracle VirtualBox 并在虚拟机中安装操作系统。对于任何严肃的交互式使用,Oracle VirtualBox 增强功能将通过提供主机和客户机之间更紧密的集成并提高客户机系统的交互性能来使您的生活更加轻松。本章将详细介绍增强功能。

客户增强功能介绍

一些术语中所述,增强功能设计为在安装客户机操作系统后虚拟机内部安装。它们包括设备驱动程序和系统应用程序,可优化客户机操作系统以提高性能和可用性。有关哪些客户机操作系统得到 Oracle VirtualBox 增强功能的完全支持,请参阅客户机操作系统

所有受支持客户机操作系统的 Oracle VirtualBox 增强功能均以单个 CD-ROM 映像文件的形式提供,该文件称为 VBoxGuestAdditions.iso。此映像文件位于 Oracle VirtualBox 的安装目录中。要为特定虚拟机安装增强功能,请将此 ISO 文件挂载到虚拟机中作为虚拟 CD-ROM,然后从中安装。

增强功能提供以下功能

  • 鼠标指针集成。 为了克服捕获和释放键盘和鼠标中描述的鼠标支持限制,此功能为您提供了无缝的鼠标支持。您将只有一个鼠标指针,并且不再需要按下 Host 键来释放鼠标被客户机操作系统捕获。为了使此功能正常工作,会在客户机中安装一个特殊的鼠标驱动程序,该驱动程序与主机上的物理鼠标驱动程序通信,并相应地移动客户机鼠标指针。

  • 共享文件夹。 这些提供了一种在主机和客户机之间交换文件的便捷方法。与普通的 Windows 网络共享非常相似,您可以告诉 Oracle VirtualBox 将特定主机目录视为共享文件夹,Oracle VirtualBox 将使其在客户机操作系统中可用作为网络共享,而不管客户机是否实际联网。请参阅共享文件夹

  • 更好的视频支持。 虽然 Oracle VirtualBox 为任何客户机操作系统模拟的虚拟显卡提供了所有基本功能,但通过增强功能安装的自定义视频驱动程序为您提供了额外的高分辨率和非标准视频模式,以及加速的视频性能。

    此外,对于 Windows、Linux 和 Oracle Solaris 客户机,如果安装了增强功能,您可以调整虚拟机窗口的大小。客户机中的视频分辨率将自动调整,就好像您手动在客户机的显示设置中输入了任意分辨率一样。请参阅调整机器窗口大小

    如果安装了增强功能,可以加速客户机应用程序的 3D 图形。请参阅硬件加速图形

  • 无缝窗口。 借助此功能,虚拟机桌面中显示的各个窗口可以映射到主机的桌面,就好像底层应用程序实际上是在主机上运行一样。请参阅无缝窗口

  • 通用的主机/客户机通信通道。 增强功能允许您控制和监视客户机执行。客户机属性提供了一个通用的基于字符串的机制,用于在客户机和主机之间交换数据位,其中一些数据位具有控制和监视客户机的特殊含义。请参阅客户机属性

    此外,还可以从主机启动客户机中的应用程序。请参阅应用程序的客户机控制

  • 时间同步。 安装增强功能后,Oracle VirtualBox 可以确保客户机系统时间与主机时间更好地同步。

    出于各种原因,客户机中的时间运行速率可能与主机上的时间略有不同。主机可能通过 NTP 接收更新,并且其自身的时间可能不是线性运行的。虚拟机也可能被暂停,这会使客户机中的时间流停止较长或较短的时间。当客户机和主机之间的挂钟时间仅有微小差异时,时间同步服务会尝试通过小增量逐渐平滑地调整客户机时间,以追赶或落后时间。当差异过大时(例如,虚拟机暂停数小时或从保存状态恢复),客户机时间会立即更改,而无需渐进调整。

    增强功能将定期重新同步时间。有关如何配置时间同步机制的参数,请参阅调整增强功能时间同步参数

  • 共享剪贴板。 安装增强功能后,可以根据需要将客户机操作系统的剪贴板与您的主机操作系统共享。请参阅常规设置

  • 自动登录。 也称为凭据传递。请参阅自动客户机登录

Oracle VirtualBox 的每个版本,即使是次要版本,都附带其自己的增强功能版本。虽然 Oracle VirtualBox 核心与增强功能通信的接口保持稳定,因此在主机上升级 Oracle VirtualBox 时,虚拟机中已安装的增强功能应继续工作,但为获得最佳效果,建议将增强功能保持在同一版本。

因此,Windows 和 Linux 增强功能会自动检查是否需要更新。如果主机运行的 Oracle VirtualBox 版本比增强功能新,客户机中会显示一个带有进一步说明的通知。

要为给定的虚拟机禁用此增强功能更新检查,请将其 /VirtualBox/GuestAdd/CheckHostVersion 客户机属性值设置为 0。请参阅客户机属性

安装和维护客户增强功能

增强功能适用于运行Windows、Linux、Oracle Solaris或OS/2的虚拟机。以下各节详细描述了每个变体的具体细节。

Windows 客户增强功能

Oracle VirtualBox Windows 增强功能设计用于安装在运行 Windows 操作系统的虚拟机中。支持以下版本的 Windows 客户机:

  • Microsoft Windows 11

  • Microsoft Windows Server 2022

  • Microsoft Windows 10(所有版本)

  • Microsoft Windows Server 2019

  • Microsoft Windows Server 2016

  • Microsoft Windows 8.1(所有版本)

  • Microsoft Windows Server 2012 R2

  • Microsoft Windows 8(所有版本)

  • Microsoft Windows Server 2012

  • Microsoft Windows 7(所有版本)

  • Microsoft Windows Server 2008 R2

  • Microsoft Windows Vista(所有版本)

  • Microsoft Windows Server 2008

  • Microsoft Windows XP(任何服务包)

  • Microsoft Windows Server 2003(任何服务包)

  • Microsoft Windows 2000(任何服务包)

  • Microsoft Windows NT 4.0(任何服务包)

安装 Windows 客户增强功能

在虚拟机菜单栏的设备菜单中,Oracle VirtualBox 有一个菜单项插入增强功能 CD 映像,它会在您的虚拟机中挂载增强功能 ISO 文件。Windows 客户机应随后自动启动增强功能安装程序,该安装程序会在您的 Windows 客户机上安装增强功能。

对于其他客户操作系统,或者如果CD上的软件自动启动被禁用,您需要手动启动安装程序。

注意

要在Windows客户机中使基本的Direct3D加速正常工作,您必须安装适用于Windows Vista或更高版本的WDDM视频驱动程序。

对于 Windows 8 及更高版本,仅提供 WDDM Direct3D 视频驱动程序。要使 Windows XP 客户机具有基本的 Direct3D 加速,您必须在安全模式下安装增强功能。有关详细信息,请参阅已知限制

如果您希望手动挂载增强功能,可以执行以下步骤

  1. 启动您已安装Windows的虚拟机。

  2. 从虚拟机菜单栏的设备菜单中选择光驱,然后选择选择/创建磁盘映像。这将显示虚拟媒体管理器,如虚拟媒体管理器中所述。

  3. 在虚拟媒体管理器中,单击添加,然后浏览您的主机文件系统以查找 VBoxGuestAdditions.iso 文件。

    • 在 Windows 主机上,此文件位于 Oracle VirtualBox 的安装目录中,通常是 C:\Program files\Oracle\VirtualBox
    • 在 macOS 主机上,此文件位于 Oracle VirtualBox 的应用程序包中。在 Finder 中右键单击 Oracle VirtualBox 图标,然后选择显示包内容。该文件位于 Contents/MacOS 文件夹中。

    • 在 Linux 主机上,此文件位于 Oracle VirtualBox 的安装目录中的 additions 文件夹中,通常是 /opt/VirtualBox/

    • 在 Oracle Solaris 主机上,此文件位于 Oracle VirtualBox 的安装目录中的 additions 文件夹中,通常是 /opt/VirtualBox

  4. 在虚拟媒体管理器中,选择 ISO 文件,然后单击添加按钮。这将挂载 ISO 文件并将其作为 CD-ROM 显示给您的 Windows 客户机。

除非您在 Windows 客户机中禁用了自动运行功能,否则 Windows 现在将自动从增强功能 ISO 启动 Oracle VirtualBox 增强功能安装程序。如果已关闭自动运行功能,请从客户机内的 CD/DVD 驱动器中选择 VBoxWindowsAdditions.exe 来启动安装程序。

安装程序会将多个设备驱动程序添加到Windows驱动程序数据库,然后调用硬件检测向导。

根据您的配置,它可能会显示驱动程序未进行数字签名的警告。您必须确认这些警告才能继续安装并正确安装增强功能。

安装后,重新启动客户操作系统以激活增强功能。

更新 Windows 客户增强功能

Windows增强功能可以通过再次运行安装程序来更新。这会将旧的增强功能驱动程序替换为更新版本。

或者,您也可以打开 Windows 设备管理器,并为以下设备选择更新驱动程序...

  • Oracle VirtualBox 图形适配器

  • Oracle VirtualBox 系统设备

对于每个设备,选择提供自己的驱动程序的选项,单击从磁盘安装,然后导航到带有增强功能的 CD-ROM 驱动器。

无人值守安装 Windows 客户增强功能

您可以在创建新虚拟机时,使用创建虚拟机向导配置 Oracle VirtualBox 增强功能的无人值守安装。在向导的无人值守客户机 OS 安装页面上选择增强功能复选框。

客户操作系统安装完成后,增强功能将自动安装。

安装代码签名证书

为避免在执行 Oracle VirtualBox 增强功能的无人值守安装时出现弹出窗口,需要将用于签名驱动程序的代码签名证书安装到客户机操作系统中的正确证书存储中。未能执行此操作将导致典型的 Windows 安装显示多个对话框,询问您是否要安装特定驱动程序。

注意

在某些旧版Windows中,例如Windows 2000和Windows XP,即使导入了Oracle证书,上述用户干预弹出窗口也总是会显示。

可以在 Windows 客户机上自动安装代码签名证书。使用增强功能安装 CD 上的 cert 文件夹中的 VBoxCertUtil.exe 实用程序。

请按照以下步骤操作

  1. 以管理员身份登录客户机。

  2. 挂载 Oracle VirtualBox 增强功能 .ISO。

  3. 在客户机上打开命令行窗口,并切换到 Oracle VirtualBox 增强功能 CD 上的 cert 文件夹。

  4. 运行以下命令

    VBoxCertUtil.exe add-trusted-publisher vbox*.cer --root vbox*.cer

    此命令将证书安装到证书存储区。当多次安装相同的证书时,将显示相应的错误。

为了实现完全无人值守的客户机安装,您可以为安装启动器指定命令行参数

VBoxWindowsAdditions.exe /S

这会自动为相应的平台(32位或64位)安装正确的文件和驱动程序。

注意

为了使Windows Aero在客户机上正常运行,客户机的VRAM大小需要配置至少128MB。

有关无人值守客户机安装的更多选项,请使用以下命令查阅命令行帮助

VBoxWindowsAdditions.exe /?

手动文件提取

如果您想手动安装文件和驱动程序,可以从Windows增强功能安装程序中提取文件,如下所示

VBoxWindowsAdditions.exe /extract

要显式提取适用于当前运行平台以外的其他平台的 Windows 增强功能,例如在 32 位系统上提取 64 位文件,您必须使用相应的平台安装程序。使用带有 /extract 参数的 VBoxWindowsAdditions-x86.exeVBoxWindowsAdditions-amd64.exe

Linux 客户增强功能

与 Windows 增强功能类似,Oracle VirtualBox Linux 增强功能也是一组设备驱动程序和系统应用程序,可以安装在客户机操作系统中。

正式支持以下Linux发行版

  • Oracle Linux 5版及更高版本,包括UEK内核

  • Fedora Core 4及更高版本

  • Red Hat Enterprise Linux 3版及更高版本

  • SUSE和openSUSE Linux 9版及更高版本

  • Ubuntu 5.10版及更高版本

许多其他发行版已知可与增强功能配合使用。

SUSE 和 openSUSE 10.2、Ubuntu 6.10(所有版本)和 Ubuntu 6.06(服务器版)默认提供的 Linux 内核版本存在一个错误,在虚拟机中运行时可能导致启动期间崩溃。增强功能在这些发行版中有效。

请注意,一些 Linux 发行版已自带全部或部分 Oracle VirtualBox 增强功能。您可以选择保留发行版的增强功能版本,但这些版本通常已过时且功能有限,因此我们建议用 Oracle VirtualBox 附带的增强功能替换它们。Oracle VirtualBox Linux 增强功能安装程序会尝试检测现有安装并替换它们,但这可能需要一些手动操作,具体取决于发行版集成增强功能的方式。强烈建议在替换预装的增强功能之前,先拍摄虚拟机快照。

安装 Linux 客户增强功能

Oracle VirtualBox Linux 增强功能与 Windows 增强功能一样,都提供在同一虚拟 CD-ROM 文件上。它们附带一个安装程序,引导您完成设置过程。但是,由于 Linux 发行版之间的显著差异,与 Windows 相比,安装可能会稍微复杂一些。

安装通常涉及以下步骤

  1. 在安装增强功能之前,请准备好您的客户机系统以构建外部内核模块。这就像在Oracle VirtualBox 内核模块中所述的那样工作,只是此步骤必须在您的 Linux 客户机中执行,而不是在 Linux 主机系统上。

    如果您怀疑出现问题,请检查您的客户机是否已正确设置,并以root身份运行以下命令

    rcvboxadd setup
  2. VBoxGuestAdditions.iso CD 文件插入您的 Linux 客户机虚拟 CD-ROM 驱动器,方式与在安装 Windows 增强功能中为 Windows 客户机描述的方式相同。

  3. 切换到您的CD-ROM驱动器挂载的目录,并以root身份运行以下命令

    sh ./VBoxLinuxAdditions.run

无人值守安装 Linux 客户增强功能

您可以在创建新虚拟机时,使用创建虚拟机向导配置 Oracle VirtualBox 增强功能的无人值守安装。在向导的无人值守客户机 OS 安装页面上选择增强功能复选框。

客户操作系统安装完成后,增强功能将自动安装。

图形和鼠标集成

在 Linux 和 Oracle Solaris 客户机中,Oracle VirtualBox 的图形和鼠标集成是通过 X Window System 实现的。Oracle VirtualBox 可以使用该系统的 X.Org 版本,或者 XFree86 版本 4.3(与第一个 X.Org 版本相同)。在安装过程中,X.Org 显示服务器将被设置为使用增强功能附带的图形和鼠标驱动程序。

在支持的 Linux 发行版或 Oracle Solaris 系统的全新安装中安装增强功能后,许多不受支持的系统也将正常工作,当在主机上调整 Oracle VirtualBox 窗口大小时,客户机的图形模式将随之调整以适应窗口大小。您也可以通过使用 VBoxManage 工具发送视频模式提示来要求客户机系统切换到特定分辨率。

多客户机显示器支持在使用 X.Org 服务器版本 1.3(是 X Window System 版本 11 的第 7.3 版的一部分)或更高版本的客户机中可用。可以使用客户机操作系统附带的工具按需调整客户机屏幕的布局。

如果您想更深入地了解 X.Org 驱动程序的设置细节,特别是如果您想在我们的安装程序无法正确处理的环境中使用它们,请参阅客户机图形和鼠标驱动程序设置详解

Oracle VirtualBox 7 开始,运行 VMSVGA 图形配置的客户机的 Linux 客户机屏幕调整功能已得到更改。从那时起,此功能包括一个名为 VBoxDRMClient 的独立守护程序及其对应的桌面环境助手。

VBoxDRMClient 以 root 进程运行,是主机和客户机 vmwgfx 驱动程序之间的桥梁。这意味着 VBoxDRMClient 侦听来自主机的屏幕调整提示,并将它们转发给 vmwgfx 驱动程序。这使得在用户执行图形登录之前即可使用客户机屏幕调整功能。

为了执行特定于桌面环境的操作(例如在多显示器设置中设置主显示器),会使用桌面环境助手。一旦用户执行了图形登录操作,助手守护程序将以用户会话范围运行,并尝试通过 IPC 连接连接到 VBoxDRMClient。当 VBoxDRMClient 收到来自主机的相应命令时,该命令将通过 IPC 转发到助手守护程序,然后执行操作。

默认情况下,VBoxDRMClient允许任何进程连接到其IPC套接字。这可以通过以下步骤进行限制

  1. 增强功能 Linux 安装程序会创建一个 vboxdrmipc 用户组。需要将相应用户添加到此组。

  2. 您必须设置 DRMIpcRestricted 客户机属性,如下所示:

    VBoxManage guestproperty set "VM name" /VirtualBox/GuestAdd/DRMIpcRestricted 1 \
    --flags RDONLYGUEST

    设置属性时仅设置 RDONLYGUEST 标志非常重要,这样就不能在 Guest 内部对其进行更改。

注意

这两个步骤都是必需的。如果缺少其中一个,所有进程都将能够访问 IPC 套接字。

通过取消设置 Guest 属性可以禁用受限模式,如下所示

VBoxManage guestproperty unset "VM name" /VirtualBox/GuestAdd/DRMIpcRestricted

更新 Linux 客户增强功能

通过使用更新的 CD-ROM 映像再次执行安装过程,可以简单地更新 Guest Additions。这将用更新的版本替换驱动程序。更新 Guest Additions 后,应重新启动。

卸载 Linux 客户增强功能

如果您已在虚拟机中安装了某个版本的增强功能,并且想在不安装新版本的情况下将其移除,您可以插入增强功能 CD 映像到虚拟 CD-ROM 驱动器中,如上所述。然后,从 CD 映像在客户机中挂载的路径运行当前增强功能的安装程序,并附带 uninstall 参数,如下所示:

sh ./VBoxLinuxAdditions.run uninstall

虽然这通常会顺利进行,但在某些情况下,您可能需要手动清理客户机,特别是 XFree86Config 或 xorg.conf 文件。特别是,如果安装的增强功能版本或客户机操作系统非常旧,或者您在安装后对增强功能设置进行了自己的更改。

您可以按如下方式卸载 Additions

/opt/VBoxGuestAdditions-version/uninstall.sh

/opt/VBoxGuestAdditions-version 替换为正确的增强功能安装目录。

Oracle Solaris 客户增强功能

与 Windows 增强功能类似,Oracle VirtualBox Oracle Solaris 增强功能也采用一组设备驱动程序和系统应用程序的形式,可以安装在客户机操作系统中。

正式支持以下 Oracle Solaris 发行版

  • Oracle Solaris 11,包括 Oracle Solaris 11 Express

  • Oracle Solaris 10 4/08 及更高版本

其他发行版如果基于可比较的软件版本,也可能工作。

安装 Oracle Solaris 客户增强功能

Oracle VirtualBox Oracle Solaris 增强功能与 Windows 和 Linux 增强功能一起提供在同一个 ISO CD-ROM 上。它们附带一个安装程序,引导您完成设置过程。

安装包括以下步骤

  1. VBoxGuestAdditions.iso 文件挂载为您的 Oracle Solaris 客户机的虚拟 CD-ROM 驱动器,方式与在安装 Windows 增强功能中为 Windows 客户机描述的方式完全相同。

    如果 Guest 上的 CD-ROM 驱动器未挂载(如某些 Oracle Solaris 10 版本所示),请以 root 身份运行以下命令

    svcadm restart volfs
  2. 切换到您的CD-ROM驱动器挂载的目录,并以root身份运行以下命令

    pkgadd -G -d ./VBoxSolarisAdditions.pkg
  3. 选择1并确认安装增强功能软件包。安装完成后,注销并重新登录到客户机的 X 服务器,以激活 X11 增强功能。

无人值守安装 Oracle Solaris 客户增强功能

您可以在创建新虚拟机时,使用创建虚拟机向导配置 Oracle VirtualBox 增强功能的无人值守安装。在向导的无人值守客户机 OS 安装页面上选择增强功能复选框。

客户操作系统安装完成后,增强功能将自动安装。

卸载 Oracle Solaris 客户增强功能

可以通过从 Guest 中移除软件包来安全地移除 Oracle Solaris Guest Additions。打开 root 终端会话并运行以下命令

pkgrm SUNWvboxguest

更新 Oracle Solaris 客户增强功能

应通过先卸载现有 Guest Additions,然后安装新 Guest Additions 的方式来更新 Guest Additions。不移除现有 Guest Additions 而尝试安装新的 Guest Additions 是不可能的。

OS/2 客户增强功能

Oracle VirtualBox 还附带一组驱动程序,可改进 OS/2 在虚拟机中的运行。由于 OS/2 本身的限制,此增强功能变体功能集有限。有关详细信息,请参阅已知限制

OS/2 增强功能与适用于其他平台的增强功能一样,都提供在同一 ISO CD-ROM 上。像以前一样将 ISO 挂载到 OS/2。OS/2 增强功能位于 \OS2 目录中。

我们目前不提供自动安装程序。请参阅 CD-ROM 目录中的 readme.txt 文件,其中说明了如何手动安装 OS/2 增强功能。

共享文件夹

使用 Oracle VirtualBox共享文件夹功能,您可以从客户机系统内访问主机系统的文件。这类似于在 Windows 网络中使用网络共享的方式,只不过共享文件夹不需要网络连接,只需要增强功能。共享文件夹支持 Windows 2000 及更高版本、Linux 和 Oracle Solaris 客户机。Oracle VirtualBox 为 Mac OS X 和 OS/2 客户机提供了实验性支持。

共享文件夹物理上驻留在主机上,然后与客户机共享,客户机使用增强功能中的特殊文件系统驱动程序与主机通信。对于 Windows 客户机,共享文件夹实现为伪网络重定向器。对于 Linux 和 Oracle Solaris 客户机,增强功能提供了一个虚拟文件系统。

要与 Oracle VirtualBox 中的虚拟机共享主机文件夹,您必须指定文件夹的路径并选择一个客户机可以用于访问共享文件夹的共享名称。这在主机上进行。在客户机中,您可以使用共享名称连接到它并访问文件。

为虚拟机设置共享文件夹有几种方法

  • 在运行中的 VM 窗口中,从设备菜单中选择共享文件夹,或者单击底部右侧状态栏中的文件夹图标。

  • 如果 VM 当前未运行,您可以在虚拟机的设置窗口中配置共享文件夹。

  • 从命令行,您可以使用 VBoxManage 创建共享文件夹,如下所示:

    VBoxManage sharedfolder add "VM name" --name "sharename" --hostpath "C:\test"

    请参阅VBoxManage sharedfolder

共享有两种类型

  • 永久共享,随 VM 设置一起保存。

  • 瞬时共享,即在运行时添加并在 VM 关闭时消失。这些可以通过 VirtualBox Manager 中的复选框或使用 --transient VBoxManage sharedfolder add 命令选项来创建。

共享文件夹可以是读写或只读的。这意味着客户机被允许读取和写入主机上的文件,或者仅读取。默认情况下,共享文件夹是读写模式。可以使用 VirtualBox Manager 中的复选框或 --readonly option VBoxManage sharedfolder add 命令创建只读文件夹。

Oracle VirtualBox 共享文件夹还支持符号链接,也称为软链接,条件如下:

  • Host 操作系统必须支持软链接。例如,需要 macOS、Linux 或 Oracle Solaris Host。

  • Guest VM 必须安装支持软链接的 Guest Additions 版本。目前只有 Linux 和 Oracle Solaris Guest Additions 支持软链接。

  • 出于安全原因,客户机操作系统默认不允许创建软链接。如果您信任客户机操作系统不会滥用此功能,可以如下启用共享文件夹的软链接创建:

    VBoxManage setextradata VM-name VBoxInternal2/SharedFoldersEnableSymlinksCreate/sharename 1

如果在主机上的共享文件夹内创建了符号链接,并且已安装的客户机增强功能不支持符号链接,则客户机将在共享文件夹内看到符号链接的目标(作为一个文件)。例如,如果在 Linux 主机上创建了指向某个文件的符号链接,

$ cd /SharedFolder && ln -s filename symlink-to-filename

当在 Windows 客户机上查看共享文件夹时,将列出两个相同的文件夹:filenamesymlink-to-filename

手动挂载

您可以从 VM 内部挂载共享文件夹,方法与挂载普通网络共享相同

  • 在 Windows 客户机中,共享文件夹是可浏览的,因此在 Windows 资源管理器中可见。要将主机的共享文件夹连接到您的 Windows 客户机,请打开 Windows 资源管理器,然后在“网上邻居”、“整个网络”或“Oracle VirtualBox 共享文件夹”中查找该文件夹。通过右键单击共享文件夹并从弹出的菜单中选择“映射网络驱动器”,您可以为该共享文件夹分配一个驱动器号。

    或者,在 Windows 命令行上,使用以下命令

    net use x: \\vboxsvr\sharename

    虽然 vboxsvr 是一个固定名称,但请注意 vboxsrv 也可以正常工作。请将 x: 替换为您想用于共享的驱动器号,并将 sharename 替换为使用 VBoxManage 指定的共享名称。

  • 在 Linux Guest 中,使用以下命令

    mount -t vboxsf [-o OPTIONS] sharename mountpoint

    要在启动时挂载共享文件夹,请将以下条目添加到 /etc/fstab

    sharename   mountpoint   vboxsf   defaults  0   0
  • 在 Oracle Solaris Guest 中,使用以下命令

    mount -F vboxfs [-o OPTIONS] sharename mountpoint

    请将 sharename 替换为使用 VBoxManageVirtualBox Manager 指定的共享名称(小写字符串)。将 mountpoint 替换为您想在客户机上挂载共享的路径,例如 /mnt/share。通常的挂载规则适用。例如,如果该目录尚不存在,请先创建它。

    以下是在 Oracle Solaris 上为用户 jack 挂载共享文件夹的示例

    $ id
    uid=5000(jack) gid=1(other)
    $ mkdir /export/home/jack/mount
    $ pfexec mount -F vboxfs -o uid=5000,gid=1 jackshare /export/home/jack/mount
    $ cd ~/mount
    $ ls
    sharedfile1.mp3 sharedfile2.txt
    $

    除了 mount 命令提供的标准选项外,还有以下可用选项:

    iocharset CHARSET

    此选项设置用于 I/O 操作的字符集。请注意,在 Linux 客户机上,如果未指定 iocharset 选项,则客户机增强功能驱动程序将尝试使用 CONFIG_NLS_DEFAULT 内核选项指定的字符集。如果此选项也未设置,则使用 UTF-8。

    convertcp CHARSET

    此选项指定用于共享文件夹名称的字符集。默认情况下,这是 UTF-8。

    mount 手册页中记录的通用挂载选项也适用。特别有用的是 uidgidmode 选项,因为它们可以允许普通用户以读/写模式访问,具体取决于设置,即使 root 用户已挂载文件系统。

  • 在 OS/2 客户机中,请使用 VBoxControl 命令管理共享文件夹。例如:

    VBoxControl sharedfolder use D: MyShareName
    VBoxControl sharedfolder unuse D:
    VBoxControl sharedfolder list

    与 Windows 客户机一样,也可以使用 UNC 访问共享文件夹,服务器名分别为 \\VBoxSF\\\VBoxSvr\\\VBoxSrv\,共享文件夹名称作为 sharename

自动挂载

Oracle VirtualBox 提供挂载共享文件夹的选项。启用共享文件夹的自动挂载后,客户机增强功能服务会自动为您挂载。对于 Windows 或 OS/2,还可以指定首选驱动器号。对于 Linux 或 Oracle Solaris,还可以指定挂载点目录。

如果未指定驱动器号或挂载点,或者该位置已被占用,Guest Additions 服务将查找备用位置。该服务根据 Guest OS 查找备用位置,如下所示

  • Windows 和 OS/2 客户机。Z: 开始搜索一个空闲驱动器号。如果所有驱动器号都已分配,则文件夹未挂载。

  • Linux 和 Oracle Solaris 客户机。 文件夹挂载在 /media 目录下的。文件夹名称会被规范化(无空格、斜杠或冒号),并加上 sf_ 前缀。

    例如,如果您有一个名为 myfiles 的共享文件夹,它将在客户机中显示为 /media/sf_myfiles

    可以使用客户机属性 /VirtualBox/GuestAdd/SharedFolders/MountDir 和更通用的 /VirtualBox/GuestAdd/SharedFolders/MountPrefix 来覆盖自动挂载目录和前缀。有关详细信息,请参阅客户机属性

在 Windows 客户机中,对自动挂载共享文件夹的访问权限授予给所有人,包括客户机用户。对于 Linux 和 Oracle Solaris 客户机,访问权限仅限于 vboxsf 组的成员和 root 用户。

剪贴板

Oracle VirtualBox 允许您将剪贴板内容从主机复制到客户机,反之亦然。要实现这一点,必须在客户机上安装最新版本的客户机增强功能。

出于安全原因,可以通过以下任一方式在运行时按虚拟机进行配置拖放:使用虚拟机“设备”菜单中的“共享剪贴板”菜单项,或使用 VBoxManage 命令。

以下是共享剪贴板设置:

  • 禁用。 完全禁用复制功能。这是创建新虚拟机时的默认设置。

  • 主机到客户机。 仅启用从主机到客户机的文本复制操作。

  • 客户机到主机。 仅启用从客户机到主机的文本复制操作。

  • 双向。 启用双向文本复制操作:从主机到客户机,以及从客户机到主机。

  • 启用剪贴板文件传输。 除了文本之外,还允许文件复制到或从虚拟机。

要使用 VBoxManage 命令控制当前剪贴板模式,请参阅VBoxManage。使用 modifyvmcontrolvm 命令可以在命令行中设置虚拟机的当前剪贴板模式。

已知限制

以下是共享剪贴板文件传输的已知限制:

在 Linux 主机和客户机上,共享剪贴板文件传输仅限于文件,每次传输一个文件。不支持传输符号链接。

除非另有说明,否则共享剪贴板文件传输仅与客户机或主机操作系统的官方默认文件管理器进行测试和支持。

拖放

Oracle VirtualBox 允许您将内容从主机拖放到客户机,反之亦然。要实现这一点,必须在客户机上安装最新版本的客户机增强功能。

拖放操作可透明地实现文件、目录甚至特定剪贴板格式在两者之间的复制或打开。例如,从主机到客户机或从客户机到主机。然后,您可以在主机和虚拟机之间执行拖放操作,就像在主机操作系统上执行原生拖放操作一样。

目前,拖放操作已针对基于 Windows 和 X-Windows 的系统(主机和客户机端)进行了实现。由于 X-Windows 支持许多不同的拖放协议,目前仅支持最常见的协议 XDND。使用其他协议(如 Motif 或 OffiX)的应用程序将不会被 Oracle VirtualBox 识别。

在使用拖放操作时,数据的来源称为 。也就是说,实际数据来自何处以及如何指定。 目标 指定源数据应该去往何处。将数据从源传输到目标可以通过多种方式完成,例如复制、移动或链接。

注意

目前仅支持数据复制。移动或链接尚未实现。

当将数据从主机传输到客户机操作系统时,此时主机是源,而客户机操作系统是目标。但是,当将数据从客户机操作系统传输到主机时,客户机操作系统此时成为源,而主机是目标。

出于安全原因,可以通过以下任一方式在运行时按虚拟机进行配置拖放:使用虚拟机“设备”菜单中的“拖放”菜单项,或使用 VBoxManage 命令。

提供以下拖放模式

  • 禁用。 完全禁用拖放功能。这是创建新虚拟机时的默认设置。

  • 主机到客户机。 仅启用从主机到客户机的拖放操作。

  • 客户机到主机。 仅启用从客户机到主机的拖放操作。

  • 双向。 启用双向拖放操作:从主机到客户机,以及从客户机到主机。

注意

拖放支持取决于所使用的前端。目前,只有 VirtualBox Manager 前端提供此功能。

要使用 VBoxManage 命令控制当前拖放模式,请参阅VBoxManage。使用 modifyvmcontrolvm 命令可以在命令行中设置虚拟机的当前拖放模式。

支持的格式

Oracle VirtualBox 可以在多种主机操作系统上运行,并且还支持多种客户机,因此必须在传输后翻译某些数据格式。这样,接收数据的目标操作系统就可以以适当的方式处理它们。

注意

拖动文件时,不进行任何数据转换。例如,将文件从 Linux Guest 传输到 Windows Host 时,Linux 特定的行尾不会转换为 Windows 行尾。

Oracle VirtualBox 拖放服务支持以下格式:

  • 纯文本: 来自文本编辑器、互联网浏览器和终端窗口等应用程序。

  • 文件: 来自文件管理器,如 Windows 资源管理器、Nautilus 和 Finder。

  • 目录: 对于目录,适用的格式与文件相同。

已知限制

拖放功能存在以下已知限制

在 Windows 主机上,不允许在 UAC 提升(用户帐户控制)程序和非 UAC 提升程序之间拖放内容。如果您以管理员权限启动 Oracle VirtualBox,则拖放功能将无法与 Windows 资源管理器一起使用,因为 Windows 资源管理器默认以普通用户权限运行。

在 Linux 主机和客户机上,程序可以在拖放操作仍在进行时查询拖放数据。例如,在 LXDE 上使用 PCManFM 文件管理器。目前不支持此功能。作为一种变通方法,可以使用其他文件管理器(如 Nautilus)代替。

硬件加速图形

Oracle VirtualBox 客户机增强功能为 Windows、Linux 和 Oracle Solaris 客户机提供了实验性的 3D 硬件支持。

通过此功能,如果虚拟机内的应用程序通过 OpenGL 或 Direct3D 编程接口使用 3D 功能,Oracle VirtualBox 将尝试使用主机 3D 硬件,而不是在软件中模拟这些功能(这样会很慢)。只要您的主机操作系统能够利用您的加速 3D 硬件,这对于所有支持的主机平台都有效。必须在虚拟机上安装客户机增强功能。

3D 加速功能仅适用于某些 Windows、Linux 和 Oracle Solaris 客户机,处于实验阶段。

  • Windows 客户机的 3D 加速需要 Windows Vista 或更高版本。Vista 和 Windows 7 客户机支持 Direct3D 9,Windows 8 及更高版本客户机支持 Direct3D 11.0 或 11.1(取决于主机功能)。Windows 客户机还支持 OpenGL 4.1。

  • Linux 客户机通过 Mesa3D 驱动程序支持 OpenGL 4.1。Linux 上的 OpenGL 需要内核 2.6.27 或更高版本,以及 X.org 服务器版本 1.5 或更高版本。Ubuntu 10.10 和 Fedora 14 已通过测试并确认可用。

  • Oracle Solaris Guest 上的 OpenGL 需要 X.org 服务器版本 1.5 或更高版本。

无缝窗口

启用无缝窗口后,Oracle VirtualBox 会将虚拟机显示的大小扩展到与主机桌面一样大,并隐藏客户机操作系统的背景,因此客户机的窗口可以无缝地显示在主机窗口旁边。

图 2 中,可以看到并排显示的两个计算器应用程序,一个运行在主机上,另一个运行在虚拟机中。

图 2. 主机桌面上的无缝窗口
主机桌面上的无缝窗口

Seamless Windows on a Host Desktop

要启用无缝窗口,请在虚拟机中按下 Host 键 + L。Host 键显示在任务栏上,通常是右 Ctrl 键。

要禁用无缝窗口并返回正常虚拟机显示,请再次按下 Host 键 + L

客户属性

Oracle VirtualBox 允许从正在运行的客户机请求某些属性,前提是已安装 Oracle VirtualBox 客户机增强功能且虚拟机正在运行。这带来了以下好处:

  • 一系列预定义的虚拟机特性由 Oracle VirtualBox 自动维护,并可在主机上检索。例如,用于监控虚拟机性能和统计数据。

  • 任意字符串数据可以在 Guest 和 Host 之间交换。这在两个方向上都有效。

为了实现这一点,Oracle VirtualBoxOracle VirtualBox 客户机增强功能和主机之间建立了一个私有通信通道,并且双方的软件都可以使用此通道来交换字符串数据以供任意目的使用。客户机属性只是带有值的字符串键。它们可以由主机和客户机设置或写入。它们也可以从双方读取。

除了建立读取和写入值的通用机制外,Oracle VirtualBox 客户机增强功能还会自动维护一组预定义的客户机属性,以允许检索有趣的客户机数据,例如客户机的确切操作系统和服务包级别、已安装的客户机增强功能版本、当前登录到客户机操作系统的用户、网络统计信息等。所有这些预定义属性都以 /VirtualBox/ 为前缀,并组织在一个键的层次结构中。

当您从虚拟机的“机器”菜单中选择“会话信息对话框”时,将显示一些此运行时信息。

使用 VBoxManage guestproperty 命令是更灵活的使用此通道的方式。请参阅VBoxManage guestproperty。例如,要列出给定正在运行的虚拟机所有可用的客户机属性及其相应的值,请使用此命令:

$ VBoxManage guestproperty enumerate "Windows Vista III"
VirtualBox Command Line Management Interface Version version-number
Copyright (C) 2005-2022 Oracle and/or its affiliates

Name: /VirtualBox/GuestInfo/OS/Product, value: Windows Vista Business Edition,
    timestamp: 1229098278843087000, flags:
Name: /VirtualBox/GuestInfo/OS/Release, value: 6.0.6001,
    timestamp: 1229098278950553000, flags:
Name: /VirtualBox/GuestInfo/OS/ServicePack, value: 1,
    timestamp: 1229098279122627000, flags:
Name: /VirtualBox/GuestAdd/InstallDir,
    value: C:/Program Files/Oracle/VirtualBox
    Guest Additions, timestamp: 1229098279269739000, flags:
Name: /VirtualBox/GuestAdd/Revision, value: 40720,
    timestamp: 1229098279345664000, flags:
Name: /VirtualBox/GuestAdd/Version, value: version-number,
    timestamp: 1229098279479515000, flags:
Name: /VirtualBox/GuestAdd/Components/VBoxControl.exe, value: version-numberr40720,
    timestamp: 1229098279651731000, flags:
Name: /VirtualBox/GuestAdd/Components/VBoxHook.dll, value: version-numberr40720,
    timestamp: 1229098279804835000, flags:
Name: /VirtualBox/GuestAdd/Components/VBoxDisp.dll, value: version-numberr40720,
    timestamp: 1229098279880611000, flags:
Name: /VirtualBox/GuestAdd/Components/VBoxMRXNP.dll, value: version-numberr40720,
    timestamp: 1229098279882618000, flags:
Name: /VirtualBox/GuestAdd/Components/VBoxService.exe, value: version-numberr40720,
    timestamp: 1229098279883195000, flags:
Name: /VirtualBox/GuestAdd/Components/VBoxTray.exe, value: version-numberr40720,
    timestamp: 1229098279885027000, flags:
Name: /VirtualBox/GuestAdd/Components/VBoxGuest.sys, value: version-numberr40720,
    timestamp: 1229098279886838000, flags:
Name: /VirtualBox/GuestAdd/Components/VBoxMouse.sys, value: version-numberr40720,
    timestamp: 1229098279890600000, flags:
Name: /VirtualBox/GuestAdd/Components/VBoxSF.sys, value: version-numberr40720,
    timestamp: 1229098279893056000, flags:
Name: /VirtualBox/GuestAdd/Components/VBoxVideo.sys, value: version-numberr40720,
    timestamp: 1229098279895767000, flags:
Name: /VirtualBox/GuestInfo/OS/LoggedInUsers, value: 1,
    timestamp: 1229099826317660000, flags:
Name: /VirtualBox/GuestInfo/OS/NoLoggedInUsers, value: false,
    timestamp: 1229098455580553000, flags:
Name: /VirtualBox/GuestInfo/Net/Count, value: 1,
    timestamp: 1229099826299785000, flags:
Name: /VirtualBox/HostInfo/GUI/LanguageID, value: C,
    timestamp: 1229098151272771000, flags:
Name: /VirtualBox/GuestInfo/Net/0/V4/IP, value: 192.168.2.102,
    timestamp: 1229099826300088000, flags:
Name: /VirtualBox/GuestInfo/Net/0/V4/Broadcast, value: 255.255.255.255,
    timestamp: 1229099826300220000, flags:
Name: /VirtualBox/GuestInfo/Net/0/V4/Netmask, value: 255.255.255.0,
    timestamp: 1229099826300350000, flags:
Name: /VirtualBox/GuestInfo/Net/0/Status, value: Up,
    timestamp: 1229099826300524000, flags:
Name: /VirtualBox/GuestInfo/OS/LoggedInUsersList, value: username,
    timestamp: 1229099826317386000, flags:

要查询单个属性的值,请使用 get 子命令,如下所示:

$ VBoxManage guestproperty get "Windows Vista III" "/VirtualBox/GuestInfo/OS/Product"
VirtualBox Command Line Management Interface Version version-number
Copyright (C) 2005-2022 Oracle and/or its affiliates

Value: Windows Vista Business Edition

要从客户机添加或更改客户机属性,请使用工具 VBoxControl。此工具包含在客户机增强功能中。从 Linux 客户机启动时,出于安全原因,此工具需要 root 权限。

$ sudo VBoxControl guestproperty enumerate
VirtualBox Guest Additions Command Line Management Interface Version version-number
Copyright (C) 2005-2022 Oracle and/or its affiliates

Name: /VirtualBox/GuestInfo/OS/Release, value: 2.6.28-18-generic,
    timestamp: 1265813265835667000, flags: <NULL>
Name: /VirtualBox/GuestInfo/OS/Version, value: #59-Ubuntu SMP Thu Jan 28 01:23:03 UTC 2010,
    timestamp: 1265813265836305000, flags: <NULL>
      ...

对于更复杂的需求,您可以使用 Oracle VirtualBox 编程接口。请参阅Oracle VirtualBox 编程接口

使用客户属性等待虚拟机事件

可以等待属性 /VirtualBox/HostInfo/VBoxVer/VirtualBox/HostInfo/VBoxVerExt/VirtualBox/HostInfo/VBoxRev 来检测虚拟机状态是从保存状态或快照恢复的。

$ VBoxControl guestproperty wait /VirtualBox/HostInfo/VBoxVer

同样,可以使用 /VirtualBox/HostInfo/ResumeCounter 来检测虚拟机是否已从暂停状态或保存状态恢复。

客户控制文件管理器

如果您安装了客户机增强功能,可以使用客户机控制文件管理器在虚拟机 (VM) 和主机系统之间复制文件。您还可以创建新文件夹、重命名文件和删除文件。

当 Guest 的 VM 窗口不可见时,此功能非常有用。例如,当 Guest 在无头模式下运行时。

注意

要使用 Guest 控制文件管理器,Guest 必须正在运行。对于已关机的 Guest,它会自动禁用。

传输文件

要使用客户机控制文件管理器传输文件,请按照以下步骤操作:

  1. 确保您拥有客户机系统上某个帐户的用户名和密码,并且对您需要访问的文件具有适当的权限。
  2. 打开 Guest 控制文件管理器。执行以下任一操作

    • 在客户机虚拟机中,选择“机器”、“文件管理器”。

    • VirtualBox Manager 中,单击虚拟机名称。单击虚拟机工具菜单中的“文件管理器”。

    主机文件系统窗格显示主机系统上的文件。

  3. 客户机文件系统窗格中,输入您要登录的用户的用户名密码

    单击 打开会话

    虚拟机文件系统将显示在 客户机文件系统窗格中。

  4. 要从虚拟机传输到主机,请选择文件,然后单击 从客户机复制到主机

    要从主机传输到虚拟机,请选择文件,然后单击 从主机复制到客户机

  5. 操作窗格中检查传输进度。
  6. 单击 关闭以结束客户机访问和客户机控制文件管理器。

客户应用程序控制

Guest Additions 支持从 Host 系统在 Guest VM 中启动应用程序。此功能可用于自动化 Guest 内的软件部署。

要实现这一点,需要在客户机上安装该应用程序。主机端无需安装其他软件。此外,标准输出和标准错误的文本模式输出可以在主机上显示以供进一步处理。有选项可以指定用户凭据和超时值(以毫秒为单位),以限制应用程序的运行时间。

Windows 的 Guest Additions 支持自动更新。这适用于已安装的 Guest Additions 版本。此外,还支持从 Host 复制文件到 Guest 以及远程创建 Guest 目录。

要使用这些功能,请使用 Oracle VirtualBox 命令行。请参阅VBoxManage guestcontrol

内存过量分配

在拥有许多虚拟机的服务器环境中,客户机增强功能可用于在多个虚拟机之间共享物理主机内存。这会减少虚拟机使用的总内存量。如果内存使用是限制因素,而 CPU 资源仍有可用,则这有助于在每个主机上运行更多虚拟机。

内存气球化

客户机增强功能可以在机器运行时更改虚拟机使用的主机内存量。由于其实现方式,此功能称为内存气球

注意
  • Oracle VirtualBox 仅支持 64 位主机上的内存气球。不支持 macOS 主机。

  • 内存气球与大页面启用一起使用效果不佳。要为虚拟机禁用大页面支持,请运行 VBoxManage modifyvm vmname --large-pages off

通常,要更改分配给虚拟机的内存量,您需要完全关闭虚拟机并修改其设置。通过内存气球,可以为一台虚拟机分配的内存可以交给另一台虚拟机,而无需关闭该机器。

当请求内存气球时,在客户机内运行的 Oracle VirtualBox 客户机增强功能会在内核级别从客户机操作系统分配物理内存,并锁定客户机中的该内存。这确保客户机不再使用该内存。任何客户机应用程序都无法分配它,客户机内核也不会使用它。Oracle VirtualBox 随后可以重新使用此内存并将其分配给另一台虚拟机。

通过气球机制提供的内存仅可供 Oracle VirtualBox 重用。它不会作为空闲内存返回给主机。因此,从正在运行的客户机请求气球内存不会增加主机上的空闲、未分配内存量。实际上,内存气球对于多个虚拟机在运行时是一种内存超额分配机制。这对于临时启动另一台机器可能很有用,或者在更复杂的环境中,对于许多可能并行运行的虚拟机的复杂内存管理,具体取决于客户机如何使用内存。

目前,内存气球仅通过 VBoxManage 支持。使用以下命令增加或减少已安装客户机增强功能的正在运行的虚拟机内的内存气球大小:

VBoxManage controlvm "VM name" guestmemoryballoon n

其中 VM name 是所讨论的虚拟机的名称或 UUID,n 是要从客户机分配的内存量(以兆字节为单位)。请参阅VBoxManage controlvm

您还可以设置一个默认气球,每次 VM 启动后都会自动从 VM 请求,使用以下命令

VBoxManage modifyvm "VM name" --guest-memory-balloon n

默认情况下,不分配气球内存。这是虚拟机设置,与其他 modifyvm 设置一样,因此只能在机器关闭时设置。请参阅VBoxManage modifyvm

页面融合

内存气球只是简单地减少了 VM 可用的 RAM 量,而页面融合的工作方式不同。它避免了多个类似运行中的 VM 之间的内存重复。

在运行多个相似虚拟机的服务器环境中,许多内存页是相同的。例如,如果虚拟机使用相同的操作系统。 Oracle VirtualBox 的 Page Fusion 技术可以有效地识别这些相同的内存页并在多个虚拟机之间共享它们。

注意

Oracle VirtualBox 仅支持 64 位主机上的 Page Fusion,不支持 macOS 主机。Page Fusion 目前仅适用于 Windows 2000 及更高版本的客户机。

在给定主机上,虚拟机越相似,Page Fusion 减少使用的物理主机内存量就越有效。因此,如果主机上的所有虚拟机都运行相同的操作系统,Page Fusion 的效果最好。Page Fusion 不会在每个虚拟机中保留操作系统的完整副本,而是识别这些操作系统使用的相同内存页并消除重复,从而在多个机器之间共享物理主机内存。这称为重复数据删除。如果虚拟机尝试修改已与其他虚拟机共享的页面,则会再次为该虚拟机分配一个新页面,其中包含共享页面的副本。这称为写时复制。所有这些对虚拟机都是完全透明的。

您可能熟悉其他虚拟机管理程序产品中的这种内存超额分配,它们将此功能称为页面共享相同页面合并。但是,Page Fusion 与其他解决方案的实现方式有很大不同,这些解决方案存在一些缺点:

  • 传统的虚拟机管理程序会扫描所有客户机内存,并为每个内存页计算校验和(也称为哈希)。然后,它们会查找具有相同哈希的页面,并比较这些页面的整个内容。如果两个页面产生相同的哈希,则这两个页面在内容上很可能相同。此过程可能需要相当长的时间,特别是当系统未处于空闲状态时。因此,额外的内存仅在相当长的时间后(例如几小时甚至几天)才可用。更糟糕的是,这种页面共享算法通常会消耗大量的 CPU 资源,并将虚拟化开销增加 10% 到 20%。

    Oracle VirtualBox 中的 Page Fusion 使用 Oracle VirtualBox 客户机增强功能中的逻辑来快速识别虚拟机之间最有可能相同的内存单元。因此,它可以几乎立即实现页面共享的最大可能节省,并且几乎没有开销。

  • 页面融合也更不可能被它将消除的相同内存混淆,只是几秒钟后才发现内存现在将发生变化,并且必须执行代价高昂且通常会中断服务的重新分配。

目前,Page Fusion 只能通过 VBoxManage 控制,并且只能在虚拟机关闭时进行。要为虚拟机启用 Page Fusion,请使用以下命令:

VBoxManage modifyvm "VM name" --page-fusion on

您可以使用一些指标来观察 Page Fusion 的操作。RAM/VMM/Shared 显示融合页面的总数,而每台虚拟机的指标 Guest/RAM/Usage/Shared 将返回给定虚拟机的融合内存量。有关如何查询指标的信息,请参阅VBoxManage metrics

注意

启用 Page Fusion 可能会间接增加恶意客户机成功攻击同一主机上运行的其他虚拟机的机会。请参阅潜在的不安全操作

控制虚拟显示器拓扑

X11/Wayland 桌面环境

客户机增强功能提供用于控制客户机系统监视器拓扑的服务。监视器拓扑是指每个虚拟监视器的分辨率及其状态(禁用/启用)。可以通过调整托管虚拟监视器的窗口的大小、使用“视图”菜单或使用 VBoxManage controlvm vmname setscreenlayout 命令从主机侧修改虚拟监视器的分辨率。在具有 X11/Wayland 桌面的客户机操作系统上,可以通过以下两个服务之一来实现此目的:

        VBoxClient --vmsvga
        VBoxDRMClient
      

以下是有关 Guest 屏幕分辨率控制功能的一些详细信息

  • 在 X11/Wayland 桌面上,调整服务会在桌面会话初始化(即桌面登录)期间启动。在 X11 桌面上,VBoxClient --vmsvga 通过 RandR 扩展处理屏幕拓扑。在 Wayland 客户端上,使用 VBoxDRMClient。在每次桌面会话启动时会自动做出决定。

  • 在 32 位客户机操作系统上,为了解决 bug,始终使用 VBoxDRMClient

  • 由于监视器拓扑控制服务在桌面会话启动期间初始化,因此无法控制 GDM 或 LightDM 等显示管理器的监视器分辨率。可以通过将虚拟机的客户机属性 /VirtualBox/GuestAdd/DRMResize 设置为任何值来更改此默认行为。有关如何更新客户机属性的详细信息,请参阅客户机属性。设置此客户机属性后,VBoxDRMClient 将在客户机操作系统启动期间启动,并始终保持活动状态,同时支持显示管理器登录屏幕和桌面会话。

已知限制

VBoxDRMClient 无法处理任意客户机监视器拓扑。具体来说,禁用非最后一个客户机监视器会因 Linux 内核模块 vmwgfx.ko 的限制而使监视器拓扑无效。例如,当客户机配置为具有四个监视器时,不建议禁用第二个或第三个监视器。

虚拟存储

由于虚拟机很可能期望在虚拟计算机中看到内置的硬盘,因此 Oracle VirtualBox 必须能够将实际存储呈现给客户机,作为虚拟硬盘。目前有三种方法可以实现这一点:

每个这样的虚拟存储设备,例如映像文件、iSCSI 目标或物理硬盘,都需要连接到 Oracle VirtualBox 向虚拟机呈现的虚拟硬盘控制器。

硬盘控制器

在计算设备中,硬盘和 CD/DVD 驱动器连接到一个称为硬盘控制器的设备,该控制器驱动硬盘操作和数据传输。Oracle VirtualBox 可以模拟计算设备中常见的硬盘控制器类型:IDE、SATA (AHCI)、SCSI、SAS、USB 设备、NVMe 和 virtio-scsi 大容量存储设备。

  • IDE (ATA) 控制器是 IBM PC/AT(1984 年)中磁盘控制器的向后兼容但又非常先进的扩展。最初,此接口仅与硬盘配合使用,但后来扩展为也支持 CD-ROM 驱动器和其他类型的可移动媒体。在物理 PC 中,此标准使用带有 40 或 80 根导线的扁平带状并行电缆。每根这样的电缆都可以将两个设备(称为设备 0 和设备 1)连接到控制器。典型 PC 有两个用于此类电缆的连接器。因此,支持最多四个 IDE 设备最为常见:主设备 0、主设备 1、次设备 0 和次设备 1。

    Oracle VirtualBox 中,每个虚拟机最多可以启用一个 IDE 控制器,这为您提供了最多四个可以连接到该虚拟机的虚拟存储设备。默认情况下,其中一个虚拟存储设备(次通道上的设备 0)已预先配置为虚拟机的虚拟 CD/DVD 驱动器。但是,您可以更改默认设置。

    即使您的访客操作系统不支持 SCSI 或 SATA 设备,它也应该始终能够识别 IDE 控制器。

    您还可以选择 Oracle VirtualBox 应向虚拟机呈现的确切 IDE 控制器硬件类型:PIIX3、PIIX4 或 ICH6。这在性能方面没有区别,但如果您从其他虚拟化产品导入虚拟机,该虚拟机中的操作系统可能会期望一种特定的控制器类型,如果找不到则会崩溃。

    VirtualBox Manager 中使用 新建虚拟机向导创建新虚拟机后,通常会在该虚拟机的 存储设置中看到一个 IDE 控制器。虚拟 CD/DVD 驱动器将连接到此控制器的一个端口(最多四个)。

  • Serial ATA (SATA) 是比 IDE 更新的标准。与 IDE 相比,它支持更高的速度和每个控制器更多的设备。此外,使用物理硬件时,可以在系统运行时添加和删除设备。SATA 控制器的标准接口称为高级主机控制器接口 (AHCI)。

    与真实的 SATA 控制器一样,Oracle VirtualBox 的虚拟 SATA 控制器运行速度更快,并且比虚拟 IDE 控制器消耗的 CPU 资源更少。此外,与连接了 DVD 驱动器的 Oracle VirtualBox IDE 控制器相比,这使您能够将多达 30 个虚拟硬盘连接到一个虚拟机,而不是仅仅三个。

    因此,根据所选的客户机操作系统,Oracle VirtualBox 会为新创建的虚拟机默认使用 SATA。默认创建一个 SATA 控制器,新虚拟机附带的默认磁盘连接到此控制器。

    注意

    整个 SATA 控制器及其连接的虚拟硬盘(包括处于 IDE 兼容模式的硬盘)将无法被没有 AHCI 设备支持的操作系统看到。特别是,Windows Vista 之前的 Windows 版本没有 AHCI 支持。Windows XP 等旧版 Windows(即使安装了 SP3)也不会看到此类磁盘,除非您安装了其他驱动程序。安装 SATA 驱动程序并更改虚拟机 设置窗口中的控制器类型后,可以在安装后从 IDE 切换到 SATA。

    Oracle VirtualBox 推荐使用 Intel Matrix Storage 驱动程序,可从 http://downloadcenter.intel.com/Product_Filter.aspx?ProductID=2101 下载。

    要为尚未启用 SATA 控制器的虚拟机添加 SATA 控制器(可能是因为该虚拟机是由早期版本的 Oracle VirtualBox 创建的,或者因为所选客户机操作系统默认不支持 SATA),请执行以下操作。转到虚拟机 设置窗口的 存储页面,在“存储树”框下单击 添加控制器,然后选择 添加 SATA 控制器。新控制器会作为单独的 PCI 设备出现在虚拟机中,您可以向其添加虚拟硬盘。

    要更改 SATA 控制器的 IDE 兼容模式设置,请参阅 VBoxManage storagectl

  • SCSI 是另一个成熟的行业标准,代表小型计算机系统接口。SCSI 是用于各种设备(包括存储设备)之间数据传输的通用接口。SCSI 仍用于连接某些硬盘和磁带设备,但在商品化硬件中已被大部分取代。它在高性能工作站和服务器中仍很常用。

    主要为了与其他虚拟化软件兼容,Oracle VirtualBox 可选支持 LSI Logic 和 BusLogic SCSI 控制器,每个控制器最多可以连接十五个虚拟硬盘。

    要启用 SCSI 控制器,请在虚拟机 设置窗口的 存储页面中,在“存储树”框下单击 添加控制器,然后选择 添加 SCSI 控制器。新控制器会作为单独的 PCI 设备出现在虚拟机中。

    注意

    与其他控制器类型一样,SCSI 控制器只能被具有相应设备支持的操作系统看到。Windows 2003 及更高版本自带 LSI Logic 控制器的驱动程序,而 Windows NT 4.0 和 Windows 2000 自带 BusLogic 控制器的驱动程序。Windows XP 两个都不自带。

  • Serial Attached SCSI (SAS) 是另一个总线标准,它使用 SCSI 命令集。与 SCSI 物理设备相反,它使用串行电缆而不是并行电缆。这简化了物理设备连接。因此,在某些方面,SAS 之于 SCSI 就像 SATA 之于 IDE:它实现了更可靠、更快速的连接。

    为了支持需要 SAS 控制器的高端客户机,Oracle VirtualBox 模拟了一个 LSI Logic SAS 控制器,可以以与 SCSI 控制器类似的方式启用它。目前,最多可以连接 255 个设备到 SAS 控制器。

    注意

    与 SATA 一样,SAS 控制器只能被具有相应设备支持的操作系统看到。特别是,Windows Vista 之前的 Windows 不支持 SAS。因此,Windows XP(即使是 SP3)也不会看到此类磁盘,除非您安装了其他驱动程序。

  • USB 大容量存储设备类是一种通过 USB 将硬盘或闪存驱动器等外部存储设备连接到主机的标准。所有主流操作系统都支持这些设备并自带通用驱动程序,无需第三方驱动程序。特别是,不支持 SATA 控制器的旧版操作系统可以受益于 USB 大容量存储设备。

    Oracle VirtualBox 提供的虚拟 USB 存储控制器与其他的存储控制器类型的工作方式不同。虽然大多数存储控制器会作为单个 PCI 设备出现在客户机中,并连接多个磁盘,但基于 USB 的存储控制器不会显示为虚拟存储控制器。连接到该控制器的每个磁盘都作为专用 USB 设备出现在客户机中。

    注意

    仅在使用 EFI 时才支持从通过 USB 连接的驱动器引导,因为 BIOS 缺乏 USB 支持。

  • Non volatile memory express (NVMe) 是一种通过 PCI Express 直接连接非易失性内存 (NVM) 的标准,以突破以前用于固态设备的 SATA 协议的带宽限制。与其他标准不同,其命令集非常简单,以实现最大吞吐量,并且与 ATA 或 SCSI 不兼容。操作系统需要支持 NVMe 设备才能使用它们。例如,Windows 8.1 添加了对 NVMe 的原生支持。对于 Windows 7,通过更新添加了原生支持。

    NVMe 控制器是扩展包的一部分。

    注意

    仅在使用 EFI 时才支持从通过 NVMe 连接的驱动器引导,因为 BIOS 缺乏相应的驱动程序。

  • Virtual I/O Device SCSI 是一种连接 VM 的虚拟存储设备(如硬盘或光驱)的标准。最新的 Linux 和 Windows 版本支持这些设备,但 Windows 需要额外的驱动程序。目前 virtio-scsi 控制器支持是实验性的。

    注意

    virtio-scsi 控制器只能被具有相应设备支持的操作系统看到。特别是,Windows 中没有内置支持。因此,Windows 不会看到此类磁盘,除非您安装了其他驱动程序。

总而言之,Oracle VirtualBox 为您提供了以下类别的虚拟存储槽

  • 连接到传统 IDE 控制器的四个插槽,这些插槽始终存在。其中一个通常是虚拟 CD/DVD 驱动器。

  • 连接到 SATA 控制器的 30 个插槽,如果访客操作系统已启用并支持。

  • 连接到 SCSI 控制器的 15 个插槽,如果访客操作系统已启用并支持。

  • 连接到 SAS 控制器最多 255 个插槽,如果访客操作系统已启用并支持。

  • 连接到虚拟 USB 控制器的八个插槽,如果访客操作系统已启用并支持。

  • 连接到 NVMe 控制器最多 255 个插槽,如果访客操作系统已启用并支持。

  • 连接到 virtio-scsi 控制器最多 256 个插槽,如果访客操作系统已启用并支持。

鉴于存储控制器有如此多的选择,您可能不知道该选择哪一个。总的来说,您应该避免使用 IDE,除非它是您的客户机唯一支持的控制器。您使用 SATA、SCSI 还是 SAS 并没有真正的区别。控制器种类繁多,只是为了与现有硬件和其他虚拟机监控程序兼容。

磁盘映像文件 (VDI, VMDK, VHD, HDD)

磁盘映像文件驻留在主机系统上,并被客户机系统视为具有特定几何形状的硬盘。当客户机操作系统读取或写入硬盘时,Oracle VirtualBox 会将请求重定向到映像文件。

与物理磁盘一样,虚拟磁盘也有一个大小或容量,必须在创建映像文件时指定。然而,与物理磁盘不同的是,Oracle VirtualBox 允许您在创建映像文件后扩展它,即使它已经包含数据。请参阅 VBoxManage modifymedium

Oracle VirtualBox 支持以下类型的磁盘映像文件

  • VDI。通常,Oracle VirtualBox 使用自己的容器格式来存储客户机硬盘。这被称为虚拟磁盘映像 (VDI) 文件。创建具有新磁盘的新虚拟机时,将使用此格式。

  • VMDK。Oracle VirtualBox 也完全支持流行的开放式 VMDK 容器格式,许多其他虚拟化产品(如 VMware)也使用该格式。

  • VHD。Oracle VirtualBox 也完全支持 Microsoft 使用的 VHD 格式。

  • HDD。也支持 Parallels 版本 2 (HDD 格式) 的映像文件。

    由于缺乏格式文档,不支持版本 3 和 4 等较新版本。但是,您可以使用 Parallels 提供的工具将此类镜像文件转换为版本 2 格式。

无论磁盘容量和格式如何,正如在 创建虚拟机中提到的,创建磁盘映像有两种选择:固定大小或动态分配。

  • 固定大小。如果您创建固定大小的映像,将在主机系统上创建一个映像文件,其大小大致与虚拟磁盘的容量相同。因此,对于一个 10 GB 的磁盘,您将得到一个 10 GB 的文件。请注意,根据映像的大小和硬盘的写入性能,创建固定大小的映像可能需要很长时间。

  • 动态分配。为了更灵活地管理存储,请使用动态分配的映像。它最初会很小,不会占用未使用的虚拟磁盘扇区的空间,但每次首次写入磁盘扇区时都会增长,直到驱动器达到创建时选择的最大容量。虽然这种格式最初占用的空间较少,但 Oracle VirtualBox 需要扩展映像文件这一事实会消耗额外的计算资源,因此在磁盘文件大小稳定之前,写入操作可能比固定大小的磁盘慢。但是,一段时间后,增长速度会放缓,写入操作的平均开销将可以忽略不计。

虚拟介质管理器

Oracle VirtualBox 会跟踪虚拟机使用的所有硬盘、CD/DVD-ROM 和软盘映像。这些通常被称为已知介质,它们来自两个来源

  • 当前连接到虚拟机的所有介质。

  • 已注册介质,为了与旧版 Oracle VirtualBox 兼容。

可以使用 虚拟介质管理器工具查看和更改已知介质,通过在 VirtualBox Manager 的全局 工具菜单上单击 介质来访问该工具。

已知介质方便地按支持的格式分组在单独的选项卡中。这些格式包括:

  • 硬盘映像,无论是 Oracle VirtualBox 自有的虚拟磁盘映像 (VDI) 格式,还是 磁盘映像文件 (VDI, VMDK, VHD, HDD) 中列出的第三方格式。

  • 标准 ISO 格式的 CD/DVD 镜像。

  • 标准 RAW 格式的软盘镜像。

对于每个镜像,虚拟介质管理器会显示镜像文件的完整路径以及其他信息,例如当前连接到该镜像的虚拟机。

虚拟介质管理器使您能够执行以下操作:

  • 添加映像到已知介质。

  • 创建新的磁盘映像。

  • 复制映像以创建另一个映像。

    对于虚拟硬盘,您可以指定以下目标类型之一:VDI、VHD 或 VMDK。

  • 移动映像到另一个位置。

    文件对话框会提示您输入新的镜像文件位置。

    当您使用虚拟介质管理器移动磁盘映像时,Oracle VirtualBox 会自动更新所有相关的配置文件。

    注意

    始终使用虚拟介质管理器或 VBoxManage modifymedium 命令来移动磁盘映像。

    如果您使用主机 OS 的文件管理功能将磁盘映像移动到新位置,请运行 VBoxManage modifymedium --setlocation 命令来配置磁盘映像在主机文件系统上的新路径。此命令会自动更新 Oracle VirtualBox 配置。

  • 删除映像从已知介质。您可以在删除映像时选择删除映像文件。

  • 释放映像以将其从 VM 中分离。此操作仅适用于映像当前作为虚拟硬盘附加到 VM 的情况。

  • 清除列表中所有无法访问的磁盘映像。将释放已附加到 VM 的磁盘映像,并将其从已知介质中移除。

    注意

    此选项仅适用于光盘和软盘。

  • 搜索按名称或 UUID 查找映像。

  • 查看和编辑磁盘映像的 属性

    可用属性包括:

    • 类型:指定磁盘的快照行为。请参阅 特殊映像写入模式

    • 位置:指定磁盘映像文件在主机系统上的位置。您可以使用文件对话框浏览磁盘映像位置。

    • 描述:指定磁盘映像的简短描述。

    • 大小:指定磁盘映像的大小。您可以使用滑块增加或减小磁盘映像的大小。

    • 信息:指定关于磁盘映像的详细信息。

  • 刷新所选磁盘映像的属性值。

要执行这些操作,请在虚拟介质管理器中突出显示介质,然后执行以下任一操作:

  • 点击虚拟介质管理器工具栏中的图标。

  • 右键点击介质并选择一个选项。

使用 VM 设置窗口中的 存储页面创建新磁盘映像。默认情况下,磁盘映像存储在 VM 的文件夹中。

您可以将硬盘镜像文件复制到其他主机系统,然后从主机系统导入到虚拟机中。但是,某些 Windows 访客操作系统可能要求您以与旧虚拟机类似的方式配置新虚拟机。

注意

请勿简单地复制虚拟磁盘映像。如果您将此类第二个副本导入 VM,Oracle VirtualBox 将发出错误,因为 Oracle VirtualBox 会为每个磁盘映像分配一个通用唯一标识符 (UUID),以确保它仅使用一次。请参阅 克隆磁盘映像。此外,如果您想将 VM 复制到另一台系统,请使用 Oracle VirtualBox 的导入和导出功能。请参阅 导入和导出虚拟机

创建虚拟硬盘映像

  1. 显示虚拟介质管理器中的 硬盘选项卡,然后单击 创建

  2. 选择新虚拟硬盘映像的文件类型。

  3. 为虚拟硬盘选择动态分配或固定大小的存储。

  4. 配置虚拟硬盘文件的位置,并使用滑块设置虚拟硬盘的大小限制。

    单击 完成以创建虚拟硬盘文件。

    虚拟硬盘映像将在指定位置创建,并添加到虚拟介质管理器中的 硬盘选项卡。

创建虚拟光盘映像

使用 VISO Creator 工具从主机上的选定文件创建虚拟光盘映像。

虚拟 ISO (VISO) 与真实 ISO 的区别在于文件保留在主机上,除非您选择将文件复制到客户机。这使得 VISO 的创建和使用更快,并且不需要客户机添加。VISO 是只读的,非常适合用作安装介质或参考数据。

  1. 显示虚拟介质管理器中的 光盘选项卡,然后单击 创建

    将显示 VISO Creator 工具。

  2. 创建虚拟 ISO 文件。

    1. 配置 ISO 文件的名称。

      单击 设置并选择 VISO 选项选项卡。在 Viso 名称字段中输入名称。

    2. 将文件添加到您的虚拟 ISO。

      主机文件系统窗格中,选择要从主机系统复制到虚拟 ISO 的文件。

      单击 向 VISO 添加项目。文件将显示在 VISO 内容窗格中。

      还可以进行以下文件操作:

      • 要在虚拟 ISO 上创建文件夹,请单击 创建新目录

      • 要从虚拟 ISO 中删除文件,请在 VISO 内容窗格中选择文件,然后单击 从 VISO 中删除项目

      • 要删除虚拟 ISO 中的所有文件,请单击 重置 VISO 内容

      • 要将所有文件内容从现有 ISO 导入虚拟 ISO,请突出显示 ISO 文件名,然后单击 将选定的 ISO 导入 VISO 内容。将打开导入的 ISO,内容会列在 VISO 内容窗格中。

        要从导入的 ISO 中删除文件,请在 Viso 内容窗格中选择文件,然后单击 从 VISO 中删除选定的项目

  3. 创建虚拟 ISO 镜像。

    单击 保存并关闭

    将创建具有指定名称和内容的虚拟 ISO 文件。

创建虚拟软盘映像

使用 Floppy Disk Creator 工具创建软盘映像。

  1. 显示虚拟介质管理器中的 软盘选项卡,然后单击 创建

    将显示 Floppy Disk Creator 工具。

  2. 配置以下设置:

    • 文件路径:软盘映像的名称和位置。

    • 大小:从支持的软盘大小列表中选择。

    • 将磁盘格式化为 FAT 12:这是大多数软盘的默认格式。对于未格式化的磁盘,请勿选择此选项。

  3. 创建软盘镜像文件。

    单击 创建

    软盘映像将在指定位置创建,并添加到虚拟介质管理器中的 软盘选项卡。

特殊映像写入模式

对于 Oracle VirtualBox 支持的每个虚拟磁盘映像,您可以单独确定它如何受到虚拟机写入操作和快照操作的影响。这适用于所有上述映像格式(VDI、VMDK、VHD 或 HDD),无论映像是固定大小还是动态分配。

默认情况下,映像处于正常模式。要将现有映像标记为以下列出的非标准模式之一,请使用 VBoxManage modifymedium。请参阅 VBoxManage modifymedium。或者,使用 VBoxManage storageattach 将映像附加到 VM 并指定 --mtype 参数。请参阅 VBoxManage storageattach

可用的虚拟磁盘镜像模式如下:

  • 普通映像对客户机如何读取和写入磁盘没有限制。这是默认映像模式。

    当您按照快照中的说明创建虚拟机快照时,普通硬盘的状态会随快照一起记录,并且在恢复到快照时,其状态将完全重置。

    映像文件本身不会重置。相反,当创建快照时,Oracle VirtualBox冻结映像文件,并且不再向其写入。对于 VM 的写入操作,会创建一个第二个差异映像文件,该文件仅接收对原始映像的更改。请参阅 差异映像

    虽然您可以将同一个普通映像附加到多个虚拟机,但同时只能执行其中一个连接到相同映像文件的虚拟机,否则,如果多个机器写入同一个映像文件,将会发生冲突。

  • 直通式硬盘完全不受快照影响。在创建快照时,其状态不会保存,在恢复快照时也不会恢复。

  • 可共享硬盘是直通式硬盘的一种变体。原则上,它们的行为完全相同。在创建快照时,其状态不会保存,在恢复快照时也不会恢复。只有当您将此类磁盘附加到多个 VM 时,才会显示差异。可共享磁盘可以附加到多个可能正在运行的 VM。这使得它们适合在 VM 之间使用集群文件系统以及其他明确准备好并发访问磁盘的应用程序。只能使用固定大小的映像,动态分配的映像将被拒绝。

    注意

    这是一个专家功能,误用可能导致数据丢失,因为常规文件系统不具备处理多方同时更改的能力。

  • 不可变映像仅在虚拟机运行时临时记住写入访问。下次虚拟机启动时,所有更改都会丢失。因此,与普通映像不同,同一个不可变映像可以不受限制地用于多个虚拟机。

    创建不可变映像意义不大,因为它最初是空的,并且每次机器重启时都会丢失其内容。您将得到一个在机器启动时始终未格式化的磁盘。相反,您可以先创建一个普通映像,然后在决定其内容有用时将其标记为不可变。

    如果您对带有不可变镜像的机器进行快照,那么在每次机器启动时,这些镜像都会重置为上一个(当前)快照的状态,而不是原始不可变镜像的状态。

    注意

    作为特殊例外,如果不可变映像附加到处于保存状态的机器,或者该机器的最后一个快照是在运行时拍摄的(这称为在线快照),则不可变映像不会重置。因此,如果机器的当前快照是在线快照,则其不可变映像的行为与普通映像完全相同。要重新启用此类映像的自动重置,请删除该机器的当前快照。

    Oracle VirtualBox 根本不会直接写入不可变映像。所有来自机器的写入操作都定向到差异映像。下次 VM 启动时,会重置差异映像,以便每次 VM 启动时,其不可变映像都具有完全相同的内容。

    差异映像仅在虚拟机从 Oracle VirtualBox 内部启动时重置,而不是在您通过从虚拟机内部请求重启来重启时。这也是为什么当快照存在时,不可变映像的行为如上所述,因为快照也使用差异映像。

    如果虚拟机启动时自动丢弃差异映像不适合您的需求,您可以使用 VBoxManage modifymediumautoreset 参数将其关闭。请参阅 VBoxManage modifymedium

  • 多重附加模式映像可以同时附加到多个虚拟机,即使这些机器正在同时运行。对于附加了此类映像的每个虚拟机,都会创建一个差异映像。因此,一台机器写入此类虚拟磁盘的数据不会被其他附加了该映像的机器看到。每台机器都会创建自己的多重附加映像写入历史。

    从技术上讲,多重连接镜像的行为与不可变镜像相同,只是差异镜像不会在每次机器启动时重置。

    此模式对于共享几乎从不写入的文件很有用,例如图片库,其中每个客户机仅更改少量数据,而大部分磁盘内容保持不变。修改的块存储在差异映像中,这些映像相对较小,而共享内容只在主机上存储一次。

  • 只读映像会自动用于 CD/DVD 映像,因为 CD/DVD 永远无法写入。

以下场景说明了各种镜像模式在快照方面的区别。

假设您已在 VM 中安装了客户机操作系统,并且已创建快照。之后,您的 VM 感染了病毒,您希望回到快照。对于普通硬盘映像,您只需恢复快照,硬盘映像的先前状态也会恢复,病毒感染也会被撤销。对于不可变硬盘,只需关闭再启动 VM,病毒感染就会被丢弃。然而,对于直通式映像,您无法通过虚拟化轻松撤销病毒感染,而必须像对待真实计算机一样对虚拟机进行杀毒。

如果您想独立于快照保留关键数据,直通式镜像可能会很有用。由于您可以将多个镜像连接到虚拟机,您可能希望有一个用于操作系统的不可变镜像,以及一个用于数据文件的直通式镜像。

差异映像

前面一节提到了差异镜像以及它们如何与快照、不可变镜像和多个磁盘连接一起使用。本节将更详细地描述差异镜像的工作原理。

差异映像是一种特殊的磁盘映像,它仅包含与其他映像的差异。差异映像本身是无用的,它必须始终引用另一个映像。然后,差异映像通常被称为映像,它包含与其映像的差异。

当差异映像处于活动状态时,它会接收来自虚拟机的所有写入操作,而不是其父映像。差异映像仅包含自创建差异映像以来已更改的虚拟硬盘扇区。当机器读取此类虚拟硬盘的扇区时,它会首先查找差异映像。如果存在该扇区,则从那里返回。如果不存在,Oracle VirtualBox 会查找父映像。换句话说,父映像变为只读。它不再被写入,但如果扇区未更改,则会被读取。

差异映像可以链接。如果已有一个差异映像的虚拟磁盘创建了另一个差异映像,那么它就成为原始父映像的孙子映像。第一个差异映像也变为只读,写入操作仅流向第二个级别的差异映像。在读取虚拟磁盘时,Oracle VirtualBox 需要首先查找第二个差异映像,如果找不到该扇区,则查找第一个,然后查找原始映像。

可以有无限数量的差异映像,并且每个映像可以有多个子映像。因此,根据机器配置的复杂程度,差异映像可以形成一个复杂的树,包含父、兄弟和子。写入操作始终流向附加到机器的活动差异映像,而对于读取操作,Oracle VirtualBox 可能需要查找链中的所有父映像,直到找到相关的扇区。您可以在虚拟介质管理器中查看此类树。

图 3. 差异映像,在虚拟介质管理器中显示
差异映像,在虚拟介质管理器中显示

Differencing Images, Shown in Virtual Media Manager

在所有这些情况下,从虚拟机的角度来看,虚拟硬盘的行为与其他任何磁盘一样。当虚拟机运行时,会有一个轻微的运行时 I/O 开销,因为 Oracle VirtualBox 可能需要多次查找扇区。但这不会引起注意,因为扇区信息的表始终保存在内存中,并且可以快速查找。

差异镜像用于以下情况:

  • 快照。 当您创建快照时(如上一节所述),Oracle VirtualBox冻结附加到虚拟机的映像,并为每个不处于直通模式的映像创建差异映像。从虚拟机的角度来看,虚拟磁盘将继续正常运行,但所有写入操作都将进入差异映像。每次创建另一个快照时,都会为每个硬盘附件创建并附加另一个差异映像,形成一个链或树。

    在上面的截图中,您可以看到原始磁盘镜像现在连接到一个快照,代表快照创建时磁盘的状态。

    如果您恢复快照,并希望回到快照中存储的确切机器状态,则会发生以下情况:

    • Oracle VirtualBox 将快照中复制的虚拟机设置复制回虚拟机。因此,如果您自创建快照以来对机器配置进行了任何更改,这些更改将被撤销。

    • 如果快照是在机器运行时创建的,它将包含保存的机器状态,该状态也会被恢复。恢复快照后,该机器将处于“已保存”状态,并在下次启动时从那里恢复执行。否则,机器将处于“已关闭”状态,并执行完整启动。

    • 对于附加到该机器的每个磁盘映像,持有自当前快照创建以来所有写入操作的差异映像将被丢弃,并且原始父映像将再次激活。如果您恢复了根快照,那么对于每个附件,这将是每个附件的根磁盘映像。否则,将是其衍生的其他差异映像。这有效地恢复了旧的机器状态。

    如果您稍后删除快照以释放磁盘空间,则对于每个磁盘附件,将有一个差异映像变得过时。在这种情况下,不能简单地删除磁盘附件的差异映像。相反,Oracle VirtualBox 需要查看差异映像的每个扇区,并需要将其复制回其父映像。这称为“合并”映像,根据差异映像的大小,这可能是一个耗时的过程。在删除因合并操作而过时的差异映像之前,它还可能暂时需要大量的额外磁盘空间。

  • 不可变镜像。将镜像切换到不可变模式时,还会创建一个差异镜像。与快照一样,父镜像随后变为只读,差异镜像接收所有写操作。每次启动虚拟机时,附加到它的所有不可变镜像都会被丢弃其各自的差异镜像,从而有效地在每次重启时重置虚拟机的虚拟磁盘。

克隆磁盘映像

您可以在同一主机上复制硬盘驱动器镜像文件,以快速创建具有相同操作系统设置的第二个虚拟机。但是,您只能使用Oracle VirtualBox随附的实用程序来复制虚拟磁盘镜像。请参阅VBoxManage clonemedium。这是因为Oracle VirtualBox会为每个磁盘镜像分配一个UUID,该UUID也存储在镜像内部,并且Oracle VirtualBox将拒绝处理使用相同数字的两个镜像。如果您确实意外尝试重新导入正常复制的磁盘镜像,您可以使用VBoxManage clonevm命令创建第二个副本,然后导入该副本。

请注意,Linux发行版通过驱动器ID识别启动硬盘。 Oracle VirtualBox报告的驱动器ID由虚拟磁盘镜像的UUID确定。因此,如果您克隆磁盘镜像并尝试启动复制的镜像,则客户机可能无法确定其自己的启动磁盘,因为UUID已更改。在这种情况下,您必须修改启动加载程序脚本中的磁盘ID,例如/boot/grub/menu.lst。磁盘ID的外观如下:

scsi-SATA_VBOX_HARDDISK_VB5cfdb1e2-c251e503

复制镜像的 ID 可以通过以下方式确定:

hdparm -i /dev/sda

主机输入/输出缓存

Oracle VirtualBox可以选择禁用主机操作系统通常会在磁盘镜像文件上执行的I/O缓存。

传统上,Oracle VirtualBox像普通文件一样打开磁盘镜像文件,这导致它们像其他文件一样被主机操作系统缓存。这样做的主要优点是速度:当客户机操作系统写入磁盘并且主机操作系统缓存使用延迟写入时,写操作可以快速报告为已完成到客户机操作系统,而主机操作系统可以异步执行操作。此外,当您第二次启动VM并且有足够的内存供操作系统用于缓存时,虚拟磁盘的大部分可能在系统内存中,并且VM可以更快地访问数据。

请注意,这仅适用于镜像文件。对于位于远程iSCSI存储上的虚拟磁盘,不会发生缓冲,这是企业级设置中更常见的情况。请参阅iSCSI服务器

虽然缓冲对于在台式计算机上虚拟化少量机器是一个有用的默认设置,但这种方法也存在一些缺点:

  • 通过主机操作系统缓存进行延迟写入不太安全。当客户机操作系统写入数据时,它会认为数据已写入,即使它尚未到达物理磁盘。如果由于某种原因写入失败,例如电源故障或主机崩溃,数据丢失的可能性会增加。

  • 磁盘镜像文件通常非常大。因此,缓存它们会很快耗尽整个主机操作系统缓存。根据主机操作系统缓存的效率,这可能会极大地减慢主机的速度,特别是当多个VM同时运行时。例如,在Linux主机上,主机缓存可能导致Linux延迟所有写入,直到主机缓存几乎已满,然后一次性写出所有这些更改,可能会使VM执行暂停数分钟。这可能导致客户机中的I/O错误,因为I/O请求在那里超时。

  • 物理内存经常被浪费,因为访客操作系统通常有自己的 I/O 缓存,这可能导致数据在访客机和主机缓存中都被缓存两次,效果甚微。

如果您由于上述原因决定禁用主机I/O缓存,Oracle VirtualBox将使用自己的小型缓存来缓冲写入,但不会进行读取缓存,因为这通常由客户机操作系统执行。此外,Oracle VirtualBox通过多个I/O线程完全支持其虚拟SATA、SCSI和SAS控制器上的异步I/O。

由于 IDE 控制器不支持异步 I/O,出于性能原因,您可能希望为虚拟机的虚拟 IDE 控制器保持主机缓存启用状态。

为此,Oracle VirtualBox允许您单独配置每个I/O控制器是否使用主机I/O缓存。您可以选择给定虚拟存储控制器的“存储”设置中的使用主机I/O缓存复选框,或使用以下VBoxManage命令为主虚拟存储控制器禁用主机I/O缓存:

VBoxManage storagectl "VM name" --name <controllername> --hostiocache off

请参阅VBoxManage storagectl

出于上述原因,Oracle VirtualBox默认情况下对新虚拟机使用SATA控制器。

限制磁盘映像带宽

Oracle VirtualBox支持限制用于异步I/O的最大带宽。此外,它还支持通过多个镜像的带宽组进行共享限制。可以设置多个此类限制。

使用VBoxManage配置限制。下面的示例创建一个名为Limit的带宽组,将限制设置为每秒20 MB,并将该组分配给VM的已连接磁盘:

VBoxManage bandwidthctl "VM name" add Limit --type disk --limit 20M
VBoxManage storageattach "VM name" --storagectl "SATA" --port 0 --device 0 --type hdd
                                   --medium disk1.vdi --bandwidthgroup Limit
VBoxManage storageattach "VM name" --storagectl "SATA" --port 1 --device 0 --type hdd
                                   --medium disk2.vdi --bandwidthgroup Limit

组中的所有磁盘共享带宽限制,这意味着在上述示例中,两个镜像的总带宽永远不能超过 20 MBps。但是,如果一个磁盘不需要带宽,另一个磁盘可以使用其组的剩余带宽。

每个组的限制可以在虚拟机运行时更改,并且更改会立即生效。以下示例将上述示例中创建的组的限制更改为 10 MBps:

VBoxManage bandwidthctl "VM name" set Limit --limit 10M

CD/DVD 支持

虚拟 CD/DVD 驱动器默认只支持读取。介质配置可以在运行时更改。您可以选择以下选项来提供介质数据:

  • 主机驱动器定义客户机可以从主机驱动器中的介质读取。

  • 镜像文件授予客户机对镜像中数据的只读访问权限。这通常是ISO文件。

  • 表示没有插入介质的驱动器。

在上述选项之间切换,或更改被机器访问的主机驱动器中的介质,或更改镜像文件都会向客户机操作系统发出介质更改信号。然后,客户机操作系统可以响应更改,例如启动安装程序。

介质更改可能会被客户机阻止,Oracle VirtualBox通过锁定主机驱动器(如果合适)来反映这一点。在这种情况下,您可以使用VirtualBox Manager或VBoxManage命令行工具强制移除介质。这实际上等同于许多CD/DVD驱动器提供的紧急弹出功能,并伴有所有相关的副作用。客户机操作系统可能会像在真实硬件上一样发出错误消息,并且客户机应用程序可能会出现故障。请谨慎使用。

注意

提供给客户机的驱动器标识符字符串,由Windows设备管理器等配置工具显示,始终是VBOX CD-ROM,无论虚拟驱动器的当前配置如何。这是为了防止在每次更改配置时触发客户机操作系统中的硬件检测。

标准的CD/DVD仿真仅支持读取标准数据CD和DVD格式。作为一项实验性功能,为了获得额外功能,可以通过启用直通模式让客户机直接访问CD/DVD主机驱动器。根据主机硬件,这可能能够实现以下功能:

  • 如果主机 DVD 驱动器是 CD/DVD 刻录机,则从访客机内部进行 CD/DVD 写入

  • 播放音频 CD

  • 播放加密 DVD

要启用主机驱动器直通,您可以使用VBoxManage storageattach命令的--passthrough选项。请参阅VBoxManage storageattach

即使启用了直通,不安全的命令(例如更新驱动器固件)仍将被阻止。不支持视频 CD 格式,即使在直通模式下也不支持,并且无法从虚拟机播放。

在Oracle Solaris主机上,直通需要以真实root权限运行Oracle VirtualBox,这是因为主机强制执行了安全措施。

iSCSI 服务器

iSCSI代表Internet SCSI,它是一种支持通过Internet(TCP/IP)连接使用SCSI协议的标准。尤其是在千兆以太网的出现之后,只需将iSCSI存储服务器作为远程硬盘附加到计算机网络就变得负担得起。在iSCSI术语中,提供存储资源的服务器称为iSCSI目标,而连接到服务器并访问其资源的客户端称为iSCSI启动器

Oracle VirtualBox可以透明地将iSCSI远程存储作为虚拟硬盘呈现给虚拟机。客户机操作系统不会看到虚拟磁盘镜像(VDI文件)和iSCSI目标之间的任何区别。为了实现这一点,Oracle VirtualBox具有集成的iSCSI启动器。

Oracle VirtualBox的iSCSI支持是根据iSCSI标准开发的,并且应该与所有符合标准的iSCSI目标一起使用。要将iSCSI目标与Oracle VirtualBox一起使用,必须使用命令行。请参阅VBoxManage storageattach

vboximg-mount:用于 FUSE 挂载虚拟磁盘映像的工具

vboximg-mount是一个用于Mac OS和Linux主机的命令行实用程序,它提供对主机系统上的Oracle VirtualBox虚拟磁盘镜像的原始访问。使用此实用程序可以挂载、查看和可选地修改磁盘镜像内容。

该实用程序基于用户空间文件系统(FUSE)技术,并使用VirtualBox运行时引擎。确保Oracle VirtualBox在主机系统上运行。

注意

使用vboximg-mount时,请确保满足以下条件:

  • 磁盘镜像未被任何其他系统(例如访客虚拟机)使用。

  • 主机系统上没有虚拟机正在运行。

与直接循环挂载虚拟磁盘镜像相比,使用FUSE进行原始访问更受青睐,因为它能感知快照。它可以选择性地将磁盘差异镜像合并到暴露的虚拟硬盘中,从而提供虚拟磁盘内容的历史或最新表示。

vboximg-mount允许您查看有关已注册VM、其附加磁盘介质以及任何快照的信息。此外,您还可以查看磁盘镜像的创建信息。

vboximg-mount 命令包括对VM磁盘镜像内文件系统的实验性只读访问。此功能使您无需启动VM即可从磁盘镜像中提取某些文件,也无需在主机系统上安装第三方文件系统驱动程序。支持FAT、NTFS、ext2、ext3和ext4文件系统。

使用--help选项查看有关vboximg-mount命令用法的信息。完整的命令参考在vboximg-mount中进行描述。

vboximg-mount挂载Oracle VirtualBox磁盘镜像时,它会在您指定的挂载点创建一个单层文件系统。该文件系统包括一个设备节点,该节点将合成磁盘镜像表示为可读或可读写字节流。此字节流可以通过主机操作系统或使用其他基于FUSE的文件系统进行挂载。

查看虚拟磁盘映像的详细信息

以下示例展示了如何使用vboximg-mount命令查看虚拟磁盘镜像的信息。

以下命令输出所有已注册虚拟机及其关联快照的详细信息:

$ vboximg-mount --list --verbose

    ------------------------------------------------------
    VM Name:   "macOS High Sierra 10.13"
    UUID:      3887d96d-831c-4187-a55a-567c504ff0e1
    Location:  /Volumes/work/vm_guests/macOS High Sierra 10.13/macOS High Sierra 10.13.vbox
       -----------------------
       HDD base:   "macOS High Sierra 10.13.vdi"
       UUID:       f9ea7173-6869-4aa9-b487-68023a655980
       Location:   /Volumes/work/vm_guests/macOS High Sierra 10.13/macOS High Sierra 10.13.vdi

         Diff 1:
              UUID:       98c2bac9-cf37-443d-a935-4e879b70166d
              Location:   /Volumes/work/vm_guests/macOS High Sierra 10.13/
              Snapshots/{98c2bac9-cf37-443d-a935-4e879b70166d}.vdi
         Diff 2:
              UUID:       f401f381-7377-40b3-948e-3c61241b1a42
              Location:   /Volumes/work/vm_guests/macOS High Sierra 10.13/
              Snapshots/{f401f381-7377-40b3-948e-3c61241b1a42}.vdi
       -----------------------
       HDD base:   "simple_fixed_disk.vdi"
       UUID:       ffba4d7e-1277-489d-8173-22ca7660773d
       Location:   /Volumes/work/vm_guests/macOS High Sierra 10.13/simple_fixed_disk.vdi

         Diff 1:
              UUID:       aecab681-0d2d-468b-8682-93f79dc97a48
              Location:   /Volumes/work/vm_guests/macOS High Sierra 10.13/
              Snapshots/{aecab681-0d2d-468b-8682-93f79dc97a48}.vdi
         Diff 2:
              UUID:       70d6b34d-8422-47fa-8521-3b6929a1971c
              Location:   /Volumes/work/vm_guests/macOS High Sierra 10.13/
              Snapshots/{70d6b34d-8422-47fa-8521-3b6929a1971c}.vdi
      ------------------------------------------------------
      VM Name:   "debian"
      UUID:      5365ab5f-470d-44c0-9863-dad532ee5905
      Location:  /Volumes/work/vm_guests/debian/debian.vbox
         -----------------------
         HDD base:   "debian.vdi"
         UUID:       96d2e92e-0d4e-46ab-a0f1-008fdbf997e7
         Location:   /Volumes/work/vm_guests/debian/ol7.vdi

            Diff 1:
                UUID:       f9cc866a-9166-42e9-a503-bbfe9b7312e8
                Location:   /Volumes/work/vm_guests/debian/Snapshots/
                {f9cc866a-9166-42e9-a503-bbfe9b7312e8}.vdi

以下命令输出指定磁盘镜像的分区信息:

$ vboximg-mount --image=f9ea7173-6869-4aa9-b487-68023a655980 --list

    Virtual disk image:

       Path: /Volumes/work/vm_guests/macOS High Sierra 10.13/macOS High Sierra 10.13.vdi
       UUID: f9ea7173-6869-4aa9-b487-68023a655980

      #     Start  Sectors     Size       Offset  Type
      1        40  409599    199.9M        20480  EFI System
      2    409640  67453071   32.1G    209735680  Hierarchical File System Plus (HFS+)
      3  67862712  1269535   107.8M  34745708544  Apple Boot (Recovery HD)

挂载虚拟磁盘映像

以下步骤展示了如何使用vboximg-mount命令将虚拟磁盘镜像的分区挂载到主机操作系统。

  1. 在主机操作系统上创建挂载点。例如:

    $ mkdir macos_sysdisk
  2. 显示虚拟磁盘镜像的分区信息。

    $ vboximg-mount --image=uuid --list

    其中uuid是磁盘镜像的UUID。

  3. 使用vboximg-mount对虚拟磁盘镜像上的分区执行FUSE挂载。例如:

    $ vboximg-mount --image=uuid -p 2 macos_sysdisk

    其中uuid是磁盘镜像的UUID。

    在此示例中,分区2已挂载到macos_sysdisk挂载点。挂载包括磁盘镜像的所有快照。

  4. 使用主机操作系统挂载vhdd设备节点。FUSE挂载的设备节点表示虚拟磁盘镜像。

    $ ls macos_sysdisk
       macOS High Sierra 10.13.vdi  vhdd
    $ sudo mount macos_sysdisk/vhdd /mnt

虚拟网络

网络设置中所述,Oracle VirtualBox为每个虚拟机最多提供八个虚拟PCI以太网卡。对于每个此类卡,您可以单独选择以下选项:

VirtualBox Manager的“设置”窗口的“网络”部分可以配置四张网卡。您可以使用VBoxManage modifyvm在命令行上配置所有八张网卡。请参阅VBoxManage modifyvm

本章将更详细地解释各种网络设置。

虚拟网络硬件

对于每张卡,您可以单独选择将硬件类型呈现给虚拟机。Oracle VirtualBox可以虚拟化以下类型的网络硬件:

  • AMD PCNet PCI II (Am79C970A) Arm客户机不可用。

  • AMD PCNet FAST III (Am79C973),x86客户机的默认设置。Arm客户机不可用。

  • Intel PRO/1000 MT Desktop (82540EM)

  • Intel PRO/1000 T Server (82543GC)

  • Intel PRO/1000 MT Server (82545EM)

  • 半虚拟化网络适配器 (virtio-net)

PCNet FAST III是默认设置,因为它几乎被所有操作系统以及GNU GRUB引导管理器支持。作为例外,Intel PRO/1000系列适配器被选择用于一些不再附带PCNet卡驱动程序的客户机操作系统类型,例如Windows Vista。

Intel PRO/1000 MT Desktop类型可与Windows Vista及更高版本配合使用。Intel PRO/1000卡的T Server版本可被Windows XP客户机识别,无需额外安装驱动程序。MT Server版本便于从其他平台导入OVF。

Para虚拟化网络适配器(virtio-net)是特殊的。如果您选择此适配器,则Oracle VirtualBox 不会虚拟化常用客户机操作系统支持的常见网络硬件。相反,Oracle VirtualBox期望客户机提供用于虚拟化环境的特殊软件接口,从而避免了模拟网络硬件的复杂性并提高了网络性能。Oracle VirtualBox支持行业标准的virtio网络驱动程序,这些驱动程序是开源KVM项目的一部分。

virtio网络驱动程序适用于以下访客操作系统

  • Linux内核版本2.6.25或更高版本可以配置为提供virtio支持。一些发行版也将virtio回溯移植到较旧的内核。

  • 对于Windows 2000、XP和Vista,可以从KVM项目网页下载并安装virtio驱动程序

    http://www.linux-kvm.org/page/WindowsGuestDrivers.

Oracle VirtualBox也对巨型帧有有限支持。这些是数据超过1500字节的网络数据包,前提是您使用Intel网卡虚拟化和桥接网络。AMD网络设备不支持巨型帧。在这些情况下,巨型数据包将被静默丢弃,无论是传输还是接收方向。尝试使用此功能的客户机操作系统将看到此行为,并将其视为数据包丢失,这可能导致客户机中应用程序行为异常。这不会对客户机操作系统在其默认配置中造成问题,因为巨型帧需要显式启用。

网络模式简介

每个网络适配器都可以单独配置为以下模式之一运行

  • 未连接。在此模式下,Oracle VirtualBox向客户机报告存在网卡,但未连接。这就像网卡没有插上以太网电缆一样。使用此模式,可以断开虚拟以太网电缆并中断连接,这有助于告知客户机操作系统没有网络连接可用,并强制重新配置。

  • 网络地址转换(NAT)。如果您只想在客户机中浏览网页、下载文件和查看电子邮件,那么此默认模式应足以满足您,您可以跳过本节的其余部分。请注意,在使用Windows文件共享时存在某些限制。请参阅NAT限制

  • NAT网络。NAT网络是一种允许出站连接的内部网络。请参阅网络地址转换服务

  • 桥接网络。这适用于更高级的网络需求,例如网络模拟和在客户机中运行服务器。启用后,Oracle VirtualBox会连接到您安装的一个网卡,并直接交换网络数据包,从而绕过主机操作系统的网络堆栈。

  • 内部网络。这可用于创建一种不同的基于软件的网络,该网络对选定的虚拟机可见,但对运行在主机上的应用程序或外部世界不可见。

  • 仅主机网络。这可用于创建一个包含主机和一组虚拟机的网络,而无需主机物理网络接口。相反,在主机上创建了一个类似回环接口的虚拟网络接口,从而提供了虚拟机与主机之间的连接。

  • 云网络。这可用于将本地VM连接到远程云服务上的子网。

  • 通用网络。很少使用的模式,它们共享相同的通用网络接口,允许用户选择Oracle VirtualBox随附或在扩展包中分发的驱动程序。

    可用的子模式如下:

    • UDP隧道:用于在不同主机上运行的虚拟机之间直接、轻松、透明地互连,通过现有的网络基础设施。

    • VDE(虚拟分布式以太网)网络:用于连接Linux或FreeBSD主机上的虚拟分布式以太网交换机。目前,此选项需要从源文件编译Oracle VirtualBox,因为Oracle软件包不包含它。

下表概述了最重要的网络模式。

表4。网络模式概述。网络模式概述
模式

虚拟机→主机

虚拟机←主机

虚拟机1↔虚拟机2

虚拟机→网络/局域网

虚拟机←网络/局域网

仅主机

+

+

+

内部

+

桥接

+

+

+

+

+

NAT

+

端口转发

+

端口转发

NAT服务

+

端口转发

+

+

端口转发

以下部分将更详细地描述可用的网络模式。

网络地址转换 (NAT)

网络地址转换(NAT)是虚拟机访问外部网络的最简单方式。通常,它不需要在主机网络和客户系统上进行任何配置。因此,它是Oracle VirtualBox中的默认网络模式。

启用NAT的虚拟机的作用非常类似于通过路由器连接到Internet的真实计算机。在这种情况下,路由器是Oracle VirtualBox网络引擎,它透明地映射来自和到虚拟机的流量。在Oracle VirtualBox中,此路由器位于每个虚拟机和主机之间。这种分离最大化了安全性,因为默认情况下虚拟机无法相互通信。

NAT模式的缺点是,就像路由器后面的私有网络一样,虚拟机对外部Internet是不可见且不可达的。除非您设置端口转发,否则您无法以这种方式运行服务器。请参阅配置NAT端口转发

客户机操作系统发送的网络帧由Oracle VirtualBox的NAT引擎接收,该引擎提取TCP/IP数据并使用主机操作系统重新发送。对于主机上的应用程序或其他与主机在同一网络上的计算机,看起来就好像数据是由主机上的Oracle VirtualBox应用程序发送的,使用了属于主机的IP地址。Oracle VirtualBox会监听发送的数据包的回复,并将它们重新打包并发送回其私有网络中的客户机。

虚拟机从Oracle VirtualBox中集成的DHCP服务器获取其在私有网络上的网络地址和配置。因此分配给虚拟机的IP地址通常与主机位于完全不同的网络上。由于可以设置一个虚拟机的多个网卡使用NAT,第一个网卡连接到私有网络10.0.2.0,第二个网卡连接到网络10.0.3.0,依此类推。如果您需要更改客户机分配的IP范围,请参阅微调Oracle VirtualBox NAT引擎

使用NAT配置端口转发

由于虚拟机连接到Oracle VirtualBox内部对主机不可见的私有网络,因此客户机上的网络服务对于主机本身或同一网络上的其他计算机是不可访问的。但是,与物理路由器一样,Oracle VirtualBox可以通过端口转发将选定的服务提供给客户机外部世界。这意味着Oracle VirtualBox监听主机上的特定端口,并将所有到达的流量重新发送到客户机,端口可以相同或不同。

对于主机上的应用程序或其他网络上的物理或虚拟计算机,看起来就像被代理的服务实际上是在主机上运行的。这也意味着您不能在主机上的相同端口上运行相同的服务。但是,您仍然可以获得在虚拟机中运行服务的优势。例如,主机或其他虚拟机上的服务不会因为服务的漏洞或错误而被破坏或崩溃,并且服务可以在与主机系统不同的操作系统中运行。

要配置端口转发,您可以使用图形化的端口转发编辑器,可以在配置为使用NAT的网络适配器的“网络”设置对话框中找到。在这里,您可以将主机端口映射到客户机端口,以允许网络流量路由到客户机中的特定端口。

或者,也可以使用命令行工具VBoxManage。请参阅VBoxManage modifyvm

您需要知道服务使用的客户机上的端口,并决定在主机上使用哪些端口。您可能希望在客户机和主机上使用相同的端口。您可以使用主机上尚未被服务使用的任何端口。例如,要设置到客户机中的ssh服务器的入站NAT连接,请使用以下命令:

VBoxManage modifyvm "VM name" --nat-pf1 "guestssh,tcp,,2222,,22"

在上面的示例中,到达任何主机接口的端口2222的所有TCP流量都将被转发到客户机上的端口22。协议名称tcp是定义转发应使用的协议的必需属性,udp也可以使用。名称guestssh仅用于描述,如果省略,将自动生成。在--nat-pf后面的数字表示网卡,与其他VBoxManage命令一样。

要删除此转发规则,请使用以下命令

VBoxManage modifyvm "VM name" --natpf1 delete "guestssh"

如果由于某种原因,访客机使用的是非内置DHCP服务器租用的静态分配IP地址,则在注册转发规则时需要指定访客IP,如下所示

VBoxManage modifyvm "VM name" --natpf1 "guestssh,tcp,,2222,10.0.2.19,22"

此示例与上一个示例相同,只是NAT引擎被告知访客机可以在10.0.2.19地址找到。

要转发来自特定主机接口的所有入站流量到客户机,请指定该主机接口的IP地址,如下所示:

VBoxManage modifyvm "VM name" --natpf1 "guestssh,tcp,127.0.0.1,2222,,22"

此示例将到达本地主机接口127.0.0.1端口2222的所有TCP流量转发到访客机中的端口22。

可以在VM运行时配置入站NAT连接,请参阅VBoxManage controlvm

使用NAT进行PXE启动

NAT模式现在支持PXE引导。如果用户VirtualBox.xml文件所在的目录中存在TFTP目录,则NAT DHCP服务器将提供vmname.pxe形式的引导文件名。用户有责任提供vmname.pxe

NAT限制

NAT模式存在一些用户应注意的限制,如下所示

  • ICMP协议限制。一些常用的网络调试工具,如pingtraceroute,依赖于ICMP协议发送和接收消息。Oracle VirtualBox的ICMP支持有一些限制,这意味着ping应该可以工作,但其他一些工具可能无法可靠工作。

  • 接收UDP广播。客户机不能可靠地接收UDP广播。为了节省资源,它只在客户机在特定端口上发送UDP数据后监听一段时间。因此,基于广播的NetBios名称解析不总是有效,但WINS始终有效。作为一种变通方法,您可以在\\server\share表示法中使用所需服务器的数字IP。

  • 不支持某些协议。不支持TCP和UDP以外的协议。不支持GRE。这意味着某些VPN产品,例如Microsoft的PPTP,无法使用。还有其他VPN产品只使用TCP和UDP。

  • 转发低于1024的主机端口。在UNIX类主机(如Linux、Oracle Solaris和macOS)上,非root用户运行的应用程序无法绑定到1024以下的端口。因此,如果您尝试配置此类端口转发,VM将拒绝启动。

这些限制通常不会影响标准的网络使用。但是NAT的存在也会产生微妙的影响,这些影响可能会干扰通常工作的协议。一个例子是NFS,服务器通常配置为拒绝来自非特权端口的连接,这些端口是1024以上的端口。

网络地址转换服务

网络地址转换(NAT)服务的工作方式类似于家庭路由器,将使用它的系统分组到一个网络中,并阻止此网络外部的系统直接访问其中的系统,但允许内部系统通过TCP和UDP over IPv4和IPv6相互通信以及与外部系统通信。

NAT服务连接到一个内部网络。打算使用它的虚拟机应该连接到该内部网络。创建NAT服务时会选择内部网络的名称,如果内部网络尚不存在,则会创建该内部网络。以下是创建NAT网络的命令示例:

VBoxManage natnetwork add --netname natnet1 --network "192.168.15.0/24" --enable

在此,natnet1是内部网络的名称,192.168.15.0/24是NAT服务接口的网络地址和掩码。默认情况下,在此静态配置中,网关将分配地址192.168.15.1,即接口地址后面的地址,但这可能会有所更改。要将DHCP服务器连接到内部网络,请按以下方式修改示例命令:

VBoxManage natnetwork add --netname natnet1 --network "192.168.15.0/24" --enable --dhcp on

要将DHCP服务器添加到现有网络,请使用以下命令

VBoxManage natnetwork modify --netname natnet1 --dhcp on

要禁用DHCP服务器,请使用以下命令

VBoxManage natnetwork modify --netname natnet1 --dhcp off

DHCP服务器提供已注册的名称服务器列表,但不映射来自127/8网络的服务器。

要启动NAT服务,请使用以下命令

VBoxManage natnetwork start --netname natnet1

如果网络附加了DHCP服务器,那么它将与NAT网络服务一起启动。

要停止NAT网络服务以及任何DHCP服务器

VBoxManage natnetwork stop --netname natnet1

要删除NAT网络服务

VBoxManage natnetwork remove --netname natnet1

如果内部网络上启用了DHCP服务器,此命令不会将其删除。

支持端口转发,使用IPv4的--port-forward-4开关和IPv6的--port-forward-6。例如:

VBoxManage natnetwork modify \
  --netname natnet1 --port-forward-4 "ssh:tcp:[]:1022:[192.168.15.5]:22"

这会添加一条端口转发规则,将主机的TCP 1022端口转发到IP地址为192.168.15.5的访客机上的22端口。主机端口、访客端口和访客IP是强制性的。要删除该规则,请使用以下命令

VBoxManage natnetwork modify --netname natnet1 --port-forward-4 delete ssh

可以将NAT服务绑定到指定的接口。例如

VBoxManage setextradata global "NAT/win-nat-test-0/SourceIp4" 192.168.1.185

要查看已注册的NAT网络列表,请使用以下命令

VBoxManage list natnetworks

NAT网络也可以通过VirtualBox Manager中的网络管理器工具创建、删除和配置。单击文件工具网络管理器。请参阅网络管理器

注意

尽管NAT服务将VM与主机分开,但VM可以访问主机的回环接口及其上运行的网络服务。主机的回环接口可作为IP地址10.0.2.2访问(假设默认配置,在其他配置中,它是配置的IPv4或IPv6网络范围内的相应地址)。这种对主机回环接口的访问在某些情况下非常有用,例如,当在VM中运行正在开发的Web应用程序,并且数据库服务器在主机上的回环接口上运行时。要允许流量传递到主机回环接口,请参阅VBoxManage,NAT网络设置。

桥接网络

使用桥接网络时,Oracle VirtualBox使用您主机系统上的设备驱动程序,该驱动程序会过滤来自物理网络适配器的数据。因此,此驱动程序称为网络过滤器驱动程序。这使Oracle VirtualBox能够拦截来自物理网络的数据并向其注入数据,从而在软件中创建一个新的网络接口。当客户机使用此新的软件接口时,它在主机系统看来就像客户机通过网线物理连接到该接口一样。主机可以通过该接口向客户机发送数据并从中接收数据。这意味着您可以设置客户机与网络的其余部分之间的路由或桥接。

注意

尽管在Linux上进行桥接网络不再需要TAP接口,但您仍然可以使用TAP接口进行某些高级设置,因为您可以将VM连接到任何主机接口。

要启用桥接网络,请打开虚拟机的“设置”对话框,转到“网络”页面,然后在“附加到”字段的下拉列表中选择“桥接网络”。从页面底部的列表中选择一个主机接口,该列表包含您系统的物理网络接口。例如,在典型的MacBook上,这允许您在en1:AirPort(无线接口)和en0:Ethernet(带网线的接口)之间进行选择。

注意

与有线接口桥接不同,无线接口桥接的方式也不同,因为大多数无线适配器不支持混杂模式。所有流量都必须使用主机无线适配器的MAC地址,因此Oracle VirtualBox需要替换出站数据包以太网头中的源MAC地址,以确保回复将被发送到主机接口。当Oracle VirtualBox看到一个目标IP地址属于某个虚拟机适配器的入站数据包时,它会将以太网头中的目标MAC地址替换为VM适配器的MAC地址并将其传递出去。Oracle VirtualBox会检查ARP和DHCP数据包,以便了解虚拟机的IP地址。

根据您的主机操作系统,存在以下限制

  • macOS主机。使用AirPort(Mac的无线网络系统)进行桥接网络时,功能有限。目前,Oracle VirtualBox仅支持通过AirPort的IPv4和IPv6。对于其他协议,如IPX,您必须选择有线接口。

  • Linux主机。使用无线接口进行桥接网络时,功能有限。目前,Oracle VirtualBox仅支持通过无线网络的IPv4和IPv6。对于其他协议,如IPX,您必须选择有线接口。

    此外,在Marvell Yukon II EC Ultra Ethernet NIC上由sky2驱动程序提供的有线接口上将MTU设置为小于1500字节,在某些条件下已知会导致数据包丢失。

    某些适配器在硬件中会剥离VLAN标签。这不允许您在Linux内核2.6.27之前的版本或Linux以外的主机操作系统上使用VM与外部网络之间的VLAN中继。

  • Oracle Solaris主机。不支持使用无线接口。由于Oracle Solaris网络子系统的技术限制,使用IPFilter过滤客户机流量也不完全受支持。这些问题可能会在Oracle Solaris 11的后续版本中得到解决。

    在Oracle Solaris 11主机build 159及更高版本上,可以直接使用Oracle Solaris Crossbow虚拟网络接口(VNIC)与Oracle VirtualBox配合使用,无需任何其他配置,只需每个VNIC必须对每个客户机网络接口是独占的。

    使用VLAN接口与Oracle VirtualBox配合使用时,它们必须按照PPA-hack命名方案命名,例如e1000g513001。否则,客户机可能会收到格式不正确的报文。

内部网络

内部网络类似于桥接网络,因为虚拟机可以直接与外部世界通信。然而,外部世界仅限于同一主机上连接到相同内部网络的其他虚拟机。

尽管在技术上,使用内部网络可以完成的所有操作也可以使用桥接网络完成,但内部网络具有安全优势。在桥接网络模式下,所有流量都通过主机的物理接口。因此,可以附加一个数据包嗅探器,如Wireshark,到主机接口并记录通过它的所有流量。如果由于任何原因,您希望同一台机器上的两个或多个VM私下通信,而将其数据隐藏起来不让主机系统和用户看到,那么桥接网络就不是一个选项。

内部网络会在需要时自动创建。没有中央配置。每个内部网络都仅通过其名称进行标识。一旦有多个具有相同内部网络ID的活动虚拟网卡,Oracle VirtualBox支持驱动程序将自动连接这些网卡并充当网络交换机。Oracle VirtualBox支持驱动程序实现了完整的以太网交换机,并支持广播/多播帧和混杂模式。

为了将虚拟机的网卡连接到内部网络,请将其网络模式设置为内部网络。有两种方法可以实现此目的

  • 使用VirtualBox Manager中的VM“设置”窗口。在“设置”窗口的“网络”类别中,从网络模式下拉列表中选择“内部网络”。从下面的下拉列表中选择现有内部网络的名称,或在“名称”字段中输入新名称。

  • 使用命令行,例如

    VBoxManage modifyvm "VM name" --nic<x> intnet

    (可选)您可以使用以下命令指定网络名称

    VBoxManage modifyvm "VM name" --intnet<x> "network name"

    如果您不指定网络名称,网卡将默认附加到网络intnet

除非您将参与内部网络的客户机操作系统中的虚拟网卡配置为使用静态IP地址,否则您可能希望使用Oracle VirtualBox内置的DHCP服务器来管理内部网络的IP地址。请参阅VBoxManage dhcpserver

作为一项安全措施,默认情况下,内部网络的Linux实现仅允许在同一用户ID下运行的虚拟机建立内部网络。但是,可以创建一个共享的内部网络接口,该接口可以被不同用户ID的用户访问。

仅主机网络

仅主机网络可以被认为是桥接网络和内部网络模式之间的混合体。与桥接网络一样,虚拟机可以像连接到物理以太网交换机一样相互通信以及与主机通信。与内部网络一样,不需要存在物理网络接口,并且虚拟机无法与主机外部的世界通信,因为它们未连接到物理网络接口。

当使用仅主机网络时,Oracle VirtualBox会在主机上创建一个新的软件接口,该接口会出现在您现有的网络接口旁边。换句话说,虽然桥接网络使用现有的物理接口连接虚拟机,但仅主机网络在主机上创建了一个新的环回接口。并且,内部网络中的虚拟机之间的流量是不可见的,而仅主机网络中主机上的环回接口的流量是可以被拦截的。

注意

运行最新macOS版本的主机不支持仅主机适配器。这些适配器被仅主机网络取代,后者定义了网络掩码和IP地址范围,其中主机网络接口接收该范围内的最低地址。

每当虚拟机使用仅主机网络时,主机网络接口都会由操作系统动态添加和删除。

在macOS主机上,在配置网络适配器时,请选择“仅主机网络”选项。提供“仅主机适配器”选项是为了向后兼容。

仅主机网络对于预配置的虚拟设备特别有用,其中多个虚拟机被打包在一起并设计为协同工作。例如,一个虚拟机可能包含一个Web服务器,第二个虚拟机包含一个数据库,由于它们旨在相互通信,因此该设备可以指示Oracle VirtualBox为这两个虚拟机设置一个仅主机网络。然后,第二个桥接网络将Web服务器连接到外部世界以提供数据,但外部世界无法连接到数据库。

要为虚拟机启用仅主机网络接口,请执行以下任一操作

  • 在虚拟机设置对话框的网络页面中,选择一个适配器选项卡。确保选中“启用网络适配器”复选框,并在“附加到”字段中选择“仅主机适配器”。

  • 在命令行中,使用

    VBoxManage modifyvm VM-name --nicN=hostonly --host-only-adapterN=interface-name.

    请参阅VBoxManage modifyvm

对于仅主机网络,与内部网络一样,您可能会发现Oracle VirtualBox内置的DHCP服务器很有用。它默认启用,并管理仅主机网络中的IP地址。如果没有DHCP服务器,您需要静态配置所有IP地址。

  • VirtualBox Manager中,您可以通过选择“文件”、“工具”、“网络管理器”来配置DHCP服务器。网络管理器窗口列出了当前正在使用的所有仅主机网络。选择网络名称,然后使用“DHCP服务器”选项卡配置DHCP服务器设置。请参阅网络管理器

  • 或者,您也可以使用VBoxManage dhcpserver命令。请参阅VBoxManage dhcpserver

注意

在Linux和macOS主机上,仅主机接口的数量限制为128个。Oracle Solaris和Windows主机没有此限制。

在Linux、macOS和Solaris上,Oracle VirtualBox仅允许将192.168.56.0/21范围内的IP地址分配给仅主机适配器。对于仅IPv6,只允许链接本地地址。如果需要其他范围,可以通过创建/etc/vbox/networks.conf并在其中指定允许的范围来启用它们。例如,要允许10.0.0.0/8和192.168.0.0/16的IPv4范围以及2001::/64的IPv6范围,请将以下行放入/etc/vbox/networks.conf

      * 10.0.0.0/8 192.168.0.0/16
      * 2001::/64
      

以哈希符号#开头的行将被忽略。以下示例允许任何地址,从而有效地禁用范围控制。

      * 0.0.0.0/0 ::/0
      

如果文件存在,但其中未指定任何范围,则不会将地址分配给仅主机适配器。以下示例有效地禁用了所有范围

      # No addresses are allowed for host-only adapters
      

UDP隧道网络

此网络模式使您能够互连在不同主机上运行的虚拟机。

从技术上讲,这是通过将访客网卡发送或接收的以太网帧封装到UDP/IP数据报中,并通过主机可用的任何网络发送它们来实现的。

UDP隧道模式具有以下参数

  • 源UDP端口:主机侦听的端口。来自任何源地址的 datagram 将被转发到客户机网卡的接收部分。

  • 目标地址:传输数据的目标主机的IP地址。

  • 目标UDP端口:传输数据发送到的端口号。

当互连两台不同主机上的两台虚拟机时,它们的IP地址必须交换。在单个主机上,源和目标UDP端口必须交换。

在以下示例中,主机1使用IP地址10.0.0.1,主机2使用IP地址10.0.0.2。要使用命令行进行配置

        VBoxManage modifyvm "VM 01 on host 1" --nic<x> generic
        VBoxManage modifyvm "VM 01 on host 1" --nic-generic-drv<x> UDPTunnel
        VBoxManage modifyvm "VM 01 on host 1" --nic-property<x> dest=10.0.0.2
        VBoxManage modifyvm "VM 01 on host 1" --nic-property<x> sport=10001
        VBoxManage modifyvm "VM 01 on host 1" --nic-property<x> dport=10002
        VBoxManage modifyvm "VM 02 on host 2" --nic<y> generic
        VBoxManage modifyvm "VM 02 on host 2" --nic-generic-drv<y> UDPTunnel
        VBoxManage modifyvm "VM 02 on host 2" --nic-property<y> dest=10.0.0.1
        VBoxManage modifyvm "VM 02 on host 2" --nic-property<y> sport=10002
        VBoxManage modifyvm "VM 02 on host 2" --nic-property<y> dport=10001

当然,您始终可以通过将目标地址参数设置为127.0.0.1来互连同一主机上的两个虚拟机。在这种情况下,它的作用类似于内部网络。但是,主机可以看到网络流量,这在正常的内部网络情况下是无法做到的。

注意

在类Unix主机上,例如Linux、Oracle Solaris和Mac OS X,从非root运行的应用程序无法绑定到1024以下的端口。因此,如果您尝试配置此类源UDP端口,虚拟机将拒绝启动。

VDE网络

虚拟分布式以太网(VDE)是一个灵活的虚拟网络基础设施系统,能够以安全的方式跨越多个主机。它支持L2/L3交换,包括生成树协议、VLAN和WAN仿真。它是Oracle VirtualBox的可选部分,仅包含在源代码中。

VDE是由意大利博洛尼亚大学副教授Renzo Davoli开发的一个项目。

该基础设施的基本组成部分是VDE交换机、VDE插头和连接交换机的VDE线路。

Oracle VirtualBox VDE驱动程序有一个参数:VDE网络。这是虚拟机将连接到的VDE网络交换机套接字的名称。

以下基本示例展示了如何将虚拟机连接到VDE交换机。

  1. 创建VDE交换机

    vde_switch -s /tmp/switch1
  2. 使用命令行配置虚拟机

    VBoxManage modifyvm "VM name" --nic<x> generic
    VBoxManage modifyvm "VM name" --nic-generic-drv<x> VDE

    连接到自动分配的交换机端口

    VBoxManage modifyvm "VM name" --nic-property<x> network=/tmp/switch1

    要连接到特定的交换机端口n

    VBoxManage modifyvm "VM name" --nic-property<x> network=/tmp/switch1[<n>]

    此命令对VLAN可能很有用。

  3. (可选)VDE交换机端口与VLAN之间的映射。

    使用交换机命令行

    vde$ vlan/create <VLAN>
    vde$ port/setvlan <port> <VLAN>

VDE仅适用于Linux和FreeBSD主机。它仅在主机系统上安装了VirtualSquare项目的VDE软件和VDE插件库时才可用。

注意

对于Linux主机,共享库libvdeplug.so必须在共享库的搜索路径中可用。

有关设置VDE网络的更多信息,请参阅软件附带的文档。另请参阅http://wiki.virtualsquare.org

云网络

云网络可用于从本地虚拟机连接到远程Oracle Cloud Infrastructure实例上的子网。请参阅云网络选项卡,了解如何使用VirtualBox Manager中的网络管理器工具创建和配置云网络的详细信息。

要为虚拟机启用云网络接口,请执行以下任一操作

  • 在虚拟机设置对话框的网络页面中,选择一个适配器选项卡。确保选中“启用网络适配器”复选框,并在“附加到”字段中选择“云网络”。

  • 在命令行中,使用VBoxManage modifyvm vmname --nic x cloud。请参阅VBoxManage modifyvm

网络管理器

VirtualBox Manager中的网络管理器工具使您可以创建、删除和配置Oracle VirtualBox使用的以下类型的网络:

要显示网络管理器,请转到全局“工具”菜单,然后单击“网络”。

仅主机网络选项卡

“网络管理器”中的“仅主机网络”选项卡列出了当前正在使用的所有仅主机网络。

  • 单击“创建”将新的仅主机网络添加到列表中。

  • 单击“移除”将仅主机网络从列表中移除。

  • 单击“属性”以显示或隐藏所选仅主机网络的设置。

要配置仅主机网络,请在“名称”字段中选择网络名称,然后执行以下操作:

  • 使用“适配器”选项卡为仅主机网络配置网络适配器。

  • 使用“DHCP服务器”选项卡配置仅主机网络使用的DHCP服务器的设置。Oracle VirtualBox内置了DHCP服务器,并自动管理网络的IP地址。

NAT网络选项卡

“网络管理器”中的“NAT网络”选项卡列出了当前正在使用的所有NAT网络。

  • 单击“创建”将新的NAT网络添加到列表中。

  • 单击“移除”将NAT网络从列表中移除。

  • 单击“属性”以显示或隐藏所选NAT网络的设置。

要配置NAT网络,请在“名称”字段中选择网络名称,然后执行以下操作:

  • 使用“通用选项”选项卡配置NAT网络使用的网络设置。例如,NAT服务接口的网络地址和掩码。

  • 使用“端口转发”选项卡配置NAT网络使用的端口转发规则。

云网络选项卡

“网络管理器”中的“云网络”选项卡列出了当前正在使用的所有云网络。

  • 单击“创建”将新的云网络添加到列表中。

  • 单击“移除”将云网络从列表中移除。

  • 单击“属性”以显示或隐藏所选云网络的设置。

要配置云网络,请在“名称”字段中选择网络名称,并指定以下内容:

  • 名称:用于云网络的名称。

  • 提供商:云服务提供商,例如Oracle Cloud Infrastructure

  • 配置文件:用于连接云网络的云配置文件。

  • ID:云隧道网络的OCID。单击“网络”图标可查看Oracle Cloud Infrastructure中可用于隧道流量的子网。

    请参阅使用云网络,了解如何使用VBoxManage cloud命令在Oracle Cloud Infrastructure上创建和配置虚拟云网络(VCN)的详细信息。

限制网络输入/输出带宽

Oracle VirtualBox支持限制网络传输的最大带宽。一台虚拟机中的多个网络适配器可以通过带宽组共享限制。可以设置多个此类限制。

注意

Oracle VirtualBox仅在传输方向上整形虚拟机流量,延迟虚拟机发送的数据包。它不限制虚拟机接收的流量。

限制是通过VBoxManage配置的。以下示例创建一个名为Limit的带宽组,将限制设置为20 Mbps,并将该组分配给虚拟机的第一个和第二个适配器。

VBoxManage bandwidthctl "VM name" add Limit --type network --limit 20m
VBoxManage modifyvm "VM name" --nicbandwidthgroup1 Limit
VBoxManage modifyvm "VM name" --nicbandwidthgroup2 Limit

组中的所有适配器共享带宽限制,这意味着在上面的示例中,两个适配器的总带宽永远不能超过20 Mbps。但是,如果一个适配器不需要带宽,另一个适配器可以使用其组的剩余带宽。

每个组的限制可以在虚拟机运行时更改,更改会立即生效。以下示例将上一个示例中创建的组的限制更改为100 Kbps

VBoxManage bandwidthctl "VM name" set Limit --limit 100k

要完全禁用虚拟机的第一个适配器的整形,请使用以下命令

VBoxManage modifyvm "VM name" --nicbandwidthgroup1 none

在虚拟机运行时,也可以通过为带宽组指定零限制来禁用分配给该组的所有适配器的整形。例如,对于名为Limit的带宽组

VBoxManage bandwidthctl "VM name" set Limit --limit 0

提高网络性能

Oracle VirtualBox提供了多种虚拟网络适配器,可以通过多种方式连接到主机的网络。根据使用的适配器和连接类型,网络性能会有所不同。性能方面,virtio网络适配器优于Intel PRO/1000仿真适配器,后者优于PCNet系列适配器。virtio和Intel PRO/1000适配器都受益于分段和校验和卸载。分段卸载对于高性能至关重要,因为它允许更少的上下文切换,从而大大增加了跨越VM/主机边界的数据包的大小。

注意

Windows XP的virtio和Intel PRO/1000驱动程序都不支持分段卸载。因此,Windows XP访客机永远无法达到其他访客类型相同的传输速率。有关更多信息,请参阅MS知识库文章842264。

三种连接类型:内部、桥接和仅主机,性能几乎相同。内部类型速度稍快,CPU占用更少,因为数据包永远不会到达主机的网络堆栈。NAT连接类型是最慢也是最安全的,因为它提供了网络地址转换。通用驱动程序连接是一种特殊类型,不能作为其他连接类型的替代。

分配给虚拟机的CPU数量不会提高网络性能,在某些情况下,由于访客机内并发性的增加,反而可能会损害网络性能。

以下是提高网络性能需要检查的简要总结

  • 尽可能使用virtio网络适配器。否则,请使用Intel PRO/1000适配器之一。

  • 使用桥接连接而不是NAT。

  • 确保在客户机操作系统中启用了分段卸载。通常它默认是启用的。您可以使用Linux客户机上的ethtool命令检查和修改卸载设置。

  • 使用第三方工具(如Wireshark)对VM的网络适配器上的网络流量进行完整详细的分析。为此,需要在VM的网络适配器上使用混杂模式策略。此模式仅适用于以下网络类型:NAT网络、桥接适配器、内部网络和仅主机适配器。

    要设置混杂模式策略,请从网络适配器的网络设置对话框中的下拉列表中选择,或使用命令行工具VBoxManage。请参阅VBoxManage modifyvm

    混杂模式策略如下

    • deny,隐藏任何非虚拟机网卡流量。这是默认设置。

    • allow-vms,隐藏所有主机流量对虚拟机网卡,但允许其查看与其他虚拟机的流量。

    • allow-all,删除所有限制。虚拟机网卡可以看到所有流量。

远程虚拟机

远程显示 (VRDP 支持)

Oracle VirtualBox支持远程显示虚拟机,这意味着虚拟机可以在一台计算机上运行,而显示在第二台计算机上,并且从第二台计算机进行控制,就好像虚拟机在那台计算机上运行一样。

为了获得最大的灵活性,Oracle VirtualBox通过一个名为VirtualBox远程桌面扩展(VRDE)的通用扩展接口实现了远程机器显示。基础开源Oracle VirtualBox包仅提供此接口,而实现可以由第三方通过Oracle VirtualBox扩展包提供,这些扩展包必须与基础包分开安装。请参阅安装Oracle VirtualBox和扩展包

Oracle在一个Oracle VirtualBox扩展包中为VirtualBox远程显示协议(VRDP)提供了支持。

VRDP是Microsoft远程桌面协议(RDP)的向后兼容扩展。因此,您可以使用任何标准的RDP客户端来控制远程虚拟机。

即使安装了扩展,VRDP服务器默认也是禁用的。可以通过VirtualBox Manager显示设置(请参阅显示设置)或使用VBoxManage命令,为每个虚拟机轻松启用它,如下所示:

$ VBoxManage modifyvm VM-name --vrde on

默认情况下,VRDP服务器使用TCP端口3389。如果您运行多个VRDP服务器,则需要更改默认端口,因为该端口一次只能由一个服务器使用。在Windows主机上,您可能还需要更改它,因为Windows本身内置的RDP服务器可能已经在使用默认端口。端口5000到5050通常不被使用,可能是个不错的选择。

端口可以在图形用户界面的显示设置中更改,也可以使用VBoxManage modifyvm命令的--vrde-port选项更改。您可以指定一个逗号分隔的端口列表或端口范围。使用短划线在两个端口号之间指定一个范围。VRDP服务器将绑定到指定列表中的一个可用端口。例如,VBoxManage modifyvm VM-name --vrde-port 5000,5010-5012配置服务器绑定到端口5000、5010、5011或5012之一。请参阅VBoxManage modifyvm

正在运行的虚拟机使用的实际端口可以通过VBoxManage showvminfo命令查询,或在VirtualBox Manager的虚拟机窗口的“机器”菜单中访问的“会话信息”对话框的“运行时”选项卡中查看。

Oracle VirtualBox支持IPv6。如果主机操作系统支持IPv6,VRDP服务器将自动侦听IPv6连接以及IPv4连接。

常见第三方 RDP 查看器

由于VRDP向后兼容RDP,您可以使用任何标准的RDP查看器连接到此类远程虚拟机。为此,您必须将主机系统的IP地址(而不是虚拟机的IP地址)指定为要连接的服务器地址。您还必须指定VRDP服务器正在使用的端口号。

以下示例适用于最常见的 RDP 查看器

  • 在Windows上,您可以使用Windows自带的Microsoft终端服务连接器mstsc.exe。按Windows键+R,显示“运行”对话框。输入mstsc以启动程序。您也可以在“开始”、“所有程序”、“附件”、“远程桌面连接”中找到该程序。如果您使用“运行”对话框,您可以直接输入选项。例如:

    mstsc 1.2.3.4:3389

    1.2.3.4替换为主机IP地址,并将3389替换为不同的端口(如果需要)。

    注意
    • IPv6地址必须用方括号括起来才能指定端口。例如:mstsc [fe80::1:2:3:4]:3389

    • 当连接到localhost以测试连接时,使用mstsc.exe时,地址localhost127.0.0.1可能不起作用。相反,必须使用地址127.0.0.2[:3389]

  • 在其他系统上,您可以使用标准的开源rdesktop程序。它随大多数Linux发行版一起提供。

    使用rdesktop,使用如下命令行:

    $ rdesktop -a 16 -N 1.2.3.4:3389

    1.2.3.4替换为主机IP地址,并将3389替换为不同的端口(如果需要)。-a 16选项请求16位每像素的颜色深度,我们推荐此设置。为获得最佳性能,在安装客户机操作系统后,应将其显示颜色深度设置为相同值。-N选项启用了数字键盘的使用。

  • 您可以将 Remmina 远程桌面客户端与 VRDP 配合使用。此应用程序包含在某些 Linux 发行版中,例如 Debian 和 Ubuntu。

  • 如果您使用KDE桌面,您可以使用krdc,即KDE RDP查看器。典型的命令行如下:

    $ krdc rdp://1.2.3.4:3389

    1.2.3.4替换为主机IP地址,并将3389替换为不同的端口(如果需要)。krdc需要rdp:// 前缀才能将其切换到RDP模式。

  • 使用Sun Ray精简客户端,您可以使用uttsc,这是Sun Ray Windows连接器包的一部分。有关详细信息,请参阅Sun Ray文档。

VBoxHeadless,远程桌面服务器

虽然从VirtualBox Manager启动的任何虚拟机都可以远程运行虚拟机,但如果根本不想在本地显示虚拟机,运行完整的GUI会很不方便。特别是,如果您运行的服务器硬件唯一目的是托管虚拟机,并且所有虚拟机都应该通过VRDP远程运行,那么在服务器上根本不需要图形用户界面。对于Linux或Oracle Solaris主机尤其如此,因为VirtualBox Manager依赖于Qt和SDL库。如果您不想在服务器上安装X Window系统,这将很不方便。

Oracle VirtualBox因此提供了一个名为VBoxHeadless的前端,它在主机上不产生任何可见输出,但仍然可以选择传递VRDP数据。此前端在Linux和Oracle Solaris主机上不依赖于X Window系统。

注意

Oracle VirtualBox的旧版本中,无头服务器称为VBoxVRDP。为了向后兼容,Oracle VirtualBox安装仍然包含一个同名的可执行文件。

要使用VBoxHeadless启动虚拟机,您有以下选项:

  • 使用VBoxManage命令,如下所示:

    $ VBoxManage startvm VM-name --type headless

    The --type option causes Oracle VirtualBox to use VBoxHeadless as the front end to the internal virtualization engine, instead of the Qt front end.

  • 使用VBoxHeadless命令,如下所示:

    VBoxHeadless --startvm uuid|vmname
                            

    这种启动VM的方式有助于排查VBoxManage startvm报告的问题,因为有时可以看到更详细的错误消息,特别是对于VM执行启动之前的早期失败。在正常情况下,首选VBoxManage startvm,因为它直接将VM作为后台进程运行,而直接使用VBoxHeadless启动时必须显式执行此操作。

  • VirtualBox Manager启动VBoxHeadless,通过在启动虚拟机时按住Shift键,或从“机器”菜单中选择“无头启动”。

当您使用VBoxHeadless命令启动VM时,VRDP服务器将根据VM配置启用。您可以使用--vrde命令行参数覆盖VM的设置。要启用VRDP服务器,请如下启动VM:

VBoxHeadless --startvm uuid|vmname --vrde on

要禁用 VRDP 服务器

VBoxHeadless --startvm uuid|vmname --vrde off

要根据VM配置启用VRDP服务器,与其他前端一样:

VBoxHeadless --startvm uuid|vmname --vrde config

此命令与以下命令相同

VBoxHeadless --startvm uuid|vmname
                  

如果您使用VBoxManage startvm启动VM,则始终会使用VM的配置设置。

分步操作:在无头服务器上创建虚拟机

以下说明描述了如何在通过网络连接的无头服务器上创建虚拟机。此示例创建虚拟机,建立RDP连接并安装客户机操作系统。所有这些任务都无需触碰无头服务器即可完成。您需要以下先决条件:

  • Oracle VirtualBox安装在具有受支持的主机操作系统的服务器计算机上。必须安装用于VRDP服务器的Oracle VirtualBox扩展包,请参阅远程显示(VRDP支持)。这些过程假定使用的是Linux服务器。

  • 可从服务器访问的 ISO 文件,其中包含要安装的客户机操作系统的安装数据。本示例中使用 Windows XP。

  • 通过该主机建立的终端连接,您可以通过该连接访问命令行,例如ssh

  • 远程客户端上的RDP查看器。有关示例,请参阅常用的第三方RDP查看器

请注意,在服务器机器上,由于我们只使用无头服务器,因此不需要 Qt 和 X Window 系统。

  1. 在无头服务器上,创建新的虚拟机。例如

    VBoxManage createvm --name "Windows XP" --ostype WindowsXP --register

    如果您不指定--register,则以后必须手动使用registervm命令。

    您无需指定--ostype,但这样做会为某些VM参数选择合理的默认值。例如,RAM大小和虚拟网络设备的类型。要获取支持的操作系统的完整列表,您可以使用以下命令:

    VBoxManage list ostypes
  2. 确保VM的设置适合我们将要安装的客户机操作系统。例如:

    VBoxManage modifyvm "Windows XP" --memory 256 --acpi on --boot1 dvd --nic1 nat
  3. 为虚拟机创建虚拟硬盘。例如,要创建 10 GB 的虚拟硬盘

    VBoxManage createhd --filename "WinXP.vdi" --size 10000
  4. 向新虚拟机添加 IDE 控制器。例如

    VBoxManage storagectl "Windows XP" --name "IDE Controller"
      --add ide --controller PIIX4
  5. 将您创建的 VDI 文件设置为新虚拟机的第一个虚拟硬盘。例如

    VBoxManage storageattach "Windows XP" --storagectl "IDE Controller"
     --port 0 --device 0 --type hdd --medium "WinXP.vdi"
  6. 将包含您稍后要安装的操作系统的 ISO 文件附加到虚拟机。这样做是为了让虚拟机可以从该文件启动。

    VBoxManage storageattach "Windows XP" --storagectl "IDE Controller"
     --port 0 --device 1 --type dvddrive --medium /full/path/to/iso.iso
  7. 按如下方式启用 VirtualBox 远程桌面扩展,即 VRDP 服务器

    VBoxManage modifyvm "Windows XP" --vrde on
  8. 使用VBoxHeadless命令启动虚拟机:

    VBoxHeadless --startvm "Windows XP"

    如果配置步骤成功,您应该会看到版权声明。如果您返回到命令行,则表示某些操作未正确完成。

  9. 在客户端计算机上,启动RDP查看器并连接到服务器。有关如何使用各种常用RDP查看器的详细信息,请参阅常用的第三方RDP查看器

    您的客户机操作系统的安装程序应该显示在 RDP 查看器中。

独立模式

分离模式是本地和远程虚拟机的一种替代前端。分离模式基于VBoxHeadless前端,但使用VirtualBox Manager用户界面来控制和显示虚拟机,而不是RDP查看器程序。分离模式不需要VirtualBox远程桌面扩展(VRDE)。

分离模式使客户机图形用户界面能够轻松地附加和分离正在运行的VM。拥有多个正在运行的VM的用户可以使用分离模式显示所需的VM,同时将所有其他VM保留在后台,直到需要它们为止。

与使用VBoxHeadless前端相比,分离模式具有一些安全优势。

使用分离模式

以下列表描述了分离模式下的一些典型操作。

  • 要在分离模式下启动虚拟机:

    右键单击VirtualBox Manager中的机器列表中的VM名称,然后在“启动”子菜单中选择“可分离启动”。

  • 要从分离模式下的虚拟机分离

    在虚拟机的“机器”菜单上,选择“分离GUI”。

  • 附加到分离模式下的虚拟机:

    右键单击VirtualBox Manager中的机器列表中的VM名称,然后选择“显示”。

  • 停止正在分离模式下运行的虚拟机:

    右键单击VirtualBox Manager中的机器列表中的VM名称,然后在“停止”菜单中选择一个选项。

远程 USB

作为VRDP支持的额外特殊功能,Oracle VirtualBox还支持通过网络进行远程USB设备。也就是说,在一台计算机上运行的Oracle VirtualBox客户机可以访问正在显示VRDP数据的计算机的USB设备,就像访问连接到实际主机的USB设备一样。这使得可以在充当服务器的Oracle VirtualBox主机上运行虚拟机,而客户端可以从需要仅网络适配器和能够运行RDP查看器的显示器的其他地方进行连接。当USB设备插入客户端时,远程Oracle VirtualBox服务器可以访问它们。

对于这些远程USB设备,与USB设备相同的过滤器规则适用。请参阅USB设置。您所要做的就是在设置这些规则时指定“远程”或“任何”。

访问远程USB设备仅当RDP客户端支持此扩展时才有可能。某些版本的uttsc(一个为Sun Ray瘦客户端量身定制的客户端)支持访问远程USB设备。未来Oracle VirtualBox版本将提供其他平台的RDP客户端。

RDP 认证

对于每一个可以通过RDP远程访问的虚拟机,您可以单独确定客户端连接是否以及如何进行身份验证。为此,请使用VBoxManage modifyvm命令和--vrde-auth-type选项。请参阅VBoxManage modifyvm。以下身份验证方法可用

  • null方法表示根本没有身份验证。任何客户端都可以连接到VRDP服务器,从而连接到虚拟机。这非常不安全,仅建议在专用网络中使用。

  • external方法通过特殊的身份验证库提供外部身份验证。Oracle VirtualBox附带两个特殊的身份验证库

    1. 默认身份验证库VBoxAuth根据主机的用户凭据进行身份验证。根据主机平台,这意味着以下内容

      • 在Linux和Oracle Solaris主机上,VBoxAuth.so根据主机的PAM系统验证用户。

      • 在Windows主机上,VBoxAuth.dll根据主机的WinLogon系统验证用户。

      • 在macOS主机上,VBoxAuth.dylib根据主机的目录服务验证用户。

      换句话说,外部方法默认使用主机系统上存在的用户帐户进行身份验证。任何具有有效身份验证凭据的用户都将被接受。例如,用户名不必与运行VM的用户匹配。

    2. 一个名为VBoxAuthSimple的附加库根据虚拟机XML设置文件extradata部分中配置的凭据进行身份验证。这可能是获得不依赖于运行中且受支持的客户机进行身份验证的最简单方法。需要以下步骤

      1. 使用以下命令启用VBoxAuthSimple

        VBoxManage setproperty vrdeauthlibrary "VBoxAuthSimple"
      2. 要为特定虚拟机启用此库,您必须将身份验证切换为外部,如下所示

        VBoxManage modifyvm VM-name --vrde-auth-type external

        VM-name替换为VM名称或UUID。

      3. 然后,您需要通过向虚拟机的extradata写入条目来配置用户和密码。由于XML虚拟机设置文件(需要将密码写入其extradata部分)是纯文本文件,因此Oracle VirtualBox使用哈希来加密密码。必须使用以下命令

        VBoxManage setextradata VM-name "VBoxAuthSimple/users/user" hash
                                            

        VM-name替换为VM名称或UUID,将user替换为应允许登录的用户,将hash替换为加密的密码。以下命令示例获取密码secret的哈希值

        $ VBoxManage internalcommands passwordhash "secret"
        2bb80d537b1da3e38bd30361aa855686bde0eacd7162fef6a25fe97bf527a25b

        然后,您使用VBoxManage setextradata将此值存储在虚拟机的extradata部分中。

        作为一个组合示例,要将用户john和虚拟机My VM的密码设置为secret,请使用此命令

        VBoxManage setextradata "My VM" "VBoxAuthSimple/users/john"
            2bb80d537b1da3e38bd30361aa855686bde0eacd7162fef6a25fe97bf527a25b
  • guest身份验证方法通过随Guest Additions一起提供的特殊组件进行身份验证。因此,身份验证不是在主机上进行的,而是在客户机用户帐户上进行的。

    此方法目前仍在测试中,尚不支持。

除了上述方法外,您还可以用任何其他模块替换默认的外部身份验证模块。为此,Oracle VirtualBox提供了一个定义明确的接口,允许您编写自己的身份验证模块。这在Oracle VirtualBox软件开发工具包(SDK)参考中已详细描述。请参阅Oracle VirtualBox编程接口

RDP 加密

RDP 具有数据流加密功能,该功能基于 RC4 对称密码,密钥长度可达 128 位。RC4 密钥会定期更换,每 4096 个数据包更换一次。

RDP提供以下不同的服务器身份验证方法

  • RDP 4身份验证曾被历史使用。使用RDP 4,RDP客户端不执行任何检查来验证其连接到的服务器的身份。由于可以使用中间人(MITM)攻击获取用户凭据,因此RDP4身份验证不安全,不应使用。

  • RDP 5.1身份验证使用服务器证书,客户端拥有该证书的公钥。这样可以确保服务器拥有相应的私钥。然而,由于这个硬编码的私钥在几年前已经公开,RDP 5.1身份验证也不安全。

  • RDP 5.2或更高版本身份验证使用增强型RDP安全性,这意味着使用外部安全协议来保护连接。RDP 4和RDP 5.1使用标准RDP安全性。VRDP服务器支持使用TLS协议的增强型RDP安全性,并在TLS握手的过程中,将服务器证书发送给客户端。

    VRDE属性Security/Method设置连接所需的安全性方法。您也可以在VM设置的“远程显示”选项卡中更改此设置。有效值如下

    • Negotiate.允许使用增强型(TLS)和标准RDP安全性连接。安全方法将与客户端协商。

    • RDP.仅接受标准RDP安全性。

    • TLS.仅接受增强型RDP安全性。客户端必须支持TLS。这是默认设置。

      Oracle VirtualBox使用的OpenSSL版本支持TLS版本1.0、1.1、1.2和1.3。

    例如,以下命令配置客户端使用标准或增强型RDP安全性连接

    VBoxManage modifyvm VM-name --vrde-property "Security/Method=negotiate"

    如果Security/Method属性设置为Negotiate或TLS,则当客户端支持时,服务器将使用TLS。但是,要使用TLS,服务器必须拥有服务器证书和服务器私钥。证书颁发机构(CA)证书是可选的。

    如果您选择TLS作为安全方法,Oracle VirtualBox将为VM生成一对服务器密钥和证书(称为VRDEAutoGeneratedPrivateKey.pem和VRDEAutoGeneratedCert.pem)。如果自动生成的证书和密钥即将过期,或者其中一个或两个被删除或损坏,Oracle VirtualBox也会重新创建它们。

    要生成具有CA证书的自定义服务器密钥和证书对,请执行以下步骤。

    1. 创建 CA 自签名证书。

      openssl req -new -x509 -days 365 -extensions v3_ca \
        -keyout ca_key_private.pem -out ca_cert.pem
    2. 生成服务器私钥和签名请求。

      openssl genrsa -out server_key_private.pem
      openssl req -new -key server_key_private.pem -out server_req.pem
    3. 生成服务器证书。

      openssl x509 -req -days 365 -in server_req.pem \
        -CA ca_cert.pem -CAkey ca_key_private.pem -set_serial 01 -out server_cert.pem

    配置服务器以访问所需文件。例如

    VBoxManage modifyvm VM-name \
      --vrde-property "Security/CACertificate=path/ca_cert.pem"
    VBoxManage modifyvm VM-name \
      --vrde-property "Security/ServerCertificate=path/server_cert.pem"
    VBoxManage modifyvm VM-name \
      --vrde-property "Security/ServerPrivateKey=path/server_key_private.pem"

    请注意,Oracle VirtualBox不维护自定义证书。您负责保留这些证书的更新。

由于连接到服务器的客户端决定了将使用哪种类型的加密,因此对于Linux RDP查看器rdesktop,请使用-4-5选项。

到 VRDP 服务器的多个连接

Oracle VirtualBox的VRDP服务器支持从不同客户端同时连接到同一正在运行的VM。所有已连接的客户端都看到相同的屏幕输出,并共享鼠标指针和键盘焦点。这类似于多个人同时使用同一台计算机,轮流使用键盘。

以下命令启用多重连接模式

VBoxManage modifyvm VM-name --vrde-multi-con on

多个远程显示器

要访问两个或更多远程VM显示,您必须启用VRDP多连接模式。请参阅VRDP服务器的多重连接

RDP客户端可以使用domain登录参数(-d)选择要连接的虚拟监视器编号。如果参数以@后跟一个数字结尾,Oracle VirtualBox会将该数字解释为屏幕索引。主客户机屏幕用@1选择,第一个辅助屏幕用@2选择,依此类推。

Microsoft RDP 6客户端不允许您指定单独的域名。相反,在Username字段中输入domain\username。例如,@2\namename必须提供,并且必须是VRDP服务器设置为需要凭据时使用的登录名。如果不需要,您可以使用任何文本作为用户名。

VRDP 视频重定向

VRDP服务器可以将视频流从客户机重定向到RDP客户端。视频帧使用JPEG算法进行压缩,与标准的RDP位图压缩方法相比,实现了更高的压缩比。通过降低视频质量可以提高压缩比。

VRDP服务器会自动检测客户机中的视频流,将其作为频繁更新的矩形区域。因此,此方法适用于任何客户机操作系统,而无需在客户机中安装其他软件。特别是,不需要Guest Additions。

然而,在客户端方面,目前只有 Windows 7 远程桌面连接客户端支持此功能。如果客户端不支持视频重定向,VRDP 服务器会回退到常规位图更新。

以下命令启用视频重定向

VBoxManage modifyvm VM-name --vrde-video-channel on

视频质量定义为 10 到 100 之间的百分比值,表示 JPEG 压缩级别,其中数字越低表示质量越低但压缩率越高。可以使用以下命令更改质量

VBoxManage modifyvm VM-name --vrde-video-channel-quality 75

VRDP 自定义

您可以在 VRDP 服务器中单独禁用显示输出、鼠标和键盘输入、音频、远程 USB 或剪贴板。

以下命令更改相应的服务器设置

$ VBoxManage modifyvm VM-name --vrde-property Client/DisableDisplay=1
$ VBoxManage modifyvm VM-name --vrde-property Client/DisableInput=1
$ VBoxManage modifyvm VM-name --vrde-property Client/DisableUSB=1
$ VBoxManage modifyvm VM-name --vrde-property Client/DisableAudio=1
$ VBoxManage modifyvm VM-name --vrde-property Client/DisableClipboard=1
$ VBoxManage modifyvm VM-name --vrde-property Client/DisableUpstreamAudio=1

要重新启用某功能,请使用类似命令,但去掉末尾的 1。例如

$ VBoxManage modifyvm VM-name --vrde-property Client/DisableDisplay=

瞬时移动

Oracle VirtualBox支持传送。传送是在虚拟机运行时,将其从一个Oracle VirtualBox主机移动到另一个主机。无论主机操作系统如何,这都可以工作。例如,您可以在Oracle Solaris和macOS主机之间传送虚拟机。

传送要求在一台主机上运行一台当前正在运行的机器,这被称为。将被传送虚拟机到的主机被称为目标。然后,目标上的机器配置为等待源联系目标。然后,机器的运行状态将被传输到目标,停机时间最少。

瞬时转移通过任何 TCP/IP 网络进行。源主机和目标主机只需在瞬时转移设置中指定一个 TCP/IP 端口,并就此达成一致即可。

目前,要使其正常工作,需要满足以下几个先决条件

  • 在目标主机上,您必须在Oracle VirtualBox中将虚拟机配置为与源主机上要传送的虚拟机具有完全相同的硬件设置。这不适用于仅是描述性的设置,例如VM名称,但显然为了使传送能够工作,目标机器必须具有相同的内存量和其他硬件设置。否则,传送将失败并显示错误消息。

  • 源和目标上的两个虚拟机必须共享相同的存储,包括硬盘、软盘和CD/DVD映像。这意味着它们要么使用相同的iSCSI目标,要么存储位于网络上的某处,并且两个主机都可以使用NFS或SMB/CIFS访问它。

    这也意味着源主机和目标机器都不能有任何快照。

要配置瞬时转移,请执行以下步骤

  1. 目标主机上,将虚拟机配置为在启动时等待传送请求到达,而不是实际尝试启动机器。这是通过以下VBoxManage命令完成的

    VBoxManage modifyvm targetvmname --teleporter on --teleporter-port port
                         

    targetvmname是目标主机上虚拟机的名称,port是将在源和目标主机上使用的TCP/IP端口号。例如,使用6000。请参阅VBoxManage modifyvm

  2. 在目标主机上启动虚拟机。虚拟机不会运行,而是显示一个进度对话框,指示它正在等待瞬时转移请求的到来。

  3. 按正常方式在主机上启动VM。当它运行时,并且您希望它被传送,请在源主机上发出以下命令

    VBoxManage controlvm sourcevmname teleport --host targethost --port port
                         

    其中sourcevmname是源主机上虚拟机的名称,即当前正在运行的机器。targethost是目标主机的主机名或IP名称,目标主机上的机器正在等待传送请求,而port必须与目标主机上的命令中指定的端口号相同。请参阅VBoxManage controlvm

为了测试,您也可以在同一主机上瞬时转移机器。在这种情况下,在源主机和目标主机上都使用 localhost 作为主机名。

注意

在极少数情况下,如果源和目标的CPU差异很大,传送可能会因错误消息而失败,或者目标可能会挂起。这尤其可能发生在VM正在运行的应用程序软件针对特定CPU进行了高度优化,而没有正确检查某些CPU功能是否确实存在的情况下。Oracle VirtualBox会过滤提供给客户机操作系统的CPU功能。VBoxManage modifyvm高级用户可以尝试使用VBoxManage modifyvm --cpuid-portability-level命令限制这些虚拟CPU功能。

VBoxHeadless

Oracle VirtualBox远程桌面服务器

概要

VBoxHeadless [‑‑startvm=<uuid | vmname>] [‑‑vrde=on | off | config] [‑‑vrdeproperty=prop-name= [prop-value]] [‑‑settingspw=password] [‑‑settingspwfile=password-file] [‑‑start‑paused] [‑‑capture] [‑‑width=width] [‑‑height=height] [‑‑bitrate=bit-rate] [‑‑filename=filename]

描述

命令VBoxHeadless是一个备用前端,它使您能够远程管理虚拟机(VM)。前端是CLI而不是VirtualBox Manager图形用户界面(GUI)。

有关使用此命令的信息,请参阅VBoxHeadless,远程桌面服务器

命令选项

--startvm=uuid | vmname

指定要启动的虚拟机的全局唯一标识符 (UUID) 或名称。

使用VBoxManage list vms命令获取VM信息。

此选项的短版本是-s

--vrde=on | off | config

指定如何使用VRDP服务器。默认值为config。有效值如下

  • on启用VRDP服务器。

    VBoxHeadless --startvm=vmname --vrde=on
  • off禁用VRDP服务器。

    VBoxHeadless --startvm=vmname --vrde=off
  • config根据VM配置启用VRDP服务器。

    VBoxHeadless --startvm=vmname --vrde=config

此选项的短版本是-v

--vrdeproperty=prop-name=[prop-value]

指定以下属性之一的值

  • TCP/Ports属性值是VRDE服务器可以绑定的端口的逗号分隔列表。在两个端口号之间使用连字符(-)指定端口范围。

  • TCP/Address属性值是要绑定VRDE服务器的接口IP地址。

--settingspw=password

指定一个设置密码来访问加密的设置。如果您未在命令行中指定密码,VBoxHeadless将提示您输入密码。

--settingspwfile=password-file

指定包含设置密码的文件。

--start-paused

以暂停状态启动指定的虚拟机。

--capture

将VM屏幕输出记录到文件。除了此选项外,您还必须使用--filename选项指定文件名。

--width=width

指定录制的帧宽度(以像素为单位)。此选项与--capture选项相关。

--height=height

指定录制的帧高度(以像素为单位)。此选项与--capture选项相关。

--bitrate=bit-rate

指定录制的比特率(以千比特/秒为单位)。此选项与--capture选项相关。

--filename=文件名

指定存储录制文件的文件名。使用的编解码器基于您选择的文件扩展名。如果您使用--capture选项,则必须指定此选项。

示例

以下命令启动ol7u4 VM

$ VBoxHeadless --startvm "ol7u4"

以下命令以暂停状态启动ol7u6 VM。

$ VBoxHeadless --startvm "ol7u6" --start-paused

以下命令启动ol7u6 VM并录制会话。录制内容将保存到ol7u6-recording WebM文件中。

$ VBoxHeadless --startvm "ol7u6" --capture --filename ol7u6-recording.webm

VBoxManage

简介

VBoxManageOracle VirtualBox的CLI。通过它,您可以从主机操作系统的命令行控制Oracle VirtualBoxVBoxManage支持图形用户界面提供的所有功能,以及GUI无法访问的虚拟化引擎的功能。

您需要使用命令行来执行以下操作:

  • 使用不同于主GUI的用户界面,例如VBoxHeadless服务器。

  • 控制VM的一些更高级和实验性的配置设置。

有关更多信息,请参阅VBoxManage命令说明示例

命令概述

当不带参数运行VBoxManage或提供无效的命令行时,将显示以下命令语法列表。请注意,输出会因主机平台而略有不同。如有疑问,请检查VBoxManage的输出,了解您特定主机上可用的命令。

VBoxManage [‑q | ‑‑nologo] [‑‑settingspw=password] [‑‑settingspwfile=pw-file] [@response-file] [subcommand]

VBoxManage help [subcommand]

VBoxManage命令

VBoxManage [‑V | ‑‑version]

VBoxManage [‑‑dump-build-type]

VBoxManage adoptstate <uuid | vmname> <state-filename>

VBoxManage bandwidthctl <uuid | vmname>add <bandwidth-group-name> <‑‑limit=bandwidth-limit[k|m|g|K|M|G]> <‑‑type=disk | network>

VBoxManage bandwidthctl <uuid | vmname>list [‑‑machinereadable]

VBoxManage bandwidthctl <uuid | vmname>remove <bandwidth-group-name>

VBoxManage bandwidthctl <uuid | vmname>set <bandwidth-group-name> <‑‑limit=bandwidth-limit[k|m|g|K|M|G]>

VBoxManage checkmediumpwd <uuid | filename> <password-file>

VBoxManage clonemedium <uuid | source-medium> <uuid | target-medium> [disk | dvd | floppy] [‑‑existing] [‑‑format=VDI | VMDK | VHD | RAW | other] [‑‑variant=Standard|Fixed|Split2G|Stream|ESX...]

VBoxManage clonevm <vmname|uuid> [‑‑basefolder=basefolder] [‑‑groups=group,...] [‑‑mode=machine | ‑‑mode=machinechildren | ‑‑mode=all] [‑‑name=name] [‑‑options=option,...] [‑‑register] [‑‑snapshot=snapshot-name] [‑‑uuid=uuid]

VBoxManage closemedium [disk | dvd | floppy] <uuid | filename> [‑‑delete]

VBoxManage cloud <‑‑provider=name> <‑‑profile=name> list instances [‑‑state=string] [‑‑compartment-id=string]

VBoxManage cloud <‑‑provider=name> <‑‑profile=name> list images <‑‑compartment-id=string> [‑‑state=string]

VBoxManage cloud <‑‑provider=name> <‑‑profile=name> list vnicattachments <‑‑compartment-id=string> [‑‑filter=instanceId | vnicId | availabilityDomain=value...]

VBoxManage cloud <‑‑provider=name> <‑‑profile=name> instance create <‑‑domain-name=name> <‑‑image-id=id | ‑‑boot-volume-id=id> <‑‑display-name=name> <‑‑shape=type> <‑‑subnet=id> [‑‑boot-disk-size=size in GB] [‑‑publicip=true | false] [‑‑privateip=IP address] [‑‑public-ssh-key=key string...] [‑‑launch-mode=NATIVE | EMULATED | PARAVIRTUALIZED] [‑‑cloud-init-script-path=path to a script]

VBoxManage cloud <‑‑provider=name> <‑‑profile=name> instance info <‑‑id=unique id>

VBoxManage cloud <‑‑provider=name> <‑‑profile=name> instance terminate <‑‑id=unique id>

VBoxManage cloud <‑‑provider=name> <‑‑profile=name> instance start <‑‑id=unique id>

VBoxManage cloud <‑‑provider=name> <‑‑profile=name> instance pause <‑‑id=unique id>

VBoxManage cloud <‑‑provider=name> <‑‑profile=name> instance reset <‑‑id=unique id>

VBoxManage cloud <‑‑provider=name> <‑‑profile=name> instance clone <‑‑id=unique id> [‑‑clone-name=name for a clone instance]

VBoxManage cloud <‑‑provider=name> <‑‑profile=name> instance metriclist <‑‑id=unique id>

VBoxManage cloud <‑‑provider=name> <‑‑profile=name> instance metricdata <‑‑id=unique id> <‑‑metric-name=metric name> <‑‑metric-points=number of history metric points>

VBoxManage cloud <‑‑provider=name> <‑‑profile=name> image create <‑‑display-name=name> [‑‑bucket-name=name] [‑‑object-name=name] [‑‑instance-id=unique id]

VBoxManage cloud <‑‑provider=name> <‑‑profile=name> image info <‑‑id=unique id>

VBoxManage cloud <‑‑provider=name> <‑‑profile=name> image delete <‑‑id=unique id>

VBoxManage cloud <‑‑provider=name> <‑‑profile=name> image import <‑‑id=unique id> [‑‑bucket‑name=name] [‑‑object‑name=name]

VBoxManage cloud <‑‑provider=name> <‑‑profile=name> image export <‑‑id=unique id> <‑‑display‑name=name> [‑‑bucket‑name=name] [‑‑object‑name=name]

VBoxManage cloud <‑‑provider=name> <‑‑profile=name> network setup [‑‑gateway‑os‑name=string] [‑‑gateway‑os‑version=string] [‑‑gateway‑shape=string] [‑‑tunnel‑network‑name=string] [‑‑tunnel‑network‑range=string] [‑‑proxy=string] [‑‑compartment‑id=string]

VBoxManage cloud <‑‑provider=name> <‑‑profile=name> network create <‑‑name=string> <‑‑network‑id=string> [‑‑enable | ‑‑disable]

VBoxManage cloud network update <‑‑name=string> [‑‑network‑id=string] [‑‑enable | ‑‑disable]

VBoxManage cloud network delete <‑‑name=string>

VBoxManage cloud network info <‑‑name=string>

VBoxManage cloudprofile <‑‑provider=name> <‑‑profile=name>add [‑‑clouduser=unique id] [‑‑fingerprint=MD5 string] [‑‑keyfile=path] [‑‑passphrase=string] [‑‑tenancy=unique id] [‑‑compartment=unique id] [‑‑region=string]

VBoxManage cloudprofile <‑‑provider=name> <‑‑profile=name>update [‑‑clouduser=unique id] [‑‑fingerprint=MD5 string] [‑‑keyfile=path] [‑‑passphrase=string] [‑‑tenancy=unique id] [‑‑compartment=unique id] [‑‑region=string]

VBoxManage cloudprofile <‑‑provider=name> <‑‑profile=name>delete

VBoxManage cloudprofile <‑‑provider=name> <‑‑profile=name>show

VBoxManage controlvm <uuid | vmname>pause

VBoxManage controlvm <uuid | vmname>resume

VBoxManage controlvm <uuid | vmname>reset

VBoxManage controlvm <uuid | vmname>poweroff

VBoxManage controlvm <uuid | vmname>savestate

VBoxManage controlvm <uuid | vmname>acpipowerbutton

VBoxManage controlvm <uuid | vmname>acpisleepbutton

VBoxManage controlvm <uuid | vmname>reboot

VBoxManage controlvm <uuid | vmname>shutdown [‑‑force]

VBoxManage controlvm <uuid | vmname>keyboardputscancode <hex> [hex...]

VBoxManage controlvm <uuid | vmname>keyboardputstring <string> [string...]

VBoxManage controlvm <uuid | vmname>keyboardputfile <filename>

VBoxManage controlvm <uuid | vmname>setlinkstateN <on | off>

VBoxManage controlvm <uuid | vmname>nicN <null | nat | bridged | intnet | hostonly | generic | natnetwork> [device‑name]

VBoxManage controlvm <uuid | vmname>nictraceN <on | off>

VBoxManage controlvm <uuid | vmname>nictracefileN <filename>

VBoxManage controlvm <uuid | vmname>nicpropertyN <prop‑name=prop‑value>

VBoxManage controlvm <uuid | vmname>nicpromiscN <deny | allow‑vms | allow‑all>

VBoxManage controlvm <uuid | vmname>natpfN <[rulename],<tcp|udp>,[host‑IP],hostport,[guest‑IP],guestport>

VBoxManage controlvm <uuid | vmname>natpfNdelete <rulename>

VBoxManage controlvm <uuid | vmname>guestmemoryballoon <balloon‑size>

VBoxManage controlvm <uuid | vmname>usbattach <uuid | address> [‑‑capturefile=filename]

VBoxManage controlvm <uuid | vmname>usbdetach <uuid | address>

VBoxManage controlvm <uuid | vmname>audioin <on | off>

VBoxManage controlvm <uuid | vmname>audioout <on | off>

VBoxManage controlvm <uuid | vmname>clipboard mode <disabled | hosttoguest | guesttohost | bidirectional>

VBoxManage controlvm <uuid | vmname>clipboard filetransfers <on | off>

VBoxManage controlvm <uuid | vmname>draganddrop <disabled | hosttoguest | guesttohost | bidirectional>

VBoxManage controlvm <uuid | vmname>vrde <on | off>

VBoxManage controlvm <uuid | vmname>vrdeport <port>

VBoxManage controlvm <uuid | vmname>vrdeproperty <prop‑name=prop‑value>

VBoxManage controlvm <uuid | vmname>vrdevideochannelquality <percentage>

VBoxManage controlvm <uuid | vmname>setvideomodehint <xres> <yres> <bpp> [display [<yes | no> [x‑originy‑origin]]]

VBoxManage controlvm <uuid | vmname>setscreenlayout <display> <on | primaryx‑originy‑originx‑resolutiony‑resolutionbpp | off>

VBoxManage controlvm <uuid | vmname>screenshotpng <filename> [display]

VBoxManage controlvm <uuid | vmname>recording <on | off> VBoxManage controlvm <uuid | vmname>recording start [‑‑wait] VBoxManage controlvm <uuid | vmname>recording stop VBoxManage controlvm <uuid | vmname>recording attach VBoxManage controlvm <uuid | vmname>recording screens <all | none | screen‑ID,screen‑ID...> VBoxManage controlvm <uuid | vmname>recording filename <filename> VBoxManage controlvm <uuid | vmname>recording videores <<width>x <height>> VBoxManage controlvm <uuid | vmname>recording videorate <rate> VBoxManage controlvm <uuid | vmname>recording videofps <fps> VBoxManage controlvm <uuid | vmname>recording maxtime <sec> VBoxManage controlvm <uuid | vmname>recording maxfilesize <MB> VBoxManage controlvm <uuid | vmname>recording opts <key= [value]>

VBoxManage controlvm <uuid | vmname>setcredentials <username>‑‑passwordfile=<filename | password> <domain‑name>‑‑allowlocallogon=<yes | no>

VBoxManage controlvm <uuid | vmname>teleport <‑‑host=host‑name> <‑‑port=port‑name> [‑‑maxdowntime=msec] [‑‑passwordfile=filename | ‑‑password=password]

VBoxManage controlvm <uuid | vmname>plugcpu <ID>

VBoxManage controlvm <uuid | vmname>unplugcpu <ID>

VBoxManage controlvm <uuid | vmname>cpuexecutioncap <num>

VBoxManage controlvm <uuid | vmname>vm‑process‑priority <default | flat | low | normal | high>

VBoxManage controlvm <uuid | vmname>webcam attach [pathname [settings]]

VBoxManage controlvm <uuid | vmname>webcam detach [pathname]

VBoxManage controlvm <uuid | vmname>webcam list

VBoxManage controlvm <uuid | vmname>addencpassword <ID> <password‑file | > [‑‑removeonsuspend=yes | no]

VBoxManage controlvm <uuid | vmname>removeencpassword <ID>

VBoxManage controlvm <uuid | vmname>removeallencpasswords

VBoxManage controlvm <uuid | vmname>changeuartmodeNdisconnected | serverpipe‑name | clientpipe‑name | tcpserverport | tcpclienthostname:port | filefilename | device‑name

VBoxManage controlvm <uuid | vmname>autostart‑enabledNon | off

VBoxManage controlvm <uuid | vmname>autostart‑delay <seconds>

VBoxManage convertfromraw <inputfile> <outputfile> [‑‑format=VDI | VMDK | VHD] [‑‑uuid=uuid] [‑‑variant=Standard|Fixed|Split2G|Stream|ESX...]

VBoxManage convertfromraw stdin <outputfile> <bytes> [‑‑format=VDI | VMDK | VHD] [‑‑uuid=uuid] [‑‑variant=Standard|Fixed|Split2G|Stream|ESX...]

VBoxManage createmedium [disk | dvd | floppy] <‑‑filename=filename> [‑‑size=megabytes | ‑‑sizebyte=bytes] [‑‑diffparent=UUID | filename] [‑‑format=VDI | VMDK | VHD] [‑‑variant=Standard|Fixed|Split2G|Stream|ESX|Formatted|RawDisk...] [‑‑property=name=value...] [‑‑property‑file=name=/path/to/file/with/value...]

VBoxManage createvm <‑‑name=name> <‑‑platform‑architecture=x86 | arm> [‑‑basefolder=basefolder] [‑‑default] [‑‑groups=group‑ID [,...]] [‑‑ostype=ostype] [‑‑register] [‑‑uuid=uuid] [‑‑cipher=cipher] [‑‑password‑id=password‑id] [‑‑password=file]

VBoxManage debugvm <uuid | vmname>dumpvmcore <‑‑filename=name>

VBoxManage debugvm <uuid | vmname>info <item> [args...]

VBoxManage debugvm <uuid | vmname>injectnmi

VBoxManage debugvm <uuid | vmname>log [‑‑release | ‑‑debug] [group‑settings...]

VBoxManage debugvm <uuid | vmname>logdest [‑‑release | ‑‑debug] [destinations...]

VBoxManage debugvm <uuid | vmname>logflags [‑‑release | ‑‑debug] [flags...]

VBoxManage debugvm <uuid | vmname>osdetect

VBoxManage debugvm <uuid | vmname>osinfo

VBoxManage debugvm <uuid | vmname>osdmesg [‑‑lines=lines]

VBoxManage debugvm <uuid | vmname>getregisters [‑‑cpu=id] [reg‑set.reg‑name...]

VBoxManage debugvm <uuid | vmname>setregisters [‑‑cpu=id] [reg‑set.reg‑name=value...]

VBoxManage debugvm <uuid | vmname>show [‑‑human‑readable | ‑‑sh‑export | ‑‑sh‑eval | ‑‑cmd‑set] [settings‑item...]

VBoxManage debugvm <uuid | vmname>stack [‑‑cpu=id]

VBoxManage debugvm <uuid | vmname>statistics [‑‑reset] [‑‑descriptions] [‑‑pattern=pattern]

VBoxManage debugvm <uuid | vmname>guestsample [‑‑filename=filename] [‑‑sample‑interval‑us=interval] [‑‑sample‑time‑us=time]

VBoxManage dhcpserver add <‑‑network=netname | ‑‑interface=ifname> <‑‑server‑ip=address> <‑‑netmask=mask> <‑‑lower‑ip=address> <‑‑upper‑ip=address> <‑‑enable | ‑‑disable> [[‑‑global] [‑‑set‑opt=dhcp‑opt‑no value...] [‑‑set‑opt‑hex=dhcp‑opt‑no hexstring...] [‑‑force‑opt=dhcp‑opt‑no...] [‑‑suppress‑opt=dhcp‑opt‑no...] [‑‑min‑lease‑time=seconds] [‑‑default‑lease‑time=seconds] [‑‑max‑lease‑time=seconds]...] [<‑‑group=name> [‑‑set‑opt=dhcp‑opt‑no value...] [‑‑set‑opt‑hex=dhcp‑opt‑no hexstring...] [‑‑force‑opt=dhcp‑opt‑no...] [‑‑suppress‑opt=dhcp‑opt‑no...] [‑‑incl‑mac=address...] [‑‑excl‑mac=address...] [‑‑incl‑mac‑wild=pattern...] [‑‑excl‑mac‑wild=pattern...] [‑‑incl‑vendor=string...] [‑‑excl‑vendor=string...] [‑‑incl‑vendor‑wild=pattern...] [‑‑excl‑vendor‑wild=pattern...] [‑‑incl‑user=string...] [‑‑excl‑user=string...] [‑‑incl‑user‑wild=pattern...] [‑‑excl‑user‑wild=pattern...] [‑‑min‑lease‑time=seconds] [‑‑default‑lease‑time=seconds] [‑‑max‑lease‑time=seconds]...] [<‑‑vm=name|uuid> [‑‑nic=1‑N] [‑‑set‑opt=dhcp‑opt‑no value...] [‑‑set‑opt‑hex=dhcp‑opt‑no hexstring...] [‑‑force‑opt=dhcp‑opt‑no...] [‑‑suppress‑opt=dhcp‑opt‑no...] [‑‑min‑lease‑time=seconds] [‑‑default‑lease‑time=seconds] [‑‑max‑lease‑time=seconds] [‑‑fixed‑address=address]...] [<‑‑mac‑address=address> [‑‑set‑opt=dhcp‑opt‑no value...] [‑‑set‑opt‑hex=dhcp‑opt‑no hexstring...] [‑‑force‑opt=dhcp‑opt‑no...] [‑‑suppress‑opt=dhcp‑opt‑no...] [‑‑min‑lease‑time=seconds] [‑‑default‑lease‑time=seconds] [‑‑max‑lease‑time=seconds] [‑‑fixed‑address=address]...]

VBoxManage dhcpserver modify <‑‑network=netname | ‑‑interface=ifname> [‑‑server‑ip=address] [‑‑lower‑ip=address] [‑‑upper‑ip=address] [‑‑netmask=mask] [‑‑enable | ‑‑disable] [[‑‑global] [‑‑del‑opt=dhcp‑opt‑no...] [‑‑set‑opt=dhcp‑opt‑no value...] [‑‑set‑opt‑hex=dhcp‑opt‑no hexstring...] [‑‑force‑opt=dhcp‑opt‑no...] [‑‑unforce‑opt=dhcp‑opt‑no...] [‑‑suppress‑opt=dhcp‑opt‑no...] [‑‑unsuppress‑opt=dhcp‑opt‑no...] [‑‑min‑lease‑time=seconds] [‑‑default‑lease‑time=seconds] [‑‑max‑lease‑time=seconds] [‑‑remove‑config]...] [<‑‑group=name> [‑‑set‑opt=dhcp‑opt‑no value...] [‑‑set‑opt‑hex=dhcp‑opt‑no hexstring...] [‑‑force‑opt=dhcp‑opt‑no...] [‑‑unforce‑opt=dhcp‑opt‑no...] [‑‑suppress‑opt=dhcp‑opt‑no...] [‑‑unsuppress‑opt=dhcp‑opt‑no...] [‑‑del‑mac=address...] [‑‑incl‑mac=address...] [‑‑excl‑mac=address...] [‑‑del‑mac‑wild=pattern...] [‑‑incl‑mac‑wild=pattern...] [‑‑excl‑mac‑wild=pattern...] [‑‑del‑vendor=string...] [‑‑incl‑vendor=string...] [‑‑excl‑vendor=string...] [‑‑del‑vendor‑wild=pattern...] [‑‑incl‑vendor‑wild=pattern...] [‑‑excl‑vendor‑wild=pattern...] [‑‑del‑user=string...] [‑‑incl‑user=string...] [‑‑excl‑user=string...] [‑‑del‑user‑wild=pattern...] [‑‑incl‑user‑wild=pattern...] [‑‑excl‑user‑wild=pattern...] [‑‑zap‑conditions] [‑‑min‑lease‑time=seconds] [‑‑default‑lease‑time=seconds] [‑‑max‑lease‑time=seconds] [‑‑remove‑config]...] [<‑‑vm=name|uuid> [‑‑nic=1‑N] [‑‑del‑opt=dhcp‑opt‑no...] [‑‑set‑opt=dhcp‑opt‑no value...] [‑‑set‑opt‑hex=dhcp‑opt‑no hexstring...] [‑‑force‑opt=dhcp‑opt‑no...] [‑‑unforce‑opt=dhcp‑opt‑no...] [‑‑suppress‑opt=dhcp‑opt‑no...] [‑‑unsuppress‑opt=dhcp‑opt‑no...] [‑‑min‑lease‑time=seconds] [‑‑default‑lease‑time=seconds] [‑‑max‑lease‑time=seconds] [‑‑fixed‑address=address] [‑‑remove‑config]...] [<‑‑mac‑address=address> [‑‑del‑opt=dhcp‑opt‑no...] [‑‑set‑opt=dhcp‑opt‑no value...] [‑‑set‑opt‑hex=dhcp‑opt‑no hexstring...] [‑‑force‑opt=dhcp‑opt‑no...] [‑‑unforce‑opt=dhcp‑opt‑no...] [‑‑suppress‑opt=dhcp‑opt‑no...] [‑‑unsuppress‑opt=dhcp‑opt‑no...] [‑‑min‑lease‑time=seconds] [‑‑default‑lease‑time=seconds] [‑‑max‑lease‑time=seconds] [‑‑fixed‑address=address] [‑‑remove‑config]...]

VBoxManage dhcpserver remove <‑‑network=netname | ‑‑interface=ifname>

VBoxManage dhcpserver start <‑‑network=netname | ‑‑interface=ifname>

VBoxManage dhcpserver restart <‑‑network=netname | ‑‑interface=ifname>

VBoxManage dhcpserver stop <‑‑network=netname | ‑‑interface=ifname>

VBoxManage dhcpserver findlease <‑‑network=netname | ‑‑interface=ifname> <‑‑mac‑address=mac>

VBoxManage discardstate <uuid | vmname>

VBoxManage encryptmedium <uuid | filename> [‑‑cipher=cipher‑ID] [‑‑newpassword=password] [‑‑newpasswordid=password‑ID] [‑‑oldpassword=password]

VBoxManage encryptvm <uuid | vmname>setencryption‑‑old‑passwordfile‑‑ciphercipher‑identifier‑‑new‑passwordfile‑‑new‑password‑idpassword‑identifier‑‑force

VBoxManage encryptvm <uuid | vmname>checkpassword <file>

VBoxManage encryptvm <uuid | vmname>addpassword‑‑passwordfile‑‑password‑idpassword‑identifier

VBoxManage encryptvm <uuid | vmname>removepassword <password‑identifier>

VBoxManage export <machines> <‑‑output=name> [‑‑legacy09 | ‑‑ovf09 | ‑‑ovf10 | ‑‑ovf20] [‑‑manifest] [‑‑options=manifest | iso | nomacs | nomacsbutnat...] [‑‑vsys=virtual‑system‑number] [‑‑description=description‑info] [‑‑eula=license‑text] [‑‑eulafile=filename] [‑‑product=product‑name] [‑‑producturl=product‑URL] [‑‑vendor=vendor‑name] [‑‑vendorurl=vendor‑URL] [‑‑version=version‑info] [‑‑vmname=vmname]

VBoxManage export <machine> <‑‑output=cloud‑service‑provider> [‑‑opc10] [‑‑vmname=vmname] [‑‑cloud=virtual‑system‑number] [‑‑cloudprofile=cloud‑profile‑name] [‑‑cloudshape=cloud‑shape‑name] [‑‑clouddomain=cloud‑domain] [‑‑clouddisksize=disk‑size‑in‑GB] [‑‑cloudbucket=bucket‑name] [‑‑cloudocivcn=OCI‑VCN‑ID] [‑‑cloudocisubnet=OCI‑subnet‑ID] [‑‑cloudkeepobject=true | false] [‑‑cloudlaunchinstance=true | false] [‑‑cloudlaunchmode=EMULATED | PARAVIRTUALIZED] [‑‑cloudpublicip=true | false]

VBoxManage extpack install [‑‑replace] [‑‑accept‑license=sha256] <tarball>

VBoxManage extpack uninstall [‑‑force] <name>

VBoxManage extpack cleanup

VBoxManage getextradata <global | uuid | vmname> <keyword | enumerate>

VBoxManage guestcontrol <uuid | vmname>run [‑‑arg0=argument 0] [‑‑domain=domainname] [‑‑dos2unix] [‑‑exe=filename] [‑‑ignore‑orphaned‑processes] [‑‑no‑wait‑stderr | ‑‑wait‑stderr] [‑‑no‑wait‑stdout | ‑‑wait‑stdout] [‑‑passwordfile=password‑file | ‑‑password=password] [‑‑profile] [‑‑putenv=var‑name=[value]] [‑‑quiet] [‑‑timeout=msec] [‑‑unix2dos] [‑‑unquoted‑args] [‑‑username=username] [‑‑cwd=directory] [‑‑verbose] <‑‑[argument...]>

VBoxManage guestcontrol <uuid | vmname>start [‑‑arg0=argument 0] [‑‑domain=domainname] [‑‑exe=filename] [‑‑ignore‑orphaned‑processes] [‑‑passwordfile=password‑file | ‑‑password=password] [‑‑profile] [‑‑putenv=var‑name=[value]] [‑‑quiet] [‑‑timeout=msec] [‑‑unquoted‑args] [‑‑username=username] [‑‑cwd=directory] [‑‑verbose] <‑‑[argument...]>

VBoxManage guestcontrol <uuid | vmname>copyfrom [‑‑dereference] [‑‑domain=domainname] [‑‑passwordfile=password‑file | ‑‑password=password] [‑‑quiet] [‑‑no‑replace] [‑‑recursive] [‑‑target‑directory=host‑destination‑dir] [‑‑update] [‑‑username=username] [‑‑verbose] <guest‑source0>guest‑source1[...] <host‑destination>

VBoxManage guestcontrol <uuid | vmname>copyto [‑‑dereference] [‑‑domain=domainname] [‑‑passwordfile=password‑file | ‑‑password=password] [‑‑quiet] [‑‑no‑replace] [‑‑recursive] [‑‑target‑directory=guest‑destination‑dir] [‑‑update] [‑‑username=username] [‑‑verbose] <host‑source0>host‑source1[...]

VBoxManage guestcontrol <uuid | vmname>mkdir [‑‑domain=domainname] [‑‑mode=mode] [‑‑parents] [‑‑passwordfile=password‑file | ‑‑password=password] [‑‑quiet] [‑‑username=username] [‑‑verbose] <guest‑directory...>

VBoxManage guestcontrol <uuid | vmname>rmdir [‑‑domain=domainname] [‑‑passwordfile=password‑file | ‑‑password=password] [‑‑quiet] [‑‑recursive] [‑‑username=username] [‑‑verbose] <guest‑directory...>

VBoxManage guestcontrol <uuid | vmname>rm [‑‑domain=domainname] [‑‑force] [‑‑passwordfile=password‑file | ‑‑password=password] [‑‑quiet] [‑‑username=username] [‑‑verbose] <guest‑directory...>

VBoxManage guestcontrol <uuid | vmname>mv [‑‑domain=domainname] [‑‑passwordfile=password‑file | ‑‑password=password] [‑‑quiet] [‑‑username=username] [‑‑verbose] <source...> <destination‑directory>

VBoxManage guestcontrol <uuid | vmname>mktemp [‑‑directory] [‑‑domain=domainname] [‑‑mode=mode] [‑‑passwordfile=password‑file | ‑‑password=password] [‑‑quiet] [‑‑secure] [‑‑tmpdir=directory‑name] [‑‑username=username] [‑‑verbose] <template‑name>

VBoxManage guestcontrol <uuid | vmname>mount [‑‑passwordfile=password‑file | ‑‑password=password] [‑‑username=username] [‑‑verbose]

VBoxManage guestcontrol <uuid | vmname>fsinfo [‑‑domain=domainname] [‑‑passwordfile=password‑file | ‑‑password=password] [‑‑human‑readable] [‑‑quiet] [‑‑total] [‑‑username=username] [‑‑verbose] <path>

VBoxManage guestcontrol <uuid | vmname>stat [‑‑domain=domainname] [‑‑passwordfile=password‑file | ‑‑password=password] [‑‑quiet] [‑‑username=username] [‑‑verbose] <filename>

VBoxManage guestcontrol <uuid | vmname>list <all | files | processes | sessions> [‑‑quiet] [‑‑verbose]

VBoxManage guestcontrol <uuid | vmname>closeprocess [‑‑session‑id=ID | ‑‑session‑name=name‑or‑pattern] [‑‑quiet] [‑‑verbose] <PID...>

VBoxManage guestcontrol <uuid | vmname>closesession [‑‑all | ‑‑session‑id=ID | ‑‑session‑name=name‑or‑pattern] [‑‑quiet] [‑‑verbose]

VBoxManage guestcontrol <uuid | vmname>updatega [‑‑quiet] [‑‑verbose] [‑‑source=guest‑additions.ISO] [‑‑wait‑start] [‑‑[argument...]]

VBoxManage guestcontrol <uuid | vmname>watch [‑‑quiet] [‑‑verbose]

VBoxManage guestproperty get <uuid | vmname> <property‑name> [‑‑verbose]

VBoxManage guestproperty enumerate <uuid | vmname> [‑‑no‑timestamp] [‑‑no‑flags] [‑‑relative] [‑‑old‑format] [patterns...]

VBoxManage guestproperty set <uuid | vmname> <property‑name> [property‑value [‑‑flags=flags]]

VBoxManage guestproperty unset <uuid | vmname> <property‑name>

VBoxManage guestproperty wait <uuid | vmname> <patterns> [‑‑timeout=msec] [‑‑fail‑on‑timeout]

VBoxManage hostonlyif ipconfig <ifname> [‑‑dhcp | ‑‑ip=IPv4‑address‑‑netmask=IPv4‑netmask | ‑‑ipv6=IPv6‑address‑‑netmasklengthv6=length]

VBoxManage hostonlyif create

VBoxManage hostonlyif remove <ifname>

VBoxManage hostonlynet add <‑‑name=netname> [‑‑id=netid] <‑‑netmask=mask> <‑‑lower‑ip=address> <‑‑upper‑ip=address> [‑‑enable | ‑‑disable]

VBoxManage hostonlynet modify <‑‑name=netname | ‑‑id=netid> [‑‑lower‑ip=address] [‑‑upper‑ip=address] [‑‑netmask=mask] [‑‑enable | ‑‑disable]

VBoxManage hostonlynet remove <‑‑name=netname | ‑‑id=netid>

VBoxManage import <ovfname | ovaname> [‑‑dry‑run] [‑‑options=keepallmacs | keepnatmacs | importtovdi] [‑‑vsys=n] [‑‑ostype=ostype] [‑‑vmname=name] [‑‑settingsfile=filename] [‑‑basefolder=folder] [‑‑group=group] [‑‑memory=MB] [‑‑cpus=n] [‑‑description=text] [‑‑eula=show | accept] [‑‑unit=n] [‑‑ignore] [‑‑scsitype=BusLogic | LsiLogic] [‑‑disk=path] [‑‑controller=index] [‑‑port=n]

VBoxManage import OCI://‑‑cloud [‑‑ostype=ostype] [‑‑vmname=name] [‑‑basefolder=folder] [‑‑memory=MB] [‑‑cpus=n] [‑‑description=text] <‑‑cloudprofile=profile> <‑‑cloudinstanceid=id> [‑‑cloudbucket=bucket]

VBoxManage list [‑‑long] [‑‑platform‑arch=x86 | arm] [‑‑sorted] [bridgedifs | cloudnets | cloudprofiles | cloudproviders | cpu‑profiles | dhcpservers | dvds | extpacks | floppies | groups | hddbackends | hdds | hostcpuids | hostdrives | hostdvds | hostfloppies | hostinfo | hostonlyifs | hostonlynets | intnets | natnets | ostypes | ossubtypes | runningvms | screenshotformats | systemproperties | usbfilters | usbhost | vms | webcams]

VBoxManage mediumio <‑‑disk=uuid|filename | ‑‑dvd=uuid|filename | ‑‑floppy=uuid|filename> [‑‑password‑file=‑|filename]formatfat [‑‑quick]

VBoxManage mediumio <‑‑disk=uuid|filename | ‑‑dvd=uuid|filename | ‑‑floppy=uuid|filename> [‑‑password‑file=‑|filename]cat [‑‑hex] [‑‑offset=byte‑offset] [‑‑size=bytes] [‑‑output=‑|filename]

VBoxManage mediumio <‑‑disk=uuid|filename | ‑‑dvd=uuid|filename | ‑‑floppy=uuid|filename> [‑‑password‑file=‑|filename]stream [‑‑format=image‑format] [‑‑variant=image‑variant] [‑‑output=‑|filename]

VBoxManage mediumproperty [disk | dvd | floppy]set <uuid | filename> <property‑name> <property‑value>

VBoxManage mediumproperty [disk | dvd | floppy]get <uuid | filename> <property‑name>

VBoxManage mediumproperty [disk | dvd | floppy]delete <uuid | filename> <property‑name>

VBoxManage metrics collect [‑‑detach] [‑‑list] [‑‑period=seconds] [‑‑samples=count] [* | host | vmnamemetric‑list]

VBoxManage metrics disable [‑‑list] [* | host | vmnamemetric‑list]

VBoxManage metrics enable [‑‑list] [* | host | vmnamemetric‑list]

VBoxManage metrics list [* | host | vmnamemetric‑list]

VBoxManage metrics query [* | host | vmnamemetric‑list]

VBoxManage metrics setup [‑‑list] [‑‑periodseconds] [‑‑samplescount] [* | host | vmnamemetric‑list]

VBoxManage modifymedium [disk | dvd | floppy] <uuid | filename> [‑‑autoreset=on | off] [‑‑compact] [‑‑description=description] [‑‑move=pathname] [‑‑property=name=[value]] [‑‑resize=megabytes | ‑‑resizebyte=bytes] [‑‑setlocation=pathname] [‑‑type=normal | writethrough | immutable | shareable | readonly | multiattach]

VBoxManage modifynvram <uuid | vmname>inituefivarstore

VBoxManage modifynvram <uuid | vmname>enrollmssignatures

VBoxManage modifynvram <uuid | vmname>enrollorclpk

VBoxManage modifynvram <uuid | vmname>enrollpk [‑‑platform‑key=filename] [‑‑owner‑uuid=uuid]

VBoxManage modifynvram <uuid | vmname>enrollmok [‑‑mok=filename] [‑‑owner‑uuid=uuid]

VBoxManage modifynvram <uuid | vmname>secureboot <‑‑enable | ‑‑disable>

VBoxManage modifynvram <uuid | vmname>listvars

VBoxManage modifynvram <uuid | vmname>queryvar [‑‑name=name] [‑‑filename=filename]

VBoxManage modifynvram <uuid | vmname>deletevar [‑‑name=name] [‑‑owner‑uuid=uuid]

VBoxManage modifynvram <uuid | vmname>changevar [‑‑name=name] [‑‑filename=filename]

VBoxManage modifyvm <uuid | vmname> [‑‑name=name] [‑‑groups=group [,group...]] [‑‑description=description] [‑‑os‑type=OS‑type] [‑‑icon‑file=filename] [‑‑memory=size‑in‑MB] [‑‑page‑fusion=on | off] [‑‑vram=size‑in‑MB] [‑‑acpi=on | off] [‑‑ioapic=on | off] [‑‑hardware‑uuid=UUID] [‑‑cpus=CPU‑count] [‑‑cpu‑hotplug=on | off] [‑‑plug‑cpu=CPU‑ID] [‑‑unplug‑cpu=CPU‑ID] [‑‑cpu‑execution‑cap=number] [‑‑x86‑pae=on | off] [‑‑x86‑long‑mode=on | off] [‑‑ibpb‑on‑vm‑exit=on | off] [‑‑ibpb‑on‑vm‑entry=on | off] [‑‑spec‑ctrl=on | off] [‑‑l1d‑flush‑on‑sched=on | off] [‑‑l1d‑flush‑on‑vm‑entry=on | off] [‑‑mds‑clear‑on‑sched=on | off] [‑‑mds‑clear‑on‑vm‑entry=on | off] [‑‑cpu‑profile=host | Intel 8086 | Intel 80286 | Intel 80386] [‑‑x86‑hpet=on | off] [‑‑hwvirtex=on | off] [‑‑triple‑fault‑reset=on | off] [‑‑apic=on | off] [‑‑x86‑x2apic=on | off] [‑‑paravirt‑provider=none | default | legacy | minimal | hyperv | kvm] [‑‑paravirt‑debug=key=value[,key=value...]] [‑‑nested‑paging=on | off] [‑‑large‑pages=on | off] [‑‑x86‑vtx‑vpid=on | off] [‑‑x86‑vtx‑ux=on | off] [‑‑nested‑hw‑virt=on | off] [‑‑virt‑vmsave‑vmload=on | off] [‑‑accelerate‑3d=on | off] [‑‑accelerate‑2d‑video=on | off] [‑‑chipset=ich9 | piix3 | armv8virtual] [‑‑iommu=none | automatic | amd | intel] [‑‑tpm‑type=none | 1.2 | 2.0 | host | swtpm] [‑‑tpm‑location=location] [‑‑firmware‑logo‑fade‑in=on | off] [‑‑firmware‑logo‑fade‑out=on | off] [‑‑firmware‑logo‑display‑time=msec] [‑‑firmware‑logo‑image‑path=pathname] [‑‑firmware‑boot‑menu=disabled | menuonly | messageandmenu] [‑‑firmware‑apic=disabled | apic | x2apic] [‑‑firmware‑system‑time‑offset=msec] [‑‑firmware‑pxe‑debug=on | off] [‑‑system‑uuid‑le=on | off] [‑‑bootX=none | floppy | dvd | disk | net] [‑‑rtc‑use‑utc=on | off] [‑‑graphicscontroller=none | vboxvga | vmsvga | vboxsvga | qemuramfb] [‑‑snapshot‑folder=default | pathname] [‑‑firmware=bios | efi | efi32 | efi64] [‑‑guest‑memory‑balloon=size‑in‑MB] [‑‑default‑frontend=default | name] [‑‑vm‑process‑priority=default | flat | low | normal | high] [‑‑vm‑execution‑engine=default | hm | hwvirt | nem | native‑api | interpreter | recompiler]

VBoxManage modifyvm <uuid | vmname> [‑‑nicN=none | null | nat | bridged | intnet | hostonly | hostonlynet | generic | natnetwork | cloud] [‑‑nic‑typeN=Am79C970A | Am79C973 | 82540EM | 82543GC | 82545EM | virtio] [‑‑cable‑connectedN=on | off] [‑‑nic‑traceN=on | off] [‑‑nic‑trace‑fileN=filename] [‑‑nic‑propertyN=name= [value]] [‑‑nic‑speedN=kbps] [‑‑nic‑boot‑prioN=priority] [‑‑nic‑promiscN=deny | allow‑vms | allow‑all] [‑‑nic‑bandwidth‑groupN=none | name] [‑‑bridge‑adapterN=none | device‑name] [‑‑cloud‑networkN=network‑name] [‑‑host‑only‑adapterN=none | device‑name] [‑‑host‑only‑netN=network‑name] [‑‑intnetN=network‑name] [‑‑nat‑networkN=network‑name] [‑‑nic‑generic‑drvN=driver‑name] [‑‑mac‑addressN=auto | MAC‑address]

VBoxManage modifyvm <uuid | vmname> [‑‑nat‑netN=network | default] [‑‑nat‑pfN=[rule‑name],tcp | udp,[host‑IP],hostport,[guest‑IP],guestport] [‑‑nat‑pfN=delete=rule‑name] [‑‑nat‑tftp‑prefixN=prefix] [‑‑nat‑tftp‑fileN=filename] [‑‑nat‑tftp‑serverN=IP‑address] [‑‑nat‑bind‑ipN=IP‑address] [‑‑nat‑dns‑pass‑domainN=on | off] [‑‑nat‑localhostreachableN=on | off] [‑‑nat‑settingsN=[mtu]] [‑‑nat‑forward‑broadcastN=on | off]

VBoxManage modifyvm <uuid | vmname> [‑‑mouse=ps2 | usb | usbtablet | usbmultitouch | usbmtscreenpluspad] [‑‑keyboard=ps2 | usb] [‑‑uartN=off | IO‑baseIRQ] [‑‑uart‑modeN=disconnected | serverpipe | clientpipe | tcpserverport | tcpclienthostname:port | filefilename | device‑name] [‑‑uart‑typeN=16450 | 16550A | 16750] [‑‑lpt‑modeN=device‑name] [‑‑lptN=off | IO‑baseIRQ] [‑‑audio‑controller=ac97 | hda | sb16] [‑‑audio‑codec=stac9700 | ad1980 | stac9221 | sb16] [‑‑audio‑driver=none | default | null | dsound | was | oss | alsa | pulse | coreaudio] [‑‑audio‑enabled=on | off] [‑‑audio‑in=on | off] [‑‑audio‑out=on | off] [‑‑clipboard‑mode=disabled | hosttoguest | guesttohost | bidirectional] [‑‑clipboard‑file‑transfers=enabled | disabled] [‑‑drag‑and‑drop=disabled | hosttoguest | guesttohost | bidirectional] [‑‑monitor‑count=number] [‑‑usb‑ehci=on | off] [‑‑usb‑ohci=on | off] [‑‑usb‑xhci=on | off] [‑‑usb‑rename=old‑namenew‑name]

VBoxManage modifyvm <uuid | vmname> [‑‑recording=on | off] [‑‑recording‑screens=all | none | screen‑ID[,screen‑ID...]] [‑‑recording‑file=filename] [‑‑recording‑max‑size=MB] [‑‑recording‑max‑time=seconds] [‑‑recording‑opts=key=value[,key=value...]] [‑‑recording‑video‑fps=fps] [‑‑recording‑video‑rate=rate] [‑‑recording‑video‑res=widthxheight]

VBoxManage modifyvm <uuid | vmname> [‑‑vrde=on | off] [‑‑vrde‑property=property‑name= [property‑value]] [‑‑vrde‑extpack=default | name] [‑‑vrde‑port=port] [‑‑vrde‑address=hostip] [‑‑vrde‑auth‑type=null | external | guest] [‑‑vrde‑auth‑library=default | name] [‑‑vrde‑multi‑con=on | off] [‑‑vrde‑reuse‑con=on | off] [‑‑vrde‑video‑channel=on | off] [‑‑vrde‑video‑channel‑quality=percent]

VBoxManage modifyvm <uuid | vmname> [‑‑teleporter=on | off] [‑‑teleporter‑port=port] [‑‑teleporter‑address=address | empty] [‑‑teleporter‑password=password] [‑‑teleporter‑password‑file=filename | stdin] [‑‑cpuid‑portability‑level=level] [‑‑cpuid‑set=leaf [:subleaf]eax ebx ecx edx] [‑‑cpuid‑remove=leaf [:subleaf]] [‑‑cpuid‑remove‑all]

VBoxManage modifyvm <uuid | vmname> [‑‑tracing‑enabled=on | off] [‑‑tracing‑config=string] [‑‑tracing‑allow‑vm‑access=on | off]

VBoxManage modifyvm <uuid | vmname> [‑‑usb‑card‑reader=on | off]

VBoxManage modifyvm <uuid | vmname> [‑‑autostart‑enabled=on | off] [‑‑autostart‑delay=seconds]

VBoxManage modifyvm <uuid | vmname> [‑‑guest‑debug‑provider=none | native | gdb | kd] [‑‑guest‑debug‑io‑provider=none | tcp | udp | ipc] [‑‑guest‑debug‑address=IP‑Address | path] [‑‑guest‑debug‑port=port]

VBoxManage modifyvm <uuid | vmname> [‑‑pci‑attach=host‑PCI‑address [@guest‑PCI‑bus‑address]] [‑‑pci‑detach=host‑PCI‑address]

VBoxManage modifyvm <uuid | vmname> [‑‑testing‑enabled=on | off] [‑‑testing‑mmio=on | off] [‑‑testing‑cfg‑dwordidx=value]

VBoxManage movevm <uuid | vmname> [‑‑type=basic] [‑‑folder=folder‑name]

VBoxManage natnetwork add [‑‑disable | ‑‑enable] <‑‑netname=name> <‑‑network=network> [‑‑dhcp=on|off] [‑‑ipv6=on|off] [‑‑loopback‑4=rule] [‑‑loopback‑6=rule] [‑‑port‑forward‑4=rule] [‑‑port‑forward‑6=rule]

VBoxManage natnetwork list [filter‑pattern]

VBoxManage natnetwork modify [‑‑dhcp=on|off] [‑‑disable | ‑‑enable] <‑‑netname=name> <‑‑network=network> [‑‑ipv6=on|off] [‑‑loopback‑4=rule] [‑‑loopback‑6=rule] [‑‑port‑forward‑4=rule] [‑‑port‑forward‑6=rule]

VBoxManage natnetwork remove <‑‑netname=name>

VBoxManage natnetwork start <‑‑netname=name>

VBoxManage natnetwork stop <‑‑netname=name>

VBoxManage registervm <filename>‑‑passwordfile

VBoxManage setextradata <global | uuid | vmname> <keyword> [value]

VBoxManage setproperty <property‑name> <property‑value>

VBoxManage sharedfolder add <uuid | vmname> <‑‑name=share‑name> <‑‑hostpath=hostpath> [‑‑readonly] [‑‑transient] [‑‑automount] [‑‑auto‑mount‑point=path]

VBoxManage sharedfolder remove <uuid | vmname> <‑‑name=share‑name> [‑‑transient]

VBoxManage sharedfolder modify <uuid | vmname> <‑‑name=share‑name> <‑‑readonly=true | false> <‑‑automount=true | false> <‑‑auto‑mount‑point=path> <‑‑symlink‑policy=forbidden | subtree | relative | any>

VBoxManage showmediuminfo [disk | dvd | floppy] <uuid | filename>

VBoxManage showvminfo <uuid | vmname> [‑‑details] [‑‑machinereadable] [‑‑password‑id] [‑‑password]

VBoxManage showvminfo <uuid | vmname> <‑‑log=index> [‑‑password‑idid] [‑‑passwordfile|‑]

VBoxManage signova <ova> <‑‑certificate=file> <‑‑private‑key=file> [‑‑private‑key‑password‑file=password‑file | ‑‑private‑key‑password=password] [‑‑digest‑type=type] [‑‑pkcs7 | ‑‑no‑pkcs7] [‑‑intermediate‑cert=file] [‑‑force] [‑‑verbose] [‑‑quiet] [‑‑dry‑run]

VBoxManage snapshot <uuid | vmname>

VBoxManage snapshot <uuid | vmname>take <snapshot‑name> [‑‑description=description] [‑‑live] [‑‑uniquename Number,Timestamp,Space,Force]

VBoxManage snapshot <uuid | vmname>delete <snapshot‑name>

VBoxManage snapshot <uuid | vmname>restore <snapshot‑name>

VBoxManage snapshot <uuid | vmname>restorecurrent

VBoxManage snapshot <uuid | vmname>edit <snapshot‑name | ‑‑current> [‑‑description=description] [‑‑name=new‑name]

VBoxManage snapshot <uuid | vmname>list [‑‑details | ‑‑machinereadable]

VBoxManage snapshot <uuid | vmname>showvminfo <snapshot‑name>

VBoxManage startvm [‑‑putenv=name[=value]] [‑‑type=<gui|headless|sdl|separate>] [‑‑password=file] [‑‑password‑id=password‑identifier] <uuid | vmname...>

VBoxManage storageattach <uuid | vmname> <‑‑storagectl=name> [‑‑bandwidthgroup=name | none] [‑‑comment=text] [‑‑device=number] [‑‑discard=on | off] [‑‑encodedlun=lun] [‑‑forceunmount] [‑‑hotpluggable=on | off] [‑‑initiator=initiator] [‑‑intnet] [‑‑lun=lun] [‑‑medium=none | emptydrive | additions | uuid | filename | host:drive | iscsi] [‑‑mtype=normal | writethrough | immutable | shareable | readonly | multiattach] [‑‑nonrotational=on | off] [‑‑passthrough=on | off] [‑‑passwordfile=file] [‑‑password=password] [‑‑port=number] [‑‑server=name | ip] [‑‑setparentuuid=uuid] [‑‑setuuid=uuid] [‑‑target=target] [‑‑tempeject=on | off] [‑‑tport=port] [‑‑type=dvddrive | fdd | hdd] [‑‑username=username]

VBoxManage storagectl <uuid | vmname> <‑‑name=controller‑name> [‑‑add=floppy | ide | pcie | sas | sata | scsi | usb] [‑‑controller=BusLogic | I82078 | ICH6 | IntelAhci | LSILogic | LSILogicSAS | NVMe | PIIX3 | PIIX4 | USB | VirtIO] [‑‑bootable=on | off] [‑‑hostiocache=on | off] [‑‑portcount=count] [‑‑remove] [‑‑rename=new‑controller‑name]

VBoxManage unattended detect <‑‑iso=install‑iso> [‑‑machine‑readable]

VBoxManage unattended install <uuid | vmname> <‑‑iso=install‑iso> [‑‑user=login] [‑‑user‑password=password] [‑‑user‑password‑file=file] [‑‑admin‑password=password] [‑‑admin‑password‑file=file] [‑‑full‑user‑name=name] [‑‑key=product‑key] [‑‑install‑additions] [‑‑no‑install‑additions] [‑‑additions‑iso=add‑iso] [‑‑install‑txs] [‑‑no‑install‑txs] [‑‑validation‑kit‑iso=testing‑iso] [‑‑locale=ll_CC] [‑‑country=CC] [‑‑time‑zone=tz] [‑‑proxy=url] [‑‑hostname=fqdn] [‑‑package‑selection‑adjustment=keyword] [‑‑dry‑run] [‑‑auxiliary‑base‑path=path] [‑‑image‑index=number] [‑‑script‑template=file] [‑‑post‑install‑template=file] [‑‑post‑install‑command=command] [‑‑extra‑install‑kernel‑parameters=params] [‑‑language=lang] [‑‑start‑vm=session‑type]

VBoxManage unregistervm <uuid | vmname> [‑‑delete] [‑‑delete‑all]

VBoxManage updatecheck perform [‑‑machine‑readable]

VBoxManage updatecheck list [‑‑machine‑readable]

VBoxManage updatecheck modify [‑‑disable | ‑‑enable] [‑‑channel=stable | withbetas | all] [‑‑frequency=days]

VBoxManage usbdevsource add <source‑name> <‑‑backend=backend> <‑‑address=address>

VBoxManage usbdevsource remove <source‑name>

VBoxManage usbfilter add <index,0‑N> <‑‑target=<uuid | vmname | global>> <‑‑name=string> <‑‑action=ignore | hold> [‑‑active=yes | no] [‑‑vendorid=XXXX] [‑‑productid=XXXX] [‑‑revision=IIFF] [‑‑manufacturer=string] [‑‑product=string] [‑‑port=hex] [‑‑remote=yes | no] [‑‑serialnumber=string] [‑‑maskedinterfaces=XXXXXXXX]

VBoxManage usbfilter modify <index,0‑N> <‑‑target=<uuid | vmname | global>> [‑‑name=string] [‑‑action=ignore | hold] [‑‑active=yes | no] [‑‑vendorid=XXXX| ""] [‑‑productid=XXXX| ""] [‑‑revision=IIFF| ""] [‑‑manufacturer=string| ""] [‑‑product=string| ""] [‑‑port=hex] [‑‑remote=yes | no] [‑‑serialnumber=string| ""] [‑‑maskedinterfaces=XXXXXXXX]

VBoxManage usbfilter remove <index,0‑N> <‑‑target=<uuid | vmname | global>>

每次调用 VBoxManage 时,只能执行一个命令。但是,一个命令可能支持多个子命令,这些子命令可以在一次调用中执行。以下各节提供了有关不同命令的详细参考信息。

VBoxManage

Oracle VirtualBox 命令行界面

概要

VBoxManage [‑q | ‑‑nologo] [‑‑settingspw=password] [‑‑settingspwfile=pw-file] [@response-file] [subcommand]

VBoxManage help [subcommand]

VBoxManage命令

VBoxManage [‑V | ‑‑version]

VBoxManage [‑‑dump-build-type]

描述

命令 VBoxManage 是 Oracle VirtualBox 软件的命令行界面 (CLI)。CLI 支持 Oracle VirtualBox 图形用户界面 (GUI) 可用的所有功能。此外,您还可以使用 VBoxManage 命令来管理 GUI 无法管理的虚拟化引擎的功能。

每次调用 VBoxManage 命令时,都只会执行一个命令。请注意,某些 VBoxManage 子命令会调用多个子命令。

从主机操作系统 (OS) 的命令行运行 VBoxManage 命令来控制 Oracle VirtualBox 软件。

命令 VBoxManage 存储在主机系统上的以下位置:

  • Linux: /usr/bin/VBoxManage

  • Mac OS X: /Applications/VirtualBox.app/Contents/MacOS/VBoxManage

  • Oracle Solaris: /opt/VirtualBox/bin/VBoxManage

  • Windows: C:\Program Files\Oracle\VirtualBox\VBoxManage.exe

命令 VBoxManage 通过使用子命令(如 listcreatevmstartvm)来执行特定任务。请参阅每个 VBoxManage 子命令的相关信息。

如果需要,可以通过虚拟机的名称或其通用唯一标识符 (UUID) 指定虚拟机。

使用命令 VBoxManage list vms 可获取有关所有已注册 VM 的信息,包括 VM 名称和相关的 UUID。

请注意,包含空格或特殊字符的 VM 名称必须用引号括起来。

通用选项

--nologo

抑制徽标信息输出,这对于脚本很有用。

此选项的简短版本是 -q

--settingspw=[password]

指定设置密码。您可以选择将密码作为此选项的参数。如果您未以这种方式指定密码,VBoxManage 命令将提示您输入密码。

设置密码是一种安全功能,用于加密存储的设置,这些设置默认以纯文本形式存储。

已加密的设置使用单向加密算法进行加密,因此无法解密。因此,如果设置已加密,则每次使用 VBoxManage 时都必须包含 --settingspw--settingspwfile 选项。

目前只有 iSCSI 密钥被加密。

--settingspwfile=pw-filename

指定包含设置密码的文件。

--version

显示有关 VBoxManage 命令的版本信息。

此选项的简短版本是 -V

@response-file

从指定的 Bourne shell 响应文件加载参数。

子命令

指定 VBoxManage 的子命令之一,例如 controlvmcreatevmlistmodifyvmshowvminfostartvmstorageattachstoragectl

每个子命令都在其自己的命令主题中描述,其中一些显示在“另请参阅”部分中。

示例

以下命令使用 --register 选项创建一个名为 Win8 的虚拟机,并将其注册到 Oracle VirtualBox。

$ VBoxManage createvm --name "Win8" --register
Virtual machine 'Win8' is created.
UUID: UUID-string
Settings file: '/home/username/VirtualBox VMs/Win8/Win8.vbox'

命令输出显示 Win8 VM 已分配 UUID 和 XML 计算机设置文件。

您可以使用命令 VBoxManage showvminfo 查看 VM 的配置信息。

以下示例使用命令 VBoxManage modifyvmWindows XP VM 的内存量更改为 1024 MB。

$ VBoxManage modifyvm "Windows XP" --memory 1024

请注意,您只能对已关机的 VM 使用命令 VBoxManage modifyvm

您可以使用命令 VBoxManage storagectlVBoxManage storageattach 来修改 VM 的存储配置。例如,创建名为 sata01 的 SATA 存储控制器并将其添加到 ol7 VM。

$ VBoxManage storagectl ol7 --name "sata01" --add sata

使用命令 VBoxManage startvm 启动已关机的 VM。例如,启动 win7 VM。

$ VBoxManage startvm win7

使用命令 VBoxManage controlvm 来暂停或保存正在运行的 VM。您还可以使用此命令修改 VM 的设置。例如,为 ol6u9 VM 启用音频输入。

$ VBoxManage controlvm ol6u9 audioin on

VBoxManage adoptstate

根据保存的状态文件更改虚拟机的状态

概要

VBoxManage adoptstate <uuid | vmname> <state-filename>

描述

命令 VBoxManage adoptstate 使您能够将虚拟机 (VM) 的状态更改为已保存状态文件 (.sav) 中描述的状态。此操作称为 VM 采用已保存状态文件。已保存状态文件必须与 VM 配置分开。

采用保存状态后启动虚拟机时,虚拟机将从保存的状态文件中恢复其状态。

仅将此命令用于自定义部署。

uuid | vmname

指定虚拟机的通用唯一标识符 (UUID) 或名称。

state-filename

指定保存的状态文件的名称。

示例

以下命令通过名为 vm2 的 VM 采用名为 mystate.sav 的已保存状态文件。随后启动名为 vm2 的 VM 将从已保存状态文件 mystate.sav 恢复状态。

$ VBoxManage adoptstate vm2 /home/user/mystate.sav

VBoxManage bandwidthctl

管理带宽组

概要

VBoxManage bandwidthctl <uuid | vmname>add <bandwidth-group-name> <‑‑limit=bandwidth-limit[k|m|g|K|M|G]> <‑‑type=disk | network>

VBoxManage bandwidthctl <uuid | vmname>list [‑‑machinereadable]

VBoxManage bandwidthctl <uuid | vmname>remove <bandwidth-group-name>

VBoxManage bandwidthctl <uuid | vmname>set <bandwidth-group-name> <‑‑limit=bandwidth-limit[k|m|g|K|M|G]>

描述

命令 VBoxManage bandwidthctl 使您能够管理虚拟机的 (VM) 带宽组。带宽组指定 VM 磁盘或网络适配器的带宽限制。

请注意,网络带宽限制仅适用于虚拟机的出站流量。入站流量不受限制。

创建带宽组

VBoxManage bandwidthctl <uuid | vmname>add <bandwidth-group-name> <‑‑limit=bandwidth-limit[k|m|g|K|M|G]> <‑‑type=disk | network>

命令 VBoxManage bandwidthctl add 为指定的 VM 创建带宽组。您必须指定带宽组是用于磁盘还是网络,并指定带宽限制。

uuid | vmname

指定虚拟机的通用唯一标识符 (UUID) 或名称。

bandwidth-group-name

指定带宽组的名称。

--type=disk|network

指定带宽组的类型:disknetwork。有关更多信息,请参阅 限制磁盘映像的带宽限制网络输入/输出的带宽

--limit=bandwidth-limit[k|m|g|K|M|G]

指定带宽组的带宽限制。默认单位是兆字节每秒。您可以在虚拟机运行时修改此值。

您可以通过在带宽限制后附加以下单位说明符之一来更改单位

  • k – 千比特每秒

  • m – 兆比特每秒

  • g – 吉比特每秒

  • K – 千字节每秒

  • M – 兆字节每秒

  • G – 吉字节每秒

列出带宽组

VBoxManage bandwidthctl <uuid | vmname>list [‑‑machinereadable]

命令 VBoxManage bandwidthctl list 列出为指定 VM 定义的所有带宽组。使用 --machinereadable 选项以机器可读的格式生成输出,该格式使用名称-值对。

uuid | vmname

指定虚拟机的 UUID 或名称。

--machinereadable

以名称-值对的形式输出有关带宽组的信息。

移除带宽组

VBoxManage bandwidthctl <uuid | vmname>remove <bandwidth-group-name>

命令 VBoxManage bandwidthctl remove 移除带宽组。

注意

要成功移除带宽组,请确保运行中的虚拟机中没有任何磁盘或适配器引用它。

uuid | vmname

指定虚拟机的 UUID 或名称。

bandwidth-group-name

指定带宽组的名称。

修改带宽组的带宽限制

VBoxManage bandwidthctl <uuid | vmname>set <bandwidth-group-name> <‑‑limit=bandwidth-limit[k|m|g|K|M|G]>

命令 VBoxManage bandwidthctl set 修改带宽组的带宽限制。

uuid | vmname

指定虚拟机的 UUID 或名称。

bandwidth-group-name

指定带宽组的名称。

--limit=bandwidth-limit[k|m|g|K|M|G]

指定带宽组的带宽限制。默认单位是兆字节每秒。您可以在虚拟机运行时修改此值。

您可以通过在带宽限制后附加以下单位说明符之一来更改单位

  • k – 千比特每秒

  • m – 兆比特每秒

  • g – 吉比特每秒

  • K – 千字节每秒

  • M – 兆字节每秒

  • G – 吉字节每秒

示例

以下示例展示了如何使用命令 VBoxManage bandwidthctl 创建 Limit 带宽组并将限制设置为 20 Mbps。然后使用命令 VBoxManage modifyvm 将此带宽组分配给 vm1 VM 的第一个和第二个适配器。

$ VBoxManage bandwidthctl "vm1" add Limit --type network --limit 20m
$ VBoxManage modifyvm "vm1" --nicbandwidthgroup1 Limit
$ VBoxManage modifyvm "vm1" --nicbandwidthgroup2 Limit

您可以在 VM 运行时动态修改带宽组的限制。以下示例展示了如何将 Limit 带宽组的限制从 20 Mbps 修改为 100 kbps。

$ VBoxManage bandwidthctl "vm1" set Limit --limit 100k

以下命令通过指定零 (0) 的限制来禁用 Limit 带宽组中所有适配器的整形。

$ VBoxManage bandwidthctl "vm1" set Limit --limit 0

VBoxManage checkmediumpwd

检查 DEK 加密介质或磁盘映像上的加密密码

概要

VBoxManage checkmediumpwd <uuid | filename> <password-file>

描述

命令 VBoxManage checkmediumpwd 检查 DEK 加密介质或磁盘映像上的当前加密密码。请参阅 加密磁盘映像

命令响应指示指定的密码是否正确。

uuid | filename

指定介质或镜像的通用唯一标识符 (UUID) 或绝对路径名。

password-file

指定要检查的密码。密码可以是主机 OS 上的密码文件的绝对路径名,也可以是连字符 (-),表示在命令行提示您输入密码。

示例

以下示例检查 ol7u4-1.vdi 磁盘映像的加密密码。密码包含在名为 pwfile 的文件中。

命令返回一条消息,指示指定的密码正确。

$ VBoxManage checkmediumpwd "$HOME/VirtualBox VMs/ol7u4/ol7u4-1.vdi" /home/user/pwfile
  The given password is correct

VBoxManage clonemedium

创建介质的克隆

概要

VBoxManage clonemedium <uuid | source-medium> <uuid | target-medium> [disk | dvd | floppy] [‑‑existing] [‑‑format=VDI | VMDK | VHD | RAW | other] [‑‑variant=Standard|Fixed|Split2G|Stream|ESX...]

描述

命令 VBoxManage clonemedium 使您能够克隆现有介质(虚拟磁盘、DVD 或软盘),而这些介质通常是映像文件。只有通用唯一标识符 (UUID) 在原始映像和克隆映像之间有所不同。

您可以使用虚拟介质管理器将克隆的映像传输到另一台主机系统或将其重新导入到 Oracle VirtualBox 中。请参阅 虚拟介质管理器克隆磁盘映像

uuid | source-medium

指定要克隆的源介质的 UUID 或绝对或相对路径名。仅当介质已注册时,才能指定介质的 UUID。使用命令 VBoxManage list hdds 列出已注册的映像。

uuid | target-medium

指定目标(克隆)介质的 UUID 或绝对或相对路径名。仅当目标介质已注册时,才能指定目标介质的 UUID。使用命令 VBoxManage list hdds 列出已注册的映像。

disk | dvd | floppy

指定要克隆的介质类型。有效值为 diskdvdfloppy。默认值为 disk

--existing

通过覆盖现有目标介质来执行克隆操作。结果是只复制源介质中适合现有目标介质的部分。

如果目标介质小于源介质,则仅复制源介质中与目标介质大小相同的部分。

如果目标介质大于源介质,则目标介质的其余部分保持不变。

--format

指定目标介质的文件格式(如果它与源介质的格式不同)。有效值为 VDIVMDKVHDRAWother

--variant=Standard | Fixed | Split2G | Stream | ESX [,...]

指定目标介质的文件格式变体,这是一个逗号分隔的变体列表。以下是有效值

  • Standard 是默认磁盘映像类型,具有动态分配的文件大小。

  • Fixed 使用具有固定文件大小的磁盘映像。

  • Split2G 表示磁盘映像已拆分为 2GB 的段。此值仅适用于 VMDK。

  • Stream 优化磁盘映像以供下载。此值仅适用于 VMDK。

  • ESX 用于某些 VMWare 产品。此值仅适用于 VMDK。

请注意,并非所有变体组合都有效。在列表中指定不兼容的变体值将产生错误消息。

注意

为了与早期版本的 Oracle VirtualBox 兼容,您可以使用命令 clonevdiclonehd 替代命令 clonemedium

示例

以下命令创建 disk01.vdi 磁盘映像文件的克隆。克隆文件名为 disk02.vdi

$ VBoxManage clonemedium disk01.vdi disk02.vdi

以下命令创建 disk01.vdi 磁盘映像文件的克隆。克隆文件为 VMDK 格式,名为 disk02.vmdk

$ VBoxManage clonemedium disk01.vdi disk02.vmdk --format VMDK

另请参阅

VBoxManage clonevm

创建现有虚拟机的克隆

概要

VBoxManage clonevm <vmname|uuid> [‑‑basefolder=basefolder] [‑‑groups=group,...] [‑‑mode=machine | ‑‑mode=machinechildren | ‑‑mode=all] [‑‑name=name] [‑‑options=option,...] [‑‑register] [‑‑snapshot=snapshot-name] [‑‑uuid=uuid]

描述

命令 VBoxManage clonevm 创建现有虚拟机 (VM) 的克隆。克隆可以是 VM 的完整副本,也可以是 VM 的链接副本。

您必须指定要克隆的虚拟机的名称或通用唯一标识符 (UUID)。

命令操作数和选项

以下列表描述了可与命令 VBoxManage clonevm 一起使用的操作数和选项。

vmname|uuid

指定要克隆的虚拟机的名称或 UUID。

--basefolder=basefolder

指定用于保存新虚拟机配置的文件夹名称。

--groups=group,...

将克隆分配给指定的一个或多个组。如果您指定多个组,请用逗号分隔每个组名。

请注意,每个组都由一个以斜杠字符 (/) 开头的组 ID 来标识,以便嵌套组。默认情况下,克隆始终被分配到 / 组。

--mode=machine|machineandchildren|all

指定要使用的以下克隆模式之一

  • machine 模式克隆现有 VM 的当前状态,不包含任何快照。这是默认模式。

  • machineandchildren 模式克隆由 --snapshot 选项指定的快照以及所有子快照。

  • all 模式克隆所有快照以及现有 VM 的当前状态。

--name=name

为新 VM 指定新名称。默认值为 original-name Clone,其中 original-name 是 VM 的原始名称。

--options=option,...

指定如何创建新克隆。

参数 --options 可以多次使用以启用多个选项,也可以将选项作为逗号分隔的列表给出。选项不区分大小写。

识别以下选项(不区分大小写)

Link

仅从快照创建链接克隆。

KeepAllMACs

指定新克隆重用现有虚拟机中每个虚拟网卡的 MAC 地址。

如果您未指定此选项或 --options=keepnatmacs 选项,则默认行为是重新初始化每个虚拟网卡的 MAC 地址。

KeepNATMACs

指定当网络类型为 NAT 时,新克隆重用现有虚拟机中每个虚拟网卡的 MAC 地址。

如果您未指定此选项或 KeepAllMACs 选项,则默认行为是重新初始化每个虚拟网卡的 MAC 地址。

KeepDiskNames

指定新克隆重用现有虚拟机中的磁盘镜像名称。默认情况下,磁盘镜像会被重命名。

KeepHwUUIDs

指定新克隆重用现有虚拟机中的硬件 ID。默认情况下,使用新的 UUID。

--register

自动在此 Oracle VirtualBox 安装中注册新克隆。您可以在之后使用命令 VBoxManage registervm 手动注册新 VM。请参阅 VBoxManage registervm

--snapshot=snapshot-name

指定新虚拟机所基于的快照。默认情况下,克隆是从指定虚拟机的当前状态创建的。

--uuid=uuid

指定新 VM 的 UUID。如果您决定注册此新 VM,请确保此 ID 在 Oracle VirtualBox 实例中是唯一的。默认情况下,Oracle VirtualBox 会提供新的 UUID。

示例

以下命令创建并注册了 ol7 VM 的精确克隆。克隆名为 ol7-dev-001

新克隆包含源虚拟机的所有快照。新虚拟机还重用源虚拟机的所有网络接口 MAC 地址、磁盘名称和 UUID。

$ VBoxManage clonevm ol7 --name="ol7-dev-001" --register --mode=all \
    --options=keepallmacs --options=keepdisknames --options=keephwuuids

以下命令创建并注册了 ol7 VM 的 Snapshot 1 快照的克隆。克隆名为 ol7-dev-002

$ VBoxManage clonevm ol7 --name="ol7-dev-002" --register --snapshot="Snapshot 1"

另请参阅

VBoxManage closemedium

从介质注册表中移除硬盘驱动器、DVD 或软盘映像

概要

VBoxManage closemedium [disk | dvd | floppy] <uuid | filename> [‑‑delete]

描述

命令 VBoxManage closemedium 从 Oracle VirtualBox 使用的已知介质列表中移除硬盘驱动器、DVD 或软盘映像。然后,该映像在虚拟介质管理器中将不可用。

要使用此命令,镜像不得附加到任何虚拟机。

(可选)您可以请求删除镜像。

disk|dvd|floppy

指定介质类型。有效值为 disk(硬盘驱动器)、dvdfloppy

uuid|filename

指定介质或镜像的通用唯一标识符 (UUID) 或绝对路径名。

--delete

删除镜像文件。

示例

以下命令从注册表中移除名为 disk01.vdi 的磁盘映像文件。

$ VBoxManage closemedium disk01.vdi

以下命令从注册表中移除名为 disk01.vdi 的磁盘映像文件,并删除该映像文件。

$ VBoxManage closemedium disk01.vdi --delete

VBoxManage cloud

管理云实体

概要

VBoxManage cloud <‑‑provider=name> <‑‑profile=name> list instances [‑‑state=string] [‑‑compartment-id=string]

VBoxManage cloud <‑‑provider=name> <‑‑profile=name> list images <‑‑compartment-id=string> [‑‑state=string]

VBoxManage cloud <‑‑provider=name> <‑‑profile=name> list vnicattachments <‑‑compartment-id=string> [‑‑filter=instanceId | vnicId | availabilityDomain=value...]

VBoxManage cloud <‑‑provider=name> <‑‑profile=name> instance create <‑‑domain-name=name> <‑‑image-id=id | ‑‑boot-volume-id=id> <‑‑display-name=name> <‑‑shape=type> <‑‑subnet=id> [‑‑boot-disk-size=size in GB] [‑‑publicip=true | false] [‑‑privateip=IP address] [‑‑public-ssh-key=key string...] [‑‑launch-mode=NATIVE | EMULATED | PARAVIRTUALIZED] [‑‑cloud-init-script-path=path to a script]

VBoxManage cloud <‑‑provider=name> <‑‑profile=name> instance info <‑‑id=unique id>

VBoxManage cloud <‑‑provider=name> <‑‑profile=name> instance terminate <‑‑id=unique id>

VBoxManage cloud <‑‑provider=name> <‑‑profile=name> instance start <‑‑id=unique id>

VBoxManage cloud <‑‑provider=name> <‑‑profile=name> instance pause <‑‑id=unique id>

VBoxManage cloud <‑‑provider=name> <‑‑profile=name> instance reset <‑‑id=unique id>

VBoxManage cloud <‑‑provider=name> <‑‑profile=name> instance clone <‑‑id=unique id> [‑‑clone-name=name for a clone instance]

VBoxManage cloud <‑‑provider=name> <‑‑profile=name> instance metriclist <‑‑id=unique id>

VBoxManage cloud <‑‑provider=name> <‑‑profile=name> instance metricdata <‑‑id=unique id> <‑‑metric-name=metric name> <‑‑metric-points=number of history metric points>

VBoxManage cloud <‑‑provider=name> <‑‑profile=name> image create <‑‑display-name=name> [‑‑bucket-name=name] [‑‑object-name=name] [‑‑instance-id=unique id]

VBoxManage cloud <‑‑provider=name> <‑‑profile=name> image info <‑‑id=unique id>

VBoxManage cloud <‑‑provider=name> <‑‑profile=name> image delete <‑‑id=unique id>

VBoxManage cloud <‑‑provider=name> <‑‑profile=name> image import <‑‑id=unique id> [‑‑bucket‑name=name] [‑‑object‑name=name]

VBoxManage cloud <‑‑provider=name> <‑‑profile=name> image export <‑‑id=unique id> <‑‑display‑name=name> [‑‑bucket‑name=name] [‑‑object‑name=name]

VBoxManage cloud <‑‑provider=name> <‑‑profile=name> network setup [‑‑gateway‑os‑name=string] [‑‑gateway‑os‑version=string] [‑‑gateway‑shape=string] [‑‑tunnel‑network‑name=string] [‑‑tunnel‑network‑range=string] [‑‑proxy=string] [‑‑compartment‑id=string]

VBoxManage cloud <‑‑provider=name> <‑‑profile=name> network create <‑‑name=string> <‑‑network‑id=string> [‑‑enable | ‑‑disable]

VBoxManage cloud network update <‑‑name=string> [‑‑network‑id=string] [‑‑enable | ‑‑disable]

VBoxManage cloud network delete <‑‑name=string>

VBoxManage cloud network info <‑‑name=string>

描述

通用选项

单词 cloud 是与云进行互操作的所有命令的总称。以下通用选项必须放在 cloud 参数之后,并在后续子命令之前。

--provider=name

云提供商简称。

--profile=name

云配置文件名称。

cloud list instances

VBoxManage cloud <‑‑provider=name> <‑‑profile=name> list instances [‑‑state=string] [‑‑compartment-id=string]

显示指定隔间的云实例列表。

--state=running|paused|terminated

云实例的状态。可能的状态为 running(运行中)、paused(暂停)和 terminated(终止)。如果未提供状态,将返回所有可能状态的实例列表。

--compartment-id

隔间是用于组织和隔离云资源的逻辑容器。不同的云提供商可能对该实体使用不同的名称。

cloud list images

VBoxManage cloud <‑‑provider=name> <‑‑profile=name> list images <‑‑compartment-id=string> [‑‑state=string]

显示指定隔间(compartment)的镜像列表。

--state=available|disabled|deleted

云映像的状态。可能的状态为 available(可用)、disabled(禁用)和 deleted(已删除)。如果未提供状态,将返回所有可能状态的映像列表。

--compartment-id

隔间是用于组织和隔离云资源的逻辑容器。不同的云提供商可能对该实体使用不同的名称。

cloud list vnic attachments

VBoxManage cloud <‑‑provider=name> <‑‑profile=name> list vnicattachments <‑‑compartment-id=string> [‑‑filter=instanceId | vnicId | availabilityDomain=value...]

显示指定隔间(compartment)的 vnic 附件列表。

--filter={instanceId|vnicId|domainName}=string

过滤器用于缩小感兴趣的 Vnic 附件的范围。此参数可以指定多次。可能的过滤器类型为 instanceIdvnicIdavailabilityDomain

过滤器的语法为 type=[value],如下例所示:

  • instanceId=ocid1.instance.oc1.iad.anuwcl...js6

  • vnicId=ocid1.vnic.oc1.iad.abuwcl...jsm

  • domainName=ergw:US-ASHBURN-AD-2

如果未提供过滤器,则将返回指定隔间的所有 vnic 附件列表。

--compartment-id

隔间是用于组织和隔离云资源的逻辑容器。不同的云提供商可能对该实体使用不同的名称。

cloud instance create

VBoxManage cloud <‑‑provider=name> <‑‑profile=name> instance create <‑‑domain-name=name> <‑‑image-id=id | ‑‑boot-volume-id=id> <‑‑display-name=name> <‑‑shape=type> <‑‑subnet=id> [‑‑boot-disk-size=size in GB] [‑‑publicip=true | false] [‑‑privateip=IP address] [‑‑public-ssh-key=key string...] [‑‑launch-mode=NATIVE | EMULATED | PARAVIRTUALIZED] [‑‑cloud-init-script-path=path to a script]

在云中创建新实例。有两种标准方式可在云中创建实例:

  1. 从现有自定义映像创建实例。

  2. 从现有的可启动卷创建实例。此可启动卷不应附加到任何实例。

第一种方法需要以下两个选项:image-idboot-disk-size。第二种方法需要以下选项:boot-volume-id

以下选项适用于这两种情况:display-namelaunch-modesubnet-idpublicIPprivateIPshapedomain

--domain-name

要在其中创建新实例的云域。

--image-id

在云中完全标识自定义镜像的唯一标识符。

--boot-volume-id

在云中完全标识启动卷的唯一标识符。

--display-name

云中新实例的名称。

--shape

实例的形状,它定义了 CPU 和内存 (RAM) 的数量。

--subnet

在云中完全标识将被实例使用的现有子网的唯一标识符。

--boot-disk-size

可启动映像的大小(以 GB 为单位)。默认为 50GB。

--publicip

已创建实例的公共 IP 地址。

--privateip

为创建的实例分配的私有 IP 地址。

--public-ssh-key

用于通过 SSH 连接到实例的公共 SSH 密钥。如果使用多个密钥,可以重复此参数:--public-ssh-key=firstSSHKey --public-ssh-key=secondSSHKey

--launch-mode

支持的值为 EMULATED、NATIVE 和 PARAVIRTUALIZED。

--cloud-init-script-path

cloud-init 脚本的绝对路径。

cloud instance info

显示具有指定 ID 的云实例的信息。

--id

在云中完全标识实例的唯一标识符。

cloud instance termination

删除具有指定 ID 的云实例。

--id

在云中完全标识实例的唯一标识符。

cloud instance start

启动具有指定 ID 的云实例。

--id

在云中完全标识实例的唯一标识符。

cloud instance pause

暂停具有指定 ID 的云实例。

--id

在云中完全标识实例的唯一标识符。

cloud instance reset

强制重置具有指定 ID 的云实例。

--id

在云中完全标识实例的唯一标识符。

cloud instance clone

克隆具有指定 ID 的云实例。仅适用于可以通过 Oracle VirtualBox 访问的实例,即并非云中的所有实例都可以克隆。

--id

在云中完全标识实例的唯一标识符。

--clone-name

克隆实例的名称

可用于云实例的可用指标列表

VBoxManage cloud <‑‑provider=name> <‑‑profile=name> instance metriclist <‑‑id=unique id>

显示实例可用的指标列表。返回的名称必须与命令 VBoxManage cloud instance metricdata 一起使用。

--id

在云中完全标识实例的唯一标识符。

显示云实例指标数据

VBoxManage cloud <‑‑provider=name> <‑‑profile=name> instance metricdata <‑‑id=unique id> <‑‑metric-name=metric name> <‑‑metric-points=number of history metric points>

显示请求的云实例的 1 分钟分辨率的指标数据。时间戳以 RFC2822 中描述的格式返回。

--id

在云中完全标识实例的唯一标识符。

--metric-name

指标名称

--metric-points

指标点从当前时间(值为 1)开始,并向过去延伸,值逐渐增加。如果只需要最近一个指标点,请提供值 1。如果需要最近一个值和前一个值,请提供值 2

cloud image create

VBoxManage cloud <‑‑provider=name> <‑‑profile=name> image create <‑‑display-name=name> [‑‑bucket-name=name] [‑‑object-name=name] [‑‑instance-id=unique id]

在云中创建新映像。有两种标准方式可在云中创建映像:

  1. 从云存储中的对象创建映像。

  2. 从现有云实例创建映像。

对于第一种方法,需要以下三个选项:bucket-nameobject-namedisplay-name

对于第二种方法,需要以下两个选项:instance-iddisplay-name

--display-name

云中新镜像的名称。

--bucket-name

映像(对象)所在的云存储桶的名称。

--object-name

存储桶中对象的名称。

--instance-id

在云中完全标识实例的唯一标识符。

cloud image info

VBoxManage cloud <‑‑provider=name> <‑‑profile=name> image info <‑‑id=unique id>

显示具有指定 ID 的云映像的信息。

--id

在云中完全标识镜像的唯一标识符。

cloud image delete

VBoxManage cloud <‑‑provider=name> <‑‑profile=name> image delete <‑‑id=unique id>

从云中删除具有指定 ID 的映像。

--id

在云中完全标识镜像的唯一标识符。

cloud image import

VBoxManage cloud <‑‑provider=name> <‑‑profile=name> image import <‑‑id=unique id> [‑‑bucket‑name=name] [‑‑object‑name=name]

将具有指定 ID 的映像从云导入到本地主机。结果是本地主机上的“temp”文件夹中的一个对象。从云导入时有两种可能的方法:

  1. 从 Cloud Storage 中的映像创建对象。

  2. 将对象下载到本地主机。

--id

在云中完全标识镜像的唯一标识符。

--bucket-name

将在其中创建对象的 Cloud Bucket 的名称。

--object-name

在 Bucket 中创建的对象名称或下载的对象名称。如果未提供 --object-name 选项,则使用默认映像名称。

cloud image export

VBoxManage cloud <‑‑provider=name> <‑‑profile=name> image export <‑‑id=unique id> <‑‑display‑name=name> [‑‑bucket‑name=name] [‑‑object‑name=name]

将本地主机上具有指定 UUID 的现有 VBox 映像导出到 Cloud。结果是在 Cloud 中创建一个新映像。导出到 Cloud 时有两种可能的方法:

  1. 将 VBox 映像上传到 Cloud Storage。

  2. 从上传的对象创建映像。

--id

Oracle VirtualBox 中映像的唯一标识符。

--display-name

Cloud 中新映像的名称。

--bucket-name

将要上传映像(对象)的 Cloud Bucket 的名称。

--object-name

Bucket 中对象的名称。

cloud network setup

VBoxManage cloud <‑‑provider=name> <‑‑profile=name> network setup [‑‑gateway‑os‑name=string] [‑‑gateway‑os‑version=string] [‑‑gateway‑shape=string] [‑‑tunnel‑network‑name=string] [‑‑tunnel‑network‑range=string] [‑‑proxy=string] [‑‑compartment‑id=string]

为指定的云配置文件设置云网络环境。

--gateway-os-name

用于 Cloud Gateway 的操作系统名称。

--gateway-os-version

用于 Cloud Gateway 的操作系统版本。

--gateway-shape

用于 Cloud Gateway 的实例形状。

--tunnel-network-name

用于隧道的 VCN/子网名称。

--tunnel-network-range

用于隧道连接的 IP 地址范围。

--proxy

将在本地网关安装中使用的代理 URL。

--compartment-id

用于创建隧道网络的区间。

cloud network create

VBoxManage cloud <‑‑provider=name> <‑‑profile=name> network create <‑‑name=string> <‑‑network‑id=string> [‑‑enable | ‑‑disable]

创建与现有云子网关联的新云网络描述符。

--name

要分配给云网络描述符的名称。

--network-id

云中现有子网的唯一标识符。

--enable, --disable

是否启用或禁用网络描述符。如果未指定,网络将启用。

cloud network update

VBoxManage cloud network update <‑‑name=string> [‑‑network‑id=string] [‑‑enable | ‑‑disable]

修改现有云网络描述符。

--name

现有云网络描述符的名称。

--network-id

Cloud 中现有子网的唯一标识符。

--enable, --disable

是否启用或禁用网络描述符。

cloud network delete

VBoxManage cloud network delete <‑‑name=string>

删除现有云网络描述符。

--name

现有云网络描述符的名称。

cloud network info

VBoxManage cloud network info <‑‑name=string>

显示云网络描述符的信息。

--name

现有云网络描述符的名称。

VBoxManage cloudprofile

管理 Cloud 配置文件

概要

VBoxManage cloudprofile <‑‑provider=name> <‑‑profile=name>add [‑‑clouduser=unique id] [‑‑fingerprint=MD5 string] [‑‑keyfile=path] [‑‑passphrase=string] [‑‑tenancy=unique id] [‑‑compartment=unique id] [‑‑region=string]

VBoxManage cloudprofile <‑‑provider=name> <‑‑profile=name>update [‑‑clouduser=unique id] [‑‑fingerprint=MD5 string] [‑‑keyfile=path] [‑‑passphrase=string] [‑‑tenancy=unique id] [‑‑compartment=unique id] [‑‑region=string]

VBoxManage cloudprofile <‑‑provider=name> <‑‑profile=name>delete

VBoxManage cloudprofile <‑‑provider=name> <‑‑profile=name>show

描述

通用选项

cloudprofile 的子命令为 Cloud 配置文件实现标准的创建、读取、更新和删除 (CRUD) 操作。以下常用选项必须放在 cloudprofile 参数之后,并在以下子命令之前。

--provider=name

云提供商简称。

--profile=name

云配置文件名称。

cloudprofile add

VBoxManage cloudprofile <‑‑provider=name> <‑‑profile=name>add [‑‑clouduser=unique id] [‑‑fingerprint=MD5 string] [‑‑keyfile=path] [‑‑passphrase=string] [‑‑tenancy=unique id] [‑‑compartment=unique id] [‑‑region=string]

为指定的 Cloud 提供商添加新的 Cloud 配置文件。

--clouduser=unique id

在指定云提供商中完全标识用户的名称。

--fingerprint=MD5 string

正在使用的密钥对的指纹。

--keyfile=path

私钥的完整路径和文件名。

--passphrase=string

如果密钥已加密,则用于密钥的密码。

--tenancy=unique id

您的租户 ID。

--compartment=unique id

您的区间 ID。

--region=string

区域名称。区域是您计划部署应用程序的地方。

cloudprofile show

VBoxManage cloudprofile <‑‑provider=name> <‑‑profile=name>show

显示关于指定 Cloud 提供商的 Cloud 配置文件的信息。

cloudprofile update

VBoxManage cloudprofile <‑‑provider=name> <‑‑profile=name>update [‑‑clouduser=unique id] [‑‑fingerprint=MD5 string] [‑‑keyfile=path] [‑‑passphrase=string] [‑‑tenancy=unique id] [‑‑compartment=unique id] [‑‑region=string]

修改指定云提供商的云配置文件。

--clouduser=unique id

在指定云提供商中完全标识用户的名称。

--fingerprint=MD5 string

正在使用的密钥对的指纹。

--keyfile=path

私钥的完整路径和文件名。

--passphrase=string

如果密钥已加密,则用于密钥的密码。

--tenancy=unique id

租户 ID。

--compartment=unique id

隔间 ID。

--region=string

区域名称。区域是您计划部署应用程序的地方。

cloudprofile delete

VBoxManage cloudprofile <‑‑provider=name> <‑‑profile=name>delete

删除指定云提供商的云配置文件。

VBoxManage controlvm

更改正在运行的虚拟机(VM)的状态和设置。

概要

VBoxManage controlvm <uuid | vmname>pause

VBoxManage controlvm <uuid | vmname>resume

VBoxManage controlvm <uuid | vmname>reset

VBoxManage controlvm <uuid | vmname>poweroff

VBoxManage controlvm <uuid | vmname>savestate

VBoxManage controlvm <uuid | vmname>acpipowerbutton

VBoxManage controlvm <uuid | vmname>acpisleepbutton

VBoxManage controlvm <uuid | vmname>reboot

VBoxManage controlvm <uuid | vmname>shutdown [‑‑force]

VBoxManage controlvm <uuid | vmname>keyboardputscancode <hex> [hex...]

VBoxManage controlvm <uuid | vmname>keyboardputstring <string> [string...]

VBoxManage controlvm <uuid | vmname>keyboardputfile <filename>

VBoxManage controlvm <uuid | vmname>setlinkstateN <on | off>

VBoxManage controlvm <uuid | vmname>nicN <null | nat | bridged | intnet | hostonly | generic | natnetwork> [device‑name]

VBoxManage controlvm <uuid | vmname>nictraceN <on | off>

VBoxManage controlvm <uuid | vmname>nictracefileN <filename>

VBoxManage controlvm <uuid | vmname>nicpropertyN <prop‑name=prop‑value>

VBoxManage controlvm <uuid | vmname>nicpromiscN <deny | allow‑vms | allow‑all>

VBoxManage controlvm <uuid | vmname>natpfN <[rulename],<tcp|udp>,[host‑IP],hostport,[guest‑IP],guestport>

VBoxManage controlvm <uuid | vmname>natpfNdelete <rulename>

VBoxManage controlvm <uuid | vmname>guestmemoryballoon <balloon‑size>

VBoxManage controlvm <uuid | vmname>usbattach <uuid | address> [‑‑capturefile=filename]

VBoxManage controlvm <uuid | vmname>usbdetach <uuid | address>

VBoxManage controlvm <uuid | vmname>audioin <on | off>

VBoxManage controlvm <uuid | vmname>audioout <on | off>

VBoxManage controlvm <uuid | vmname>clipboard mode <disabled | hosttoguest | guesttohost | bidirectional>

VBoxManage controlvm <uuid | vmname>clipboard filetransfers <on | off>

VBoxManage controlvm <uuid | vmname>draganddrop <disabled | hosttoguest | guesttohost | bidirectional>

VBoxManage controlvm <uuid | vmname>vrde <on | off>

VBoxManage controlvm <uuid | vmname>vrdeport <port>

VBoxManage controlvm <uuid | vmname>vrdeproperty <prop‑name=prop‑value>

VBoxManage controlvm <uuid | vmname>vrdevideochannelquality <percentage>

VBoxManage controlvm <uuid | vmname>setvideomodehint <xres> <yres> <bpp> [display [<yes | no> [x‑originy‑origin]]]

VBoxManage controlvm <uuid | vmname>setscreenlayout <display> <on | primaryx‑originy‑originx‑resolutiony‑resolutionbpp | off>

VBoxManage controlvm <uuid | vmname>screenshotpng <filename> [display]

VBoxManage controlvm <uuid | vmname>recording <on | off> VBoxManage controlvm <uuid | vmname>recording start [‑‑wait] VBoxManage controlvm <uuid | vmname>recording stop VBoxManage controlvm <uuid | vmname>recording attach VBoxManage controlvm <uuid | vmname>recording screens <all | none | screen‑ID,screen‑ID...> VBoxManage controlvm <uuid | vmname>recording filename <filename> VBoxManage controlvm <uuid | vmname>recording videores <<width>x <height>> VBoxManage controlvm <uuid | vmname>recording videorate <rate> VBoxManage controlvm <uuid | vmname>recording videofps <fps> VBoxManage controlvm <uuid | vmname>recording maxtime <sec> VBoxManage controlvm <uuid | vmname>recording maxfilesize <MB> VBoxManage controlvm <uuid | vmname>recording opts <key= [value]>

VBoxManage controlvm <uuid | vmname>setcredentials <username>‑‑passwordfile=<filename | password> <domain‑name>‑‑allowlocallogon=<yes | no>

VBoxManage controlvm <uuid | vmname>teleport <‑‑host=host‑name> <‑‑port=port‑name> [‑‑maxdowntime=msec] [‑‑passwordfile=filename | ‑‑password=password]

VBoxManage controlvm <uuid | vmname>plugcpu <ID>

VBoxManage controlvm <uuid | vmname>unplugcpu <ID>

VBoxManage controlvm <uuid | vmname>cpuexecutioncap <num>

VBoxManage controlvm <uuid | vmname>vm‑process‑priority <default | flat | low | normal | high>

VBoxManage controlvm <uuid | vmname>webcam attach [pathname [settings]]

VBoxManage controlvm <uuid | vmname>webcam detach [pathname]

VBoxManage controlvm <uuid | vmname>webcam list

VBoxManage controlvm <uuid | vmname>addencpassword <ID> <password‑file | > [‑‑removeonsuspend=yes | no]

VBoxManage controlvm <uuid | vmname>removeencpassword <ID>

VBoxManage controlvm <uuid | vmname>removeallencpasswords

VBoxManage controlvm <uuid | vmname>changeuartmodeNdisconnected | serverpipe‑name | clientpipe‑name | tcpserverport | tcpclienthostname:port | filefilename | device‑name

VBoxManage controlvm <uuid | vmname>autostart‑enabledNon | off

VBoxManage controlvm <uuid | vmname>autostart‑delay <seconds>

描述

VBoxManage controlvm 命令允许您更改正在运行的虚拟机 (VM) 的状态。以下各节描述了您可以使用的一些子命令:

暂停虚拟机

VBoxManage controlvm <uuid | vmname>pause

VBoxManage controlvm vmname pause 命令会暂时停止 VM 的执行。暂停时,VM 的状态不会永久更改。

VM 窗口将显示为灰色,并且窗口标题栏将指示 VM 当前处于“暂停”状态。此操作等同于在 GUI 的“Machine”菜单中选择“Pause”。

恢复已暂停的虚拟机

VBoxManage controlvm <uuid | vmname>resume

VBoxManage controlvm vmname resume 命令会重新启动已暂停 VM 的执行。此操作等同于在 GUI 的“Machine”菜单中选择“Resume”。

重置虚拟机

VBoxManage controlvm <uuid | vmname>reset

VBoxManage controlvm vmname reset 命令对 VM 执行冷重置。此命令对 VM 的作用与按下物理计算机上的 Reset 按钮相同。

冷启动会立即重启并重新引导客户机操作系统 (OS)。在重置之前不会保存 VM 的状态,因此可能会丢失数据。此操作等同于在 GUI 的“Machine”菜单中选择“Reset”。

关闭虚拟机电源

VBoxManage controlvm <uuid | vmname>poweroff

VBoxManage controlvm vmname poweroff 命令会关闭 VM 的电源。此命令对 VM 的作用与拔掉物理计算机的电源线相同。

在关机前不会保存 VM 的状态,因此可能会丢失数据。此操作等同于在 GUI 的“Machine”菜单中选择“Close”或单击 VM 窗口的“Close”按钮,然后选择“Power Off the Machine”。

poweroff 子命令将 VM 置于“已断电”状态,您可以从此状态使用 VBoxManage startvm 重新启动 VM。

保存虚拟机状态

VBoxManage controlvm <uuid | vmname>savestate

VBoxManage controlvm vmname savestate 命令将 VM 的当前状态保存到磁盘,然后停止 VM。

此操作等同于在 GUI 的“Machine”菜单中选择“Close”或单击 VM 窗口的“Close”按钮,然后选择“Save the Machine State”。

savestate 子命令将 VM 置于“已保存”状态,您可以从此状态使用 VBoxManage startvm 重新启动 VM。VM 将从保存时的确切点恢复。

向虚拟机发送 APCI 关机信号

VBoxManage controlvm <uuid | vmname>acpipowerbutton

VBoxManage controlvm vmname acpipowerbutton 命令向 VM 发送 ACPI 关机信号。此命令对 VM 的作用与按下物理计算机上的电源按钮相同。

只要虚拟机运行的客户操作系统提供适当配置的 ACPI 支持,此命令就会触发虚拟机内部的操作系统关机。

向虚拟机发送 APCI 睡眠信号

VBoxManage controlvm <uuid | vmname>acpisleepbutton

VBoxManage controlvm vmname acpisleepbutton 命令向 VM 发送 ACPI 睡眠信号。

只要虚拟机运行的客户操作系统提供适当配置的 ACPI 支持,此命令就会触发虚拟机内部的睡眠机制。

重启客户机操作系统

VBoxManage controlvm <uuid | vmname>reboot

VBoxManage controlvm vmname reboot 命令会请求客户机操作系统自行重启。

此命令要求在 VM 中安装 Oracle VirtualBox 增强功能。

关闭客户机操作系统

VBoxManage controlvm <uuid | vmname>shutdown [‑‑force]

VBoxManage controlvm vmname shutdown 命令会请求客户机操作系统停止 + 关闭,并可选择强制关闭。

此命令要求在 VM 中安装 Oracle VirtualBox 增强功能。

将键盘扫描码发送到虚拟机

VBoxManage controlvm <uuid | vmname>keyboardputscancode <hex> [hex...]

VBoxManage controlvm vmname keyboardputscancode 命令将键盘扫描码命令发送到 VM。

有关键盘扫描码的信息,请参阅 http://www.win.tue.nl/~aeb/linux/kbd/scancodes-1.html

将键盘字符串发送到虚拟机

VBoxManage controlvm <uuid | vmname>keyboardputstring <string> [string...]

VBoxManage controlvm vmname keyboardputstring 命令将键盘字符串发送到 VM。

将文件发送到虚拟机

VBoxManage controlvm <uuid | vmname>keyboardputfile <filename>

VBoxManage controlvm vmname keyboardputfile 命令将文件发送到 VM。

设置虚拟机与主机系统的网络连接状态

VBoxManage controlvm <uuid | vmname>setlinkstateN <on | off>

VBoxManage controlvm vmname setlinkstateN 命令允许您连接或断开网络接口实例(N)与网络电缆的连接。有效值为 onoff。默认值为 on

设置虚拟机使用的网络类型

VBoxManage controlvm <uuid | vmname>nicN <null | nat | bridged | intnet | hostonly | generic | natnetwork> [device‑name]

VBoxManage controlvm vmname nicN 命令指定 VM 的指定虚拟网卡上使用的网络类型。N 的编号从 1 开始。

网络模式的介绍中有对以下有效网络类型的描述:Introduction to Networking Modes

  • null 表示 VM 未连接到主机系统。

  • nat 表示 VM 使用网络地址转换 (NAT)。

  • bridged 表示 VM 使用桥接网络。

  • intnet 表示 VM 使用内部网络与其他 VM 进行通信。

  • hostonly 表示 VM 使用主机独占网络。

  • natnetwork 表示 VM 使用 NAT 网络。

  • generic 表示 VM 可以访问较少使用的子模式。

跟踪虚拟机的网络流量

VBoxManage controlvm <uuid | vmname>nictraceN <on | off>

VBoxManage controlvm vmname nictraceN 命令允许您跟踪指定虚拟网卡(N)上的网络流量。N 的编号从 1 开始。有效值为 onoff。默认值为 off

如果您未为跟踪文件配置文件名,则会使用默认文件名,将其放置在 VM 子目录中。

为虚拟机指定网络流量跟踪日志文件

VBoxManage controlvm <uuid | vmname>nictracefileN <filename>

VBoxManage controlvm vmname nictracefileN 命令允许您指定指定虚拟网卡(N)的网络流量跟踪日志文件的名称。N 的编号从 1 开始。

指定虚拟机使用的混杂模式

VBoxManage controlvm <uuid | vmname>nicpromiscN <deny | allow‑vms | allow‑all>

VBoxManage controlvm vmname nicpromiscN 命令允许您指定如何处理桥接网络的混杂模式。默认值 deny 会隐藏任何非为此 VM 设计的流量。allow-vms 值会隐藏 VM 的所有主机流量,但允许 VM 查看与其他 VM 之间的流量。allow-all 值会完全删除此限制。

为虚拟机指定网络后端属性值

VBoxManage controlvm <uuid | vmname>nicpropertyN <prop‑name=prop‑value>

VBoxManage controlvm vmname nicpropertyN prop-name=prop-value 命令与 nicgenericdrv 结合使用,允许您将属性值传递给较少使用的网络后端。

这些属性是后端引擎特定的,在 UDP Tunnel 和 Virtual Distributed Ethernet (VDE) 后端驱动程序之间有所不同。请参阅 UDP Tunnel Networking

为虚拟机指定 NAT 端口转发规则

VBoxManage controlvm <uuid | vmname>natpfN <[rulename],<tcp|udp>,[host‑IP],hostport,[guest‑IP],guestport>

VBoxManage controlvm vmname natpfN 命令指定 NAT 端口转发规则。请参阅 Configuring Port Forwarding with NAT

为虚拟机删除 NAT 端口转发规则

VBoxManage controlvm <uuid | vmname>natpfNdelete <rulename>

VBoxManage controlvm vmname natpfN delete 命令删除指定的 NAT 端口转发规则。请参阅 Configuring Port Forwarding with NAT

更改虚拟机客户机内存气球的大小

VBoxManage controlvm <uuid | vmname>guestmemoryballoon <balloon‑size>

VBoxManage controlvm vmname guestmemoryballoon 命令更改客户机内存气球的大小。客户机内存气球是指 Oracle VirtualBox 增强功能从客户机操作系统分配并返回给 hypervisor 以供其他 VM 重用的内存。指定的值以兆字节为单位。请参阅 Memory Ballooning

使主机系统 USB 设备对虚拟机可见

VBoxManage controlvm <uuid | vmname>usbattach <uuid | address> [‑‑capturefile=filename]

VBoxManage controlvm vmname usbattach 命令动态地将主机 USB 设备附加到 VM,使其可见。您无需创建过滤器。

通过通用唯一标识符 (UUID) 或在主机系统上的地址来指定 USB 设备。使用 VBoxManage list usbhost 命令获取有关主机系统上 USB 设备的信息。

使用 --capturefile 选项指定用于写入日志数据的文件的绝对路径。

使主机系统 USB 设备对虚拟机不可见

VBoxManage controlvm <uuid | vmname>usbdetach <uuid | address>

VBoxManage controlvm vmname usbdetach 命令动态地将主机 USB 设备从 VM 分离,使其不可见。您无需创建过滤器。

通过 UUID 或在主机系统上的地址来指定 USB 设备。使用 VBoxManage list usbhost 命令获取有关主机系统上 USB 设备的信息。

启用或禁用从主机系统捕获音频

VBoxManage controlvm <uuid | vmname>audioin <on | off>

VBoxManage controlvm vmname audioin 命令指定是否启用或禁用从主机系统捕获音频。有效值为 on(启用音频捕获)和 off(禁用音频捕获)。默认值为 off

启用或禁用虚拟机播放音频

VBoxManage controlvm <uuid | vmname>audioout <on | off>

VBoxManage controlvm vmname audioout 命令指定是否启用或禁用从客户机 VM 播放音频。有效值为 on(启用音频播放)和 off(禁用音频播放)。默认值为 off

指定如何共享主机操作系统或客户机操作系统的剪贴板

VBoxManage controlvm <uuid | vmname>clipboard mode <disabled | hosttoguest | guesttohost | bidirectional>

VBoxManage controlvm vmname clipboard mode 命令指定如何将客户机操作系统或主机操作系统的剪贴板与主机系统或 VM 共享。有效值为 disabledhosttoguestguesttohostbidirectional。默认值为 disabled。请参阅 General Settings

此功能要求在 VM 中安装 Oracle VirtualBox 增强功能。

指定是否可以通过剪贴板传输文件

VBoxManage controlvm <uuid | vmname>clipboard filetransfers <on | off>

VBoxManage controlvm vmname clipboard filetransfers 命令指定是否可以根据为 clipboard mode 配置的方向,通过剪贴板在主机和 VM 之间传输文件。有效值为 offon。默认值为 off

此功能要求在 VM 中安装 Oracle VirtualBox 增强功能。

设置主机系统与虚拟机之间的拖放模式

VBoxManage controlvm <uuid | vmname>draganddrop <disabled | hosttoguest | guesttohost | bidirectional>

VBoxManage controlvm vmname draganddrop 命令指定在主机系统和 VM 之间使用的当前拖放模式。有效值为 disabledhosttoguestguesttohostbidirectional。默认值为 disabled。请参阅 Drag and Drop

此功能要求在 VM 中安装 Oracle VirtualBox 增强功能。

启用或禁用 VRDE 服务器

VBoxManage controlvm <uuid | vmname>vrde <on | off>

VBoxManage controlvm vmname vrde 命令启用或禁用 VirtualBox Remote Desktop Extension (VRDE) 服务器(如果已安装)。有效值为 onoff。默认值为 off

指定 VRDE 服务器端口

VBoxManage controlvm <uuid | vmname>vrdeport <port>

VBoxManage controlvm vmname vrdeport 命令指定 VRDE 服务器可以绑定的端口或端口范围。默认值为 default0,表示使用标准 RDP 端口 3389

另请参阅 Remote Machine Settings--vrde-port 选项的说明。

指定 VRDE 服务器端口号和 IP 地址

VBoxManage controlvm <uuid | vmname>vrdeproperty <prop‑name=prop‑value>

VBoxManage controlvm vmname vrdeproperty 命令指定 VRDE 服务器可以绑定的 VM 上的端口号和 IP 地址。

  • TCP/Ports 指定 VRDE 服务器可以绑定的端口或端口范围。默认值为 default0,即标准 RDP 端口 3389

    另请参阅 Remote Machine Settings--vrde-port 选项的说明。

  • TCP/Address 指定 VRDE 服务器绑定的主机网络接口的 IP 地址。指定后,服务器仅接受到指定主机网络接口的连接。

    另请参阅 Remote Machine Settings--vrde-address 选项的说明。

  • VideoChannel/Enabled 指定是否启用 VirtualBox Remote Desktop Protocol (VRDP) 视频通道。有效值为 1(启用视频通道)和 0(禁用视频通道)。默认值为 0。请参阅 VRDP Video Redirection

  • VideoChannel/Quality 指定 VRDE 服务器视频通道上的 JPEG 压缩级别。有效值为 10% 到 100%(含)。值越低表示质量越低但压缩率越高。默认值为 100。请参阅 VRDP Video Redirection

  • VideoChannel/DownscaleProtection 指定是否启用视频通道缩小保护功能。指定 1 以启用该功能。此功能默认禁用。

    启用时,如果视频大小等于阴影缓冲区大小,则视频将以全屏模式显示。如果视频大小介于全屏模式和缩小阈值之间,则不会显示视频,因为它可能是不可读的应用程序窗口。禁用时,缩小保护功能将始终尝试显示视频。

  • Client/DisableDisplay 指定是否禁用 VRDE 服务器显示功能。有效值为 1(禁用该功能)和空字符串("",启用该功能)。默认值为空字符串。请参阅 VRDP Customization

  • Client/DisableInput 指定是否禁用 VRDE 服务器输入功能。有效值为 1(禁用该功能)和空字符串("",启用该功能)。默认值为 1。请参阅 VRDP Customization

  • Client/DisableAudio 指定是否禁用 VRDE 服务器音频功能。有效值为 1(禁用该功能)和空字符串("",启用该功能)。默认值为 1。请参阅 VRDP Customization

  • Client/DisableUSB 指定是否禁用 VRDE 服务器 USB 功能。有效值为 1(禁用该功能)和空字符串("",启用该功能)。默认值为 1。请参阅 VRDP Customization

  • Client/DisableClipboard 指定是否禁用 VRDE 剪贴板功能。有效值为 1(禁用该功能)和空字符串("",启用该功能)。要重新启用该功能,请使用 Client/DisableClipboard=。默认值为 1。请参阅 VRDP Customization

  • Client/DisableUpstreamAudio 指定是否禁用 VRDE 上游音频功能。有效值为 1(禁用该功能)和空字符串("",启用该功能)。要重新启用该功能,请使用 Client/DisableUpstreamAudio=。默认值为 1。请参阅 VRDP Customization

  • Client/DisableRDPDR 指定是否禁用 VRDE 服务器上的 RDP 设备重定向(智能卡)功能。有效值为 1(禁用该功能)和空字符串("",启用该功能)。默认值为 1。请参阅 VRDP Customization

  • H3DRedirect/Enabled 指定是否启用 VRDE 服务器 3D 重定向功能。有效值为 1(启用该功能)和空字符串("",禁用该功能)。请参阅 VRDP Customization

  • Security/Method 指定用于连接的安全方法。请参阅 RDP Encryption

    • Negotiate 同时接受增强(TLS)和标准 RDP 安全连接。安全方法与客户端协商。这是默认值。

    • RDP 仅接受标准 RDP 安全连接。

    • TLS 仅接受增强 RDP 安全连接。客户端必须支持 TLS。

  • Security/ServerCertificate 指定用于连接的服务器证书的绝对路径。请参阅 RDP Encryption

  • Security/ServerPrivateKey 指定服务器私钥的绝对路径。请参阅 RDP Encryption

  • Security/CACertificate 指定 CA 自签名证书的绝对路径。请参阅 RDP Encryption

  • Audio/RateCorrectionMode 指定使用的速率校正模式。

    • VRDP_AUDIO_MODE_VOID 表示未指定模式。使用此值可取消设置任何已设置的音频模式。

    • VRDP_AUDIO_MODE_RC 指定使用速率校正模式。

    • VRDP_AUDIO_MODE_LPF 指定使用低通滤波器模式。

    • VRDP_AUDIO_MODE_CS 指定使用客户端同步模式以防止客户端队列下溢或溢出。

  • Audio/LogPath 指定音频日志文件的绝对路径。

指定 VRDP 视频重定向的图像质量

VBoxManage controlvm <uuid | vmname>vrdevideochannelquality <percentage>

VBoxManage controlvm vmname vrdevideochannelquality 命令设置视频重定向的图像质量,以 JPEG 压缩级别值表示。有效值为 10% 到 100%(含)。值越低表示质量越低但压缩率越高。请参阅 VRDP Video Redirection

指定客户机 VM 的视频模式

VBoxManage controlvm <uuid | vmname>setvideomodehint <xres> <yres> <bpp> [display [<yes | no> [x‑originy‑origin]]]

VBoxManage controlvm vmname setvideomodehint 命令指定客户机 VM 使用的视频模式。您必须安装 Oracle VirtualBox 增强功能。请注意,此功能并非适用于所有客户机系统。

指定客户机 VM 上显示器的屏幕布局

VBoxManage controlvm <uuid | vmname>setscreenlayout <display> <on | primaryx‑originy‑originx‑resolutiony‑resolutionbpp | off>

VBoxManage controlvm vmname setscreenlayout 命令可用于配置多屏幕显示。指定的客户机 VM 屏幕可以启用或禁用,或者可以配置自定义屏幕布局。

截取虚拟机显示器的屏幕截图

VBoxManage controlvm <uuid | vmname>screenshotpng <filename> [display]

VBoxManage controlvm vmname screenshotpng 命令会截取客户机显示器的屏幕截图,并将其另存为指定文件中的 PNG 格式。

  • filename 指定要创建的 PNG 文件的名称。

  • display 指定屏幕截图的显示器编号。对于单显示器客户机显示,此值为 0

虚拟机回话录制

VBoxManage controlvm <uuid | vmname>recording <on | off> VBoxManage controlvm <uuid | vmname>recording start [‑‑wait] VBoxManage controlvm <uuid | vmname>recording stop VBoxManage controlvm <uuid | vmname>recording attach VBoxManage controlvm <uuid | vmname>recording screens <all | none | screen‑ID,screen‑ID...> VBoxManage controlvm <uuid | vmname>recording filename <filename> VBoxManage controlvm <uuid | vmname>recording videores <<width>x <height>> VBoxManage controlvm <uuid | vmname>recording videorate <rate> VBoxManage controlvm <uuid | vmname>recording videofps <fps> VBoxManage controlvm <uuid | vmname>recording maxtime <sec> VBoxManage controlvm <uuid | vmname>recording maxfilesize <MB> VBoxManage controlvm <uuid | vmname>recording opts <key= [value]>

VBoxManage controlvm vmname recording 命令启用或禁用将 VM 会话录制到 WebM/VP8 文件。有效值为 on(VM 会话开始时开始录制)和 off(禁用录制)。默认值为 off

VBoxManage controlvm vmname recording start 命令开始将 VM 会话录制到 WebM/VP8 文件。

VBoxManage controlvm vmname recording stop 命令停止 VM 会话的录制。

VBoxManage controlvm vmname recording attach 命令附加到正在进行的 VM 会话录制。

VBoxManage controlvm vmname recording screens 命令允许您指定要录制的 VM 屏幕。您指定的每个屏幕的录制内容将保存到各自的机器文件夹中。您无法在屏幕录制进行时修改此设置。

  • all 表示录制所有 VM 屏幕。

  • none 表示不录制任何 VM 屏幕。

  • screen-ID 指定要录制的一个或多个 VM 屏幕。

VBoxManage controlvm vmname recording filename 命令指定用于保存录制内容的文件。您无法在屏幕录制进行时修改此设置。

默认设置为将录制内容存储在机器文件夹中,使用 VM 名称作为文件名,文件扩展名为 webm

VBoxManage controlvm vmname recording videores 命令指定录制视频的分辨率(以像素为单位)。您无法在屏幕录制进行时修改此设置。

GUI 中的“Recording”设置(位于“Display”页面)显示当前视频录制设置,这些设置基于分辨率(帧大小)。“Frame Size”字段显示录制视频分辨率的默认值。

将分辨率指定为 widthxheight

  • width 指定宽度(以像素为单位)。

  • height 指定高度(以像素为单位)。

VBoxManage controlvm vmname recording videorate 命令指定视频的比特率,单位为千比特每秒。增加此值可以提高视频的外观,但会增加文件大小。在启用录制时运行的虚拟机中,无法修改此设置。

GUI 中的“录制”设置位于“显示”页面,显示当前视频录制设置,这些设置基于分辨率(帧大小)。“视频质量”字段显示录制视频质量的默认值。

VBoxManage controlvm vmname recording videofps 命令指定要录制的视频的最大帧率。视频帧率以每秒帧数(FPS)计量。录制将跳过任何帧率高于指定最大值的帧。增加帧率会减少跳过的帧数,但会增加文件大小。在启用录制时运行的虚拟机中,无法修改此设置。

GUI 中的“录制”设置位于“显示”页面,显示当前视频录制设置,这些设置基于分辨率(帧大小)。“帧率”字段显示录制帧率的默认值。

VBoxManage controlvm vmname recording maxtime 命令指定以秒为单位的最大录制时间。指定秒数过后,录制将停止。如果此值为零,录制将继续,直到您停止虚拟机或停止录制。

VBoxManage controlvm vmname recording maxfilesize 命令指定录制的视频文件的最大大小(以兆字节为单位)。当文件达到指定大小时,录制将停止。如果此值为零,录制将继续,直到您停止虚拟机或停止录制。在屏幕录制进行中时,无法修改此设置。

VBoxManage controlvm vmname recording opts 命令以逗号分隔的关键字-值对格式指定其他录制选项。例如,foo=bar,a=b。在屏幕录制进行中时,无法修改此设置。

仅当您是高级用户时才使用此选项。有关关键字的信息,请参阅《Oracle VirtualBox Programming Guide and Reference》。

为 Windows 虚拟机上的远程登录指定凭据

VBoxManage controlvm <uuid | vmname>setcredentials <username>‑‑passwordfile=<filename | password> <domain‑name>‑‑allowlocallogon=<yes | no>

setcredentials 命令允许您为远程登录到 Windows 虚拟机指定凭据。请参阅自动客户登录

  • username 指定登录到 Windows 虚拟机的用户名。

  • --passwordfile=filename 指定从中获取 username 密码的文件。

    --passwordfile 选项与 --password 选项互斥。

  • --password=password 指定 username 的密码。

    --password 选项与 --passwordfile 选项互斥。

  • --allowlocallogon 指定是启用还是禁用本地登录。有效值为 on 表示启用本地登录,off 表示禁用本地登录。

配置虚拟机的 Teleport 目标

VBoxManage controlvm <uuid | vmname>teleport <‑‑host=host‑name> <‑‑port=port‑name> [‑‑maxdowntime=msec] [‑‑passwordfile=filename | ‑‑password=password]

VBoxManage controlvm vmname teleport 命令在指定的虚拟机和指定的宿主机系统之间启动 Teleport 操作。请参阅Teleport

如果指定了密码,它必须与您在为目标计算机发出 VBoxManage modifyvm 命令时指定的密码匹配。

--host=hostname

指定虚拟机的名称。

--port=port

指定虚拟机上应监听来自其他虚拟机 Teleport 请求的端口。端口号可以是任何可用的 TCP/IP 端口号,例如 6000

--maxdowntime=msec

指定传送目标虚拟机的最大停机时间(毫秒)。

--password=password

指定源机器用于传送请求的密码。只有当源机器指定相同的密码时,请求才会成功。

--password 选项与 --passwordfile 选项互斥。

--passwordfile=filename

指定从中获取源机器用于传送请求的密码的文件。只有当源机器指定相同的密码时,请求才会成功。

当您指定 stdin 文件名时,可以从标准输入读取密码。

--passwordfile 选项与 --password 选项互斥。

为虚拟机添加虚拟 CPU

VBoxManage controlvm <uuid | vmname>plugcpu <ID>

VBoxManage controlvm vmname plugcpu 命令在启用 CPU 热插拔的情况下,向指定的虚拟机添加虚拟 CPU。 ID 指定要添加的虚拟 CPU 的索引,并且必须是从 0 到配置的最大 CPU 数的数字。

从虚拟机移除虚拟 CPU

VBoxManage controlvm <uuid | vmname>unplugcpu <ID>

VBoxManage controlvm vmname unplugcpu 命令在启用 CPU 热插拔的情况下,从指定的虚拟机移除虚拟 CPU。 ID 指定要移除的虚拟 CPU 的索引,并且必须是从 0 到配置的最大 CPU 数的数字。不能移除 CPU 0。

设置虚拟 CPU 使用的物理 CPU 时间的最大量

VBoxManage controlvm <uuid | vmname>cpuexecutioncap <num>

VBoxManage controlvm vmname cpuexecutioncap 命令指定虚拟 CPU 使用的物理 CPU 时间的最大量。有效值为 1 到 100 之间的百分比。值为 50 表示单个虚拟 CPU 最多可以使用 50% 的物理 CPU。默认值为 100

请谨慎使用此功能,它可能会产生意想不到的结果,包括时间保持问题和低于指定性能。如果您想限制虚拟机的资源使用,选择适当数量的 VCPU 更可靠。

更改虚拟机进程的优先级

VBoxManage controlvm <uuid | vmname>vm‑process‑priority <default | flat | low | normal | high>

VBoxManage controlvm vmname vm-process-priority 命令指定在启动指定虚拟机时以及虚拟机运行时使用的虚拟机进程优先级方案。

有效值为

  • default – 由操作系统确定的默认进程优先级。

  • flat – 使用调度策略,将进程设置为默认优先级,并且所有线程都具有相同的优先级。

  • low – 使用调度策略,将进程主要设置在宿主机操作系统默认优先级之下。

  • normal – 使用调度策略,将 CPU 资源与运行在宿主机操作系统默认优先级的其他进程公平共享。

  • high – 使用调度策略,将任务设置在宿主机操作系统默认优先级之上。此策略可能会轻易导致系统中的其他任务饥饿。

将网络摄像头附加到虚拟机

VBoxManage controlvm <uuid | vmname>webcam attach [pathname [settings]]

VBoxManage controlvm vmname webcam attach 命令将网络摄像头附加到正在运行的虚拟机。将网络摄像头指定为主机操作系统上的网络摄像头的绝对路径或别名。使用 VBoxManage list webcams 命令获取网络摄像头别名。

请注意,.0 别名是主机操作系统上的默认视频输入设备。.1 是第一个视频输入设备,.2 是第二个视频输入设备,依此类推。设备的顺序特定于主机系统。

您可以指定可选设置,格式为分号分隔 (;) 的名称-值对。这些属性使您能够配置模拟的网络摄像头设备。

支持以下设置

MaxFramerate

指定发送视频帧到虚拟机的最高速率。速率单位是每秒帧数。较高的帧速率会增加 CPU 负载,因此您可以使用此设置来降低 CPU 负载。默认值为 无最大限制。此值允许虚拟机使用网络摄像头支持的任何帧速率。

MaxPayloadTransferSize

指定虚拟机在一次缓冲区中从模拟网络摄像头接收的最大字节数。默认设置为 3060 字节,这被一些网络摄像头使用。如果虚拟机能够使用更大的缓冲区,较高的值可能会略微降低 CPU 负载。请注意,某些客户操作系统可能不支持较高的 MaxPayloadTransferSize 值。

从虚拟机分离网络摄像头

VBoxManage controlvm <uuid | vmname>webcam detach [pathname]

VBoxManage controlvm vmname webcam detach 命令从正在运行的虚拟机分离网络摄像头。将网络摄像头指定为主机操作系统上的网络摄像头的绝对路径或别名。使用 VBoxManage list webcams 命令获取网络摄像头别名。

当网络摄像头设备从主机分离时,主机操作系统决定模拟网络摄像头的行为方式。

  • Windows 主机:模拟的网络摄像头设备会自动从虚拟机分离。

  • 运行 OS X 10.7 或更高版本的 Mac OS X 主机:模拟的网络摄像头设备将保持连接到虚拟机,您必须使用 VBoxManage controlvm webcam detach 命令手动分离它。

  • Linux 主机:仅当网络摄像头正在积极流式传输视频时,模拟的网络摄像头设备才会自动从虚拟机分离。如果模拟的网络摄像头不活动,请使用 VBoxManage controlvm vmname webcam detach 命令手动分离它。

列出附加到虚拟机的网络摄像头

VBoxManage controlvm <uuid | vmname>webcam list

VBoxManage controlvm vmname webcam list 命令列出已附加到正在运行的虚拟机的网络摄像头。输出显示使用 VBoxManage controlvm vmname webcam attach 命令附加到虚拟机的网络摄像头的绝对路径或别名列表。

使用加密映像启动虚拟机

VBoxManage controlvm <uuid | vmname>addencpassword <ID> <password‑file | > [‑‑removeonsuspend=yes | no]

您可以加密虚拟机使用的硬盘映像中存储的数据。Oracle VirtualBox 使用 XTS 模式下的 AES 算法,并支持 128 位或 256 位数据加密密钥(DEK)。加密的 DEK 存储在介质属性中,并在您提供加密密码时在虚拟机启动期间解密。

使用 VBoxManage encryptmedium 命令创建 DEK 加密的介质。请参阅加密磁盘映像

当使用 Oracle VirtualBox GUI 启动包含一个或多个加密磁盘映像的虚拟机时,将打开一个对话框,提示用户输入连接到虚拟机的每个加密磁盘的密码。如果使用 VBoxHeadless 前端,虚拟机将在客户尝试访问加密磁盘时暂停。用户需要使用 addencpassword 子命令提供密码。

VBoxManage controlvm vmname addencpassword 命令向名为 vmname 的虚拟机提供加密密码,该虚拟机包含已使用 VBoxHeadless 前端启动的加密磁盘。指定主机系统上密码文件的绝对路径。如果 filename-VBoxManage 将提示输入加密密码。

使用 --removeonsuspend 选项指定在虚拟机暂停时是保存密码还是将其从虚拟机内存中清除。

如果虚拟机已暂停且密码已被清除,请使用 VBoxManage controlvm vmname addencpassword 向虚拟机提供密码以恢复执行。当您不想在虚拟机因主机暂停事件而暂停时将密码存储在虚拟机内存中时,请使用此功能。

以下是在没有主机的情况下启动包含加密磁盘映像的虚拟机的一种方法

          $ VBoxManage startvm vmname --type headless
        

以下命令向虚拟机提供加密密码,以便它可以恢复启动

          $ VBoxManage vmname controlvm addencpassword vmname -
          Password: encryption-password
        

禁用虚拟机的加密密码

VBoxManage controlvm <uuid | vmname>removeencpassword <ID>

VBoxManage controlvm vmname removeencpassword 命令禁用附加到虚拟机的所有加密介质的特定加密密码。

ID 是您要禁用的加密密码的密码标识符。

禁用虚拟机的所有加密密码

VBoxManage controlvm <uuid | vmname>removeallencpasswords

VBoxManage controlvm vmname removeallencpasswords 命令禁用附加到虚拟机的所有加密介质的所有加密密码。

更改虚拟机上虚拟串行端口的连接模式

VBoxManage controlvm <uuid | vmname>changeuartmodeNdisconnected | serverpipe‑name | clientpipe‑name | tcpserverport | tcpclienthostname:port | filefilename | device‑name

VBoxManage controlvm vmname changeuartmode 命令更改指定虚拟串行端口的连接模式。有效的串行端口值为从 1 开始的整数。

disconnected

断开设备。

server pipe-name

指定服务器的管道名称。

client pipe-name

指定客户端的管道名称。

tcpserver port

指定 TCP 服务器的端口号。

tcpclient hostname:port

指定 TCP 客户端的主机名和端口号。

file filename

指定文件的名称。

device-name

指定设备的名称。

在宿主机系统启动时自动启动虚拟机

VBoxManage controlvm <uuid | vmname>autostart‑enabledNon | off

VBoxManage controlvm vmname autostart-enabled 命令指定是启用还是禁用在宿主机系统启动时自动启动虚拟机。您必须进行一些宿主机系统配置才能使用此功能。请参阅系统启动期间启动虚拟机。有效值为 on(启用虚拟机的自动启动功能)和 off(禁用它)。默认值为 off

设置虚拟机在宿主机系统启动时的延迟

VBoxManage controlvm <uuid | vmname>autostart‑delay <seconds>

VBoxManage controlvm vmname autostart-delay 命令指定在虚拟机在宿主机系统启动时启动之前的延迟(以秒为单位)。请参阅系统启动期间启动虚拟机

示例

以下命令会暂时停止 ol7 虚拟机的执行。

$ VBoxManage controlvm ol7 pause

以下命令为主 ol7 虚拟机配置共享剪贴板操作。可以在主机和客户机之间双向复制剪贴板数据。

$ VBoxManage controlvm ol7 clipboard mode bidirectional

VBoxManage convertfromraw

将原始磁盘映像转换为虚拟磁盘映像

概要

VBoxManage convertfromraw <inputfile> <outputfile> [‑‑format=VDI | VMDK | VHD] [‑‑uuid=uuid] [‑‑variant=Standard|Fixed|Split2G|Stream|ESX...]

VBoxManage convertfromraw stdin <outputfile> <bytes> [‑‑format=VDI | VMDK | VHD] [‑‑uuid=uuid] [‑‑variant=Standard|Fixed|Split2G|Stream|ESX...]

描述

VBoxManage convertfromraw 命令允许您将原始磁盘映像转换为 Oracle VirtualBox 虚拟磁盘映像(VDI)。

注意

为了与早期版本的 Oracle VirtualBox 兼容,您可以使用 VBoxManage convertdd 命令而不是 VBoxManage convertfromraw 命令。

将原始磁盘文件转换为虚拟磁盘映像文件

VBoxManage convertfromraw <inputfile> <outputfile> [‑‑format=VDI | VMDK | VHD] [‑‑uuid=uuid] [‑‑variant=Standard|Fixed|Split2G|Stream|ESX...]

VBoxManage convertfromraw 命令将指定的原始磁盘映像输入文件转换为 Oracle VirtualBox VDI 文件。

inputfile

指定要转换的原始磁盘镜像文件的名称。

outputfile

指定要写入 VDI 输出的文件名称。

--format=VDI | VMDK | VHD

指定要创建的磁盘映像的格式。有效值为 VDIVMDKVHD。默认格式为 VDI

--uuid=uuid

指定输出文件的通用唯一标识符 (UUID)。

--variant=Standard | Fixed | Split2G | Stream | ESX[,...]

指定输出文件的任何所需文件格式变体。这是一个逗号分隔的变体值列表。以下是有效值

  • Standard 是默认磁盘映像类型,具有动态分配的文件大小。

  • Fixed 使用具有固定文件大小的磁盘映像。

  • Split2G 表示磁盘映像已拆分为 2GB 的段。此值仅适用于 VMDK。

  • Stream 优化磁盘映像以供下载。此值仅适用于 VMDK。

  • ESX 用于某些 VMWare 产品。此值仅适用于 VMDK。

请注意,并非所有变体组合都有效。在列表中指定不兼容的变体值将产生错误消息。

将原始数据从标准输入转换为虚拟磁盘映像文件

VBoxManage convertfromraw stdin <outputfile> <bytes> [‑‑format=VDI | VMDK | VHD] [‑‑uuid=uuid] [‑‑variant=Standard|Fixed|Split2G|Stream|ESX...]

VBoxManage convertfromraw stdin 命令从标准输入读取磁盘映像的内容。可以考虑在管道序列中使用此命令形式。

outputfile

指定要写入磁盘镜像输出的文件名称。

bytes

指定目标映像名称的容量。这需要显式给出,因为管道通常不支持查询数据流的整体大小。

--format=VDI | VMDK | VHD

指定要创建的磁盘映像的格式。有效值为 VDIVMDKVHD。默认格式为 VDI

--uuid=uuid

指定输出文件的 UUID。

--variant=Standard,Fixed,Split2G,Stream,ESX

指定输出文件所需的任何文件格式变体。这是一个逗号分隔的变体值列表。有效值的列表是

  • Standard 是默认磁盘映像类型,具有动态分配的文件大小。

  • Fixed 使用具有固定文件大小的磁盘映像。

  • Split2G 表示磁盘映像已拆分为 2GB 的段。此值仅适用于 VMDK。

  • Stream 优化磁盘映像以供下载。此值仅适用于 VMDK。

  • ESX 用于某些 VMWare 产品。此值仅适用于 VMDK。

请注意,并非所有变体组合都有效。在列表中指定不兼容的变体值将产生错误消息。

示例

以下命令将原始磁盘映像输入文件 disk01.raw 转换为输出文件,该输出文件是名为 disk02.vdi 的 VDI 磁盘映像。

$ VBoxManage convertfromraw disk01.raw disk02.vdi

以下命令将原始磁盘映像输入文件 disk01.raw 转换为输出文件,该输出文件是名为 disk02.vmdk 的 VMDK 磁盘映像。

$ VBoxManage convertfromraw disk01.raw disk02.vmdk --format VMDK

以下命令通过管道读取磁盘 /dev/sda,因此需要额外的字节作为精确的磁盘大小参数,假定为 10737418240。输出文件是名为 disk.vdi 的 VDI 磁盘映像。

$ dd if=/dev/sda bs=512 | VBoxManage convertfromraw stdin disk.vdi 10737418240

VBoxManage createmedium

创建新的介质

概要

VBoxManage createmedium [disk | dvd | floppy] <‑‑filename=filename> [‑‑size=megabytes | ‑‑sizebyte=bytes] [‑‑diffparent=UUID | filename] [‑‑format=VDI | VMDK | VHD] [‑‑variant=Standard|Fixed|Split2G|Stream|ESX|Formatted|RawDisk...] [‑‑property=name=value...] [‑‑property‑file=name=/path/to/file/with/value...]

描述

VBoxManage createmedium 命令创建新的介质,例如磁盘映像文件。

注意

为了与早期版本的 Oracle VirtualBox 兼容,您可以使用 createvdicreatehd 命令而不是 createmedium 命令。

disk | dvd | floppy

指定介质类型。默认值为 disk

--filename=文件名

指定主机文件系统上文件的绝对路径名。

--size=megabytes

以兆字节为单位指定镜像容量。

--sizebyte=bytes

以字节为单位指定镜像容量。

--diffparent=UUID | filename

指定主机文件系统上差异镜像父文件的通用唯一标识符 (UUID) 或绝对路径名。

使用此文件在虚拟机之间共享基础盒磁盘镜像。

--format=VDI | VMDK | VHD

指定输出文件的文件格式。有效格式为 VDIVMDKVHD。默认格式为 VDI

--variant=Standard | Fixed | Split2G | Stream | ESX | Formatted | RawDisk [,...]

指定目标介质的文件格式变体,这是一个逗号分隔的变体列表。以下是有效值

  • Standard 是默认磁盘映像类型,具有动态分配的文件大小。

  • Fixed 使用具有固定文件大小的磁盘映像。

  • Split2G 表示磁盘映像被分割成 2GB 的段。此值仅对 VMDK 磁盘映像有效。

  • Stream 优化磁盘映像以供下载。此值仅对 VMDK 磁盘映像有效。

  • ESX 用于某些 VMWare 产品。此值仅对 VMDK 磁盘映像有效。

  • Formatted 自动格式化介质。此值仅对软盘映像有效。

  • RawDisk 用于创建提供通过其原始接口直接访问主机上硬盘的 VMDK 映像。此值仅对 VMDK 磁盘映像有效。有关原始磁盘访问的详细信息,请参阅高级存储配置

请注意,并非所有变体组合都有效。在列表中指定不兼容的变体值将产生错误消息。

--property=name=value

key=value 格式指定任何所需的文件格式相关参数。可选。

--property-file=name=/path/to/file/with/value

key=file/with/value 格式指定任何所需的文件格式相关参数。值从文件中获取。可选。

示例

以下命令创建一个名为 disk01.vdi 的新磁盘映像文件。文件大小为 1024 MB。

$ VBoxManage createmedium --filename disk01.vdi --size 1024

以下命令创建一个名为 floppy01.vdi 的新软盘映像文件。文件大小为 1 MB。

$ VBoxManage createmedium floppy --filename floppy01.img --size 1

以下命令创建 Linux 主机上整个物理磁盘的原始磁盘镜像。

$ VBoxManage createmedium disk --filename=/path/to/rawdisk.vmdk --variant=RawDisk --format=VMDK --property RawDrive=/dev/sda

VBoxManage createvm

创建新的虚拟机

概要

VBoxManage createvm <‑‑name=name> <‑‑platform‑architecture=x86 | arm> [‑‑basefolder=basefolder] [‑‑default] [‑‑groups=group‑ID [,...]] [‑‑ostype=ostype] [‑‑register] [‑‑uuid=uuid] [‑‑cipher=cipher] [‑‑password‑id=password‑id] [‑‑password=file]

描述

VBoxManage createvm 命令创建新的 XML 虚拟机(VM)定义文件。

您必须使用 --name name 指定虚拟机的名称。此名称默认用作具有 .vbox 扩展名的设置文件的名称以及机器文件夹($HOME/VirtualBox VMs 目录下的一个子文件夹)的名称。

实际文件名可能不直接对应于虚拟机名称,如果它违反了主机操作系统的文件名要求(例如使用路径分隔符或其他保留字符,它们将被替换为占位符)。如果您稍后重命名虚拟机,文件和文件夹名称将自动更新以匹配新名称。

此外,还必须使用 --platform-architecture architecture 指定虚拟机的目标平台架构。

命令选项

除了指定虚拟机名称或 UUID 和必需的平台架构之外,您还可以指定以下任何选项

--basefolder=basefolder

指定用于保存新虚拟机机器配置文件的文件夹名称。

请注意,如果您重命名虚拟机,文件和文件夹的名称不会更改。

--default

为指定的客户操作系统应用默认硬件配置。默认情况下,虚拟机以最小硬件创建。

--groups=group-ID[,...]

将虚拟机分配给指定的组。如果指定多个组,请用逗号分隔每个组名称。

请注意,每个组都由一个以斜杠字符 (/) 开头的组 ID 来标识,以便组可以嵌套。默认情况下,虚拟机始终被分配到 / 组。

--ostype=ostype

指定要在虚拟机中运行的客户机操作系统。运行 VBoxManage list ostypes 命令可查看可用的操作系统类型。

--register

将虚拟机注册到您的 Oracle VirtualBox 安装。默认情况下,VBoxManage createvm 命令仅创建虚拟机的 XML 配置,但不会注册虚拟机。如果您在创建时未注册虚拟机,可以在创建虚拟机后运行 VBoxManage registervm 命令。

--uuid=uuid

指定虚拟机的通用唯一标识符(UUID)。如果您决定注册虚拟机,请确保此 UUID 在主机或其虚拟机组的 Oracle VirtualBox 命名空间内是唯一的。默认情况下,Oracle VirtualBox 提供 UUID。

--cipher=cipher

指定用于加密的密码。有效值为 AES-128AES-256

此选项使您能够在虚拟机上设置加密。

--password-id=password-id

指定一个新的密码标识符,该标识符用于在为虚拟机提供多个密码时进行正确识别。

此选项使您能够在虚拟机上设置加密。

--password=file

使用 --password 提供虚拟机的加密密码。您可以指定主机操作系统上的密码文件的绝对路径名,或者指定 - 以便在命令行提示您输入密码。

此选项使您能够在虚拟机上设置加密。

示例

以下命令创建一个名为 vm2 的虚拟机,您计划在该虚拟机中运行 64 位 Oracle Linux。

$ VBoxManage createvm --name "vm2" --ostype "Oracle_64"

以下命令创建一个名为 vm3 的虚拟机并注册它。

$ VBoxManage createvm --name "vm3" --register

VBoxManage debugvm

内省和客户机调试

概要

VBoxManage debugvm <uuid | vmname>dumpvmcore <‑‑filename=name>

VBoxManage debugvm <uuid | vmname>info <item> [args...]

VBoxManage debugvm <uuid | vmname>injectnmi

VBoxManage debugvm <uuid | vmname>log [‑‑release | ‑‑debug] [group‑settings...]

VBoxManage debugvm <uuid | vmname>logdest [‑‑release | ‑‑debug] [destinations...]

VBoxManage debugvm <uuid | vmname>logflags [‑‑release | ‑‑debug] [flags...]

VBoxManage debugvm <uuid | vmname>osdetect

VBoxManage debugvm <uuid | vmname>osinfo

VBoxManage debugvm <uuid | vmname>osdmesg [‑‑lines=lines]

VBoxManage debugvm <uuid | vmname>getregisters [‑‑cpu=id] [reg‑set.reg‑name...]

VBoxManage debugvm <uuid | vmname>setregisters [‑‑cpu=id] [reg‑set.reg‑name=value...]

VBoxManage debugvm <uuid | vmname>show [‑‑human‑readable | ‑‑sh‑export | ‑‑sh‑eval | ‑‑cmd‑set] [settings‑item...]

VBoxManage debugvm <uuid | vmname>stack [‑‑cpu=id]

VBoxManage debugvm <uuid | vmname>statistics [‑‑reset] [‑‑descriptions] [‑‑pattern=pattern]

VBoxManage debugvm <uuid | vmname>guestsample [‑‑filename=filename] [‑‑sample‑interval‑us=interval] [‑‑sample‑time‑us=time]

描述

“debugvm”命令适用于想要调整虚拟机执行的精确细节的高级用户。与内置 VM 调试器中描述的 VM 调试器一样,这些命令仅在您非常熟悉 PC 架构的细节以及如何调试软件时才有用。

通用选项

debugvm 的子命令都作用于正在运行的虚拟机

uuid | vmname

虚拟机的 UUID 或名称(区分大小写)。

debugvm dumpvmcore

VBoxManage debugvm <uuid | vmname>dumpvmcore <‑‑filename=name>

创建指定虚拟机的系统转储文件。该文件将具有标准的 ELF 核心格式(带自定义节);请参阅VM Core 格式

这对应于调试器中的 writecore 命令。

--filename=文件名

输出文件的名称。此选项是必需的。

debugvm info

VBoxManage debugvm <uuid | vmname>info <item> [args...]

显示与 VMM、设备仿真和相关驱动程序有关的信息项。

这对应于调试器中的 info 命令。

要显示的 info 项的名称。特殊名称 help 将列出所有可用的 info 项以及有关可选参数的提示。

参数

info 项处理程序的可选参数字符串。大多数 info 项不接受任何额外参数。不被识别的参数通常会被忽略。

debugvm injectnmi

VBoxManage debugvm <uuid | vmname>injectnmi

导致非屏蔽中断(NMI)被注入到客户机。这对于某些调试场景可能很有用。确切的行为取决于客户机操作系统,但 NMI 可能会导致整个客户机操作系统崩溃。除非您知道自己在做什么,否则请勿使用。

debugvm log

VBoxManage debugvm <uuid | vmname>log [‑‑release | ‑‑debug] [group‑settings...]

更改虚拟机进程的调试(--debug)或发布(--release)日志记录器的组设置。

“group-settings”通常是如下形式的字符串:em.e.f.lhm=~0-em.f。支持基础通配符进行组匹配。“all”组是所有组的别名。

请注意,组设置将作为对当前值的修改进行应用。

这对应于调试器中的 log 命令。

debugvm logdest

VBoxManage debugvm <uuid | vmname>logdest [‑‑release | ‑‑debug] [destinations...]

更改 VM 进程的调试(--debug)或发行版(--release)日志记录器的目标设置。有关目标格式的详细信息,最佳来源是 src/VBox/Runtime/common/log/log.cpp。

“destinations”参数是一个或多个助记符,可以选择以“no”作为前缀以禁用它们。其中一些参数后面会跟上“:”或“=”分隔符的值。多个助记符可以用空格分隔,或者在命令行上作为单独的参数给出。

可用目标列表

file[=file], nofile

指定日志文件。如果未提供文件名,则会根据当前 UTC 时间和 VM 进程名称生成一个文件名,并将其放置在 VM 进程的当前目录中。请注意,如果日志文件已打开,此设置将不起作用。

dir=directory, nodir

指定日志文件的输出目录。请注意,如果日志文件已打开,此设置将不起作用。

history=count, nohistory

非零值启用日志轮换,该值指定要保留多少旧日志文件。

histsize=bytes

日志文件轮换前的最大大小。默认为无限。

histtime=seconds

日志文件轮换前的最大年龄(以秒为单位)。默认为无限。

ringbuffer, noringbuffer

仅将日志记录到日志缓冲区,直到发生显式刷新(例如,通过断言)。这速度快且节省磁盘空间。

stdout, nostdout

将日志内容写入标准输出。

stdout, nostdout

将日志内容写入标准错误。

debugger, nodebugger

如果主机操作系统支持,将日志内容写入调试器。

com, nocom

将日志记录写入 COM 端口。这仅适用于原始模式和环 0 日志记录。

user, nouser

自定义目标,对 VM 进程无意义。

这对应于调试器中的 logdest 命令。

debugvm logflags

VBoxManage debugvm <uuid | vmname>logflags [‑‑release | ‑‑debug] [flags...]

更改 VM 进程的调试(--debug)或发行版(--release)日志记录器的标志。请注意,修改会应用于现有值,而不是替换它们。

“flags”是标志助记符列表,可以选择以“no”、“!”、“~”或“-”作为前缀来否定它们的含义。“+”前缀可用于撤销先前的否定或用作分隔符,但最好使用空格或单独的参数来完成。

日志标志助记符列表,以及适用的相反值(星号表示默认值)

enabled*, disabled

启用或禁用日志记录。

buffered, unbuffered*

在日志输出到达目标之前启用日志输出的缓冲。

writethrough(/writethru)

是否以直写缓冲设置打开目标文件。

flush

在每个日志语句后启用输出文件(到磁盘)的刷新。

lockcnts

在每行日志前加上当前线程的锁定计数。

cpuid

在每行日志前加上当前 CPU 的 ID。

pid

在每行日志前加上当前进程 ID。

flagno

在每行日志前面加上与日志语句对应的数字标志。

flag

在每行日志前加上与日志语句对应的标志助记符。

groupno

在每行日志前加上生成该日志语句的日志组号。

group

在每行日志前加上生成该日志语句的日志组名称。

tid

在每行日志前加上当前线程标识符。

thread

在每行日志前加上当前线程名称。

time

在每行日志前加上当前 UTC 实时时间。

timeprog

在每行日志前加上程序启动以来的当前单调时间。

msprog

在每行日志前加上程序启动以来的当前单调时间戳值(毫秒)。

ts

在每行日志前加上当前单调时间戳值(纳秒)。

tsc

在每行日志前加上当前 CPU 时间戳计数器 (TSC) 值。

rel, abs*

选择“ts”和“tsc”前缀是显示为相对于前一行日志还是显示为绝对时间。

hex*, dec

选择“ts”和“tsc”前缀是格式化为十六进制还是十进制。

custom

自定义日志前缀,默认对虚拟机进程没有意义。

usecrlf, uself*

以 DOS 样式 (CRLF) 或仅 UNIX 样式 (LF) 行尾输出。

overwrite*, append

覆盖目标文件或追加到目标文件。

这对应于调试器中的 logflags 命令。

debugvm osdetect

VBoxManage debugvm <uuid | vmname>osdetect

使 VMM 的调试器功能(重新)检测客户机操作系统 (OS)。这将首先加载所有调试器插件。

这对应于调试器中的 detect 命令。

debugvm osinfo

VBoxManage debugvm <uuid | vmname>osinfo

显示 VMM 的调试器功能之前检测到的客户机操作系统 (OS) 的信息。

debugvm osdmesg

VBoxManage debugvm <uuid | vmname>osdmesg [‑‑lines=lines]

如果检测到并支持,显示客户机操作系统内核日志。

--lines=lines

要显示的日志行数,从末尾开始计数。默认为无限。

debugvm getregisters

VBoxManage debugvm <uuid | vmname>getregisters [‑‑cpu=id] [reg‑set.reg‑name...]

检索客户机 CPU 和仿真设备的寄存器值。

reg-set.reg-name

一个或多个寄存器,每个寄存器具有以下形式之一:

  1. register-set.register-name.sub-field

  2. register-set.register-name

  3. cpu-register-name.sub-field

  4. cpu-register-name

  5. all

“all”形式将显示所有寄存器(无子字段)。寄存器名称不区分大小写。

--cpu=id

仅指定 CPU 寄存器时(第三种和第四种形式)选择 CPU 寄存器集。默认为 0。

debugvm setregisters

VBoxManage debugvm <uuid | vmname>setregisters [‑‑cpu=id] [reg‑set.reg‑name=value...]

更改客户机 CPU 和仿真设备的寄存器值。

reg-set.reg-name=value

一个或多个寄存器赋值,每个赋值具有以下形式之一:

  1. register-set.register-name.sub-field=value

  2. register-set.register-name=value

  3. cpu-register-name.sub-field=value

  4. cpu-register-name=value

值格式应与 getregisters 显示的格式相同,不同之处在于可以使用八进制和十进制代替十六进制。

--cpu=id

仅指定 CPU 寄存器时(第三种和第四种形式)选择 CPU 寄存器集。默认为 0。

debugvm show

VBoxManage debugvm <uuid | vmname>show [‑‑human‑readable | ‑‑sh‑export | ‑‑sh‑eval | ‑‑cmd‑set] [settings‑item...]

显示虚拟机的日志记录设置。

--human-readable

选择人类可读的输出。

--sh-export

将输出格式选择为 Bourne shell 风格的 export 命令。

--sh-eval

将输出格式选择为 Bourne shell 风格的 eval 命令输入。

--cmd-set

将输出格式选择为 DOS 风格的 SET 命令。

设置项

要显示的内容。以下一项或多项

  • logdbg-settings - 调试日志设置。

  • logrel-settings - 发布日志设置。

  • log-settings - 调试和发布日志设置的别名。

debugvm stack

VBoxManage debugvm <uuid | vmname>stack [‑‑cpu=id]

尽最大努力展开客户机 CPU 堆栈。建议首先运行 osdetect 命令,因为它会提供符号以及可能的展开信息。

--cpu=id

选择单个客户机 CPU 以显示其堆栈。默认为所有 CPU。

debugvm statistics

VBoxManage debugvm <uuid | vmname>statistics [‑‑reset] [‑‑descriptions] [‑‑pattern=pattern]

显示或重置 VMM 统计信息。

检索客户机 CPU 和仿真设备的寄存器值。

--pattern=pattern

用于选择统计信息的 DOS/NT 样式通配符模式。可以使用 '|' (管道) 字符作为分隔符来指定多个模式。

--reset

选择重置模式而不是显示模式。

debugvm guestsample

VBoxManage debugvm <uuid | vmname>guestsample [‑‑filename=filename] [‑‑sample‑interval‑us=interval] [‑‑sample‑time‑us=time]

创建客户机活动的示例报告。

检索要转储报告的文件名。

--filename=文件名

要转储示例报告的文件名。

--sample-interval-us=interval

客户机样本之间的间隔(微秒)。

--sample-time-us=time

采集客户机样本的微秒数。

VBoxManage dhcpserver

DHCP 服务器管理

概要

VBoxManage dhcpserver add <‑‑network=netname | ‑‑interface=ifname> <‑‑server‑ip=address> <‑‑netmask=mask> <‑‑lower‑ip=address> <‑‑upper‑ip=address> <‑‑enable | ‑‑disable> [[‑‑global] [‑‑set‑opt=dhcp‑opt‑no value...] [‑‑set‑opt‑hex=dhcp‑opt‑no hexstring...] [‑‑force‑opt=dhcp‑opt‑no...] [‑‑suppress‑opt=dhcp‑opt‑no...] [‑‑min‑lease‑time=seconds] [‑‑default‑lease‑time=seconds] [‑‑max‑lease‑time=seconds]...] [<‑‑group=name> [‑‑set‑opt=dhcp‑opt‑no value...] [‑‑set‑opt‑hex=dhcp‑opt‑no hexstring...] [‑‑force‑opt=dhcp‑opt‑no...] [‑‑suppress‑opt=dhcp‑opt‑no...] [‑‑incl‑mac=address...] [‑‑excl‑mac=address...] [‑‑incl‑mac‑wild=pattern...] [‑‑excl‑mac‑wild=pattern...] [‑‑incl‑vendor=string...] [‑‑excl‑vendor=string...] [‑‑incl‑vendor‑wild=pattern...] [‑‑excl‑vendor‑wild=pattern...] [‑‑incl‑user=string...] [‑‑excl‑user=string...] [‑‑incl‑user‑wild=pattern...] [‑‑excl‑user‑wild=pattern...] [‑‑min‑lease‑time=seconds] [‑‑default‑lease‑time=seconds] [‑‑max‑lease‑time=seconds]...] [<‑‑vm=name|uuid> [‑‑nic=1‑N] [‑‑set‑opt=dhcp‑opt‑no value...] [‑‑set‑opt‑hex=dhcp‑opt‑no hexstring...] [‑‑force‑opt=dhcp‑opt‑no...] [‑‑suppress‑opt=dhcp‑opt‑no...] [‑‑min‑lease‑time=seconds] [‑‑default‑lease‑time=seconds] [‑‑max‑lease‑time=seconds] [‑‑fixed‑address=address]...] [<‑‑mac‑address=address> [‑‑set‑opt=dhcp‑opt‑no value...] [‑‑set‑opt‑hex=dhcp‑opt‑no hexstring...] [‑‑force‑opt=dhcp‑opt‑no...] [‑‑suppress‑opt=dhcp‑opt‑no...] [‑‑min‑lease‑time=seconds] [‑‑default‑lease‑time=seconds] [‑‑max‑lease‑time=seconds] [‑‑fixed‑address=address]...]

VBoxManage dhcpserver modify <‑‑network=netname | ‑‑interface=ifname> [‑‑server‑ip=address] [‑‑lower‑ip=address] [‑‑upper‑ip=address] [‑‑netmask=mask] [‑‑enable | ‑‑disable] [[‑‑global] [‑‑del‑opt=dhcp‑opt‑no...] [‑‑set‑opt=dhcp‑opt‑no value...] [‑‑set‑opt‑hex=dhcp‑opt‑no hexstring...] [‑‑force‑opt=dhcp‑opt‑no...] [‑‑unforce‑opt=dhcp‑opt‑no...] [‑‑suppress‑opt=dhcp‑opt‑no...] [‑‑unsuppress‑opt=dhcp‑opt‑no...] [‑‑min‑lease‑time=seconds] [‑‑default‑lease‑time=seconds] [‑‑max‑lease‑time=seconds] [‑‑remove‑config]...] [<‑‑group=name> [‑‑set‑opt=dhcp‑opt‑no value...] [‑‑set‑opt‑hex=dhcp‑opt‑no hexstring...] [‑‑force‑opt=dhcp‑opt‑no...] [‑‑unforce‑opt=dhcp‑opt‑no...] [‑‑suppress‑opt=dhcp‑opt‑no...] [‑‑unsuppress‑opt=dhcp‑opt‑no...] [‑‑del‑mac=address...] [‑‑incl‑mac=address...] [‑‑excl‑mac=address...] [‑‑del‑mac‑wild=pattern...] [‑‑incl‑mac‑wild=pattern...] [‑‑excl‑mac‑wild=pattern...] [‑‑del‑vendor=string...] [‑‑incl‑vendor=string...] [‑‑excl‑vendor=string...] [‑‑del‑vendor‑wild=pattern...] [‑‑incl‑vendor‑wild=pattern...] [‑‑excl‑vendor‑wild=pattern...] [‑‑del‑user=string...] [‑‑incl‑user=string...] [‑‑excl‑user=string...] [‑‑del‑user‑wild=pattern...] [‑‑incl‑user‑wild=pattern...] [‑‑excl‑user‑wild=pattern...] [‑‑zap‑conditions] [‑‑min‑lease‑time=seconds] [‑‑default‑lease‑time=seconds] [‑‑max‑lease‑time=seconds] [‑‑remove‑config]...] [<‑‑vm=name|uuid> [‑‑nic=1‑N] [‑‑del‑opt=dhcp‑opt‑no...] [‑‑set‑opt=dhcp‑opt‑no value...] [‑‑set‑opt‑hex=dhcp‑opt‑no hexstring...] [‑‑force‑opt=dhcp‑opt‑no...] [‑‑unforce‑opt=dhcp‑opt‑no...] [‑‑suppress‑opt=dhcp‑opt‑no...] [‑‑unsuppress‑opt=dhcp‑opt‑no...] [‑‑min‑lease‑time=seconds] [‑‑default‑lease‑time=seconds] [‑‑max‑lease‑time=seconds] [‑‑fixed‑address=address] [‑‑remove‑config]...] [<‑‑mac‑address=address> [‑‑del‑opt=dhcp‑opt‑no...] [‑‑set‑opt=dhcp‑opt‑no value...] [‑‑set‑opt‑hex=dhcp‑opt‑no hexstring...] [‑‑force‑opt=dhcp‑opt‑no...] [‑‑unforce‑opt=dhcp‑opt‑no...] [‑‑suppress‑opt=dhcp‑opt‑no...] [‑‑unsuppress‑opt=dhcp‑opt‑no...] [‑‑min‑lease‑time=seconds] [‑‑default‑lease‑time=seconds] [‑‑max‑lease‑time=seconds] [‑‑fixed‑address=address] [‑‑remove‑config]...]

VBoxManage dhcpserver remove <‑‑network=netname | ‑‑interface=ifname>

VBoxManage dhcpserver start <‑‑network=netname | ‑‑interface=ifname>

VBoxManage dhcpserver restart <‑‑network=netname | ‑‑interface=ifname>

VBoxManage dhcpserver stop <‑‑network=netname | ‑‑interface=ifname>

VBoxManage dhcpserver findlease <‑‑network=netname | ‑‑interface=ifname> <‑‑mac‑address=mac>

描述

“dhcpserver”命令使您能够控制 Oracle VirtualBox 中内置的 DHCP 服务器。当使用内部或仅主机网络时,您可能会发现它很有用。理论上,您也可以为其启用桥接网络,但这可能会与您物理网络中的其他 DHCP 服务器发生冲突。

通用选项

“dhcpserver”的子命令都作用于一个内部网络,该网络可以通过其名称或在仅主机网络的情况下通过仅主机接口名称来标识。

--network=netname

内部网络名称。这与您在为 VM 配置内部网络时提供给 VBoxManage modifyvm --intnet 选项的名称相同。内部网络名称可以在以下命令的输出中标记为 VBoxNetworkNameVBoxManage list intnetsVBoxManage list natnetsVBoxManage list hostonlyifs

--interface=ifname

仅主机接口名称。这与您在为 VM 配置使用仅主机网络时提供给 VBoxManage modifyvm --host-only-adapter 选项的值相同。在 VBoxManage list hostonlyifs 命令的输出中,该值也标记为 Name

dhcpserver add

VBoxManage dhcpserver add <‑‑network=netname | ‑‑interface=ifname> <‑‑server‑ip=address> <‑‑netmask=mask> <‑‑lower‑ip=address> <‑‑upper‑ip=address> <‑‑enable | ‑‑disable> [[‑‑global] [‑‑set‑opt=dhcp‑opt‑no value...] [‑‑set‑opt‑hex=dhcp‑opt‑no hexstring...] [‑‑force‑opt=dhcp‑opt‑no...] [‑‑suppress‑opt=dhcp‑opt‑no...] [‑‑min‑lease‑time=seconds] [‑‑default‑lease‑time=seconds] [‑‑max‑lease‑time=seconds]...] [<‑‑group=name> [‑‑set‑opt=dhcp‑opt‑no value...] [‑‑set‑opt‑hex=dhcp‑opt‑no hexstring...] [‑‑force‑opt=dhcp‑opt‑no...] [‑‑suppress‑opt=dhcp‑opt‑no...] [‑‑incl‑mac=address...] [‑‑excl‑mac=address...] [‑‑incl‑mac‑wild=pattern...] [‑‑excl‑mac‑wild=pattern...] [‑‑incl‑vendor=string...] [‑‑excl‑vendor=string...] [‑‑incl‑vendor‑wild=pattern...] [‑‑excl‑vendor‑wild=pattern...] [‑‑incl‑user=string...] [‑‑excl‑user=string...] [‑‑incl‑user‑wild=pattern...] [‑‑excl‑user‑wild=pattern...] [‑‑min‑lease‑time=seconds] [‑‑default‑lease‑time=seconds] [‑‑max‑lease‑time=seconds]...] [<‑‑vm=name|uuid> [‑‑nic=1‑N] [‑‑set‑opt=dhcp‑opt‑no value...] [‑‑set‑opt‑hex=dhcp‑opt‑no hexstring...] [‑‑force‑opt=dhcp‑opt‑no...] [‑‑suppress‑opt=dhcp‑opt‑no...] [‑‑min‑lease‑time=seconds] [‑‑default‑lease‑time=seconds] [‑‑max‑lease‑time=seconds] [‑‑fixed‑address=address]...] [<‑‑mac‑address=address> [‑‑set‑opt=dhcp‑opt‑no value...] [‑‑set‑opt‑hex=dhcp‑opt‑no hexstring...] [‑‑force‑opt=dhcp‑opt‑no...] [‑‑suppress‑opt=dhcp‑opt‑no...] [‑‑min‑lease‑time=seconds] [‑‑default‑lease‑time=seconds] [‑‑max‑lease‑time=seconds] [‑‑fixed‑address=address]...]

向网络或仅主机接口添加新的 DHCP 服务器。

配置 DHCP 服务器核心的选项

--server-ip=address

DHCP 服务器应使用的 IP 地址。

--lower-ip=address, --upper-ip=address

DHCP 服务器要管理的 IP 地址范围。这不应包括 DHCP 服务器本身的地址,但必须在同一网络中。边界是包含性的,因此较低和较高的地址都将分配给客户端。

--netmask=mask

网络掩码。通常为 255.255.255.0。

--enable, --disable

是否启用或禁用 DHCP 服务器。如果未指定,服务器将以禁用状态创建,并且不会分配任何 IP 地址。

选择范围的选项

--global

将配置范围设置为全局。任何后续的 --set-opt 选项将应用于所有 DHCP 客户端。

--vm=vmname|uuid

将配置范围设置为指定 VM 的第一个 NIC。任何后续的 --set-opt 选项将仅适用于该接口,其他任何地方都不适用。

--nic=1-N

将配置范围设置为 --vm 选项中指定的 VM 的第一个 NIC 以外的 NIC。

--mac-address=address

将配置范围设置为指定的 MAC 地址。

--group=name

将配置范围设置为指定的组。

配置当前选定范围的选项

--set-opt=dhcp-opt-no value

添加指定的 DHCP 选项号 (0-255) 和值。值格式是选项特定的(通常是人类可读的),并将由 API 和 DHCP 服务器验证。

--set-opt-hex=dhcp-opt-no hexstring

添加指定的 DHCP 选项编号(0-255)和值。选项值指定为一系列原始十六进制字节,可以按冒号分隔。API 或 DHCP 服务器不对这些值进行验证,它们将按指定方式传递给客户端。

--force-opt=dhcp-opt-no

强制将指定的 DHCP 选项编号(0-255)发送给客户端,无论其是否请求(前提是该选项已配置了某个级别的值)。

--suppress-opt=dhcp-opt-no

阻止在当前或更高级别的配置范围中出现的指定 DHCP 选项编号(0-255)发送给客户端。

--min-lease-time=seconds

以秒为单位设置当前范围的最小租约时间。零表示采用来自更高级别选项的值或使用默认值。

--default-lease-time=seconds

以秒为单位设置当前范围的默认租约时间。零表示采用来自更高级别选项的值或使用默认值。

--max-lease-time=seconds

设置当前范围的最大租约时间(秒)。零表示从更高级别的选项获取值或使用默认值。

--fixed-address=address

--vm--mac-address 配置范围设置固定的地址分配。任何为空的 address 都会将其恢复为动态地址分配。

配置组成员条件的选项(排除优先于包含)

--incl-mac=address

将指定的 MAC 地址包含在组中。

--excl-mac=address

将指定的 MAC 地址从组中排除。

--incl-mac-wild=pattern

将指定的 MAC 地址模式包含在组中。

--excl-mac-wild=pattern

将指定的 MAC 地址模式从组中排除。

--incl-vendor=string

将指定的供应商类 ID 包含在组中。

--excl-vendor=string

将指定的供应商类 ID 从组中排除。

--incl-vendor-wild=pattern

将指定的供应商类 ID 模式包含在组中。

--excl-vendor-wild=pattern

将指定的供应商类 ID 模式从组中排除。

--incl-user=string

将指定的用户类 ID 包含在组中。

--excl-user=string

将指定的用户类 ID 从组中排除。

--incl-user-wild=pattern

将指定的用户类 ID 模式包含在组中。

--excl-user-wild=pattern

将指定的用户类 ID 模式从组中排除。

dhcpserver modify

VBoxManage dhcpserver modify <‑‑network=netname | ‑‑interface=ifname> [‑‑server‑ip=address] [‑‑lower‑ip=address] [‑‑upper‑ip=address] [‑‑netmask=mask] [‑‑enable | ‑‑disable] [[‑‑global] [‑‑del‑opt=dhcp‑opt‑no...] [‑‑set‑opt=dhcp‑opt‑no value...] [‑‑set‑opt‑hex=dhcp‑opt‑no hexstring...] [‑‑force‑opt=dhcp‑opt‑no...] [‑‑unforce‑opt=dhcp‑opt‑no...] [‑‑suppress‑opt=dhcp‑opt‑no...] [‑‑unsuppress‑opt=dhcp‑opt‑no...] [‑‑min‑lease‑time=seconds] [‑‑default‑lease‑time=seconds] [‑‑max‑lease‑time=seconds] [‑‑remove‑config]...] [<‑‑group=name> [‑‑set‑opt=dhcp‑opt‑no value...] [‑‑set‑opt‑hex=dhcp‑opt‑no hexstring...] [‑‑force‑opt=dhcp‑opt‑no...] [‑‑unforce‑opt=dhcp‑opt‑no...] [‑‑suppress‑opt=dhcp‑opt‑no...] [‑‑unsuppress‑opt=dhcp‑opt‑no...] [‑‑del‑mac=address...] [‑‑incl‑mac=address...] [‑‑excl‑mac=address...] [‑‑del‑mac‑wild=pattern...] [‑‑incl‑mac‑wild=pattern...] [‑‑excl‑mac‑wild=pattern...] [‑‑del‑vendor=string...] [‑‑incl‑vendor=string...] [‑‑excl‑vendor=string...] [‑‑del‑vendor‑wild=pattern...] [‑‑incl‑vendor‑wild=pattern...] [‑‑excl‑vendor‑wild=pattern...] [‑‑del‑user=string...] [‑‑incl‑user=string...] [‑‑excl‑user=string...] [‑‑del‑user‑wild=pattern...] [‑‑incl‑user‑wild=pattern...] [‑‑excl‑user‑wild=pattern...] [‑‑zap‑conditions] [‑‑min‑lease‑time=seconds] [‑‑default‑lease‑time=seconds] [‑‑max‑lease‑time=seconds] [‑‑remove‑config]...] [<‑‑vm=name|uuid> [‑‑nic=1‑N] [‑‑del‑opt=dhcp‑opt‑no...] [‑‑set‑opt=dhcp‑opt‑no value...] [‑‑set‑opt‑hex=dhcp‑opt‑no hexstring...] [‑‑force‑opt=dhcp‑opt‑no...] [‑‑unforce‑opt=dhcp‑opt‑no...] [‑‑suppress‑opt=dhcp‑opt‑no...] [‑‑unsuppress‑opt=dhcp‑opt‑no...] [‑‑min‑lease‑time=seconds] [‑‑default‑lease‑time=seconds] [‑‑max‑lease‑time=seconds] [‑‑fixed‑address=address] [‑‑remove‑config]...] [<‑‑mac‑address=address> [‑‑del‑opt=dhcp‑opt‑no...] [‑‑set‑opt=dhcp‑opt‑no value...] [‑‑set‑opt‑hex=dhcp‑opt‑no hexstring...] [‑‑force‑opt=dhcp‑opt‑no...] [‑‑unforce‑opt=dhcp‑opt‑no...] [‑‑suppress‑opt=dhcp‑opt‑no...] [‑‑unsuppress‑opt=dhcp‑opt‑no...] [‑‑min‑lease‑time=seconds] [‑‑default‑lease‑time=seconds] [‑‑max‑lease‑time=seconds] [‑‑fixed‑address=address] [‑‑remove‑config]...]

“dhcpserver modify”命令修改现有的 DHCP 服务器配置。它接受与“add”命令相同的选项,并增加了以下具有可变配置范围的选项:

--del-opt=dhcp-opt-no

与“--set-opt”对应的选项,它将导致指定的 DHCP 选项编号(0-255)从服务器设置中删除。与“--set-opt”类似,删除的范围由“--global”、“--vm”、“--mac-address”和“--group”选项控制。

--unforce-opt=dhcp-opt-no

从强制选项列表中删除指定的 DHCP 选项编号(0-255)(即“--force-opt”的逆操作)。与“--set-opt”类似,删除的范围由“--global”、“--vm”、“--mac-address”和“--group”选项控制。

--unsuppress-opt=dhcp-opt-no

从抑制选项列表中删除指定的 DHCP 选项编号(0-255)(即“--suppress-opt”的逆操作)。与“--set-opt”类似,删除的范围由“--global”、“--vm”、“--mac-address”和“--group”选项控制。

--remove-config

删除当前正在作用域的配置。“--global”范围不可删除。在此选项之后,配置范围将更改为“--global”。

以及新增的这些组成员条件选项

--del-mac=address

从组条件中删除指定的 MAC 地址。

--del-mac-wild=pattern

从组条件中删除指定的 MAC 地址模式。

--del-vendor=string

从组条件中删除指定的供应商类 ID。

--del-vendor-wild=pattern

从组条件中删除指定的供应商类 ID 模式。

--del-user=string

从组条件中删除指定的用户类 ID。

--del-user-wild=pattern

从组条件中删除指定的用户类 ID 模式。

--zap-conditions

删除所有组条件。

dhcpserver remove

VBoxManage dhcpserver remove <‑‑network=netname | ‑‑interface=ifname>

删除指定的 DHCP 服务器。

dhcpserver start

VBoxManage dhcpserver start <‑‑network=netname | ‑‑interface=ifname>

启动指定的 DHCP 服务器。

dhcpserver restart

VBoxManage dhcpserver restart <‑‑network=netname | ‑‑interface=ifname>

重新启动指定的 DHCP 服务器。DHCP 服务器必须正在运行。

dhcpserver stop

VBoxManage dhcpserver stop <‑‑network=netname | ‑‑interface=ifname>

停止指定的 DHCP 服务器。

dhcpserver findlease

VBoxManage dhcpserver findlease <‑‑network=netname | ‑‑interface=ifname> <‑‑mac‑address=mac>

执行租约数据库查找。这主要用于获取正在运行的虚拟机的 IP 地址。

--mac-address=mac

要在租约数据库中查找的 MAC 地址。

通用 DHCP 选项

1 - 子网掩码

IPv4 子网掩码。默认情况下设置为 --netmask 选项的值。

2 - 时间偏移

UTC 偏移量,以秒为单位(32 位十进制值)。

3 - 路由器

以空格分隔的 IPv4 路由器地址列表。

4 - 时间服务器

以空格分隔的 IPv4 时间服务器 (RFC 868) 地址列表。

5 - 名称服务器

以空格分隔的 IPv4 名称服务器 (IEN 116) 地址列表。

6 - 域名服务器

以空格分隔的 IPv4 DNS 地址列表。

7 - 日志服务器

以空格分隔的 IPv4 日志服务器地址列表。

8 - Cookie 服务器

以空格分隔的 IPv4 Cookie 服务器 (RFC 865) 地址列表。

9 - LPR 服务器

以空格分隔的 IPv4 行式打印机服务器 (RFC 1179) 地址列表。

10 - Impress 服务器

以空格分隔的 IPv4 imagen impress 服务器地址列表。

11 - 资源位置服务器

以空格分隔的 IPv4 资源位置 (RFC 887) 地址列表。

12 - 主机名

客户端名称。有关字符限制,请参阅 RFC 1035。

13 - 引导文件大小

构成引导文件的 512 字节块的数量(16 位十进制值)。

14 - Merit 转储文件

客户端核心文件。

15 - 域名

客户端的域名。

16 - 交换服务器

客户端应使用的交换服务器的 IPv4 地址。

17 - 根路径

客户端应使用的根磁盘路径。

18 - 扩展路径

包含附加 DHCP 选项 (RFC2123) 的文件路径。

19 - IP 转发

客户端是否应启用 IP 转发(布尔值)。

20 - OptNonLocalSourceRouting

客户端是否应转发非本地数据报(布尔值)

21 - 策略过滤器

控制非本地源路由的 IPv4 地址和掩码对列表。

22 - 最大数据报重组大小

客户端应重组的最大数据报大小(16 位十进制值)。

23 - 默认 IP TTL

对传出 (IP) 数据报的默认生存时间(8 位十进制值)。

24 - 路径 MTU 老化超时

RFC1191 路径 MTU 发现超时值,以秒为单位(32 位十进制值)。

25 - 路径 MTU 高原表

RFC1191 路径 MTU 发现大小表,按升序排序(16 位十进制值列表)。

26 - 接口 MTU

接口的 MTU 大小(16 位十进制值)。

27 - 所有子网都是本地的

指示所有子网的 MTU 大小是否相同(布尔值)。

28 - 广播地址

客户端使用的广播地址 (RFC1122)(IPv4 地址)。

29 - 执行掩码发现

是否通过 ICMP 执行子网掩码发现(布尔值)。

30 - 掩码提供者

是否通过 ICMP 响应子网掩码请求(布尔值)。

31 - 执行路由器发现

是否执行路由器发现 (RFC1256)(布尔值)。

32 - 路由器请求地址

发送路由器请求的位置 (RFC1256)(IPv4 地址)。

33 - 静态路由

网络和路由器地址对列表。

34 - 尾部封装

是否协商使用 ARP 尾部 (RTF893)(布尔值)。

35 - ARP 缓存超时

ARP 缓存条目的超时时间(秒)(32 位十进制值)。

36 - 以太网封装

是使用 IEEE 802.3 (RTF1042) 还是 v2 (RFC894) 以太网封装(布尔值)。

37 - TCP 默认 TTL

TCP 发送的默认生存时间(非零 8 位十进制值)。

38 - TCP Keepalive 间隔

TCP keepalive 消息之间的接口(秒)(32 位十进制值)。

39 - TCP Keepalive 垃圾数据

TCP keepalive 消息中是否包含一个字节的垃圾数据以实现向后兼容(布尔值)。

40 - NIS 域

NIS (Sun 网络信息服务) 域名(字符串)。

41 - NIS 服务器

以空格分隔的 IPv4 NIS 服务器地址列表。

42 - NTP 服务器

以空格分隔的 IPv4 NTP (RFC1035) 服务器地址列表。

43 - 供应商特定信息

供应商特定信息。只能使用 --set-opt-hex 访问。

44 - NetBIOS 名称服务器

以空格分隔的 IPv4 NetBIOS 名称服务器 (NBNS) 地址列表 (RFC1001,RFC1002)。

45 - NetBIOS 数据报服务器

以空格分隔的 IPv4 NetBIOS 数据报分发服务器 (NBDD) 地址列表 (RFC1001,RFC1002)。

46 - NetBIOS 节点类型

NetBIOS 节点类型 (RFC1001,RFC1002):1=B 节点,2=P 节点,4=M 节点,8=H 节点(8 位十进制值)。

47 - NetBIOS 范围

NetBIOS 范围 (RFC1001,RFC1002)。只能使用 --set-opt-hex 访问。

48 - X Windows 字体服务器

以空格分隔的 IPv4 X Windows 字体服务器地址列表。

49 - X Windows 显示管理器

以空格分隔的 IPv4 X Windows 显示管理器地址列表。

62 - NetWare IP 域名

Netware IP 域名 (RFC2242)(字符串)。

63 - NetWare IP 信息

Netware IP 信息 (RFC2242)。只能使用 --set-opt-hex 访问。

64 - NIS+ 域

NIS+ 域名(字符串)。

65 - NIS+ 服务器

以空格分隔的 IPv4 NIS+ 服务器地址列表。

66 - TFTP 服务器名称

TFTP 服务器名称(字符串)。

67 - 引导文件名

引导文件名(字符串)。

68 - 移动 IP 家乡代理

以空格分隔的 IPv4 移动 IP 代理地址列表。

69 - SMTP 服务器

用空格分隔的 IPv4 简单邮件传输协议 (SMTP) 服务器地址列表。

70 - POP3 服务器

以空格分隔的 IPv4 邮局协议 3 (POP3) 服务器地址列表。

71 - NNTP 服务器

以空格分隔的 IPv4 网络新闻传输协议 (NTTP) 服务器地址列表。

72 - WWW 服务器

以空格分隔的默认 IPv4 万维网 (WWW) 服务器地址列表。

73 - Finger 服务器

以空格分隔的默认 IPv4 Finger 服务器地址列表。

74 - IRC 服务器

以空格分隔的默认 IPv4 互联网中继聊天 (IRC) 服务器地址列表。

75 - StreetTalk 服务器

以空格分隔的 IPv4 StreetTalk 服务器地址列表。

76 - STDA 服务器

以空格分隔的 IPv4 StreetTalk 目录辅助 (STDA) 服务器地址列表。

78 - SLP 目录代理

一个或多个服务位置协议 (SLP) 目录代理的地址,以及一个指示是否必须使用它们的标志。只能通过 --set-opt-hex 访问。

79 - SLP 服务范围

服务位置协议 (SLP) 的服务范围列表以及是否必须使用该列表。只能通过 --set-opt-hex 访问。

119 - 域搜索

域搜索列表,编码请参阅 RFC3397 和 RFC1035 中的第 4.1.4 节。只能使用 --set-opt-hex 访问。

VBoxManage discardstate

丢弃虚拟机的保存状态

概要

VBoxManage discardstate <uuid | vmname>

描述

“VBoxManage discardstate”命令会丢弃未运行的虚拟机的保存状态。此命令会导致 VM 在下次启动时重新启动其操作系统。

注意

如果可能,请避免执行此操作。此命令的效果等同于拔掉物理机的电源线。

uuid | vmname

指定虚拟机的通用唯一标识符 (UUID) 或名称。

示例

以下命令会丢弃名为 vm2 的 VM 的保存状态文件。下次启动 VM 时,VM 的操作系统将重新启动。

$ VBoxManage discardstate vm2

另请参阅

VBoxManage encryptmedium

管理 DEK 加密介质或映像

概要

VBoxManage encryptmedium <uuid | filename> [‑‑cipher=cipher‑ID] [‑‑newpassword=password] [‑‑newpasswordid=password‑ID] [‑‑oldpassword=password]

描述

“VBoxManage encryptmedium”命令使您能够创建和管理 DEK 加密介质或映像。您可以加密映像、解密映像以及更改映像的加密密码。请参阅 加密磁盘映像

uuid | filename

指定要加密的介质或镜像的通用唯一标识符 (UUID) 或绝对路径名。

--newpassword=password

指定新的加密密码。“password”是主机操作系统上的密码文件的绝对路径名,或者是 -,后者会提示您输入密码。

必须将“--newpasswordid”选项与此“--newpassword”选项一起使用。

--oldpassword=password

指定原始加密密码。“password”是主机操作系统上的密码文件的绝对路径名,或者是 -,后者会提示您输入原始密码。

此选项使您能够访问加密的介质或镜像以执行以下操作

  • 单独使用此选项解密加密的镜像。

  • 使用“--newpassword”选项更改加密映像的密码。

  • 使用“--cipher”选项更改映像的加密密码。

--cipher=cipher-ID

指定用于加密的密码。有效值为 AES-XTS128-PLAIN64AES-XTS256-PLAIN64

此选项使您能够在介质或镜像上设置或更改加密。

--newpasswordid=password-ID

指定一个新的密码标识符,用于在虚拟机启动期间提供多个密码时进行正确识别。

如果您在加密多个镜像时使用相同的密码和密码标识符,则在虚拟机启动期间只需提供一次密码。

示例

以下示例演示如何使用 AES-XTS128-PLAIN64 密码加密 ol7u4-1.vdi 映像,指定密码标识符为 1001,并使用 $HOME/pwfile 密码文件。

$ VBoxManage encryptmedium "$HOME/VirtualBox VMs/ol7u4/ol7u4-1.vdi" \
  --cipher="AES-XTS128-PLAIN64" --newpasswordid="1001" --newpassword=$HOME/pwfile

以下示例演示如何解密名为 ol7u4-2.vdi 的加密映像。

$ VBoxManage encryptmedium "$HOME/VirtualBox VMs/ol7u4/ol7u4-2.vdi" \
  --oldpassword=-
  Password: original-password

以下示例演示如何更改名为 ol7u4-3.vdi 的加密映像的密码。该命令从 $HOME/pwfile.orig 文件读取原始密码,从 $HOME/pwfile 文件读取新密码,并将密码标识符指定为 1001

$ VBoxManage encryptmedium "$HOME/VirtualBox VMs/ol7u4/ol7u4-3.vdi" \
  --oldpassword=$HOME/pwfile.orig --newpassword=$HOME/pwfile --newpasswordid="1001"

VBoxManage encryptvm

更改 VM 的加密和密码

概要

VBoxManage encryptvm <uuid | vmname>setencryption‑‑old‑passwordfile‑‑ciphercipher‑identifier‑‑new‑passwordfile‑‑new‑password‑idpassword‑identifier‑‑force

VBoxManage encryptvm <uuid | vmname>checkpassword <file>

VBoxManage encryptvm <uuid | vmname>addpassword‑‑passwordfile‑‑password‑idpassword‑identifier

VBoxManage encryptvm <uuid | vmname>removepassword <password‑identifier>

描述

“VBoxManage encryptvm”命令使您能够更改虚拟机的加密或添加和删除用户密码。以下各节介绍您可以使用​​的子命令。

设置虚拟机的加密

VBoxManage encryptvm <uuid | vmname>setencryption‑‑old‑passwordfile‑‑ciphercipher‑identifier‑‑new‑passwordfile‑‑new‑password‑idpassword‑identifier‑‑force

“VBoxManage encryptvm vmname setencryption”命令会更改 VM 的加密。

使用“--old-password”提供旧的加密密码。要​​么指定主机操作系统上密码文件的绝对路径名,要么指定 - 以提示输入旧密码。

使用“--cipher”选项指定 VM 加密的新密码。仅支持 AES-128AES-256。VM 将根据加密组件选择适当的模式 GCM、CTR 或 XTS。

使用“--new-password”选项指定 VM 加密的新密码。要​​么指定主机操作系统上密码文件的绝对路径名,要么指定 - 以提示输入新密码。

使用“--new-password-id”选项指定 VM 加密密码的新 ID。

使用“--force”选项使系统重新加密 VM,而不是简单地更改密码。

检查提供的密码是否正确

VBoxManage encryptvm <uuid | vmname>checkpassword <file>

“VBoxManage encryptvm vmname checkpassword”命令会检查提供的密码的正确性。

密码可以从文件提供。指定主机操作系统上密码文件的绝对路径名。此外,您还可以指定 - 以提示您输入密码。

添加用于解密虚拟机的密码

VBoxManage encryptvm <uuid | vmname>addpassword‑‑passwordfile‑‑password‑idpassword‑identifier

“VBoxManage encryptvm vmname addpassword”命令会添加用于解密 VM 的密码。

使用“--password”提供加密密码。要​​么指定主机操作系统上密码文件的绝对路径名,要么指定 - 以提示您输入密码。

使用“--password-id”选项指定提供密码的 ID。

删除用于解密虚拟机的密码

VBoxManage encryptvm <uuid | vmname>removepassword <password‑identifier>

“VBoxManage encryptvm vmname removepassword”命令会删除用于解密 VM 的密码。

指定要删除的密码标识符。密码将变为未知,虚拟机无法解密。

示例

以下命令使用 AES-256 加密 ol7 VM,通过命令提示符提供密码。

$ VBoxManage encryptvm ol7 setencryption --cipher=AES-256 --new-password - --new-password-id vmid

另请参阅

VBoxManage export

将一个或多个虚拟机导出到虚拟机设备或云服务

概要

VBoxManage export <machines> <‑‑output=name> [‑‑legacy09 | ‑‑ovf09 | ‑‑ovf10 | ‑‑ovf20] [‑‑manifest] [‑‑options=manifest | iso | nomacs | nomacsbutnat...] [‑‑vsys=virtual‑system‑number] [‑‑description=description‑info] [‑‑eula=license‑text] [‑‑eulafile=filename] [‑‑product=product‑name] [‑‑producturl=product‑URL] [‑‑vendor=vendor‑name] [‑‑vendorurl=vendor‑URL] [‑‑version=version‑info] [‑‑vmname=vmname]

VBoxManage export <machine> <‑‑output=cloud‑service‑provider> [‑‑opc10] [‑‑vmname=vmname] [‑‑cloud=virtual‑system‑number] [‑‑cloudprofile=cloud‑profile‑name] [‑‑cloudshape=cloud‑shape‑name] [‑‑clouddomain=cloud‑domain] [‑‑clouddisksize=disk‑size‑in‑GB] [‑‑cloudbucket=bucket‑name] [‑‑cloudocivcn=OCI‑VCN‑ID] [‑‑cloudocisubnet=OCI‑subnet‑ID] [‑‑cloudkeepobject=true | false] [‑‑cloudlaunchinstance=true | false] [‑‑cloudlaunchmode=EMULATED | PARAVIRTUALIZED] [‑‑cloudpublicip=true | false]

描述

“VBoxManage export”命令使您能够将 Oracle VirtualBox 中的一个或多个虚拟机(VM)导出为以下任一格式:

  • OVF 格式的虚拟机设备。 这包括将 VM 的虚拟磁盘映像复制为压缩的 VMDK。

  • 云服务,例如 Oracle Cloud Infrastructure。 导出单个 VM。

有关从 Oracle VirtualBox 导出 VM 的更多信息,请参阅 导入和导出虚拟机

将虚拟机导出到 OVF 虚拟机设备

VBoxManage export <machines> <‑‑output=name> [‑‑legacy09 | ‑‑ovf09 | ‑‑ovf10 | ‑‑ovf20] [‑‑manifest] [‑‑options=manifest | iso | nomacs | nomacsbutnat...] [‑‑vsys=virtual‑system‑number] [‑‑description=description‑info] [‑‑eula=license‑text] [‑‑eulafile=filename] [‑‑product=product‑name] [‑‑producturl=product‑URL] [‑‑vendor=vendor‑name] [‑‑vendorurl=vendor‑URL] [‑‑version=version‑info] [‑‑vmname=vmname]

“VBoxManage export”命令使您能够将 VM 导出为 OVF 格式的虚拟机设备。

机器

指定一个或多个要导出到同一 OVF 文件的机器的逗号分隔列表。

--output=filename

指定目标 OVF 文件。该文件可以是 OVF、OVA 或使用 gzip 命令压缩的 ZIP 文件。由于包含目标 OVF 文件的目录还将以压缩的 VMDK 格式存储导出的磁盘映像,因此请确保该目录有足够的磁盘空间来存储这些映像。

此选项的短形式是 -o

--legacy09

如果虚拟化产品与 OVF 1.0 标准不完全兼容,则以 OVF 0.9 传统模式导出。

--ovf09

以 OVF 0.9 格式导出。

--ovf10

以 OVF 1.0 格式导出。

--ovf20

以 OVF 2.0 格式导出。

--manifest

创建导出文件的清单。

--options=argument,...

指定控制设备文件确切内容的信息。指定一个或多个逗号分隔的参数

清单

生成一个清单文件,用于在导入时检测损坏的设备。

iso

将 DVD 镜像导出为 ISO 文件。

nomacs

排除所有 MAC 地址。

nomacsbutnat

排除所有 MAC 地址,除了 NAT 网络中的地址。

--description=description-info

指定虚拟机的描述。

--eula=license-text

指定最终用户许可文本。

--eulafile=filename

指定最终用户许可文件。

--product=product-name

指定产品名称。

--producturl=product-URL

指定产品 URL。

--vendor=vendor-name

指定供应商名称。

--vendorurl=vendor-URL

指定供应商 URL。

--version=version-info

指定版本信息。

--vmname=vmname

指定要导出的 VM 的名称。

--vsys=virtual-system-number

指定虚拟系统的编号。

将虚拟机导出到 Oracle Cloud Infrastructure

VBoxManage export <machine> <‑‑output=cloud‑service‑provider> [‑‑opc10] [‑‑vmname=vmname] [‑‑cloud=virtual‑system‑number] [‑‑cloudprofile=cloud‑profile‑name] [‑‑cloudshape=cloud‑shape‑name] [‑‑clouddomain=cloud‑domain] [‑‑clouddisksize=disk‑size‑in‑GB] [‑‑cloudbucket=bucket‑name] [‑‑cloudocivcn=OCI‑VCN‑ID] [‑‑cloudocisubnet=OCI‑subnet‑ID] [‑‑cloudkeepobject=true | false] [‑‑cloudlaunchinstance=true | false] [‑‑cloudlaunchmode=EMULATED | PARAVIRTUALIZED] [‑‑cloudpublicip=true | false]

“VBoxManage export”命令使您能够将 VM 导出到云服务提供商,例如 Oracle Cloud Infrastructure。默认情况下,导出的磁盘映像将转换为压缩的 VMDK 格式。这最大程度地减少了要传输到云服务的数据量。

以下某些选项是虚拟机实例的配置设置。因此,请为资源指定 Oracle Cloud 标识符 (OCID)。使用 Oracle Cloud Infrastructure 控制台查看 OCID。

--output=cloud-service-provider

指定您要导出 VM 的云服务提供商的短名称。对于 Oracle Cloud Infrastructure,请指定 OCI://

此选项的短形式是 -o

--opc10

以 Oracle Cloud Infrastructure 格式导出。

--cloud=number-of-virtual-system

指定一个标识要导出的 VM 的数字。编号从第一个 VM 的 0 开始。

--vmname=vmname

指定导出虚拟机的名称,该名称在 Oracle Cloud Infrastructure 中用作虚拟机实例名称。

--cloudprofile=cloud-profile-name

指定用于连接到云服务提供商的云配置文件。云配置文件包含您的 Oracle Cloud Infrastructure 账户详细信息,例如您的用户 OCID 和公共密钥的指纹。

要使用云配置文件,您必须在 Oracle Cloud Infrastructure 上拥有所需的权限。

--cloudshape=cloud-shape-name

指定虚拟机实例使用的形状。形状定义了分配给虚拟机实例的 CPU 数量和内存量。确保形状与导出的镜像兼容。

--clouddomain=cloud-domain

指定用于虚拟机实例的可用性域。输入可用性域的完整名称。

--clouddisksize=disk-size-in-GB

指定用于导出磁盘镜像的磁盘空间量,以千兆字节为单位。有效值为 50 GB 到 300 GB。

--cloudbucket=bucket-name

指定用于存储上传文件的存储桶。在 Oracle Cloud Infrastructure 中,存储桶是用于存储对象的逻辑容器。

--cloudocivcn=OCI-VCN-ID

指定用于虚拟机实例的虚拟云网络 (VCN) 的 OCID。

--cloudocisubnet=OCI-subnet-ID

指定用于虚拟机实例的 VCN 子网的 OCID。

--cloudkeepobject=true | false

指定是否将导出的磁盘镜像存储在 Oracle 对象存储中。

--cloudlaunchinstance=true | false

指定在导出到 Oracle Cloud Infrastructure 完成后是否启动虚拟机实例。

--cloudlaunchinstance=EMULATED | PARAVIRTUALIZED

指定实例使用的启动模式。半虚拟化模式可提供改进的性能。

--cloudpublicip=true | false

指定是否为虚拟机实例启用公共 IP 地址。

示例

以下示例显示了如何将 myVM VM 导出到 Oracle Cloud Infrastructure。该命令的选项参数描述了 Oracle Cloud Infrastructure 中 myVM_Cloud VM 的配置。

# VBoxManage export myVM --output=OCI:// --cloud=0 --vmname=myVM_Cloud \
--cloudprofile="standard user" --cloudbucket=myBucket \
--cloudshape=VM.Standard2.1 --clouddomain=US-ASHBURN-AD-1 --clouddisksize=50  \
--cloudocivcn=ocid1.vcn.oc1.iad.aaaa... --cloudocisubnet=ocid1.subnet.oc1.iad.aaaa... \
--cloudkeepobject=true --cloudlaunchinstance=true --cloudpublicip=true

VBoxManage extpack

扩展包管理

概要

VBoxManage extpack install [‑‑replace] [‑‑accept‑license=sha256] <tarball>

VBoxManage extpack uninstall [‑‑force] <name>

VBoxManage extpack cleanup

描述

extpack install

VBoxManage extpack install [‑‑replace] [‑‑accept‑license=sha256] <tarball>

在系统上安装新的扩展包。如果已安装相同类型的旧版本扩展包且未提供“--replace”,则此命令将失败。“--replace”选项会在安装新扩展包之前卸载任何已安装的相同类型的扩展包。

--replace

在安装指定扩展包之前卸载现有的扩展包。

--accept-license=sha256

接受具有给定 SHA-256 散列值的许可文本。

VBoxManage 在执行手动安装时会显示 SHA-256 值。可以使用 tar(1) 从扩展包中提取许可证文件,然后运行 sha256sum 或类似工具生成哈希值来手动计算哈希值。

tarball

包含要安装的扩展包的文件。

extpack uninstall

VBoxManage extpack uninstall [‑‑force] <name>

从系统卸载扩展包。即使系统上不存在指定的扩展包,该子命令也会成功。您可以使用 VBoxManage list extpacks 来列出当前已安装的扩展包的名称。

--force

覆盖大多数拒绝卸载扩展包的情况

name

要卸载的扩展包的名称。

extpack cleanup

VBoxManage extpack cleanup

用于删除在之前安装或卸载命令失败时可能遗留的临时文件和目录。

示例

如何列出扩展包
$ VBoxManage list extpacks
Extension Packs: 1
Pack no. 0:   Oracle VirtualBox Extension Pack
Version:      4.1.12
Revision:     77218
Edition:
Description:  USB 2.0 Host Controller, VirtualBox RDP, PXE ROM with E1000 support.
VRDE Module:  VBoxVRDP
Usable:       true
Why unusable:
如何删除扩展包
$ VBoxManage extpack uninstall "Oracle VirtualBox Extension Pack"
0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100%
Successfully uninstalled "Oracle VirtualBox Extension Pack".

VBoxManage getextradata

查看与虚拟机或配置关联的关键字值

概要

VBoxManage getextradata <global | uuid | vmname> <keyword | enumerate>

描述

命令 VBoxManage getextradata 使您能够检索与虚拟机 (VM) 或 Oracle VirtualBox 配置关联的关键字数据。

全局

指定检索有关配置而非虚拟机的信息。

uuid | vmname

指定虚拟机的通用唯一标识符 (UUID) 或名称。

枚举

显示指定虚拟机或配置的所有关键字值。

关键字

指定要检索其值的关键字。

示例

以下命令检索 Fedora5 VM 的 installdate 关键字值。

$ VBoxManage getextradata Fedora5 installdate
VirtualBox Command Line Management Interface Version version-number
Copyright (C) 2005-2024 Oracle and/or its affiliates

Value: 2006.01.01

以下命令检索 OracleLinux7u4 VM 的所有关键字的信息。

$ VBoxManage getextradata OracleLinux7u4 enumerate
Key: GUI/LastCloseAction, Value: PowerOff
Key: GUI/LastGuestSizeHint, Value: 1048,696
Key: GUI/LastNormalWindowPosition, Value: 851,286,1048,738

以下命令检索配置中所有关键字的信息

$ VBoxManage getextradata global enumerate
Key: GUI/LastItemSelected, Value: m=OracleLinux7u4
Key: GUI/LastWindowPosition, Value: 951,510,960,520
Key: GUI/SplitterSizes, Value: 318,637
Key: GUI/Toolbar/MachineTools/Order, Value: Details
Key: GUI/Tools/LastItemsSelected, Value: Welcome,Details
Key: GUI/UpdateCheckCount, Value: 71
Key: GUI/UpdateDate, Value: 1 d, 2022-10-10, stable, 7.0.0
Key: GUI/VirtualMediaManager/Details/Expanded, Value: true

VBoxManage guestcontrol

从宿主机控制虚拟机

概要

VBoxManage guestcontrol <uuid | vmname>run [‑‑arg0=argument 0] [‑‑domain=domainname] [‑‑dos2unix] [‑‑exe=filename] [‑‑ignore‑orphaned‑processes] [‑‑no‑wait‑stderr | ‑‑wait‑stderr] [‑‑no‑wait‑stdout | ‑‑wait‑stdout] [‑‑passwordfile=password‑file | ‑‑password=password] [‑‑profile] [‑‑putenv=var‑name=[value]] [‑‑quiet] [‑‑timeout=msec] [‑‑unix2dos] [‑‑unquoted‑args] [‑‑username=username] [‑‑cwd=directory] [‑‑verbose] <‑‑[argument...]>

VBoxManage guestcontrol <uuid | vmname>start [‑‑arg0=argument 0] [‑‑domain=domainname] [‑‑exe=filename] [‑‑ignore‑orphaned‑processes] [‑‑passwordfile=password‑file | ‑‑password=password] [‑‑profile] [‑‑putenv=var‑name=[value]] [‑‑quiet] [‑‑timeout=msec] [‑‑unquoted‑args] [‑‑username=username] [‑‑cwd=directory] [‑‑verbose] <‑‑[argument...]>

VBoxManage guestcontrol <uuid | vmname>copyfrom [‑‑dereference] [‑‑domain=domainname] [‑‑passwordfile=password‑file | ‑‑password=password] [‑‑quiet] [‑‑no‑replace] [‑‑recursive] [‑‑target‑directory=host‑destination‑dir] [‑‑update] [‑‑username=username] [‑‑verbose] <guest‑source0>guest‑source1[...] <host‑destination>

VBoxManage guestcontrol <uuid | vmname>copyto [‑‑dereference] [‑‑domain=domainname] [‑‑passwordfile=password‑file | ‑‑password=password] [‑‑quiet] [‑‑no‑replace] [‑‑recursive] [‑‑target‑directory=guest‑destination‑dir] [‑‑update] [‑‑username=username] [‑‑verbose] <host‑source0>host‑source1[...]

VBoxManage guestcontrol <uuid | vmname>mkdir [‑‑domain=domainname] [‑‑mode=mode] [‑‑parents] [‑‑passwordfile=password‑file | ‑‑password=password] [‑‑quiet] [‑‑username=username] [‑‑verbose] <guest‑directory...>

VBoxManage guestcontrol <uuid | vmname>rmdir [‑‑domain=domainname] [‑‑passwordfile=password‑file | ‑‑password=password] [‑‑quiet] [‑‑recursive] [‑‑username=username] [‑‑verbose] <guest‑directory...>

VBoxManage guestcontrol <uuid | vmname>rm [‑‑domain=domainname] [‑‑force] [‑‑passwordfile=password‑file | ‑‑password=password] [‑‑quiet] [‑‑username=username] [‑‑verbose] <guest‑directory...>

VBoxManage guestcontrol <uuid | vmname>mv [‑‑domain=domainname] [‑‑passwordfile=password‑file | ‑‑password=password] [‑‑quiet] [‑‑username=username] [‑‑verbose] <source...> <destination‑directory>

VBoxManage guestcontrol <uuid | vmname>mktemp [‑‑directory] [‑‑domain=domainname] [‑‑mode=mode] [‑‑passwordfile=password‑file | ‑‑password=password] [‑‑quiet] [‑‑secure] [‑‑tmpdir=directory‑name] [‑‑username=username] [‑‑verbose] <template‑name>

VBoxManage guestcontrol <uuid | vmname>mount [‑‑passwordfile=password‑file | ‑‑password=password] [‑‑username=username] [‑‑verbose]

VBoxManage guestcontrol <uuid | vmname>fsinfo [‑‑domain=domainname] [‑‑passwordfile=password‑file | ‑‑password=password] [‑‑human‑readable] [‑‑quiet] [‑‑total] [‑‑username=username] [‑‑verbose] <path>

VBoxManage guestcontrol <uuid | vmname>stat [‑‑domain=domainname] [‑‑passwordfile=password‑file | ‑‑password=password] [‑‑quiet] [‑‑username=username] [‑‑verbose] <filename>

VBoxManage guestcontrol <uuid | vmname>list <all | files | processes | sessions> [‑‑quiet] [‑‑verbose]

VBoxManage guestcontrol <uuid | vmname>closeprocess [‑‑session‑id=ID | ‑‑session‑name=name‑or‑pattern] [‑‑quiet] [‑‑verbose] <PID...>

VBoxManage guestcontrol <uuid | vmname>closesession [‑‑all | ‑‑session‑id=ID | ‑‑session‑name=name‑or‑pattern] [‑‑quiet] [‑‑verbose]

VBoxManage guestcontrol <uuid | vmname>updatega [‑‑quiet] [‑‑verbose] [‑‑source=guest‑additions.ISO] [‑‑wait‑start] [‑‑[argument...]]

VBoxManage guestcontrol <uuid | vmname>watch [‑‑quiet] [‑‑verbose]

描述

命令 VBoxManage guestcontrol 使您能够从宿主机控制客户机 (VM)。请参阅 客户机应用程序控制

通用选项和操作数

以下选项可供任何 VBoxManage guestcontrol 子命令使用。

uuid | vmname

指定虚拟机的通用唯一标识符 (UUID) 或名称。

--quiet

指定命令产生更安静的输出。

此选项的短格式为 -q

--verbose

指定命令产生更详细的输出。

此选项的短格式为 -v

一些 VBoxManage guestcontrol 子命令要求您提供客户机凭据进行身份验证。这些子命令包括: copyfromcopytofsinfomkdirmktempmountmvrmdirrmrunstartstat

虽然您无法执行匿名执行,但用户帐户密码是可选的,具体取决于客户机操作系统的安全策略。如果用户帐户没有关联的密码,请指定一个空密码。在 Windows 等操作系统上,您可能需要调整安全策略以允许具有空密码的用户帐户。此外,全局域规则可能适用,因此无法更改。

以下选项用于在客户机虚拟机上进行身份验证

--domain=domainname

指定 Windows 客户机虚拟机的用户域。

--password=password

指定指定用户的密码。如果您未在命令行中指定密码,或者密码为空,则指定的用户需要具有空密码。

--passwordfile=filename

指定包含指定用户密码的宿主机文件上的绝对路径。如果密码文件为空或您未在命令行中指定密码,则指定的用户名需要具有空密码。

--username=username

指定运行进程的客户机操作系统中的现有用户。如果未指定,则调用 VBoxManage 命令的宿主机上的用户名将用作客户机操作系统登录的用户名。

客户机进程限制

默认情况下,您可以同时运行多达 255 个客户机进程。如果尝试启动新客户机进程会超出此限制,并且存在不活动的客户机进程,则会丢弃最旧的不活动客户机进程以运行新进程。您无法检索已丢弃客户机进程的输出。如果所有 255 个客户机进程都处于活动状态并正在运行,则尝试启动新客户机进程将失败。

在客户机中运行命令

VBoxManage guestcontrol <uuid | vmname>run [‑‑arg0=argument 0] [‑‑domain=domainname] [‑‑dos2unix] [‑‑exe=filename] [‑‑ignore‑orphaned‑processes] [‑‑no‑wait‑stderr | ‑‑wait‑stderr] [‑‑no‑wait‑stdout | ‑‑wait‑stdout] [‑‑passwordfile=password‑file | ‑‑password=password] [‑‑profile] [‑‑putenv=var‑name=[value]] [‑‑quiet] [‑‑timeout=msec] [‑‑unix2dos] [‑‑unquoted‑args] [‑‑username=username] [‑‑cwd=directory] [‑‑verbose] <‑‑[argument...]>

命令 VBoxManage guestcontrol vmname run 使您能够在客户机 VM 中执行程序。标准输入、标准输出和标准错误会从 VM 重定向到宿主机,直到程序完成。

注意

Microsoft Windows 在使用 VBoxManage guestcontrol run 启动图形用户界面应用程序时会施加某些限制。请参阅 已知限制

--exe=path-to-executable

指定在客户机 VM 中运行的可执行程序的绝对路径。例如: C:\Windows\System32\calc.exe

--arg0=alternate-executable-name

为正在客户机中运行的可执行文件指定备用名称(即 arg0 或 argv[0])。

--cwd=path-to-directory

指定启动程序的目录的绝对路径。可选。目录必须存在且客户机用户可访问。例如: C:\Users\production\work_area

此选项的短格式为 -C

--timeout=msec

指定程序可以运行的最长时间(以毫秒为单位)。在程序运行时,VBoxManage 会接收其输出。

如果您未指定超时值,VBoxManage 将无限期等待进程结束或发生错误。

--putenv=NAME=[value]

在客户机虚拟机环境中设置、修改和取消设置环境变量。

当您创建客户机进程时,它将以默认的标准客户机操作系统环境运行。使用此选项修改该默认环境中的环境变量。

使用 --putenv=NAME=[value] 选项设置或修改由 NAME 指定的环境变量。

使用 --putenv=NAME= 选项取消设置由 NAME 指定的环境变量。

确保包含空格的任何环境变量名称或值都用引号括起来。

为要修改的每个环境变量指定一个 --putenv 选项。

此选项的短格式为 -E

--unquoted-args

禁用对传递给程序的参数的转义双引号。例如,\"fred\"

--ignore-orphaned-processes

忽略孤儿进程。尚未实现。

--profile

使用 shell 配置文件指定要使用的环境。尚未实现。

--no-wait-stdout

不等待客户机进程结束或接收其退出代码和任何失败解释。

--wait-stdout

等待客户机进程结束以接收其退出代码和任何失败说明。VBoxManage 命令在进程运行时接收客户机进程的标准输出。

--no-wait-stderr

不等待客户机进程结束以接收其退出代码、错误消息和标志。

--wait-stderr

等待客户机进程结束以接收其退出代码、错误消息和标志。VBoxManage 命令在进程运行时接收客户机进程的标准错误。

--dos2unix

将 DOS 或 Windows 客户机输出转换为 UNIX 或 Linux 输出。此转换将 CR + LF 行尾更改为 LF。尚未实现。

--unix2dos

将 UNIX 或 Linux 客户机输出转换为 DOS 或 Windows 输出。此转换将 LF 行尾更改为 CR + LF。

-- [argument...]

指定要传递给在客户机中运行的程序的一个或多个参数。

确保包含空格的任何命令参数都用引号括起来。

在客户机中启动命令

VBoxManage guestcontrol <uuid | vmname>start [‑‑arg0=argument 0] [‑‑domain=domainname] [‑‑exe=filename] [‑‑ignore‑orphaned‑processes] [‑‑passwordfile=password‑file | ‑‑password=password] [‑‑profile] [‑‑putenv=var‑name=[value]] [‑‑quiet] [‑‑timeout=msec] [‑‑unquoted‑args] [‑‑username=username] [‑‑cwd=directory] [‑‑verbose] <‑‑[argument...]>

命令 VBoxManage guestcontrol vmname start 使您能够执行客户机程序,并在命令成功启动后返回。调用命令时,不会等待从 stdout 或 stderr 读取所有数据再返回。

注意

Microsoft Windows 在使用 VBoxManage guestcontrol start 启动图形用户界面应用程序时会施加某些限制。请参阅 已知限制

将文件从客户机复制到宿主机。

VBoxManage guestcontrol <uuid | vmname>copyfrom [‑‑dereference] [‑‑domain=domainname] [‑‑passwordfile=password‑file | ‑‑password=password] [‑‑quiet] [‑‑no‑replace] [‑‑recursive] [‑‑target‑directory=host‑destination‑dir] [‑‑update] [‑‑username=username] [‑‑verbose] <guest‑source0>guest‑source1[...] <host‑destination>

命令 VBoxManage guestcontrol vmname copyfrom 使您能够将文件从客户机 VM 复制到宿主机。

--dereference

启用在客户机文件系统上跟踪符号链接。

--no-replace

仅当文件在主机上尚不存在时才复制。

此选项的短格式为 -n

--recursive

递归地将文件和目录从指定的客户机目录复制到主机。

此选项的短格式为 -R

--target-directory=host-dst-dir

指定宿主机上目标目录的绝对路径。例如, C:\Temp

--update

仅当客户机文件比主机上的文件新时才复制。

此选项的短格式为 -u

guest-source0 [guest-source1 [...]]

指定要从客户机 VM 复制的一个或多个文件的绝对路径。例如, C:\Windows\System32\calc.exe。您可以使用通配符指定多个文件。例如, C:\Windows\System*\*.dll

将文件从宿主机复制到客户机。

VBoxManage guestcontrol <uuid | vmname>copyto [‑‑dereference] [‑‑domain=domainname] [‑‑passwordfile=password‑file | ‑‑password=password] [‑‑quiet] [‑‑no‑replace] [‑‑recursive] [‑‑target‑directory=guest‑destination‑dir] [‑‑update] [‑‑username=username] [‑‑verbose] <host‑source0>host‑source1[...]

命令 VBoxManage guestcontrol vmname copyto 使您能够将文件从宿主机复制到客户机 VM。

--dereference

启用在主机系统上跟踪符号链接。

--no-replace

仅当文件在客户机上尚不存在时才复制。

此选项的短格式为 -n

--recursive

递归地将文件和目录从指定的主机目录复制到客户机。

此选项的短格式为 -R

--target-directory=guest-dst-dir

指定客户机上目标目录的绝对路径。例如, /home/myuser/fromhost

--update

仅当主机文件比客户机上的文件新时才复制。

此选项的短格式为 -u

host-source0 [host-source1 [...]]

指定要从宿主机复制的文件的绝对路径。例如, C:\Windows\System32\calc.exe。您可以使用通配符指定多个文件。例如, C:\Windows\System*\*.dll

显示客户机文件系统信息。

VBoxManage guestcontrol <uuid | vmname>fsinfo [‑‑domain=domainname] [‑‑passwordfile=password‑file | ‑‑password=password] [‑‑human‑readable] [‑‑quiet] [‑‑total] [‑‑username=username] [‑‑verbose] <path>

命令 VBoxManage guestcontrol vmname fsinfo 使您能够显示客户机 VM 的文件系统信息。

此子命令的备用形式是 df

--human-readable

以人类可读的形式显示磁盘大小。

--total

生成所有磁盘大小的总计。

guest-path [guest-path...]

指定用于显示客户机文件系统信息的绝对路径。

在客户机上创建目录。

VBoxManage guestcontrol <uuid | vmname>mkdir [‑‑domain=domainname] [‑‑mode=mode] [‑‑parents] [‑‑passwordfile=password‑file | ‑‑password=password] [‑‑quiet] [‑‑username=username] [‑‑verbose] <guest‑directory...>

命令 VBoxManage guestcontrol vmname mkdir 使您能够在客户机 VM 上创建一到多个目录。

此子命令的备用形式是 mdcreatedircreatedirectory

--parents

创建指定目录的任何缺失的父目录。

例如,如果您尝试创建 D:\Foo\Bar 目录,但 D:\Foo 目录不存在,使用 --parents 将创建缺失的 D:\Foo 目录。但是,如果您尝试创建 D:\Foo\Bar 并且未指定 --parents 选项,命令将失败。

--mode=mode

指定用于指定目录的权限模式。如果您指定了 --parents 选项,则该模式也用于关联的父目录。mode 是一个四位数的八进制模式,例如 0755

guest-dir [guest-dir...]

指定要在客户机 VM 上创建的一个或多个目录的绝对路径。例如, D:\Foo\Bar

如果客户机 VM 上不存在所有关联的父目录,则必须指定 --parents 选项。

您必须在客户机虚拟机上拥有足够的权限才能创建指定的目录及其父目录。

从客户机中删除目录。

VBoxManage guestcontrol <uuid | vmname>rmdir [‑‑domain=domainname] [‑‑passwordfile=password‑file | ‑‑password=password] [‑‑quiet] [‑‑recursive] [‑‑username=username] [‑‑verbose] <guest‑directory...>

命令 VBoxManage guestcontrol vmname rmdir 使您能够从客户机 VM 中删除指定的目录。

此子命令的备用形式是 removedirremovedirectory

--recursive

递归地从客户机虚拟机中删除指定的目录。

此选项的短格式为 -R

guest-dir [guest-dir...]

指定要从客户机 VM 中删除的一个或多个目录的绝对路径。您可以使用通配符指定目录名称。例如, D:\Foo\*Bar

您必须在客户机虚拟机上拥有足够的权限才能删除指定的目录及其父目录。

从客户机中删除文件。

VBoxManage guestcontrol <uuid | vmname>rm [‑‑domain=domainname] [‑‑force] [‑‑passwordfile=password‑file | ‑‑password=password] [‑‑quiet] [‑‑username=username] [‑‑verbose] <guest‑directory...>

命令 VBoxManage guestcontrol vmname rm 使您能够从客户机 VM 中删除指定的文件。

此子命令的备用形式是 removefile

--force

强制执行操作并覆盖任何确认请求。

此选项的短格式为 -f

guest-file [guest-file...]

指定要从客户机 VM 中删除的一个或多个文件的绝对路径。您可以使用通配符指定文件名。例如, D:\Foo\Bar\text*.txt

您必须在客户机虚拟机上拥有足够的权限才能删除指定的文件。

重命名客户机上的文件或目录

VBoxManage guestcontrol <uuid | vmname>mv [‑‑domain=domainname] [‑‑passwordfile=password‑file | ‑‑password=password] [‑‑quiet] [‑‑username=username] [‑‑verbose] <source...> <destination‑directory>

命令 VBoxManage guestcontrol vmname mv 使您能够重命名客户机 VM 上的文件和目录。

此子命令的备用形式是 moverenrename

guest-source [guest-source...]

指定要在客户机 VM 上移动或重命名的一个文件或单个目录的绝对路径。您可以使用通配符指定文件名。

您必须在客户机 VM 上拥有足够的权限才能访问指定的文件或目录。

dest

指定重命名文件或目录的绝对路径,或者要将文件移动到的目标目录。如果要移动的文件只有一个,dest 可以是文件或目录,否则 dest 必须是目录。

您必须在客户机 VM 上拥有足够的权限才能访问目标文件或目录。

在客户机上创建临时文件或目录

VBoxManage guestcontrol <uuid | vmname>mktemp [‑‑directory] [‑‑domain=domainname] [‑‑mode=mode] [‑‑passwordfile=password‑file | ‑‑password=password] [‑‑quiet] [‑‑secure] [‑‑tmpdir=directory‑name] [‑‑username=username] [‑‑verbose] <template‑name>

命令 VBoxManage guestcontrol vmname mktemp 使您能够创建临时文件或临时目录在客户机 VM 上。您可以使用此命令来协助后续将文件从宿主机复制到客户机 VM。默认情况下,此命令在客户机 VM 的特定于平台的 temp 目录中创建文件或目录。

此子命令的备用形式是 createtempcreatetemporary

--directory

创建由 template 操作数指定的临时目录。

--secure

通过将权限模式设置为 0755 来强制执行安全的文件和目录创建。任何无法安全执行的操作都将失败。

--mode=mode

指定用于指定目录的权限模式。mode 是一个四位数的八进制模式,例如 0755

--tmpdir=directory

指定要在其中创建指定文件或目录的客户机 VM 上的目录的绝对路径。如果未指定,directory 将是特定于平台的 temp 目录。

template

指定临时文件的模板文件名,不带目录路径。模板文件名必须包含至少一个连续的三个 X 字符序列,或者必须以 X 结尾。

显示客户机上的挂载点

VBoxManage guestcontrol <uuid | vmname>mount [‑‑passwordfile=password‑file | ‑‑password=password] [‑‑username=username] [‑‑verbose]

命令 VBoxManage guestcontrol vmname mount 使您能够显示客户机 VM 上的当前挂载点。对于 Windows 客户机,此命令显示映射驱动器。

显示客户机上的文件或文件系统状态

VBoxManage guestcontrol <uuid | vmname>stat [‑‑domain=domainname] [‑‑passwordfile=password‑file | ‑‑password=password] [‑‑quiet] [‑‑username=username] [‑‑verbose] <filename>

命令 VBoxManage guestcontrol vmname stat 使您能够显示客户机 VM 上的文件或文件系统的状态。

file [file ...]

指定客户机 VM 上的文件或文件系统的绝对路径。例如, /home/foo/a.out

您必须在客户机 VM 上拥有足够的权限才能访问指定的文件或文件系统。

列出客户机虚拟机的配置和状态信息

VBoxManage guestcontrol <uuid | vmname>list <all | files | processes | sessions> [‑‑quiet] [‑‑verbose]

命令 VBoxManage guestcontrol vmname list 使您能够列出客户机控制配置和状态信息。例如,输出显示打开的客户机会话、客户机进程和文件。

all|sessions|processes|files

指示要显示的信息类型。all 显示所有可用数据,sessions 显示客户机会话,processes 显示进程,files 显示文件。

终止客户机会话中的进程

VBoxManage guestcontrol <uuid | vmname>closeprocess [‑‑session‑id=ID | ‑‑session‑name=name‑or‑pattern] [‑‑quiet] [‑‑verbose] <PID...>

命令 VBoxManage guestcontrol vmname closeprocess 使您能够终止在客户机会话中运行的客户机进程。通过使用进程标识符 (PID) 指定进程,并通过使用会话 ID 或名称指定会话。

--session-id=ID

指定客户机会话的 ID。

--session-name=name|pattern

指定客户机会话的名称。使用包含通配符的模式指定多个会话。

PID [PID ...]

指定要终止的客户机进程的 PID 列表。

关闭客户机会话

VBoxManage guestcontrol <uuid | vmname>closesession [‑‑all | ‑‑session‑id=ID | ‑‑session‑name=name‑or‑pattern] [‑‑quiet] [‑‑verbose]

命令 VBoxManage guestcontrol vmname closesession 使您能够关闭客户机。通过会话 ID 或名称指定客户机。

--session-id=ID

指定客户机会话的 ID。

--session-name=name|pattern

指定客户机会话的名称。使用包含通配符的模式指定多个会话。

--all

关闭所有客户机。会话。

更新客户机上的客户机添加软件

VBoxManage guestcontrol <uuid | vmname>updatega [‑‑quiet] [‑‑verbose] [‑‑source=guest‑additions.ISO] [‑‑wait‑start] [‑‑[argument...]]

命令 VBoxManage guestcontrol vmname updatega 使您能够更新安装在指定客户机 VM 中的客户机添加软件。

此子命令的备用形式是 updateadditionsupdateguestadditions

--source=new-iso-path

指定客户机 VM 上客户机添加更新 .ISO 文件的绝对路径。

--reboot

Guest Additions 成功更新后自动重启客户机。

--timeout=ms

设置等待 Guest Additions 整体更新完成的超时时间(毫秒)。默认情况下不使用超时。

--verify

验证 Guest Additions 是否在成功安装后成功更新。客户机重启是强制性的。

--wait-ready

等待当前 Guest Additions 准备好处理 Guest Additions 更新。

--wait-start

在客户机 VM 上启动 VBoxManage 更新过程,然后等待客户机添加更新开始,然后再终止 VBoxManage 进程。

默认情况下,VBoxManage 命令等待客户机添加更新完成,然后终止。当运行的 VBoxManage 进程影响安装程序和客户机操作系统之间的交互时,请使用此选项。

-- argument [argument ...]

指定要传递给客户机添加更新程序的其他命令行参数。您可以使用 -- 选项将适当的更新程序参数传递给回溯尚未安装的功能。

确保包含空格的任何命令参数都用引号括起来。

等待客户机运行级别

命令 VBoxManage guestcontrol vmname waitrunlevel 使您能够等待达到客户机运行级别。

--timeout=ms

设置等待达到运行级别的超时时间(毫秒)。默认情况下不使用超时。

system|userland|desktop

指定要等待的运行级别。

显示当前客户机控制活动

VBoxManage guestcontrol <uuid | vmname>watch [‑‑quiet] [‑‑verbose]

命令 VBoxManage guestcontrol vmname watch 使您能够显示当前客户机控制活动。

示例

以下 VBoxManage guestcontrol run 命令在 My OL VM Oracle Linux VM 上以 user1 用户身份执行 ls -l /usr 命令。

$ VBoxManage --nologo guestcontrol "My OL VM" run --exe "/bin/ls" \
--username user1 --passwordfile pw.txt --wait-stdout -- -l /usr

--exe 选项指定要在客户机 VM 中运行的命令的绝对路径,/bin/ls。使用 -- 选项将后面跟随的任何参数传递给 ls 命令。

使用 --username 选项指定用户名 user1,并使用 --passwordfile 选项指定包含 user1 用户密码的文件名 pw.txt

--wait-stdout 选项在提供退出代码和命令输出之前等待 ls 客户机进程完成。--nologo 选项禁止输出徽标信息。

以下 VBoxManage guestcontrol run 命令在 My Win VM Windows VM 上以 user1 用户身份执行 ipconfig 命令。标准输入、标准输出和标准错误会从 VM 重定向到宿主机,直到程序完成。

$ VBoxManage --nologo guestcontrol "My Win VM" run \
--exe "c:\\windows\\system32\\ipconfig.exe" \
--username user1 --passwordfile pw.txt --wait-stdout

--exe 指定要在客户机 VM 中运行的命令的绝对路径 c:\windows\system32\ipconfig.exe。此示例中显示的双反斜杠仅在 UNIX 宿主机系统上必需。

使用 --username 选项指定用户名 user1,并使用 --passwordfile 选项指定包含 user1 用户密码的文件名 pw.txt

--wait-stdout 选项在提供退出代码和命令输出之前等待 ls 客户机进程完成。--nologo 选项用于抑制徽标信息的输出。

以下 VBoxManage guestcontrol start 命令在 My OL VM Oracle Linux VM 上执行 ls -l /usr 命令,直到程序完成。

$ VBoxManage --nologo guestcontrol "My Win VM" start \
--exe "c:\\windows\\system32\\ipconfig.exe" \
--username user1 --passwordfile pw.txt

以下 VBoxManage guestcontrol run 命令在 My OL VM Oracle Linux VM 上以 user1 用户身份执行 /usr/bin/busybox -l /usr 命令,并将 ls 作为参数 0 显式使用。

$ VBoxManage --nologo guestcontrol "My OL VM" run --exe "/usr/bin/busybox" \
--username user1 --passwordfile pw.txt --wait-stdout --arg0 ls -- -l /usr

--exe 选项指定要在客户机 VM 中运行的命令的绝对路径 /usr/bin/busybox。使用 -- 选项将后面跟随的任何参数传递给 busybox 命令。

使用 --username 选项指定用户名 user1,并使用 --passwordfile 选项指定包含 user1 用户密码的文件名 pw.txt

--wait-stdout 选项在提供退出代码和命令输出之前等待 ls 客户机进程完成。--nologo 选项禁止输出徽标信息。

--arg0 选项显式指定要用于执行命令的参数 0。

参数 0(即 arg0 或 argv[0])的默认值是来自 --exe 选项的值,除非提供了 --arg0 选项。

VBoxManage guestproperty

管理虚拟机客户机属性

概要

VBoxManage guestproperty get <uuid | vmname> <property‑name> [‑‑verbose]

VBoxManage guestproperty enumerate <uuid | vmname> [‑‑no‑timestamp] [‑‑no‑flags] [‑‑relative] [‑‑old‑format] [patterns...]

VBoxManage guestproperty set <uuid | vmname> <property‑name> [property‑value [‑‑flags=flags]]

VBoxManage guestproperty unset <uuid | vmname> <property‑name>

VBoxManage guestproperty wait <uuid | vmname> <patterns> [‑‑timeout=msec] [‑‑fail‑on‑timeout]

描述

命令 VBoxManage guestproperty 使您能够设置或检索正在运行的虚拟机 (VM) 的属性。请参阅 客户机属性。客户机属性是任意的名称-值字符串对,客户机或宿主机都可以读写。因此,这些属性可以用作低开销的字符串通信通道,前提是客户机正在运行并且已安装客户机添加。此外,客户机添加会自动设置和维护关键字以 /VirtualBox/ 开头的值。

通用命令操作数

uuid | vmname

指定虚拟机的通用唯一标识符 (UUID) 或名称。

列出虚拟机的所有属性

VBoxManage guestproperty enumerate <uuid | vmname> [‑‑no‑timestamp] [‑‑no‑flags] [‑‑relative] [‑‑old‑format] [patterns...]

命令 VBoxManage guestproperty enumerate 列出指定 VM 的每个客户机属性和值。请注意,如果客户机的属性存储未更新,例如因为 VM 未运行或未安装 Oracle VirtualBox 客户机添加,则输出将受限。

--relative

显示相对于当前时间的 timestamp。

--no-timestamp

不显示最后更新的时间戳。

--no-flags

不显示标志。

--old-format

使用 VirtualBox 6.1 及更早版本的输出格式。

pattern

根据指定的模式过滤属性列表,该模式可以包含以下通配符。

* (星号)

代表任意数量的字符。例如,/VirtualBox* 模式匹配所有以 /VirtualBox 开头的属性。

? (问号)

代表单个任意字符。例如,fo? 模式匹配 foofor

| (管道符)

指定多个替代模式。例如,s*|t* 模式匹配所有以 st 开头的属性。

检索虚拟机属性的值

VBoxManage guestproperty get <uuid | vmname> <property‑name> [‑‑verbose]

命令 VBoxManage guestproperty get 检索指定属性的值。如果找不到属性,例如因为客户机未运行,命令将发出以下消息:

No value set!
property-name

指定属性的名称。

--verbose

提供属性值、时间戳和任何指定的值属性。

设置虚拟机属性的值

VBoxManage guestproperty set <uuid | vmname> <property‑name> [property‑value [‑‑flags=flags]]

命令 VBoxManage guestproperty set 使您能够通过指定属性及其值来设置客户机属性。如果您省略值,则该属性将被删除。

property-name

指定属性的名称。

property-value

指定属性的值。如果未指定值,则删除任何现有值。

--flags=flags

指定值的其他属性。以下属性可以指定为逗号分隔列表。

TRANSIENT

当 VM 退出时,删除 VM 数据中的值。

TRANSRESET

当 VM 重新启动或退出时,删除该值。

RDONLYGUEST

指定该值只能由主机更改,并且客户机可以读取该值。

RDONLYHOST

指定该值只能由客户机更改,并且主机可以读取该值。

READONLY

指定该值不能更改。

等待属性值创建、删除或更改

VBoxManage guestproperty wait <uuid | vmname> <patterns> [‑‑timeout=msec] [‑‑fail‑on‑timeout]

命令 VBoxManage guestproperty wait 等待由模式字符串描述的特定值更改、删除或创建。

patterns

指定一个匹配您要等待的属性的模式。有关模式通配符的信息,请参阅 --patterns 选项的说明。

--timeoutmsec

指定等待的微秒数。

--fail-on-timeout

指定如果达到超时,命令将失败。

取消设置虚拟机属性值

VBoxManage guestproperty unset <uuid | vmname> <property‑name>

命令 VBoxManage guestproperty unset 取消设置客户机属性的值。

此子命令的备用形式是 delete

property-name

指定属性的名称。

示例

以下命令列出 win8 VM 的客户机属性及其值。

$ VBoxManage guestproperty enumerate win8

以下命令为 win8 VM 创建一个名为 region 的客户机属性。该属性的值设置为 west

$ VBoxManage guestproperty set win8 region west

VBoxManage hostonlyif

管理仅主机网络接口

概要

VBoxManage hostonlyif ipconfig <ifname> [‑‑dhcp | ‑‑ip=IPv4‑address‑‑netmask=IPv4‑netmask | ‑‑ipv6=IPv6‑address‑‑netmasklengthv6=length]

VBoxManage hostonlyif create

VBoxManage hostonlyif remove <ifname>

描述

命令 VBoxManage hostonlyif 使您能够更改仅主机网络接口的 IP 配置。有关仅主机网络的信息,请参阅 仅主机网络。每个仅主机网络接口都由一个名称标识,并且可以使用内部 DHCP 服务器或手动 IP 配置(包括 IPv4 和 IPv6)。

配置仅主机接口

VBoxManage hostonlyif ipconfig <ifname> [‑‑dhcp | ‑‑ip=IPv4‑address‑‑netmask=IPv4‑netmask | ‑‑ipv6=IPv6‑address‑‑netmasklengthv6=length]

命令 VBoxManage hostonlyif ipconfig 配置仅主机接口。

ifname

指定网络接口的名称。名称形式为 vboxnetN,其中 N 是接口实例。

--dhcp

对网络接口使用 DHCP。

不能将此选项与 --ip--ipv6--netmask--netmasklengthv6 选项一起使用。

--ip=IPv4-address

指定网络接口的 IPv4 IP 地址。

不能将此选项与 --dhcp--ipv6--netmasklengthv6 选项一起使用。

--netmask=IPv4-netmask

指定网络接口的 IPv4 子网掩码。默认值为 255.255.255.0

只能将此选项与 --ip 选项一起使用。

--ipv6=IPv6-address

指定网络接口的 IPv6 IP 地址。

不能将此选项与 --dhcp--ip--netmask 选项一起使用。

--netmasklengthv6=length

指定 IPv6 网络接口的长度。默认值为 64

只能将此选项与 --ipv6 选项一起使用。

在宿主机上创建网络接口

VBoxManage hostonlyif create

命令 VBoxManage hostonlyif create 在宿主操作系统 (OS) 上创建一个新的仅主机网络接口。网络接口的名称形式为 vboxnetN,其中 N 是接口实例。您必须先运行此命令,然后才能将虚拟机 (VM) 连接到仅主机网络。

此命令目前在 Solaris 主机上不可用,但等效功能是作为 root 用户或具有足够权限运行 ifconfig vboxnet0 plumb

从宿主机中删除网络接口

VBoxManage hostonlyif remove <ifname>

命令 VBoxManage hostonlyif remove 从宿主操作系统中删除指定的仅主机网络接口。

此命令在 Solaris 主机上当前不可用,但等效的功能是以 root 或具有足够权限的身份运行 ifconfig vboxnet0 unplumb

ifname

指定网络接口的名称。名称形式为 vboxnetN,其中 N 是接口实例。

示例

以下命令创建一个新的仅主机网络接口。

$ VBoxManage hostonlyif create
0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100%
Interface 'vboxnet2' was successfully created

以下命令为 vboxnet2 主机仅网络接口配置 IPv4 地址。

$ VBoxManage hostonlyif ipconfig vboxnet2 --ip 10.0.2.18

VBoxManage hostonlynet

主机仅网络管理

概要

VBoxManage hostonlynet add <‑‑name=netname> [‑‑id=netid] <‑‑netmask=mask> <‑‑lower‑ip=address> <‑‑upper‑ip=address> [‑‑enable | ‑‑disable]

VBoxManage hostonlynet modify <‑‑name=netname | ‑‑id=netid> [‑‑lower‑ip=address] [‑‑upper‑ip=address] [‑‑netmask=mask] [‑‑enable | ‑‑disable]

VBoxManage hostonlynet remove <‑‑name=netname | ‑‑id=netid>

描述

hostonlynet 命令使您能够控制主机仅网络。

通用选项

所有 hostonlynet 的子命令都作用于可以通过其名称或 UUID 识别的主机仅网络。

--name=netname

主机仅网络名称。在 VBoxManage list hostonlynets 的输出中,您将其显示为 VBoxNetworkName。

--id=netid

仅主机网络 UUID。如果添加新网络时未指定,将自动生成一个。

hostonlynet add

VBoxManage hostonlynet add <‑‑name=netname> [‑‑id=netid] <‑‑netmask=mask> <‑‑lower‑ip=address> <‑‑upper‑ip=address> [‑‑enable | ‑‑disable]

添加一个新的仅主机网络。

配置仅主机网络的选项

--netmask=mask

网络掩码。通常为 255.255.255.0。

--lower-ip=address, --upper-ip=address

用于通过 DHCP 分发的 IP 地址范围。上限是包含性的,而下限不是,因此上限地址将分发给客户端,而下限地址将由主机本身使用。

--enable, --disable

是否启用或禁用仅主机网络。如果未指定,网络将以启用状态创建。

hostonlynet modify

VBoxManage hostonlynet modify <‑‑name=netname | ‑‑id=netid> [‑‑lower‑ip=address] [‑‑upper‑ip=address] [‑‑netmask=mask] [‑‑enable | ‑‑disable]

这将修改现有的主机仅网络配置。它接受与 add 命令相同的选项。

hostonlynet remove

VBoxManage hostonlynet remove <‑‑name=netname | ‑‑id=netid>

删除指定的仅主机网络。

VBoxManage import

以 OVF 格式或从云服务导入虚拟设备并创建虚拟机

概要

VBoxManage import <ovfname | ovaname> [‑‑dry‑run] [‑‑options=keepallmacs | keepnatmacs | importtovdi] [‑‑vsys=n] [‑‑ostype=ostype] [‑‑vmname=name] [‑‑settingsfile=filename] [‑‑basefolder=folder] [‑‑group=group] [‑‑memory=MB] [‑‑cpus=n] [‑‑description=text] [‑‑eula=show | accept] [‑‑unit=n] [‑‑ignore] [‑‑scsitype=BusLogic | LsiLogic] [‑‑disk=path] [‑‑controller=index] [‑‑port=n]

VBoxManage import OCI://‑‑cloud [‑‑ostype=ostype] [‑‑vmname=name] [‑‑basefolder=folder] [‑‑memory=MB] [‑‑cpus=n] [‑‑description=text] <‑‑cloudprofile=profile> <‑‑cloudinstanceid=id> [‑‑cloudbucket=bucket]

描述

VBoxManage import 命令以 OVF 格式或从 Oracle Cloud Infrastructure (OCI) 等云服务导入虚拟设备。导入是通过复制虚拟磁盘映像(默认使用 VMDK 映像格式)并创建 Oracle VirtualBox 中的虚拟机 (VM) 来完成的。请参阅 导入和导出虚拟机

您必须指定要用作输入的 OVF 文件或 OVA 归档文件的路径名,或云情况下的占位符。对于 OVF 设备,请确保任何磁盘映像都在 OVF 文件所在的同一目录中。

请注意,您为控制导入的虚拟设备或修改导入参数而指定的任何选项都依赖于 OVF 文件的内容或来自云服务的信息。

在使用导入操作创建 VM 之前,请执行试运行以验证配置的正确性。这对于 OVF 或 OVA 设备更有用,因为对于云服务,即使是试运行也需要在大多数耗时步骤中执行。

从云服务导入会下载一个临时文件,其中包含引导映像和一些描述 VM 实例详细信息的元数据。成功导入后,临时文件将被删除。

常用选项

ovfname | ovaname

指定描述设备的 OVF 文件或 OVA 存档的名称。在云的情况下,这通常是一个固定字符串,例如 OCI://

--dry-run

执行 VBoxManage import 命令的试运行,而不是执行实际的导入操作。试运行操作执行以下操作:

  • 根据指定的 OVF 或 OVA 文件输出设备内容的描述。

  • 显示设备将如何导入到 Oracle VirtualBox 中。此外,输出还将显示可用于更改导入行为的任何选项。

此选项的缩写形式是 -n

--options=keepallmacs | keepnatmacs | importtovdi

使您能够微调导入操作。

有效参数如下所示。

  • keepallmacs:指定保留所有虚拟网卡的 MAC 地址不变。

  • keepnatmacs:指定保留所有虚拟网卡的 MAC 地址不变(如果网络类型为 NAT)。

  • importtovdi:指定所有新磁盘映像都将使用 VDI 文件格式创建。

--ostype=ostype

指定 VM 的客户机操作系统 (OS) 信息。使用 VBoxManage list ostypes 命令查看 OS 类型标识符。

--vmname=name

指定将由 Oracle VirtualBox 用于导入的 VM 的名称。

--basefolder=folder

指定存储导入 VM 文件的文件夹。

--memory=MB

指定导入 VM 的内存大小(以兆字节为单位)。

--cpus=n

指定导入 VM 的 CPU 数量。

--description=text

指定在检查 VM 详细信息时在 GUI 和 CLI 中可见的描述文本。

OVF / OVA 导入选项

以下选项特定于以 OVF 或 OVA 格式导入虚拟设备。此类设备可以包含一个或多个 VM,这需要在您想要更改 VM 配置时指定要调整的 VM 配置。请参阅 导入 OVF 格式的设备

VBoxManage import <ovfname | ovaname> [‑‑dry‑run] [‑‑options=keepallmacs | keepnatmacs | importtovdi] [‑‑vsys=n] [‑‑ostype=ostype] [‑‑vmname=name] [‑‑settingsfile=filename] [‑‑basefolder=folder] [‑‑group=group] [‑‑memory=MB] [‑‑cpus=n] [‑‑description=text] [‑‑eula=show | accept] [‑‑unit=n] [‑‑ignore] [‑‑scsitype=BusLogic | LsiLogic] [‑‑disk=path] [‑‑controller=index] [‑‑port=n]

--vsys=n

指定在设备中选择特定 VM 的索引。影响以下选项。

--unit=n

指定在设备中选择 VM 特定单元的索引。影响以下选项。

--settingsfile=filename

指定将作为导入的一部分创建的 VM 配置文件名(作为相对或绝对路径)。重命名设置文件的首选方法是使用 --vmname 选项覆盖 VM 名称,并在必要时使用 --basefolder 指定创建 VM 的文件夹。

--group=group

指定导入 VM 的主组。

--eula=show | accept

使您能够显示或接受设备中 VM 的许可条款。

有效参数如下所示。

  • show:显示 VM 的 EULA。

  • accepts:接受 VM 的 EULA。设备中具有 EULA 的任何 VM 都需要接受它,否则导入将失败。

--ignore

在导入 VM 时忽略与 --unit 选项指定的 VM 关联的硬件,从而有效地移除其所有关联硬件。

--scsitype=BusLogic | LsiLogic

使您能够为导入 VM 的当前单元选择 SCSI 控制器类型。

有效参数如下所示。

  • BusLogic:使用(非常旧的)BusLogic SCSI 控制器类型。

  • LsiLogic:使用(更现代的)LsiLogic SCSI 控制器类型。

云导入选项

以下选项特定于从云服务提供商导入 VM 实例。它始终处理单个 VM。请参阅 从 Oracle Cloud Infrastructure 导入实例

VBoxManage import OCI://‑‑cloud [‑‑ostype=ostype] [‑‑vmname=name] [‑‑basefolder=folder] [‑‑memory=MB] [‑‑cpus=n] [‑‑description=text] <‑‑cloudprofile=profile> <‑‑cloudinstanceid=id> [‑‑cloudbucket=bucket]

--cloud

指定导入应来自云。

--cloudprofile=profile

指定用于连接到云服务提供商的云配置文件。云配置文件包含您的 Oracle Cloud Infrastructure 账户详细信息,例如您的用户 OCID 和公钥的指纹。要使用云配置文件,您必须在 Oracle Cloud Infrastructure 上具有必要的权限。

--cloudinstanceid=id

指定云中现有实例的 ID。

--cloudbucket=bucket

指定存储从实例创建的对象的存储桶名称。在 Oracle Cloud Infrastructure 中,存储桶是用于存储对象的逻辑容器。默认情况下,使用云配置文件可用的第一个存储桶。

示例

以下示例对包含 Windows 10 客户机的示例设备执行 OVF 导入操作的试运行。

$ VBoxManage import Windows10.ovf --dry-run
Interpreting Windows10.ovf...
OK.
Virtual system 0:
 0: Suggested OS type: "Windows10_64"
    (change with "--vsys 0 --ostype <type>"; use "list ostypes" to list all)
 1: Suggested VM name "win10-appliance"
    (change with "--vsys 0 --vmname <name>")
 2: Suggested VM group "/"
    (change with "--vsys 0 --group <group>")
 3: Suggested VM settings file name "/home/user1/VirtualBox VMs/win10-appliance/win10-appliance.vbox"
    (change with "--vsys 0 --settingsfile <filename>")
 4: Suggested VM base folder "/home/user1/VirtualBox VMs"
    (change with "--vsys 0 --basefolder <path>")
 5: End-user license agreement
    (display with "--vsys 0 --eula show";
    accept with "--vsys 0 --eula accept")
 6: Number of CPUs: 1
    (change with "--vsys 0 --cpus <n>")
 7: Guest memory: 2048 MB (change with "--vsys 0 --memory <MB>")
 8: Sound card (appliance expects "ensoniq1371", can change on import)
    (disable with "--vsys 0 --unit 8 --ignore")
 9: USB controller
    (disable with "--vsys 0 --unit 9 --ignore")
10: Network adapter: orig bridged, config 2, extra type=bridged
11: Floppy
    (disable with "--vsys 0 --unit 11 --ignore")
12: SCSI controller, type BusLogic
    (change with "--vsys 0 --unit 12 --scsitype {BusLogic|LsiLogic}";
    disable with "--vsys 0 --unit 12 --ignore")
13: IDE controller, type PIIX4
    (disable with "--vsys 0 --unit 13 --ignore")
14: Hard disk image: source image=Windows10.vmdk,
      target path=/home/user1/disks/Windows10.vmdk, controller=12;channel=0
    (change target path with "--vsys 0 --unit 14 --disk <path>";
    change controller with "--vsys 0 --unit 14 --controller <index>";
    change controller port with "--vsys 0 --unit 14 --port <n>";
    disable with "--vsys 0 --unit 14 --ignore")

试运行输出会列出和编号在 Windows10.ovf 文件中描述的各个配置项。其中一些项目包含有关如何禁用或更改项目配置的信息。

您可以使用 --vsys X --unit Y --ignore 选项禁用许多项目。X 是虚拟系统的编号。值为 0,除非设备包含多个虚拟系统描述。Y 是配置项编号。

示例命令输出中的第 1 项指定了目标计算机的名称。第 12 项和第 13 项分别指定了 IDE 和 SCSI 硬盘控制器。

项目 14 指示硬盘映像,--disk 选项指定映像将存储的目标路径,--controller 选项指定将磁盘附加到的控制器,而 --port 选项指定将磁盘附加到控制器上的哪个端口。默认值在 OVF 文件中指定。

您可以通过为 --vsys 选项指定相同的值来组合同一虚拟系统的多个项目。例如,使用以下命令以 OVF 中描述的方式导入计算机,排除声卡和 USB 控制器,并指定磁盘映像以不同的名称存储。

$ VBoxManage import Windows10.ovf --vsys 0 --unit 8 --ignore \
  --unit 9 --ignore --unit 14 --disk Windows10_disk0.vmdk

以下示例演示如何从 Oracle Cloud Infrastructure 导入 VM。要查找 Oracle Cloud Infrastructure VM 实例及其 ID,您可以使用以下命令列出所有可用实例:

$ VBoxManage cloud --provider=OCI --profile=cloud-profile-name list instances

知道 ID 后,以下命令将从 Oracle Cloud Infrastructure 导入该实例:

$ VBoxManage import OCI:// --cloud --vmname OCI_FreeBSD_VM --memory 4000 \
  --cpus 3 --ostype FreeBSD_64 --cloudprofile "standard user" \
  --cloudinstanceid ocid1.instance.oc1.iad.abuwc... --cloudbucket myBucket

VBoxManage list

查看系统信息和 VM 配置详细信息

概要

VBoxManage list [‑‑long] [‑‑platform‑arch=x86 | arm] [‑‑sorted] [bridgedifs | cloudnets | cloudprofiles | cloudproviders | cpu‑profiles | dhcpservers | dvds | extpacks | floppies | groups | hddbackends | hdds | hostcpuids | hostdrives | hostdvds | hostfloppies | hostinfo | hostonlyifs | hostonlynets | intnets | natnets | ostypes | ossubtypes | runningvms | screenshotformats | systemproperties | usbfilters | usbhost | vms | webcams]

描述

VBoxManage list 子命令使您能够获取有关 Oracle VirtualBox 软件、您创建的 VM 和相关服务的信息。

常用选项

--long

如果可用,显示有关每个信息条目的详细信息。此选项的缩写形式是 -l

--platform-arch

按给定的平台架构过滤输出(如果可用,否则忽略)。此选项的缩写形式是 -p

--sorted

按字母顺序对信息条目列表进行排序。此选项的缩写形式是 -s

列出主机系统上的桥接网络接口

VBoxManage list bridgedifs

VBoxManage list bridgedifs 命令列出主机系统上当前可用的桥接网络接口。输出显示每个接口的详细配置信息。请参阅 虚拟网络

列出云网络接口

VBoxManage list cloudnets

VBoxManage list cloudnets 命令列出已配置的云网络接口。云网络接口提供本地 VM 和云网络之间的连接。

列出云配置文件

VBoxManage list cloudprofiles

VBoxManage list cloudprofiles 命令列出已配置的云配置文件。云配置文件包含云服务账户的设置。

列出云提供商

VBoxManage list cloudproviders

VBoxManage list cloudproviders 命令列出 Oracle VirtualBox 支持的云提供商。Oracle Cloud Infrastructure 是一个云提供商的示例。

列出已知的 CPU 配置文件

VBoxManage list cpu‑profiles

VBoxManage list cpu-profiles 命令列出 Oracle VirtualBox 已知的 CPU 配置文件。

列出主机系统上的 DHCP 服务器

VBoxManage list dhcpservers

VBoxManage list dhcpservers 命令列出主机系统上当前可用的 DHCP 服务器。输出显示每个 DHCP 服务器的详细配置信息。请参阅 虚拟网络

列出 DVD 虚拟磁盘映像

VBoxManage list dvds

VBoxManage list dvds 命令显示有关当前被 Oracle VirtualBox 软件使用的 DVD 虚拟磁盘映像的信息。对于每个映像,输出显示所有设置、Oracle VirtualBox 关联到该映像的 UUID 以及与该映像关联的所有文件。

此命令与虚拟介质管理器执行相同的功能。请参阅 虚拟介质管理器

列出已安装的 Oracle VirtualBox 扩展包

VBoxManage list extpacks

VBoxManage list extpacks 命令显示当前安装的所有 Oracle VirtualBox 扩展包。请参阅 安装 Oracle VirtualBox 和扩展包VBoxManage extpack

列出软盘虚拟磁盘映像

VBoxManage list floppies

VBoxManage list floppies 命令显示有关当前被 Oracle VirtualBox 软件使用的软盘映像的信息。对于每个映像,输出显示所有设置、Oracle VirtualBox 关联到该映像的 UUID 以及与该映像关联的所有文件。

此命令与虚拟介质管理器执行相同的功能。请参阅 虚拟介质管理器

列出虚拟机组

VBoxManage list groups

VBoxManage list groups 命令显示所有 VM 组。请参阅 使用 VM 组

列出虚拟磁盘后端

VBoxManage list hddbackends

VBoxManage list hddbackends 命令列出 Oracle VirtualBox 软件已知的所有虚拟磁盘后端。对于 VDI、VMDK 或 RAW 等每种格式,此命令都会列出后端的各项功能和配置。

列出硬盘虚拟磁盘映像

VBoxManage list hdds

VBoxManage list hdds 命令显示有关当前被 Oracle VirtualBox 软件使用的硬盘虚拟磁盘映像的信息。对于每个映像,输出显示所有设置、Oracle VirtualBox 关联到该映像的 UUID 以及与该映像关联的所有文件。

此命令与虚拟介质管理器执行相同的功能。请参阅 虚拟介质管理器

列出主机系统 CPU 的 CPUID 信息

VBoxManage list hostcpuids

VBoxManage list hostcpuids 命令列出主机系统上每个 CPU 的 CPUID 信息。使用此信息执行对主机系统虚拟化能力的更精细分析。

列出主机系统上的存储驱动器

VBoxManage list hostdrives

VBoxManage list hostdrives 命令列出主机系统上的磁盘驱动器,这可能有助于创建 VMDK 原始磁盘映像。每个条目都包含从 Oracle VirtualBox 内部引用它们的名称。

列出主机系统上的 DVD 驱动器

VBoxManage list hostdvds

VBoxManage list hostdvds 命令列出主机系统上的 DVD 驱动器。每个 DVD 条目都包含从 Oracle VirtualBox 内部访问它们的名称。

列出主机系统上的软盘驱动器

VBoxManage list hostfloppies

VBoxManage list hostfloppies 命令列出主机系统上的软盘驱动器。每个软盘条目都包含从 Oracle VirtualBox 内部访问它们的名称。

列出主机系统信息

VBoxManage list hostinfo

VBoxManage list hostinfo 命令显示主机系统信息。输出包括有关 CPU、内存和操作系统版本的信息。

列出主机系统上的主机仅网络接口

VBoxManage list hostonlyifs

VBoxManage list hostonlyifs 命令列出主机系统上当前可用的主机仅网络接口。输出显示每个接口的详细配置信息。请参阅 虚拟网络

列出主机仅网络

VBoxManage list hostonlynets

VBoxManage list hostonlynets 命令列出已配置的主机仅网络。主机仅网络提供主机和本地 VM 之间的连接。请参阅 虚拟网络

列出内部网络

VBoxManage list intnets

VBoxManage list intnets 命令显示有关内部网络的信息。请参阅 虚拟网络

列出主机系统上的 NAT 网络接口

VBoxManage list natnets

VBoxManage list natnets 命令列出主机系统上当前可用的 NAT 网络接口。请参阅 虚拟网络

列出客户机操作系统

VBoxManage list ostypes

VBoxManage list ostypes 命令列出 Oracle VirtualBox 已知的ョ所有客户机操作系统 (OS)。每个 OS 条目都包括一个标识符、描述、家族标识符、家族描述以及该 OS 是否支持 64 位。

您可以在 VBoxManage modifyvm 命令中使用这些标识符。

列出客户机操作系统子类型

VBoxManage list ossubtypes

VBoxManage list ossubtypes 命令列出 Oracle VirtualBox 已知的ョ所有客户机操作系统 (OS) 子类型以及相关的客户机 OS 描述。每个列表条目都包括一个客户机 OS 家族标识符、与该 OS 家族关联的客户机 OS 子类型(如果有)以及与该 OS 子类型关联的客户机 OS 的描述。

列出正在运行的虚拟机

VBoxManage list runningvms

VBoxManage list runningvms 命令列出当前正在运行的所有虚拟机 (VM)。默认情况下,这将显示一个紧凑列表,其中包含每个 VM 的名称和 UUID。

列出可用的屏幕截图格式

VBoxManage list screenshotformats

VBoxManage list screenshotformats 命令显示可用的屏幕截图格式列表。

列出系统属性

VBoxManage list systemproperties

VBoxManage list systemproperties 命令显示大量全局 Oracle VirtualBox 设置和限制,例如最小和最大客户机 RAM、虚拟硬盘大小、文件夹设置以及当前使用的身份验证库。

列出已注册的全局 USB 过滤器

VBoxManage list usbfilters

VBoxManage list usbfilters 命令列出所有已向 Oracle VirtualBox 注册的全局 USB 过滤器,并显示过滤器参数。全局 USB 过滤器用于所有虚拟机都可以访问的设备。

列出主机系统上的 USB 设备

VBoxManage list usbhost

VBoxManage list usbhost 命令显示有关连接到主机系统的 USB 设备的信息。输出包括可用于构造 USB 过滤器的信息,并指示设备当前是否被主机系统使用。

列出虚拟机

VBoxManage list vms

VBoxManage list vms 命令列出当前已向 Oracle VirtualBox 注册的所有虚拟机 (VM)。默认情况下,此命令显示一个紧凑列表,其中包含每个 VM 的名称和 UUID。

列出连接到正在运行的虚拟机的网络摄像头

VBoxManage list webcams

VBoxManage list webcams 命令显示连接到正在运行的 VM 的网络摄像头列表。

输出是使用 VBoxManage webcam attach 命令将网络摄像头连接到 VM 时使用的绝对路径或别名的列表。

示例

以下命令列出为 Oracle VirtualBox 配置的 VM 组。

$ VBoxManage list groups
"/Linux-VMs"
"/Windows-VMs"

以下命令列出当前正在运行的 VM。

$ VBoxManage list runningvms
"ol7" {ol7-UUID}
"win8" {win8-UUID}

VBoxManage mediumio

介质内容访问

概要

VBoxManage mediumio <‑‑disk=uuid|filename | ‑‑dvd=uuid|filename | ‑‑floppy=uuid|filename> [‑‑password‑file=‑|filename]formatfat [‑‑quick]

VBoxManage mediumio <‑‑disk=uuid|filename | ‑‑dvd=uuid|filename | ‑‑floppy=uuid|filename> [‑‑password‑file=‑|filename]cat [‑‑hex] [‑‑offset=byte‑offset] [‑‑size=bytes] [‑‑output=‑|filename]

VBoxManage mediumio <‑‑disk=uuid|filename | ‑‑dvd=uuid|filename | ‑‑floppy=uuid|filename> [‑‑password‑file=‑|filename]stream [‑‑format=image‑format] [‑‑variant=image‑variant] [‑‑output=‑|filename]

描述

通用选项

mediumio 的子命令都作用于一个介质,该介质必须使用以下选项之一以及可选的加密密码来指定。以下常用选项可以放在子命令之前或之后。

--disk=uuid|filename

硬盘映像的 UUID 或文件名,例如 VDI、VMDK、VHD 等。

--dvd=uuid|filename

DVD 映像的 UUID 或文件名,例如 ISO、DMG、CUE。

--floppy=uuid|filename

软盘映像的 UUID 或文件名,例如 IMG。

--password-file=-|filename

包含介质加密密码的文件的名称。如果指定了 -,则密码将从 stdin 读取。

mediumio formatfat

VBoxManage mediumio <‑‑disk=uuid|filename | ‑‑dvd=uuid|filename | ‑‑floppy=uuid|filename> [‑‑password‑file=‑|filename]formatfat [‑‑quick]

使用 FAT 文件系统格式化介质。这将擦除介质的内容。

--quick

快速格式化介质。

mediumio cat

VBoxManage mediumio <‑‑disk=uuid|filename | ‑‑dvd=uuid|filename | ‑‑floppy=uuid|filename> [‑‑password‑file=‑|filename]cat [‑‑hex] [‑‑offset=byte‑offset] [‑‑size=bytes] [‑‑output=‑|filename]

将介质的内容转储到 stdout 或指定的文件。

--hex

以十六进制字节转储。

--offset

介质中开始的字节偏移量。

--size

要转储的字节数。

--output

输出文件名。与往常一样,- 表示 stdout。

mediumio stream

VBoxManage mediumio <‑‑disk=uuid|filename | ‑‑dvd=uuid|filename | ‑‑floppy=uuid|filename> [‑‑password‑file=‑|filename]stream [‑‑format=image‑format] [‑‑variant=image‑variant] [‑‑output=‑|filename]

将介质转换为可流式传输的格式并将其转储到给定输出。

--format

目标映像的格式。

--variant

目标的介质变体。

--output

输出文件名。与往常一样,- 表示 stdout。

VBoxManage mediumproperty

管理介质属性

概要

VBoxManage mediumproperty [disk | dvd | floppy]set <uuid | filename> <property‑name> <property‑value>

VBoxManage mediumproperty [disk | dvd | floppy]get <uuid | filename> <property‑name>

VBoxManage mediumproperty [disk | dvd | floppy]delete <uuid | filename> <property‑name>

描述

VBoxManage mediumproperty 命令使您能够设置、检索或删除介质属性。

设置介质属性

VBoxManage mediumproperty [disk | dvd | floppy]set <uuid | filename> <property‑name> <property‑value>

VBoxManage mediumproperty set 命令使您能够设置介质属性。

disk | dvd | floppy

指定介质类型。有效值为 disk(硬盘驱动器)、dvdfloppy

uuid | filename

指定介质或镜像的通用唯一标识符 (UUID) 或绝对路径名。

property-name

指定属性的名称。

property-value

指定指定属性的值。

检索介质属性值

VBoxManage mediumproperty [disk | dvd | floppy]get <uuid | filename> <property‑name>

VBoxManage mediumproperty get 命令使您能够检索介质属性的值。

disk | dvd | floppy

指定介质类型。有效值为 disk(硬盘驱动器)、dvdfloppy

uuid | filename

指定介质或镜像的通用唯一标识符 (UUID) 或绝对路径名。

property-name

指定属性的名称。

删除介质属性

VBoxManage mediumproperty [disk | dvd | floppy]delete <uuid | filename> <property‑name>

VBoxManage mediumproperty delete 命令使您能够删除介质属性。

disk | dvd | floppy

指定介质类型。有效值为 disk(硬盘驱动器)、dvdfloppy

uuid | filename

指定介质或镜像的通用唯一标识符 (UUID) 或绝对路径名。

property-name

指定属性的名称。

示例

以下命令将属性 prop1 设置为 ol7.vdi 磁盘映像的 val1

$ VBoxManage mediumproperty disk set ol7.vdi prop1 val1

以下命令获取 ol7.vdi 磁盘映像的属性 prop1 的值。

$ VBoxManage mediumproperty disk get ol7.vdi prop1

VBoxManage metrics

监视系统资源使用情况

概要

VBoxManage metrics collect [‑‑detach] [‑‑list] [‑‑period=seconds] [‑‑samples=count] [* | host | vmnamemetric‑list]

VBoxManage metrics disable [‑‑list] [* | host | vmnamemetric‑list]

VBoxManage metrics enable [‑‑list] [* | host | vmnamemetric‑list]

VBoxManage metrics list [* | host | vmnamemetric‑list]

VBoxManage metrics query [* | host | vmnamemetric‑list]

VBoxManage metrics setup [‑‑list] [‑‑periodseconds] [‑‑samplescount] [* | host | vmnamemetric‑list]

描述

VBoxManage metrics 命令使您能够监视主机系统和虚拟机 (VM) 的系统资源使用情况。例如,您可以监视特定指标,如 CPU 在用户模式下执行的时间百分比(CPU/Load/User),在指定的采样期间。

使用 VBoxManage metrics query 命令随时检索数据。

默认情况下,除非运行 VBoxManage metrics setup 命令指定采样间隔(秒)和要保存的指标数量,否则不会收集指标。

请注意,您只能为正在运行的 VM 启用指标收集。当 VM 关闭时,VM 的收集数据和收集设置将被丢弃。

指标

主机和 VM 具有不同的相关指标集,您可以通过运行 VBoxManage metrics list 命令来查看它们。

每个指标都表示为一个由类别和指标组成的字符串。可选地,指标字符串可以包含以下任何一项:子指标、子子指标和聚合。指标字符串的格式如下:

category/metric[/submetric[/sub-submetric]][:aggregate]
  • category 是资源类型,例如 CPURAMFSNet

  • metric 是与资源类别关联的测量类型。例如,LoadMHz 指标与 CPU 资源类别相关。

  • submetric 是与指标关联的可选测量类型。例如,UserKernelIdle 子指标与 Load 指标相关。

  • sub-submetric 是与子指标关联的可选测量类型。例如,RxTx 子子指标与 Net 资源类别的 Rate 子指标相关。关联的指标是网络接口。

  • aggregate 是一个可选函数,用于提供资源类别的最小、最大和平均测量值。例如,RAM/Usage/Free:min 指标表示在主机系统上所有已保存数据中找到的可用内存的最小量。

默认情况下,VBoxManage metrics 命令作用于主机系统和所有 VM,并报告所有指标。您可以选择将这些命令限制为仅作用于主机系统或特定 VM,并报告一个或多个指标的列表。

常用选项

* | host | vmname

指定要操作的组件。默认情况下,此命令对主机系统和所有正在运行的 VM 进行操作。

如果指定 host,则 VBoxManage metrics 命令仅作用于主机系统。如果指定星号(*),则命令作用于所有 VM。如果指定 VM 名称,则 VBoxManage metrics 命令将作用于该 VM。

metric-list

指定一个或多个指标的逗号分隔列表。

指标的形式必须包括以斜杠分隔的指标字符串的 categorymetric 部分。

请注意,VBoxManage metrics enableVBoxManage metrics disable 命令要求您将指标指定为参数。指标必须仅包括资源类别和指标部分,例如 CPU/LoadRAM/Usage

收集数据指标

VBoxManage metrics collect [‑‑detach] [‑‑list] [‑‑period=seconds] [‑‑samples=count] [* | host | vmnamemetric‑list]

VBoxManage metrics collect 命令定期收集和输出数据,直到您按 Ctrl+C 停止该进程。

--detach

禁用指标数据收集,因此不输出任何数据。使用此选项与运行 VBoxManage metrics setup 命令相同。

--list

显示哪些指标与指定筛选器匹配。

--period=seconds

指定收集指标数据样本之间的等待秒数。默认值为 1。

--samples=count

指定要保存的指标数据样本数。要查看已保存的数据,请使用 VBoxManage metrics query 命令。默认值为 1。

禁用指标数据收集

VBoxManage metrics disable [‑‑list] [* | host | vmnamemetric‑list]

VBoxManage metrics disable 命令暂停数据收集。此操作不影响数据收集属性或已收集的数据。请注意,在指标列表中指定子指标不会禁用其基础指标。

请注意,VBoxManage metrics disable 命令要求您将指标指定为参数。指标必须仅包括资源类别和指标部分,例如 CPU/LoadRAM/Usage

--list

显示命令是否按预期成功。

启用指标数据收集

VBoxManage metrics enable [‑‑list] [* | host | vmnamemetric‑list]

VBoxManage metrics enable 命令在 VBoxManage metrics disable 命令暂停数据收集后,恢复数据收集。请注意,在指标列表中指定子指标不会启用其底层指标。

VBoxManage metrics setup 命令不同,VBoxManage metrics enable 命令不会丢弃先前为指定对象和指标集收集的样本。

请注意,VBoxManage metrics enable 命令要求您将指标指定为参数。指标必须仅包括资源类别和指标部分,例如 CPU/LoadRAM/Usage

--list

显示命令是否按预期成功。

列出指标值

VBoxManage metrics list [* | host | vmnamemetric‑list]

VBoxManage metrics list 命令显示当前可用的指标。请注意,特定于 VM 的指标仅在该 VM 运行时显示。

列出已保存的指标数据

VBoxManage metrics query [* | host | vmnamemetric‑list]

VBoxManage metrics query 命令检索并显示已保存的指标数据。

请注意,VBoxManage metrics query 命令不会删除或刷新已保存的数据,但随着时间的推移,较旧的样本会被较新的样本替换。

配置指标收集属性

VBoxManage metrics setup [‑‑list] [‑‑periodseconds] [‑‑samplescount] [* | host | vmnamemetric‑list]

VBoxManage metrics setup 命令配置指标收集属性。

请注意,此命令会丢弃先前为指定对象和指标集收集的所有样本。要启用或禁用指标收集而不丢弃数据,请分别使用 VBoxManage metrics enable 命令或 VBoxManage metrics disable 命令。

--list

显示由于命令执行而修改了哪些指标。

--period=seconds

指定收集指标数据样本之间的等待秒数。默认值为 1。

--samples=count

指定要保存的指标数据样本数。要查看已保存的数据,请使用 VBoxManage metrics query 命令。默认值为 1。

示例

以下示例命令每秒启用一次主机处理器和内存使用情况指标的收集。--samples 选项保存最近的五个样本。

$ VBoxManage metrics setup --period 1 --samples 5 host CPU/Load,RAM/Usage

以下命令列出主机系统和 VM 可用的指标:

$ VBoxManage metrics list

请注意,主机系统和 VM 具有不同的指标集。

以下示例显示了如何查询有关 test VM 在用户模式和内核模式下花费的 CPU 时间的指标数据。

$ VBoxManage metrics query test CPU/Load/User,CPU/Load/Kernel

VBoxManage modifymedium

更改现有磁盘映像的特性

概要

VBoxManage modifymedium [disk | dvd | floppy] <uuid | filename> [‑‑autoreset=on | off] [‑‑compact] [‑‑description=description] [‑‑move=pathname] [‑‑property=name=[value]] [‑‑resize=megabytes | ‑‑resizebyte=bytes] [‑‑setlocation=pathname] [‑‑type=normal | writethrough | immutable | shareable | readonly | multiattach]

描述

VBoxManage modifymedium 命令允许您更改现有磁盘映像的特性。

注意

为了与早期版本的 Oracle VirtualBox 兼容,您可以使用 modifyvdimodifyhd 命令。

disk | dvd | floppy

指定映像的介质类型。

filename

指定主机文件系统上磁盘映像的通用唯一标识符 (UUID) 或路径名。仅当介质已注册时,您才能指定 UUID。使用 VBoxManage list hdds 命令列出已注册的映像。您可以指定介质的绝对或相对路径。

--autoreset=on | off

指定是否在每次虚拟机 (VM) 启动时自动重置不可变硬盘。此选项仅适用于不可变硬盘,默认值为 on。请参阅 特殊映像写入模式

--compact

通过删除仅包含零的块来压缩磁盘映像。此选项会收缩动态分配的映像,并减小映像的*物理*大小,而不会影响虚拟磁盘的逻辑大小。

您可以将此选项用于基本映像和作为快照一部分创建的差异映像。

注意

在压缩映像之前,您必须使用合适的软件工具将客户机系统中的可用空间归零。例如:

  • *Windows 客户机*。运行 sdelete -z 命令。

  • *Linux 客户机*。使用 zerofree 工具,该工具支持 ext2ext3 文件系统。

  • *Mac OS X 客户机*。运行 diskutil secureErase freespace 0 / 命令。

请注意,您只能使用此选项压缩 VDI 映像。要压缩非 VID 映像,您可以将空闲块归零,然后将磁盘克隆到任何其他动态分配的格式。

--description=description

指定介质的文本描述。

--move=pathname

指定主机系统上介质的相对或绝对路径。使用此选项可将介质重新定位到主机系统上的不同位置。

--property=name=value

为介质指定属性名称和值。

--resize=size

指定现有映像的新容量(以 MB 为单位)。您只能使用此选项来扩展映像的容量。您不能缩小映像的容量。

请注意,您只能调整使用 VDI 和 VHD 格式的动态分配磁盘映像的大小。此选项调整虚拟磁盘的*逻辑*大小,对物理大小只有很小的影响。

例如,如果您的动态分配的 10 GB 磁盘已满,您可以使用 --resize 15360 选项将现有磁盘的容量增加到 15 GB (15,360 MB)。此操作使您无需创建新映像并将所有数据从 VM 中复制出来。

请注意,使用此选项只会更改驱动器的容量。因此,您可能需要在客户机中后续使用分区管理工具来调整主分区以填充驱动器。

--resizebyte=size

指定现有映像的新容量(以字节为单位)。此选项与 --resize 选项类似,但您指定的大小单位是字节而不是兆字节。

--setlocation=pathname

指定介质移动后在主机系统上的新位置。路径名可以是相对于当前目录的,也可以是相对于根目录的绝对路径。

请注意,VBoxManage modifymedium 命令不会对您指定的路径名执行任何完整性检查。请确保路径名有效。

--type

指定映像的新模式类型。有效值为 normalimmutablewritethroughmulti-attachshareablereadonly。有关这些模式类型的描述,请参阅 特殊映像写入模式

示例

以下命令修改名为 disk01.vdi 的磁盘映像文件的描述。

$ VBoxManage modifymedium disk disk01.vdi --description "Oracle Linux 7 image"

以下命令修改名为 disk01.vdi 的磁盘映像文件的写入模式。

$ VBoxManage modifymedium disk disk01.vdi --type writethrough

另请参阅

VBoxManage modifynvram

列出和修改虚拟机的 NVRAM 内容

概要

VBoxManage modifynvram <uuid | vmname>inituefivarstore

VBoxManage modifynvram <uuid | vmname>enrollmssignatures

VBoxManage modifynvram <uuid | vmname>enrollorclpk

VBoxManage modifynvram <uuid | vmname>enrollpk [‑‑platform‑key=filename] [‑‑owner‑uuid=uuid]

VBoxManage modifynvram <uuid | vmname>enrollmok [‑‑mok=filename] [‑‑owner‑uuid=uuid]

VBoxManage modifynvram <uuid | vmname>secureboot <‑‑enable | ‑‑disable>

VBoxManage modifynvram <uuid | vmname>listvars

VBoxManage modifynvram <uuid | vmname>queryvar [‑‑name=name] [‑‑filename=filename]

VBoxManage modifynvram <uuid | vmname>deletevar [‑‑name=name] [‑‑owner‑uuid=uuid]

VBoxManage modifynvram <uuid | vmname>changevar [‑‑name=name] [‑‑filename=filename]

描述

“modifynvram”命令适用于希望检查和修改虚拟机 UEFI 变量存储的专家。在此处进行的任何错误都可能导致虚拟机无法启动。

通用选项

modifynvram 的子命令都操作于正在运行的虚拟机。

uuid | vmname

虚拟机的 UUID 或名称(区分大小写)。

modifynvram inituefivarstore

VBoxManage modifynvram <uuid | vmname>inituefivarstore

将 UEFI 变量存储初始化为默认状态。任何先前存在的变量存储都将被删除。请极其谨慎使用!

modifynvram enrollmssignatures

VBoxManage modifynvram <uuid | vmname>enrollmssignatures

注册 UEFI 安全启动所需的默认 Microsoft KEK 和 DB 签名。

modifynvram enrollorclpk

VBoxManage modifynvram <uuid | vmname>enrollorclpk

注册 Oracle 提供的 UEFI 安全启动所需的默认平台密钥。

modifynvram enrollpk

VBoxManage modifynvram <uuid | vmname>enrollpk [‑‑platform‑key=filename] [‑‑owner‑uuid=uuid]

注册用户提供的 UEFI 安全启动所需的自定义平台密钥。以下命令使用 openssl 生成新的平台密钥:

$ openssl req -new -x509 -newkey rsa:2048 -keyout PK.key -out PK.crt
$ openssl x509 -in PK.crt -out PK.cer -outform DER
--platform-key=filename

作为 DER 编码的 X.509 签名提供的平台密钥。

--owner-uuid=uuid

标识平台密钥所有者的 UUID。

modifynvram secureboot

VBoxManage modifynvram <uuid | vmname>secureboot <‑‑enable | ‑‑disable>

启用或禁用 UEFI 安全启动。

--enable

如果密钥注册状态允许,则启用 UEFI 安全启动。

--disable

禁用 UEFI 安全启动。

modifynvram listvars

VBoxManage modifynvram <uuid | vmname>listvars

列出虚拟机存储中的所有 UEFI 变量及其所有者 UUID。

modifynvram queryvar

VBoxManage modifynvram <uuid | vmname>queryvar [‑‑name=name] [‑‑filename=filename]

查询由其名称标识的给定 UEFI 变量的内容。

--name=name

要查询的 UEFI 变量名称。

--filename=文件名

成功后变量内容的存储位置。这是可选的,如果省略,内容将作为十六进制转储输出到终端。

modifynvram deletevar

VBoxManage modifynvram <uuid | vmname>deletevar [‑‑name=name] [‑‑owner‑uuid=uuid]

删除由其名称和所有者 UUID 标识的给定变量。

--name=name

要删除的 UEFI 变量名称。

--owner-uuid=uuid

标识要删除的变量所有者的 UUID。

modifynvram changevar

VBoxManage modifynvram <uuid | vmname>changevar [‑‑name=name] [‑‑filename=filename]

将 UEFI 变量内容更改为给定文件中的内容。

--name=name

要更改其数据的 UEFI 变量名称。

--filename=文件名

要从中读取数据的文件。

VBoxManage modifyvm

更改已停止的虚拟机的设置

概要

VBoxManage modifyvm <uuid | vmname> [‑‑name=name] [‑‑groups=group [,group...]] [‑‑description=description] [‑‑os‑type=OS‑type] [‑‑icon‑file=filename] [‑‑memory=size‑in‑MB] [‑‑page‑fusion=on | off] [‑‑vram=size‑in‑MB] [‑‑acpi=on | off] [‑‑ioapic=on | off] [‑‑hardware‑uuid=UUID] [‑‑cpus=CPU‑count] [‑‑cpu‑hotplug=on | off] [‑‑plug‑cpu=CPU‑ID] [‑‑unplug‑cpu=CPU‑ID] [‑‑cpu‑execution‑cap=number] [‑‑x86‑pae=on | off] [‑‑x86‑long‑mode=on | off] [‑‑ibpb‑on‑vm‑exit=on | off] [‑‑ibpb‑on‑vm‑entry=on | off] [‑‑spec‑ctrl=on | off] [‑‑l1d‑flush‑on‑sched=on | off] [‑‑l1d‑flush‑on‑vm‑entry=on | off] [‑‑mds‑clear‑on‑sched=on | off] [‑‑mds‑clear‑on‑vm‑entry=on | off] [‑‑cpu‑profile=host | Intel 8086 | Intel 80286 | Intel 80386] [‑‑x86‑hpet=on | off] [‑‑hwvirtex=on | off] [‑‑triple‑fault‑reset=on | off] [‑‑apic=on | off] [‑‑x86‑x2apic=on | off] [‑‑paravirt‑provider=none | default | legacy | minimal | hyperv | kvm] [‑‑paravirt‑debug=key=value[,key=value...]] [‑‑nested‑paging=on | off] [‑‑large‑pages=on | off] [‑‑x86‑vtx‑vpid=on | off] [‑‑x86‑vtx‑ux=on | off] [‑‑nested‑hw‑virt=on | off] [‑‑virt‑vmsave‑vmload=on | off] [‑‑accelerate‑3d=on | off] [‑‑accelerate‑2d‑video=on | off] [‑‑chipset=ich9 | piix3 | armv8virtual] [‑‑iommu=none | automatic | amd | intel] [‑‑tpm‑type=none | 1.2 | 2.0 | host | swtpm] [‑‑tpm‑location=location] [‑‑firmware‑logo‑fade‑in=on | off] [‑‑firmware‑logo‑fade‑out=on | off] [‑‑firmware‑logo‑display‑time=msec] [‑‑firmware‑logo‑image‑path=pathname] [‑‑firmware‑boot‑menu=disabled | menuonly | messageandmenu] [‑‑firmware‑apic=disabled | apic | x2apic] [‑‑firmware‑system‑time‑offset=msec] [‑‑firmware‑pxe‑debug=on | off] [‑‑system‑uuid‑le=on | off] [‑‑bootX=none | floppy | dvd | disk | net] [‑‑rtc‑use‑utc=on | off] [‑‑graphicscontroller=none | vboxvga | vmsvga | vboxsvga | qemuramfb] [‑‑snapshot‑folder=default | pathname] [‑‑firmware=bios | efi | efi32 | efi64] [‑‑guest‑memory‑balloon=size‑in‑MB] [‑‑default‑frontend=default | name] [‑‑vm‑process‑priority=default | flat | low | normal | high] [‑‑vm‑execution‑engine=default | hm | hwvirt | nem | native‑api | interpreter | recompiler]

VBoxManage modifyvm <uuid | vmname> [‑‑nicN=none | null | nat | bridged | intnet | hostonly | hostonlynet | generic | natnetwork | cloud] [‑‑nic‑typeN=Am79C970A | Am79C973 | 82540EM | 82543GC | 82545EM | virtio] [‑‑cable‑connectedN=on | off] [‑‑nic‑traceN=on | off] [‑‑nic‑trace‑fileN=filename] [‑‑nic‑propertyN=name= [value]] [‑‑nic‑speedN=kbps] [‑‑nic‑boot‑prioN=priority] [‑‑nic‑promiscN=deny | allow‑vms | allow‑all] [‑‑nic‑bandwidth‑groupN=none | name] [‑‑bridge‑adapterN=none | device‑name] [‑‑cloud‑networkN=network‑name] [‑‑host‑only‑adapterN=none | device‑name] [‑‑host‑only‑netN=network‑name] [‑‑intnetN=network‑name] [‑‑nat‑networkN=network‑name] [‑‑nic‑generic‑drvN=driver‑name] [‑‑mac‑addressN=auto | MAC‑address]

VBoxManage modifyvm <uuid | vmname> [‑‑nat‑netN=network | default] [‑‑nat‑pfN=[rule‑name],tcp | udp,[host‑IP],hostport,[guest‑IP],guestport] [‑‑nat‑pfN=delete=rule‑name] [‑‑nat‑tftp‑prefixN=prefix] [‑‑nat‑tftp‑fileN=filename] [‑‑nat‑tftp‑serverN=IP‑address] [‑‑nat‑bind‑ipN=IP‑address] [‑‑nat‑dns‑pass‑domainN=on | off] [‑‑nat‑localhostreachableN=on | off] [‑‑nat‑settingsN=[mtu]] [‑‑nat‑forward‑broadcastN=on | off]

VBoxManage modifyvm <uuid | vmname> [‑‑mouse=ps2 | usb | usbtablet | usbmultitouch | usbmtscreenpluspad] [‑‑keyboard=ps2 | usb] [‑‑uartN=off | IO‑baseIRQ] [‑‑uart‑modeN=disconnected | serverpipe | clientpipe | tcpserverport | tcpclienthostname:port | filefilename | device‑name] [‑‑uart‑typeN=16450 | 16550A | 16750] [‑‑lpt‑modeN=device‑name] [‑‑lptN=off | IO‑baseIRQ] [‑‑audio‑controller=ac97 | hda | sb16] [‑‑audio‑codec=stac9700 | ad1980 | stac9221 | sb16] [‑‑audio‑driver=none | default | null | dsound | was | oss | alsa | pulse | coreaudio] [‑‑audio‑enabled=on | off] [‑‑audio‑in=on | off] [‑‑audio‑out=on | off] [‑‑clipboard‑mode=disabled | hosttoguest | guesttohost | bidirectional] [‑‑clipboard‑file‑transfers=enabled | disabled] [‑‑drag‑and‑drop=disabled | hosttoguest | guesttohost | bidirectional] [‑‑monitor‑count=number] [‑‑usb‑ehci=on | off] [‑‑usb‑ohci=on | off] [‑‑usb‑xhci=on | off] [‑‑usb‑rename=old‑namenew‑name]

VBoxManage modifyvm <uuid | vmname> [‑‑recording=on | off] [‑‑recording‑screens=all | none | screen‑ID[,screen‑ID...]] [‑‑recording‑file=filename] [‑‑recording‑max‑size=MB] [‑‑recording‑max‑time=seconds] [‑‑recording‑opts=key=value[,key=value...]] [‑‑recording‑video‑fps=fps] [‑‑recording‑video‑rate=rate] [‑‑recording‑video‑res=widthxheight]

VBoxManage modifyvm <uuid | vmname> [‑‑vrde=on | off] [‑‑vrde‑property=property‑name= [property‑value]] [‑‑vrde‑extpack=default | name] [‑‑vrde‑port=port] [‑‑vrde‑address=hostip] [‑‑vrde‑auth‑type=null | external | guest] [‑‑vrde‑auth‑library=default | name] [‑‑vrde‑multi‑con=on | off] [‑‑vrde‑reuse‑con=on | off] [‑‑vrde‑video‑channel=on | off] [‑‑vrde‑video‑channel‑quality=percent]

VBoxManage modifyvm <uuid | vmname> [‑‑teleporter=on | off] [‑‑teleporter‑port=port] [‑‑teleporter‑address=address | empty] [‑‑teleporter‑password=password] [‑‑teleporter‑password‑file=filename | stdin] [‑‑cpuid‑portability‑level=level] [‑‑cpuid‑set=leaf [:subleaf]eax ebx ecx edx] [‑‑cpuid‑remove=leaf [:subleaf]] [‑‑cpuid‑remove‑all]

VBoxManage modifyvm <uuid | vmname> [‑‑tracing‑enabled=on | off] [‑‑tracing‑config=string] [‑‑tracing‑allow‑vm‑access=on | off]

VBoxManage modifyvm <uuid | vmname> [‑‑usb‑card‑reader=on | off]

VBoxManage modifyvm <uuid | vmname> [‑‑autostart‑enabled=on | off] [‑‑autostart‑delay=seconds]

VBoxManage modifyvm <uuid | vmname> [‑‑guest‑debug‑provider=none | native | gdb | kd] [‑‑guest‑debug‑io‑provider=none | tcp | udp | ipc] [‑‑guest‑debug‑address=IP‑Address | path] [‑‑guest‑debug‑port=port]

VBoxManage modifyvm <uuid | vmname> [‑‑pci‑attach=host‑PCI‑address [@guest‑PCI‑bus‑address]] [‑‑pci‑detach=host‑PCI‑address]

VBoxManage modifyvm <uuid | vmname> [‑‑testing‑enabled=on | off] [‑‑testing‑mmio=on | off] [‑‑testing‑cfg‑dwordidx=value]

描述

VBoxManage modifyvm 命令允许您更改已注册但未运行的虚拟机的属性。

这些属性大多数对应于 VirtualBox Manager 中每个 VM 的*设置*对话框中显示的 VM 设置。请参阅 配置虚拟机。但是,某些设置只能使用 VBoxManage 命令进行查看和管理。

您只能在虚拟机关闭时使用 VBoxManage modifyvm 命令更改 VM 设置。使用此命令时,VM 不能处于运行或已保存状态。

您可以使用 VBoxManage controlvm 命令在 VM 运行时动态更改某些 VM 设置。请参阅 VBoxManage controlvm

通用设置

VBoxManage modifyvm <uuid | vmname> [‑‑name=name] [‑‑groups=group [,group...]] [‑‑description=description] [‑‑os‑type=OS‑type] [‑‑icon‑file=filename] [‑‑memory=size‑in‑MB] [‑‑page‑fusion=on | off] [‑‑vram=size‑in‑MB] [‑‑acpi=on | off] [‑‑ioapic=on | off] [‑‑hardware‑uuid=UUID] [‑‑cpus=CPU‑count] [‑‑cpu‑hotplug=on | off] [‑‑plug‑cpu=CPU‑ID] [‑‑unplug‑cpu=CPU‑ID] [‑‑cpu‑execution‑cap=number] [‑‑x86‑pae=on | off] [‑‑x86‑long‑mode=on | off] [‑‑ibpb‑on‑vm‑exit=on | off] [‑‑ibpb‑on‑vm‑entry=on | off] [‑‑spec‑ctrl=on | off] [‑‑l1d‑flush‑on‑sched=on | off] [‑‑l1d‑flush‑on‑vm‑entry=on | off] [‑‑mds‑clear‑on‑sched=on | off] [‑‑mds‑clear‑on‑vm‑entry=on | off] [‑‑cpu‑profile=host | Intel 8086 | Intel 80286 | Intel 80386] [‑‑x86‑hpet=on | off] [‑‑hwvirtex=on | off] [‑‑triple‑fault‑reset=on | off] [‑‑apic=on | off] [‑‑x86‑x2apic=on | off] [‑‑paravirt‑provider=none | default | legacy | minimal | hyperv | kvm] [‑‑paravirt‑debug=key=value[,key=value...]] [‑‑nested‑paging=on | off] [‑‑large‑pages=on | off] [‑‑x86‑vtx‑vpid=on | off] [‑‑x86‑vtx‑ux=on | off] [‑‑nested‑hw‑virt=on | off] [‑‑virt‑vmsave‑vmload=on | off] [‑‑accelerate‑3d=on | off] [‑‑accelerate‑2d‑video=on | off] [‑‑chipset=ich9 | piix3 | armv8virtual] [‑‑iommu=none | automatic | amd | intel] [‑‑tpm‑type=none | 1.2 | 2.0 | host | swtpm] [‑‑tpm‑location=location] [‑‑firmware‑logo‑fade‑in=on | off] [‑‑firmware‑logo‑fade‑out=on | off] [‑‑firmware‑logo‑display‑time=msec] [‑‑firmware‑logo‑image‑path=pathname] [‑‑firmware‑boot‑menu=disabled | menuonly | messageandmenu] [‑‑firmware‑apic=disabled | apic | x2apic] [‑‑firmware‑system‑time‑offset=msec] [‑‑firmware‑pxe‑debug=on | off] [‑‑system‑uuid‑le=on | off] [‑‑bootX=none | floppy | dvd | disk | net] [‑‑rtc‑use‑utc=on | off] [‑‑graphicscontroller=none | vboxvga | vmsvga | vboxsvga | qemuramfb] [‑‑snapshot‑folder=default | pathname] [‑‑firmware=bios | efi | efi32 | efi64] [‑‑guest‑memory‑balloon=size‑in‑MB] [‑‑default‑frontend=default | name] [‑‑vm‑process‑priority=default | flat | low | normal | high] [‑‑vm‑execution‑engine=default | hm | hwvirt | nem | native‑api | interpreter | recompiler]

以下选项使您能够修改有关 VM 的常规信息。

VBoxManage modifyvm 命令支持以下选项:

--name=vmname

更改 VM 及其相关的内部 VM 文件的名称。请参阅 VBoxManage createvm

--groups=group

更改 VM 的组隶属关系。组名始终以斜杠字符 (/) 开头,并且可以嵌套。默认情况下,VM 隶属于 / 组。VM 可以隶属于多个组,但其主组决定了内部 VM 文件默认放置的目录结构。

--description=desc

更改可选的 VM 描述。使用描述以有意义的方式记录 VM 的详细信息。GUI 会解释 HTML 标记,而 VBoxManage modifyvm 命令允许您包含可以包含多行的任意字符串。

--os-type=OS-type

指定 VM 的客户机操作系统 (OS) 信息。使用 VBoxManage list ostypes 命令查看 OS 类型标识符。

--icon-file=filename

指定主机系统上 PNG 格式的 VM 图标文件的路径。该图标显示在 VM 管理器 UI 中,并在通过 UI 运行 VM 时显示。

--memory=size

指定分配给 VM 的主机系统 RAM 量。大小单位为 MB。请参阅 创建虚拟机

--page-fusion=on | off

启用或禁用 Page Fusion 功能,该功能默认禁用。使用 Page Fusion 功能可最小化具有相似配置且在同一主机系统上运行的 VM 之间的内存重复。请参阅 Page Fusion

--vram=size

指定分配给虚拟显卡的 RAM 量。请参阅 显示设置

--acpi=on | off

确定 VM 是否具有 ACPI 支持。请参阅 主板选项卡

--ioapic=on | off

确定 VM 是否具有 I/O APIC 支持。请参阅 主板选项卡

--hardware-uuid=uuid

指定将在内存表 (DMI/SMBIOS)、硬件和 VM 属性中呈现给客户机 VM 的通用唯一标识符 (UUID)。默认情况下,此硬件 UUID 与 VM UUID 相同。克隆 VM 和传送功能会自动保留硬件 UUID 值。虚拟设备导出和导入也是如此,但前提是这两个操作都由 Oracle VirtualBox 执行。

--cpus=CPU-count

指定分配给 VM 的虚拟 CPU 数量。请参阅 处理器选项卡

如果启用了 CPU 热插拔,此选项指定可插入 VM 的最大虚拟 CPU 数量。

--cpu-hotplug=on | off

启用或禁用 CPU 热插拔。启用后,您可以动态地向 VM 添加虚拟 CPU 或从 VM 中删除虚拟 CPU。请参阅 CPU 热插拔

--plug-cpu=CPU-ID

将虚拟 CPU 添加到 VM。CPU-ID 是要添加的虚拟 CPU 的索引。有效索引值是从 0 到通过 --cpus 选项配置的最大 CPU 数量的数字。

仅当启用 CPU 热插拔时才使用此选项。

--unplug-cpu=CPU-ID

将虚拟 CPU 从 VM 中移除。CPU-ID 是要移除的虚拟 CPU 的索引。有效索引值是从 1 到通过 --cpus 选项配置的最大 CPU 数量的数字。

仅当启用 CPU 热插拔时才使用此选项。

请注意,不能移除 CPU 0。

--cpuexectioncap=percentage

指定虚拟 CPU 可以使用多少 CPU 时间。有效值为 1100。值为 50 表示单个虚拟 CPU 可以使用单个主机 CPU 的高达 50% 的时间。

请谨慎使用此功能,它可能会产生意想不到的结果,包括时间保持问题和低于指定性能。如果您想限制虚拟机的资源使用,选择适当数量的 VCPU 更可靠。

--x86-pae=on | off

启用或禁用物理地址扩展 (PAE)。请参阅 处理器选项卡

--x86-long-mode=on | off

启用或禁用长模式。请参阅 处理器选项卡

--ibpb-on-vm-exit=on | off

在每次 VM 退出时启用使用间接分支预测屏障 (IBPB)。

--ibpb-on-vm-entry=on | off

在每次 VM 进入时启用使用间接分支预测屏障 (IBPB)。

--spec-ctrl=on | off

启用或禁用向客户机 VM 公开推测控制接口。这些接口必须在主机系统上可用。

根据主机 CPU 和工作负载,启用推测控制可能会显著降低性能。

--l1d-flush-on-sched=on | off

启用或禁用线程计划执行客户机代码时刷新级别 1 数据缓存。请参阅 CVE-2018-3646

--l1d-flush-on-vm-entry=on | off

启用或禁用每次 VM 入口时刷新级别 1 数据缓存。请参阅 CVE-2018-3646

--mds-clear-on-sched=on | off

启用线程计划执行客户机代码时清除 CPU 缓冲区。请参阅 CVE-2018-12126、CVE-2018-12127、CVE-2018-12130、CVE-2019-11091

--mds-clear-on-vm-entry=on | off

启用每次 VM 入口时清除 CPU 缓冲区。请参阅 CVE-2018-12126、CVE-2018-12127、CVE-2018-12130、CVE-2019-11091

--cpu-profile=host | Intel 8086 | Intel 80286 | Intel 80386

指定用于客户机 CPU 模拟的配置文件。指定基于主机系统 CPU (host) 或以下旧 Intel 微体系结构之一的值:80868028680386

--x86-hpet=on | off

启用或禁用高精度事件计时器 (HPET),它可以替换旧版系统计时器。此功能默认情况下是禁用的。请注意,HPET 在 Vista 及更高版本的 Windows 上受支持。

--hwvirtex=on | off

启用或禁用主机系统处理器中的硬件虚拟化扩展。此类扩展为 Intel VT-x 或 AMD-V。请参阅 硬件虚拟化

--triple-fault-reset=on | off

启用或禁用重置客户机 VM,而不是触发 Guru Meditation。某些客户机 VM 会引发三重故障以重置 CPU,因此重置客户机 VM 有时是最佳结果。此选项仅适用于不使用对称多处理 (SMP) 的客户机。

--apic=on | off

启用或禁用 APIC。使用 APIC,操作系统可以使用超过 16 个中断请求 (IRQ) 来避免 IRQ 共享并提高可靠性。APIC 默认启用。请参阅 主板选项卡

--x86-x2apic=on | off

启用或禁用 CPU x2APIC 功能。CPU x2APIC 使操作系统能够在高核心计数配置上更高效地运行,并优化虚拟化环境中的中断分配。此功能默认情况下是启用的。

当在主机系统或客户机 VM 上运行的操作系统与 CPU x2APIC 不兼容时,请禁用此功能。

--paravirt-provider=none | default | legacy | minimal | hyperv | kvm

指定向客户机操作系统提供以下准虚拟化接口之一:

  • none 不公开任何半虚拟化接口。

  • default 在启动 VM 时根据客户机操作系统类型选择合适的接口。这是创建新 VM 时使用的默认值。

  • legacy 为旧版 Oracle VirtualBox 创建的 VM 选择半虚拟化接口。

  • minimal 是 Mac OS X 客户机 VM 所必需的。

  • kvm 推荐用于 Linux 客户机 VM。请参阅 半虚拟化提供程序

  • hyperv 推荐用于 Windows 客户机 VM。请参阅 半虚拟化提供程序

--paravirt-debug=property=value

指定特定于为指定 VM 配置的半虚拟化提供程序的调试属性。请参阅 半虚拟化调试

--nested-paging=on | off

启用或禁用主机系统处理器中的嵌套分页功能。仅当启用硬件虚拟化时,此选项才可用。请参阅 硬件虚拟化CVE-2018-3646

--large-pages=on | off

启用或禁用管理程序使用大页面,这可以提高性能高达 5%。使用大页面可减少 TLB 使用和开销。此选项仅在同时启用硬件虚拟化和嵌套分页时可用。

--x86-vtx-vpid=on | off

启用或禁用主机系统处理器中的带标记 TLB (VPID) 功能。请参阅 硬件虚拟化。仅当在 Intel VT-x 上启用硬件虚拟化时,此选项才可用。

--x86-vtx-ux=on | off

启用或禁用使用无限制客户机模式执行客户机 VM。此选项仅在 Intel VT-x 上启用硬件虚拟化时可用。

--nested-hw-virt=on | off

启用或禁用嵌套虚拟化。启用可使硬件虚拟化功能对 VM 可用。请参阅 嵌套虚拟化

--virt-vmsave-vmload=on | off

如果启用了硬件虚拟化且主机具有 AMD CPU,则此设置在执行 VM 时启用或禁用虚拟化的 vmsave/vmload 主机功能。默认情况下启用。建议保持启用状态,因为它对执行嵌套 VM 使用嵌套硬件虚拟化功能时具有显著的性能影响。嵌套虚拟化

--accelerate-3d=on | off

为支持硬件 3D 加速的图形适配器变体启用或禁用硬件 3D 加速。此选项仅在安装了客户机增强功能时才生效。请参阅 硬件加速图形

--accelerate-2d-video=on | off

为支持 2D 视频加速的图形适配器变体启用或禁用 2D 视频加速。

--chipset=piix3 | ich9 | armv8virtual

指定 Oracle VirtualBox 要模拟的 Intel 芯片组。对于 x86 平台,默认值为 Intel PIIX3 芯片组 (piix3)。对于 ARM 平台,默认值为 ARMv8Virtual 芯片组 (armv8virtual)。

仅当需要放宽某些芯片组限制时才更改此值。请参阅 主板选项卡

--iommu=none | automatic | amd | intel

指定 Oracle VirtualBox 要模拟的 IOMMU 类型。Intel 和 AMD IOMMU 模拟目前都需要使用 Intel ICH9 芯片组(请参阅 --chipset 选项)。

有效值如下:

  • none – 没有 IOMMU,这是默认值。

  • automatic – 存在 IOMMU,但其类型在 VM 启动时自动选择以匹配主机 CPU 供应商。

  • amd – 存在 AMD IOMMU。

  • intel – 存在 Intel IOMMU。

--tpm-type=none | 1.2 | 2.0 | host | swtpm

指定 Oracle VirtualBox 要模拟的 TPM 类型。

有效值如下:

  • none – 没有 TPM,这是默认值。

  • 1.2 – 存在符合 TCG 规范版本 1.2 的 TPM。

  • 2.0 – 存在符合 TCG 规范版本 2.0 的 TPM。

  • host – 主机 TPM 被传递给客户机。在所有支持的主机平台上可能不可用。

  • swtpm – VM 连接到一个符合 swtpm 的外部 TPM 仿真。需要设置 TPM 位置以进行连接(请参阅 --tpm-location 选项)。

--firmware-logo-fade-in=on | off

指定 BIOS 徽标在 VM 启动时是否淡入。默认情况下,会显示 Oracle VirtualBox 徽标。

--firmware-logo-fade-out=on | off

指定 BIOS 徽标是否在 VM 启动时淡出。

--firmware-logo-display-time=msec

指定 BIOS 徽标可见的毫秒数。

--firmware-logo-image-path=pathname

用不同的图像替换现有的 BIOS 徽标。替换图像必须是未压缩的 16、256 或 16M 色位图文件 (BMP),不包含颜色空间信息 (Windows 3.0 格式)。另请确保图像尺寸不超过 640 x 480 像素。

--firmware-boot-menu=disabled | menuonly | messageandmenu

指定 BIOS 是否允许您选择临时引导设备。有效值包括:

  • disabled 输出备用启动设备消息,并允许您通过按 F12 来选择临时启动设备。

  • menuonly 抑制备用启动设备消息,但允许您通过按 F12 来选择临时启动设备。

  • messageandmenu 抑制备用启动设备消息,并阻止您通过按 F12 来选择临时启动设备。

--firmware-apic=x2apic | apic | disabled

指定固件的 APIC 级别。有效值为:x2apicapicdisabled。当值为 disabled 时,不使用固件的 apicx2apic 版本。

请注意,如果您指定 x2apic 值而虚拟 CPU 不支持 x2APIC,则 APIC 级别会降级为 apic(如果支持)。否则,APIC 级别会降级为 disabled。同样,如果您指定 apic 值而虚拟 CPU 不支持 APIC,则 APIC 级别会降级为 disabled

--firmware-system-time-offset=msec

指定客户机 VM 相对于主机系统时间的毫秒级时间偏移量。如果偏移值为正,则客户机 VM 时间将比主机系统时间快。

--firmware-pxe-debug=on | off

启用或禁用使用 Intel PXE 启动 ROM 时的其他调试输出。调试输出会写入发布日志文件。请参阅 收集调试信息

--system-uuid-le=on | off

启用或禁用以小端格式表示系统 UUID。新 VM 的默认值为 on。对于旧 VM,设置为 off 以保持 DMI/SMBIOS 表的内容不变,这对于 Windows 许可证激活可能很重要。

--bootN=none | floppy | dvd | disk | net

允许您通过将设备类型之一分配给选项名称中由 N 表示的四个启动设备槽中的每个槽来指定 VM 的启动设备顺序。

N 的值为 1 表示第一个启动设备槽,依此类推。

设备类型为软盘的 floppy,DVD 或 CD 的 dvd,硬盘的 disk,以及网络设备的 net。值为 none 表示没有与指定槽关联的启动设备。

--rtc-use-utc=on | off

指定实时时钟 (RTC) 是否使用协调世界时 (UTC)。请参阅 主板选项卡

--graphicscontroller=none | vboxvga | vmsvga | vboxsvga

指定要使用的图形控制器类型。请参阅 屏幕选项卡

--snapshot-folder=default | pathname

指定 VM 快照存储文件夹的名称。如果您指定 default,则文件夹名称为机器文件夹中的 Snapshots/

--firmware=bios | efi | efi32 | efi64

指定用于启动 VM 的固件。有效值为:biosefiefi32efi64。请谨慎使用 EFI 值。

默认情况下,使用 BIOS 固件。

--guest-memory-balloon=size

指定客户机内存气球的大小。客户机内存气球是客户机增强功能从客户机操作系统分配并返回给 hypervisor 以供其他 VM 使用的内存。将 size 指定为兆字节。默认值为 0 兆字节。请参阅 内存气球

--default-frontend=default | name

指定启动指定 VM 时要使用的默认前端。如果指定 default,则 VM 将显示在用户桌面上的窗口中。请参阅 VBoxManage startvm

--vm-process-priority=default | flat | low | normal | high

指定启动指定 VM 和 VM 运行期间要使用的 VM 进程的优先级方案。

以下是有效值:

  • default – 由操作系统确定的默认进程优先级。

  • flat – 假定调度策略将进程置于默认优先级,所有线程具有相同的优先级。

  • low – 假定调度策略将进程主要置于低于主机 OS 默认优先级的水平。

  • normal – 假定调度策略将 CPU 资源与以主机 OS 默认优先级运行的其他进程公平共享。

  • high – 假定调度策略将任务置于高于主机 OS 默认优先级的水平。此策略很容易导致系统中的其他任务被饿死。

网络设置

VBoxManage modifyvm <uuid | vmname> [‑‑nicN=none | null | nat | bridged | intnet | hostonly | hostonlynet | generic | natnetwork | cloud] [‑‑nic‑typeN=Am79C970A | Am79C973 | 82540EM | 82543GC | 82545EM | virtio] [‑‑cable‑connectedN=on | off] [‑‑nic‑traceN=on | off] [‑‑nic‑trace‑fileN=filename] [‑‑nic‑propertyN=name= [value]] [‑‑nic‑speedN=kbps] [‑‑nic‑boot‑prioN=priority] [‑‑nic‑promiscN=deny | allow‑vms | allow‑all] [‑‑nic‑bandwidth‑groupN=none | name] [‑‑bridge‑adapterN=none | device‑name] [‑‑cloud‑networkN=network‑name] [‑‑host‑only‑adapterN=none | device‑name] [‑‑host‑only‑netN=network‑name] [‑‑intnetN=network‑name] [‑‑nat‑networkN=network‑name] [‑‑nic‑generic‑drvN=driver‑name] [‑‑mac‑addressN=auto | MAC‑address]

以下选项允许您修改 VM 上的网络。对于所有这些选项,N 是一个大于零的整数,表示要配置的特定虚拟网络适配器。

--nicN=none | null | nat | natnetwork | bridged | intnet | hostonly | generic

配置 VM 中每个虚拟网卡使用的网络类型。

以下有效值对应于 网络模式简介 中描述的模式。

  • none – 没有网络连接

  • null – 未连接到主机系统

  • nat – 使用网络地址转换 (NAT)

  • natnetwork – 使用 NAT 网络

  • bridged – 使用桥接网络

  • intnet – 使用内部网络

  • hostonly – 使用仅主机网络

  • generic – 访问很少使用的子模式

--nic-typeN=Am79C970A | Am79C973 | 82540EM | 82543GC | 82545EM | virtio

标识 Oracle VirtualBox 为指定虚拟网卡向客户机 VM 显示的网络硬件类型。请参阅 虚拟网络硬件

有效值如下:

  • Am79C970A 代表 AMD PCNet PCI II。

  • Am79C973 代表 AMD PCNet FAST III,这是默认值。

  • 82540EM 代表 Intel PRO/1000 MT Desktop。

  • 82543GC 代表 Intel PRO/1000 T Server。

  • 82545EM 代表 Intel PRO/1000 MT Server。

  • virtio 代表一个半虚拟化网络适配器。

--cable-connectedN=on | off

临时断开虚拟网络接口,就像您从物理网卡中拔出网线一样。您可以使用此选项重置 VM 中的某些软件组件。

--nic-traceN=on | off

启用或禁用指定虚拟网卡的网络跟踪。

--nic-trace-fileN=filename

指定要写入跟踪日志信息的文件绝对路径。如果启用了网络跟踪,请使用此选项。

--nic-propertyN=name=value

允许您设置属性值并将它们传递给很少使用的网络后端。要使用此选项,您还必须使用 --nic-generic-drv 选项。

这些属性特定于后端引擎,并且在 UDP Tunnel 和 VDE 后端驱动程序之间有所不同。有关属性示例,请参阅 UDP 隧道网络

--nic-speedN=kbps

指定很少使用的网络子模式(如 VDE 网络和 UDP 隧道)的吞吐率(以千比特每秒为单位)。仅当您使用 --nic 选项为指定虚拟网卡启用通用网络时,才使用此选项。

--nic-boot-prioN=priority

为每个 NIC 分配一个优先级,该优先级决定了使用该 NIC 执行 PXE 网络启动的顺序。优先级值是介于 04 之间的整数。优先级 0(默认值)是最低优先级。优先级 1 是最高优先级,优先级 34 较低。

此选项仅在使用 Intel PXE 引导 ROM 时有效。

--nic-promiscN=deny | allow-vms | allow-all

使您能够指定是否拒绝或允许指定 VM 虚拟网卡的混杂模式。此选项仅与桥接网络相关。有效值如下:

  • deny 隐藏任何非 VM 流量。这是默认值。

  • allow-vms 隐藏所有主机流量,但允许 VM 查看与其他 VM 的流量。

  • allow-all 允许 VM 查看所有流量。

--nic-bandwidth-groupN=none | name

向指定的虚拟网络接口添加或移除带宽组分配。有效值如下:

  • none 从指定的虚拟网络接口中删除任何当前带宽组分配。

  • name 将带宽组分配添加到指定的虚拟网络接口。

请参阅 限制网络输入/输出带宽

--bridge-adapterN=none | device-name

指定要用于指定虚拟网络接口的主机接口。请参阅 桥接网络。仅当您使用 --nic 选项为指定虚拟网卡启用桥接网络时,才使用此选项。

--host-only-adapterN=none | device-name

指定要用于指定虚拟网络接口的仅主机网络接口。请参阅 仅主机网络。仅当您使用 --nic 选项为指定虚拟网卡启用仅主机网络时,才使用此选项。

--intnetN=network-name

指定内部网络的名称。请参阅 内部网络。仅当您使用 --nic 选项为指定虚拟网卡启用内部网络时,才使用此选项。

--nat-networkN=network-name

指定此适配器连接到的 NAT 网络的名称。仅当网络类型为 natnetwork 而不是 nat 时,才使用此选项。

--nic-generic-drvN=backend-driver

允许您访问很少使用的网络子模式,例如 VDE 网络和 UDP 隧道。仅当您使用 --nic 选项为虚拟网卡启用通用网络时,才使用此选项。

--mac-addressN=auto | MAC-address

指定虚拟机上特定网络适配器的 MAC 地址。默认情况下,Oracle VirtualBox 在创建虚拟机时会为每个网络适配器分配一个随机的 MAC 地址。

NAT 网络设置

VBoxManage modifyvm <uuid | vmname> [‑‑nat‑netN=network | default] [‑‑nat‑pfN=[rule‑name],tcp | udp,[host‑IP],hostport,[guest‑IP],guestport] [‑‑nat‑pfN=delete=rule‑name] [‑‑nat‑tftp‑prefixN=prefix] [‑‑nat‑tftp‑fileN=filename] [‑‑nat‑tftp‑serverN=IP‑address] [‑‑nat‑bind‑ipN=IP‑address] [‑‑nat‑dns‑pass‑domainN=on | off] [‑‑nat‑localhostreachableN=on | off] [‑‑nat‑settingsN=[mtu]] [‑‑nat‑forward‑broadcastN=on | off]

以下选项使用 N 来指定要修改的特定虚拟网络适配器。

--nat-netN=default | network

指定要为此网络使用的 IP 地址范围。请参阅 精调 Oracle VirtualBox NAT 引擎。仅当网络类型为 nat 而不是 natnetwork 时,才使用此选项。

--nat-pfN=[name],tcp | udp,[host-IP],hostport,[guest-IP],guestport

指定要使用的 NAT 端口转发规则。请参阅 使用 NAT 配置端口转发

--nat-pfN=delete name

指定要删除的 NAT 端口转发规则。请参阅 使用 NAT 配置端口转发

--nat-tftp-prefixN=prefix

为内置 TFTP 服务器指定要使用的前缀。例如,您可以使用前缀来指示启动文件的位置。请参阅 使用 NAT 进行 PXE 启动配置 NAT 网络接口的启动服务器(下一服务器)

--nat-tftp-fileN=boot-file

指定 TFTP 启动文件的名称。请参阅 配置 NAT 网络接口的启动服务器(下一服务器)

--nat-tftp-serverN=tftp-server

指定要从中启动 TFTP 服务器的地址。请参阅 配置 NAT 网络接口的启动服务器(下一服务器)

--nat-bind-ipN=IP-address

指定 NAT 引擎绑定的备用 IP 地址。默认情况下,Oracle VirtualBox 的 NAT 引擎通过主机 TCP/IP 堆栈分配的默认接口路由 TCP/IP 数据包。

--nat-dns-pass-domainN=on | off

指定内置 DHCP 服务器是否传递用于网络名称解析的域名。

--nat-dns-proxyN=on | off

指定 NAT 引擎是否是所有客户机 DNS 请求到主机系统 DNS 服务器的代理。请参阅 在 NAT 模式下启用 DNS 代理

--nat-dns-host-resolverN=on | off

指定 NAT 引擎是否使用主机系统的解析器机制来处理 DNS 请求。请参阅 在 NAT 模式下启用 DNS 代理

--nat-localhostreachableN=on | off

指定 NAT 引擎是否允许从客户机定向到 10.0.2.2 的流量传递到主机的环回接口,即 localhost 或 127.0.0.1。

--nat-settingsN=[mtu],[socksnd],[sockrcv],[tcpsnd],[tcprcv]

指定用于优化 NAT 性能的值。

--nat-alias-modeN=default | [log],[proxyonly],[sameports]

指定 NAT 引擎核心的行为如下:

  • log 启用日志记录

  • proxyonly 关闭别名模式,使 NAT 透明化

  • sameports 强制 NAT 引擎通过数据包发起的同一端口发送数据包

  • default 禁用所有别名模式

有关更多信息,请参阅 配置 NAT 引擎的别名

其他硬件设置

VBoxManage modifyvm <uuid | vmname> [‑‑mouse=ps2 | usb | usbtablet | usbmultitouch | usbmtscreenpluspad] [‑‑keyboard=ps2 | usb] [‑‑uartN=off | IO‑baseIRQ] [‑‑uart‑modeN=disconnected | serverpipe | clientpipe | tcpserverport | tcpclienthostname:port | filefilename | device‑name] [‑‑uart‑typeN=16450 | 16550A | 16750] [‑‑lpt‑modeN=device‑name] [‑‑lptN=off | IO‑baseIRQ] [‑‑audio‑controller=ac97 | hda | sb16] [‑‑audio‑codec=stac9700 | ad1980 | stac9221 | sb16] [‑‑audio‑driver=none | default | null | dsound | was | oss | alsa | pulse | coreaudio] [‑‑audio‑enabled=on | off] [‑‑audio‑in=on | off] [‑‑audio‑out=on | off] [‑‑clipboard‑mode=disabled | hosttoguest | guesttohost | bidirectional] [‑‑clipboard‑file‑transfers=enabled | disabled] [‑‑drag‑and‑drop=disabled | hosttoguest | guesttohost | bidirectional] [‑‑monitor‑count=number] [‑‑usb‑ehci=on | off] [‑‑usb‑ohci=on | off] [‑‑usb‑xhci=on | off] [‑‑usb‑rename=old‑namenew‑name]

以下选项使您能够配置其他硬件,例如串行端口、显示器、音频设备、USB 端口以及剪贴板和拖放功能。

--mouse=ps2 | usb | usbtablet | usbmultitouch | usbmtscreenpluspad

指定虚拟机中使用的鼠标模式。有效值为:ps2usbusbtabletusbmultitouchusbmtscreenpluspad

--keyboard=ps2 | usb

指定虚拟机中使用的键盘模式。有效值为:ps2usb

--uartN=off | I/O-base IRQ

为虚拟机配置虚拟串行端口。N 代表要修改的串行端口。有效值为:off 表示禁用端口,或者指定 I/O 基址和 IRQ。有关传统 COM 端口 I/O 基址和 IRQ 值的信息,请参阅 串行端口

--uart-modeN=mode

指定 Oracle VirtualBox 如何将指定的虚拟串行端口连接到运行虚拟机的宿主系统。请参阅 串行端口

确保您首先使用 --uartN 选项配置虚拟串行端口。

为每个端口指定以下连接模式之一

  • disconnected 表示尽管串行端口显示给客户机虚拟机,但它并未连接。这种状态就像一个未连接电缆的物理 COM 端口。

  • server pipe-name 在宿主系统上创建指定的命名管道或本地域套接字,并将虚拟串行设备连接到它。

    在 Windows 宿主系统上,pipe-name 是一个命名管道,其名称形式如下:\\.\pipe\pipe-name

    在 Linux 宿主系统上,pipe-name 是一个本地域套接字。

  • client pipe-name 将虚拟串行设备连接到指定的命名管道或本地域套接字。

    请注意,命名管道或本地域套接字必须已经存在。

  • tcpserver port 在宿主系统上创建一个具有指定 TCP 端口的 TCP 套接字,并将虚拟串行设备连接到它。

    对于类 UNIX 系统,非 root 用户请使用 1024 以上的端口。

  • tcpclient hostname:port 将虚拟串行设备连接到 TCP 套接字。

    请注意,TCP 套接字必须已经存在。

  • file filename 将串行端口输出重定向到指定的文件。确保 filename 是宿主系统上文件的绝对路径。

  • device-name:指定虚拟串行端口连接到的指定宿主系统上的物理硬件串行端口的设备名称。

    使用此模式将物理串行端口连接到 VM。

    在 Windows 宿主系统上,设备名称是 COM 端口,例如 COM1。在 Linux 宿主系统上,设备名称类似于 /dev/ttyS0

--uart-typeN=UART-type

为指定的虚拟串行端口(N)配置 UART 类型。有效值为 1645016550A16750。默认值为 16550A

--lpt-modeN=device-name

指定要使用的并行端口的设备名称。

对于 Windows 宿主系统,请使用设备名称,例如 lpt1。对于 Linux 宿主系统,请使用设备名称,例如 /dev/lp0

--lptN=I/O-base IRQ

指定并行端口的 I/O 基地址和 IRQ。

您可以在设备管理器中查看 VM 用于并行端口的 I/O 基地址和 IRQ。

--audio-controller=controller-type

指定要与虚拟机一起使用的音频控制器。有效的音频控制器类型值为:ac97hdasb16

--audio-codec=codec-type

指定要与虚拟机一起使用的音频编解码器。有效的音频编解码器类型值为:stac9700ad1980stac9221sb16

--audio-driver=type

指定要使用的音频驱动程序(后端)。nonedefaultnulldsoundwasossalsapulsecoreaudio

请注意,音频驱动程序取决于宿主操作系统。使用 VBoxManage modifyvm 命令的使用输出以确定您宿主系统支持的音频类型。

为了在主机之间实现最大互操作性,可以使用默认音频驱动程序。VM 将自动为当前可用的主机选择最合适的音频驱动程序。

--audio-enabled=on|off

指定是否为 VM 启用或禁用音频。

此选项优先于 --audio-on 和 --audio-off 选项,即通过此选项关闭音频将同时关闭输入和输出音频。

--audio-in=on|off

指定是否启用或禁用从主机系统捕获音频。

--audio-out=on|off

指定是否启用或禁用从客户机 VM 播放音频。

--clipboard-mode=value

指定如何分别将客户机虚拟机或宿主操作系统剪贴板与宿主系统或客户机虚拟机共享。有效值为:disabledhosttoguestguesttohostbidirectional。请参阅 常规设置

剪贴板功能仅在 VM 中安装了 Guest Additions 时可用。

--clipboard-file-transfers=value

指定客户机虚拟机和宿主之间的剪贴板文件传输是否启用。有效值为:disabledenabled。取决于当前设置的剪贴板模式。

此剪贴板文件传输功能仅在已安装客户机增强功能时可用。

--drag-and-drop=value

指定如何在宿主系统和虚拟机之间使用拖放功能。有效值为:disabledhosttoguestguesttohostbidirectional。请参阅 拖放

拖放功能仅在 VM 中安装了 Guest Additions 时可用。

--monitor-count=count

允许您配置多个监视器。请参阅 显示设置

--usb-ohci=on | off

启用或禁用虚拟机的虚拟 USB 1.1 控制器。请参阅 USB 设置

--usb-ehci=on | off

启用或禁用虚拟机的虚拟 USB 2.0 控制器。请参阅 USB 设置

--usb-xhci=on | off

启用或禁用虚拟机的虚拟 USB 3.0 控制器。如果虚拟机支持,这是最有效的选项。请参阅 USB 设置

--usb-rename=old-name new-name

将虚拟机的虚拟 USB 控制器从 old-name 重命名为 new-name

录制设置

VBoxManage modifyvm <uuid | vmname> [‑‑recording=on | off] [‑‑recording‑screens=all | none | screen‑ID[,screen‑ID...]] [‑‑recording‑file=filename] [‑‑recording‑max‑size=MB] [‑‑recording‑max‑time=seconds] [‑‑recording‑opts=key=value[,key=value...]] [‑‑recording‑video‑fps=fps] [‑‑recording‑video‑rate=rate] [‑‑recording‑video‑res=widthxheight]

以下选项使您能够修改视频录制、音频录制或两者的设置。

--recording=on | off

启用或禁用将虚拟机对话录制到 WebM 或 VP8 文件。当设置为 on 时,录制会在虚拟机对话启动时开始。

--recording-screens=all | none | screen-ID[,screen-ID...

允许您指定要录制的虚拟机屏幕。每个屏幕的录制输出到自己的文件。有效值为:all(录制所有屏幕)、none(不录制任何屏幕),或一个或多个指定的屏幕。

--recording-file=filename

指定保存录制内容的文件名。

--recording-max-size=MB

以兆字节为单位指定录制视频文件的最大大小。当文件达到指定大小时,录制将停止。如果值为 0,则录制将继续,直到您手动停止录制。

--recording-max-time=seconds

以秒为单位指定录制的最大时间。当达到指定时间时,录制将停止。如果值为 0,则录制将继续,直到您手动停止录制。

--recording-opts=keyword=value

将其他视频录制属性指定为逗号分隔的关键字-值列表。例如:foo=bar,a=b

仅当您是高级用户时,才使用此选项。有关关键字的信息,请参阅《Oracle VirtualBox 编程指南和参考》。

--recording-video-fps=fps

指定要录制的最大视频帧/秒 (FPS)。录制会忽略任何频率更高的帧。当您增加 FPS 时,忽略的帧数会减少,但录制和录制文件的大小会增加。

--recording-video-rate=bit-rate

指定视频的比特率(以千比特/秒为单位)。当您增加比特率时,录制外观会改善,录制文件的大小会增加。

--recording-video-res=widthxheight

指定录制视频的视频分辨率(宽度和高度,以像素为单位)。

远程计算机设置

VBoxManage modifyvm <uuid | vmname> [‑‑vrde=on | off] [‑‑vrde‑property=property‑name= [property‑value]] [‑‑vrde‑extpack=default | name] [‑‑vrde‑port=port] [‑‑vrde‑address=hostip] [‑‑vrde‑auth‑type=null | external | guest] [‑‑vrde‑auth‑library=default | name] [‑‑vrde‑multi‑con=on | off] [‑‑vrde‑reuse‑con=on | off] [‑‑vrde‑video‑channel=on | off] [‑‑vrde‑video‑channel‑quality=percent]

以下选项使您能够修改 VirtualBox 远程桌面扩展 (VRDE) 行为。

--vrde=on | off

启用或禁用 VRDE 服务器。

--vrde-property=TCP/Ports=port

port 是 VRDE 服务器绑定的端口或端口范围。值 default0 使用端口 3389,这是标准的 RDP 端口。

另请参阅 --vrde-port 选项说明。

--vrde-property=TCP/Address=IP-address

IP-address 是 VRDE 服务器绑定的主机网络接口的 IP 地址。指定后,服务器将仅在该 IP 地址的主机网络接口上接受连接。

另请参阅 --vrde-address 选项说明。

--vrde-property=VideoChannel/Enabled=value

指定 VRDP 视频通道是开启还是关闭。1 表示 on0 表示 off。请参阅 VRDP 视频重定向

--vrde-property=Quality=value

指定 VRDE 服务器视频通道上的 JPEG 压缩级别,范围为 10% 到 100%(包含)。较低的值会产生较低的 JPEG 质量但更高的压缩率。请参阅 VRDP 视频重定向

--vrde-property=DownscaleProtection=value

启用或禁用视频缩小保护功能。有效值为 1 表示启用该功能,0 表示禁用该功能。

启用此功能时,Oracle VirtualBox 将决定是否显示视频

  • 当视频大小等于影子缓冲区的大小时,视频被视为全屏并显示。

  • 当视频大小介于全屏和缩小阈值之间时,视频不显示。此类视频可能是应用程序窗口,缩小后无法阅读。

禁用此功能时,总是尝试显示视频。

--vrde-property=Client/DisableDisplay=1

禁用显示 VRDE 服务器功能。

要重新启用某个功能,请为其分配一个空值。例如,要重新启用显示功能,请指定 VBoxManage modifyvm --vrde-property=Client/DisableDisplay= 命令。请参阅 VRDP 自定义

--vrde-property=DisableInput=1

禁用输入 VRDE 服务器功能。

--vrde-property=DisableAudio=1

禁用音频 VRDE 服务器功能。

--vrde-property=DisableUSB=1

禁用 USB VRDE 服务器功能。

--vrde-property=Client/DisableClipboard=1

禁用剪贴板 VRDE 服务器功能。要重新启用该功能,请为其分配一个空值。请参阅 VRDP 自定义

--vrde-property=DisableUpstreamAudio=1

禁用上游音频 VRDE 服务器功能。要重新启用该功能,请为其分配一个空值。请参阅 VRDP 自定义

--vrde-property=Client/DisableRDPDR=1

禁用智能卡 VRDE 服务器功能的 RDP 设备重定向。要重新启用此功能,请为其分配一个空值。

--vrde-property=H3DRedirect/Enabled=1

启用 3D 重定向 VRDE 服务器功能。要禁用此功能,请分配空值。

--vrde-property=Security/Method=value

指定连接所需的以下信息

  • Negotiate 表示允许增强(TLS)和标准 RDP 安全连接。安全方法与客户端进行协商。这是默认值。

  • RDP 表示仅接受标准 RDP 安全。

  • TLS 表示仅接受增强 RDP 安全。客户端必须支持 TLS。

请参阅 RDP 加密

--vrde-property=ServerCertificate=value

指定服务器证书的绝对路径。请参阅 RDP 加密

--vrde-property=ServerPrivateKey=value

指定服务器私钥的绝对路径。请参阅 RDP 加密

--vrde-property=CACertificate=value

指定 CA 自签名证书的绝对路径。请参阅 RDP 加密

--vrde-property Audio/RateCorrectionMode=value

指定音频连接模式或音频日志文件的路径。有效值如下

  • VRDP_AUDIO_MODE_VOID 是无模式。使用此值可取消设置任何已设置的音频模式。

  • VRDP_AUDIO_MODE_RC 是速率校正模式。

  • VRDP_AUDIO_MODE_LPF 是低通滤波器模式。

  • VRDP_AUDIO_MODE_CS 是客户端同步模式,用于防止客户端队列的欠载或溢出。

--vrde-property=LogPath=value

指定音频日志文件的绝对路径。

--vrde-extpack=default | name

指定用于远程访问虚拟机的库。default 值使用 Oracle VirtualBox Extension Pack 中包含的 RDP 代码。

要使用 VNC 中的 VRDE 模块,请指定 VNC。请参阅 其他扩展包

--vrde-port=default | port

port 是 VRDE 服务器绑定的端口或端口范围。值 default0 使用端口 3389,这是标准的 RDP 端口。

您可以指定一个逗号分隔的端口列表或端口范围。在两个端口号之间使用连字符指定端口范围。VRDE 服务器仅绑定到列表中的一个可用端口。一次只有一个计算机可以使用给定端口。例如,--vrde-port=5000,5010-5012 选项指定服务器可以绑定到以下端口之一:5000501050115012

--vrde-address=IP-address

指定 VRDE 服务器绑定的主机网络接口的 IP 地址。如果指定 IP 地址,服务器仅接受指定主机网络接口上的连接。

使用此选项指定 VRDP 服务器是否应接受 IPv4、IPv6 或两种类型的连接

  • 仅限 IPv4:使用 --vrde-address="0.0.0.0" 选项。

  • 仅限 IPv6:使用 --vrde-address="::" 选项。

  • 同时支持 IPv6 和 IPv4:使用 --vrde-address="" 选项。这是默认值。

--vrde-auth-type=null | external | guest

指定是否使用授权以及如何执行授权。请参阅 RDP 身份验证。有效值如下:

  • null 不提供身份验证。

  • external 通过身份验证库提供外部身份验证。

  • guest 通过使用客户机用户帐户执行身份验证。此不受支持的方法要求您在虚拟机中安装客户机增强功能。

--vrde-auth-library=default | name

指定用于 RDP 身份验证的库。外部身份验证的默认库是 VBoxAuth。请参阅 RDP 身份验证

--vrde-multi-con=on | off

启用或禁用多个连接 VRDE 服务器功能(如果支持)。请参阅 多个连接到 VRDP 服务器

--vrde-reuse-con=on | off

指定当禁用了多个连接时 VRDE 服务器的行为。当值为 on 时,服务器允许新客户端连接并中断现有连接。当值为 off 时,如果已有客户端连接到服务器,则不接受新连接。这是默认值。

--vrde-video-channel=on | off

如果 VRDE 服务器支持,则启用视频重定向。请参阅 VRDP 视频重定向

--vrde-video-channel-quality=percent

将视频重定向的图像质量指定为 10% 到 100% 的值。百分比表示 JPEG 压缩级别,其中较低的数字会降低质量并提供更高的压缩率。请参阅 VRDP 视频重定向

传送设置

VBoxManage modifyvm <uuid | vmname> [‑‑teleporter=on | off] [‑‑teleporter‑port=port] [‑‑teleporter‑address=address | empty] [‑‑teleporter‑password=password] [‑‑teleporter‑password‑file=filename | stdin] [‑‑cpuid‑portability‑level=level] [‑‑cpuid‑set=leaf [:subleaf]eax ebx ecx edx] [‑‑cpuid‑remove=leaf [:subleaf]] [‑‑cpuid‑remove‑all]

以下选项允许您将计算机配置为传送目标。请参阅 传送潜在不安全操作 中的与传送相关的条目。

--teleporter=on | off

启用或禁用远程传送器。启用后,计算机将启动并等待从网络接收远程传送请求,而不是正常启动。

远程传送请求在以下参数指定的端口和地址上接收。

--teleporter-port=port

指定虚拟机监听以接收来自另一台虚拟机的传送请求的端口。port 是任何可用的 TCP/IP 端口号,例如 6000。您还必须指定 --teleporter 选项。

--teleporter-address=IP-address

指定虚拟机监听以接收来自另一台虚拟机的传送请求的 IP 地址。IP-address 是任何 IP 地址或主机名,并指定要绑定的 TCP/IP 套接字。默认 IP 地址为 0.0.0.0,表示任何 IP 地址。您还必须指定 --teleporter 选项。

--teleporter-password=password

指定用于身份验证的密码。指定后,只有当源计算机上的密码与您指定的密码相同时,远程传送请求才会成功。

--teleporter-password-file=filename

指定一个包含要用于身份验证的密码的文件。指定后,只有当源计算机上的密码与您在密码文件中指定的密码相同时,传送请求才会成功。stdin 值表示从标准输入读取密码。

--cpuid-portability-level=level

通过使用兼容性规则限制 Oracle VirtualBox 向客户机操作系统呈现的虚拟 CPU 功能。较高的整数值表示更严格的行为。默认级别 0 表示主机支持的所有虚拟化功能都可用于客户机。值 3 会抑制大多数功能。值 12 表示介于两者之间的限制。行为可能会因产品版本而异。

--cpuid-set=leaf[:subleaf] eax ebx ecx edx

高级用户可以在传送操作之前(实际上是在启动虚拟机之前)使用此设置来限制 Oracle VirtualBox 向客户机操作系统呈现的虚拟 CPU 功能。这必须在传送所涉及的源计算机和目标计算机上运行,然后将修改客户机在执行 CPUID 机器指令时看到的内容。这可能有助于解决因应用程序错误地假定存在某些 CPU 功能而导致的错误。参数的含义取决于硬件。请参考 AMD 或 Intel 处理器文档。

参数 leafsubleaf(可选)、eaxebxecxedx 的值是以十六进制格式给出的整数,即使用基数 16,无需前缀。

--cpuid-remove=leaf[:subleaf]

删除使用 --cpuid-set 建立的调整。

--cpuid-remove-all

删除使用 --cpuid-set 建立的所有调整。

调试设置

VBoxManage modifyvm <uuid | vmname> [‑‑tracing‑enabled=on | off] [‑‑tracing‑config=string] [‑‑tracing‑allow‑vm‑access=on | off]

仅使用以下选项执行低级 VM 调试。这些选项仅供高级用户使用。

--tracing-enabled=on | off

启用或禁用跟踪缓冲区。请注意,指定后,跟踪缓冲区会消耗一些内存并增加开销。

--tracing-config=config-string

启用跟踪配置,该配置定义启用了哪些跟踪点组。

--tracing-allow-vm-access=on | off

启用或禁用虚拟机对跟踪缓冲区的访问。默认值为 off,表示禁用访问。

USB 读卡器设置

VBoxManage modifyvm <uuid | vmname> [‑‑usb‑card‑reader=on | off]

以下选项指定客户机环境对 USB 读卡器的访问。USB 读卡器可以访问存储卡上的数据,例如 CompactFlash (CF)、Secure Digital (SD) 和 MultiMediaCard (MMC)。

--usb-card-reader=on | off

启用或禁用 USB 读卡器接口。

启动时自动启动虚拟机

以下选项允许您配置虚拟机自动启动功能,该功能会在宿主系统启动时自动启动虚拟机。您需要进行一些宿主系统配置才能使用此功能。请参阅 启动时自动启动虚拟机

VBoxManage modifyvm <uuid | vmname> [‑‑autostart‑enabled=on | off] [‑‑autostart‑delay=seconds]

--autostart-enabled=on | off

为指定用户启用或禁用主机系统启动时 VM 自动启动。

--autostart-delay=seconds

指定主机系统启动后自动启动 VM 的秒数。

客户机调试

这些选项用于配置用于客户机调试的 VMM。

VBoxManage modifyvm <uuid | vmname> [‑‑guest‑debug‑provider=none | native | gdb | kd] [‑‑guest‑debug‑io‑provider=none | tcp | udp | ipc] [‑‑guest‑debug‑address=IP‑Address | path] [‑‑guest‑debug‑port=port]

--guest-debug-provider=none | native | gdb | kd

选择给定的调试存根提供程序。

--guest-debug-io-provider=none | tcp | udp | ipc

为选定的提供程序选择给定的 I/O 传输后端。

--guest-debug-address=IP-Address | path

设置调试器可访问的路径,这取决于所选的 I/O 传输。

--guest-debug-port=port

设置调试器可访问的端口,这取决于所选的 I/O 传输。

PCI 直通设置

以下选项允许您配置 PCI 直通功能,该功能目前在 Oracle VirtualBox 中不可用。计划将来重新引入此功能。

VBoxManage modifyvm <uuid | vmname> [‑‑pci‑attach=host‑PCI‑address [@guest‑PCI‑bus‑address]] [‑‑pci‑detach=host‑PCI‑address]

--pci-attach=host-PCI-address[@guest-PCI-bus-address]

将主机上指定的 PCI 网络控制器连接到客户机 VM。您可以选择指定要将控制器连接到的客户机 VM 上的 PCI 总线。

--pci-detach=host-PCI-address

从客户机 VM 上连接的 PCI 总线分离指定的 PCI 网络控制器。

测试(ValidationKit / 引导扇区)

这些选项用于配置 VMM 设备测试功能,几乎仅用于 ValidationKit 中的引导扇区测试用例。

VBoxManage modifyvm <uuid | vmname> [‑‑testing‑enabled=on | off] [‑‑testing‑mmio=on | off] [‑‑testing‑cfg‑dwordidx=value]

--testing-enabled=on | off

启用 VMMDev 的测试功能。有关详细信息,请参阅 VMMDevTesting.h。

--testing-mmio=on | off

启用 VMMDev 测试功能的 MMIO 区域。

--testing-cfg-dwordidx=value

这会设置 10 个 dword 配置值之一。idx 必须在 0 到 9 的范围内。value 限制为 32 位(dword)。

示例

以下命令更改 ol7 虚拟机的描述。

$ VBoxManage modifyvm ol7 --description "Oracle Linux 7 with UEK4"

以下命令为 ol7 虚拟机启用 VirtualBox 远程显示协议(VRDP)支持。

$ VBoxManage modifyvm ol7 --vrde on

VBoxManage movevm

将虚拟机移动到宿主系统上的新位置

概要

VBoxManage movevm <uuid | vmname> [‑‑type=basic] [‑‑folder=folder‑name]

描述

命令 VBoxManage movevm 将虚拟机(VM)移动到宿主系统上的新位置。

移动时,所有与虚拟机相关的文件,例如设置文件和磁盘映像文件,都会移动到新位置。Oracle VirtualBox 配置会自动更新。

uuid | vmname

指定要移动的虚拟机的通用唯一标识符 (UUID) 或名称。

--type=basic

指定移动操作的类型。目前 basic 是唯一被识别的值,如果未指定,它也是默认值。

--folder=folder-name

指定宿主文件系统上新位置的完整路径名或相对路径名。可以不指定此选项或指定当前位置,如果磁盘映像和其他虚拟机部分当前位于其他位置,则会将它们移动到此位置。

示例

以下命令将 ol7 虚拟机移动到宿主系统上的新位置。

$ VBoxManage movevm ol7 --folder "/home/testuser/vms" --type basic
0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100%
Machine has been successfully moved into /home/testuser/vms

VBoxManage natnetwork

创建、修改和管理 NAT 网络

概要

VBoxManage natnetwork add [‑‑disable | ‑‑enable] <‑‑netname=name> <‑‑network=network> [‑‑dhcp=on|off] [‑‑ipv6=on|off] [‑‑loopback‑4=rule] [‑‑loopback‑6=rule] [‑‑port‑forward‑4=rule] [‑‑port‑forward‑6=rule]

VBoxManage natnetwork list [filter‑pattern]

VBoxManage natnetwork modify [‑‑dhcp=on|off] [‑‑disable | ‑‑enable] <‑‑netname=name> <‑‑network=network> [‑‑ipv6=on|off] [‑‑loopback‑4=rule] [‑‑loopback‑6=rule] [‑‑port‑forward‑4=rule] [‑‑port‑forward‑6=rule]

VBoxManage natnetwork remove <‑‑netname=name>

VBoxManage natnetwork start <‑‑netname=name>

VBoxManage natnetwork stop <‑‑netname=name>

描述

命令 VBoxManage natnetwork 使您能够创建、修改和管理 NAT 网络。

NAT 网络使用网络地址转换(NAT)服务。该服务将系统分组到一个网络中,并防止外部系统直接访问网络中的系统。该服务还允许网络中的系统通过 TCP 和 UDP(IPv4 和 IPv6)与彼此以及与外部系统进行通信。

NAT 服务连接到内部网络。要使虚拟机使用 NAT 服务,您必须将虚拟机连接到内部网络。在创建 NAT 服务时指定内部网络的名称。请注意,如果内部网络不存在,它将被创建。

添加 NAT 网络服务

VBoxManage natnetwork add [‑‑disable | ‑‑enable] <‑‑netname=name> <‑‑network=network> [‑‑dhcp=on|off] [‑‑ipv6=on|off] [‑‑loopback‑4=rule] [‑‑loopback‑6=rule] [‑‑port‑forward‑4=rule] [‑‑port‑forward‑6=rule]

命令 VBoxManage natnetwork add 创建一个新的内部网络接口并添加一个 NAT 网络服务。在将虚拟机连接到 NAT 网络之前,必须使用此命令。

--disable

禁用 NAT 网络服务。

--enable

启用 NAT 网络服务。

--netname=name

指定主机操作系统上新的内部网络接口的名称。

--network

指定 NAT 服务接口的静态或 DHCP 网络地址和掩码。默认情况下,此值指定静态网络地址。

--dhcp

启用或禁用使用 --netname 选项指定的 DHCP 服务器。

--ipv6

启用或禁用 IPv6。默认情况下,IPv6 已禁用,IPv4 已启用。

--loopback-4=rule

使用指定的规则启用 IPv4 回送接口。

--loopback-6=rule

使用指定的规则启用 IPv6 回送接口。

--port-forward-4=rule

使用指定的规则启用 IPv4 端口转发。

--port-forward-6=rule

使用指定的规则启用 IPv6 端口转发。

移除 NAT 网络服务

VBoxManage natnetwork remove <‑‑netname=name>

VBoxManage natnetwork remove 命令会移除指定的 NAT 网络服务。

--netname=name

指定要移除的 NAT 网络服务的名称。

启动 NAT 网络服务

VBoxManage natnetwork start <‑‑netname=name>

VBoxManage natnetwork start 命令会启动 NAT 网络服务以及任何相关的 DHCP 服务器。

--netname=name

指定要启动的 NAT 网络服务的名称。

停止 NAT 网络服务

VBoxManage natnetwork stop <‑‑netname=name>

VBoxManage natnetwork stop 命令会停止 NAT 网络服务以及任何相关的 DHCP 服务器。

--netname=name

指定要停止的 NAT 网络服务的名称。

列出所有 NAT 网络服务

VBoxManage natnetwork list [filter‑pattern]

VBoxManage natnetwork list 命令会列出所有 NAT 网络服务。您可以使用模式来显示 NAT 网络服务的子集。

过滤模式

指定可选的过滤模式。

修改 NAT 网络服务的设置

VBoxManage natnetwork modify [‑‑dhcp=on|off] [‑‑disable | ‑‑enable] <‑‑netname=name> <‑‑network=network> [‑‑ipv6=on|off] [‑‑loopback‑4=rule] [‑‑loopback‑6=rule] [‑‑port‑forward‑4=rule] [‑‑port‑forward‑6=rule]

VBoxManage natnetwork modify 命令会修改现有内部网络接口的设置。

--disable

禁用 NAT 网络服务。

--enable

启用 NAT 网络服务。

--netname=name

指定主机操作系统上新的内部网络接口的名称。

--network

指定 NAT 服务接口的静态或 DHCP 网络地址和掩码。默认情况下,此值指定静态网络地址。

--dhcp

启用或禁用使用 --netname 选项指定的 DHCP 服务器。

--ipv6

启用或禁用 IPv6。默认情况下,IPv6 已禁用,IPv4 已启用。

--loopback-4=rule

使用指定的规则启用 IPv4 回送接口。

--loopback-6=rule

使用指定的规则启用 IPv6 回送接口。

--port-forward-4=rule

使用指定的规则启用 IPv4 端口转发。

--port-forward-6=rule

使用指定的规则启用 IPv6 端口转发。

示例

以下命令演示了如何为 natnet1 内部网络创建 NAT 网络,该网络使用 NAT 服务接口的 192.168.15.0/24 网络地址和掩码。在此静态配置中,网关默认被分配 192.168.15.1 IP 地址。请注意,此 IP 地址是您使用 --network 选项指定的网络地址之后的下一个地址。

$ VBoxManage natnetwork add --netname natnet1 --network "192.168.15.0/24" --enable

以下命令演示了如何在创建 natnet1 NAT 网络后向其添加 DHCP 服务器。

$ VBoxManage natnetwork modify --netname natnet1 --dhcp on

VBoxManage registervm

注册虚拟机

概要

VBoxManage registervm <filename>‑‑passwordfile

描述

VBoxManage registervm 命令允许您通过将 XML 计算机配置文件导入 Oracle VirtualBox 来创建虚拟机 (VM)。VM 的 UUID 不能与 Oracle VirtualBox 中已注册的 VM 的 UUID 相同。确保在注册之前,XML 计算机配置文件位于 machines 文件夹中。

注意

当您使用 VBoxManage createvm 命令创建 VM 时,您可以指定 --register 选项来注册 VM。

filename

指定 XML 计算机配置文件。此文件具有 .vbox 文件扩展名。

--password

使用 --password 提供虚拟机的加密密码。您可以指定主机操作系统上的密码文件的绝对路径名,或者指定 - 以便在命令行提示您输入密码。

示例

以下命令注册一个名为 vm2 的 VM。VM 的 XML 计算机配置文件位于默认的 machines 文件夹中。

$ VBoxManage registervm "/home/user/VirtualBox VMs/vm2/vm2.vbox"

VBoxManage setextradata

设置与虚拟机或配置关联的关键字值

概要

VBoxManage setextradata <global | uuid | vmname> <keyword> [value]

描述

VBoxManage setextradata 命令允许您设置与虚拟机 (VM) 或 Oracle VirtualBox 配置关联的关键字值。

全局

设置有关配置而不是虚拟机的信息。

uuid | vmname

指定虚拟机的通用唯一标识符 (UUID) 或名称。

关键字

指定要设置其值的关键字。

指定关键字值。不指定值将移除关键字。

示例

以下命令将 Fedora5 VM 的 installdate 关键字值设置为 2019.01.01

$ VBoxManage setextradata Fedora5 installdate 2019.01.01

以下命令取消设置 Fedora5 VM 的 installdate 关键字的值。

$ VBoxManage setextradata Fedora5 installdate

VBoxManage setproperty

更改全局设置

概要

VBoxManage setproperty <property‑name> <property‑value>

描述

VBoxManage setproperty 命令允许您更改影响整个 Oracle VirtualBox 安装的全局设置。其中一些设置对应于 VirtualBox Manager 中 首选项对话框中的设置。

以下属性可用

autostartdbpath

指定自动启动数据库的路径。有效值为 null(禁用自动启动数据库)或包含数据库的文件夹名称。请参见 系统启动期间启动虚拟机

defaultfrontend

指定全局默认 VM 前端。有效值为 default(指定默认前端)或要使用的前端名称。

hwvirtexclusive

指定 Oracle VirtualBox 是否独占使用宿主系统处理器中的 Intel VT-x 或 AMD-V 硬件虚拟化扩展。请参见 硬件虚拟化

有效值如下:

  • on 允许 Oracle VirtualBox 独占使用这些扩展。这是默认值。

  • off 将这些扩展与其他同时运行的虚拟机监控程序共享。请注意,共享这些扩展会影响性能。

language

指定用于翻译 API 消息的用户语言。有效值为 C(表示不翻译)或 llll_CC 形式的语言代码,其中 ll 是 ISO 639 两字母语言代码,CC 是 ISO 3166 两字母国家代码。例如,对于希腊的希腊语,llelCCGR

logginglevel

指定 VBoxSVC 发布的日志详细信息。请参见 https://virtualbox.ac.cn/wiki/VBoxLogging

loghistorycount

指定要保留的旋转 VM 日志的数量。

machinefolder

指定存储虚拟机 (VM) 定义的默认文件夹。有效值为 default(指定默认存储文件夹)或要使用的文件夹名称。请参见 Oracle VirtualBox 存储其文件

proxymode

配置 HTTP 代理服务器的模式。有效值如下

manual

使用 proxyurl 属性值手动配置 HTTP 代理服务器的 URL。

noproxy

不使用 HTTP 代理服务器。使用直接连接到 Internet。

system

自动检测主机网络的代理设置。这是默认值。

proxyurl

当您将 proxymode 属性设置为 manual 以指定手动代理时,此项指定 HTTP 代理服务器的 URL。

vrdeauthlibrary

指定为特定 VM 配置了外部身份验证时使用的库。有效值为 default(指定默认库)或要使用的库名称。请参见 RDP 身份验证

vrdeextpack

指定实现 VirtualBox 远程桌面扩展 (RDE) 的库。有效值为 null(禁用 RDE)或要使用的库名称。

websrvauthlibrary

指定 Web 服务用于验证用户身份的库。有效值为 default(指定默认库)、null(禁用身份验证)或要使用的库名称。有关 Oracle VirtualBox Web 服务的信息,请参见 Oracle VirtualBox 编程接口

示例

以下命令配置 Oracle VirtualBox 使用指定的 HTTP 代理服务器。

$ VBoxManage setproperty proxymode manual
$ VBoxManage setproperty proxyurl "http://myproxy.com:8080"

另请参阅

VBoxManage sharedfolder

添加和删除共享文件夹,配置共享文件夹的安全策略

概要

VBoxManage sharedfolder add <uuid | vmname> <‑‑name=share‑name> <‑‑hostpath=hostpath> [‑‑readonly] [‑‑transient] [‑‑automount] [‑‑auto‑mount‑point=path]

VBoxManage sharedfolder remove <uuid | vmname> <‑‑name=share‑name> [‑‑transient]

VBoxManage sharedfolder modify <uuid | vmname> <‑‑name=share‑name> <‑‑readonly=true | false> <‑‑automount=true | false> <‑‑auto‑mount‑point=path> <‑‑symlink‑policy=forbidden | subtree | relative | any>

描述

共享文件夹允许您在宿主系统和客户机 VM 之间共享数据。要使用共享文件夹,您必须首先在客户机 VM 中安装 Oracle VirtualBox 客户机增强功能软件。

共享文件夹与共享名称以及主机系统上文件夹或目录的完整路径名相关联。共享名称是主机操作系统命名空间中的唯一名称。

添加共享文件夹

VBoxManage sharedfolder add <uuid | vmname> <‑‑name=share‑name> <‑‑hostpath=hostpath> [‑‑readonly] [‑‑transient] [‑‑automount] [‑‑auto‑mount‑point=path]

VBoxManage sharedfolder add 命令会创建共享文件夹。您指定的文件夹位于宿主计算机上。创建后,可以从客户机操作系统内部访问宿主系统上的文件夹内容。

uuid | vmname

指定与主机系统共享文件夹的客户机 VM 的名称或 UUID。

--name=share-name

指定共享的名称,它是主机操作系统命名空间中的唯一名称。

--hostpath=hostpath

指定主机操作系统上要与客户机操作系统共享的文件夹或目录的绝对路径。

--readonly

指定共享对主机路径上的文件只有只读访问权限。

默认情况下,共享文件夹对从宿主挂载的文件具有读写访问权限。但是,在 Solaris 和 Linux 发行版上,共享文件夹以 770 文件权限挂载,文件所有者为 root 用户和 vboxsf 组,这意味着文件仅限于 vboxsf 组和 root 用户成员。如果指定了 --readonly 选项,则文件权限变为 700,文件只能由 root 用户访问。

--transient

指定共享是临时的,这意味着它被添加到正在运行的 VM 并从中移除,在 VM 停止后不会保留。

--automount

指定共享自动挂载。

--auto-mount-point=path

指定共享的挂载点。这特定于客户机操作系统。

对于 Windows 和 OS/2 客户机,这必须是一个未使用的驱动器号。如果留空(或驱动器号已被使用),则使用最后一个未使用的驱动器号(即从 Z:A: 搜索)。

对于 Linux、Solaris 和其他 Unix 客户机,它必须是绝对路径,例如 /mnt/mysharedfolder。如果留空,则默认位置是 /media/sf_sharename

删除共享文件夹

VBoxManage sharedfolder remove <uuid | vmname> <‑‑name=share‑name> [‑‑transient]

VBoxManage sharedfolder remove 命令会删除共享文件夹。

uuid | vmname

指定与主机系统共享文件夹的客户机 VM 的名称或 UUID。

--name=share-name

指定要移除的共享的名称。

--transient

指定共享是临时的,这意味着它被添加到正在运行的 VM 并从中移除,在 VM 停止后不会保留。

修改共享文件夹的配置

VBoxManage sharedfolder modify <uuid | vmname> <‑‑name=share‑name> <‑‑readonly=true | false> <‑‑automount=true | false> <‑‑auto‑mount‑point=path> <‑‑symlink‑policy=forbidden | subtree | relative | any>

VBoxManage sharedfolder modify 命令会修改共享文件夹的配置。

uuid | vmname

指定与主机系统共享文件夹的客户机 VM 的名称或 UUID。

--name=share-name

指定要修改的共享文件夹的名称。

--readonly=true | false

指定共享文件夹是否应挂载为只读。

--automount=true | false

指定共享文件夹是否应在 VM 启动时自动挂载。

--auto-mount-point=path

指定共享文件夹的挂载点(如果它被配置为在 VM 启动时自动挂载)。

--symlink-policy=policy-name

指定共享文件夹的符号链接安全策略。有效的符号链接安全策略有:forbiddensubtreerelativeany

示例

以下命令为 ol7 VM 创建一个名为 o7share 的共享文件夹,并配置该共享在 VM 启动时自动挂载。

$ VBoxManage sharedfolder add ol7 --name ol7share --hostpath "/home/user/ol7share" --automount

以下命令从 ol7 VM 中删除名为 o7share 的共享文件夹。

$ VBoxManage sharedfolder remove ol7 --name ol7share

VBoxManage showmediuminfo

显示介质信息

概要

VBoxManage showmediuminfo [disk | dvd | floppy] <uuid | filename>

描述

VBoxManage showmediuminfo 命令显示关于介质的以下信息:

  • 大小

  • 磁盘大小

  • 类型

  • 被虚拟机使用

必须通过其 UUID(如果介质已注册)或其文件名来指定介质。注册的映像可以使用 VBoxManage list hddsVBoxManage list dvdsVBoxManage list floppies(根据情况)进行列出。

为了向后兼容,您还可以使用 showvdiinfo 命令来获取介质信息。

disk | dvd | floppy

指定介质类型。有效值为 disk(硬盘驱动器)、dvdfloppy

uuid | filename

指定介质或镜像的通用唯一标识符 (UUID) 或绝对路径名。

如果介质已注册,您可以指定 UUID。您还可以使用 VBoxManage list hddsVBoxManage list dvdsVBoxManage list floppies 命令列出已注册的映像。

示例

以下命令显示 disk01.vdi 磁盘映像的信息。

$ VBoxManage showmediuminfo disk01.vdi

以下命令显示 floppy01.img 软盘映像的信息。

$ VBoxManage showmediuminfo floppy floppy01.img

另请参阅

VBoxManage showvminfo

显示虚拟机配置信息或日志文件内容

概要

VBoxManage showvminfo <uuid | vmname> [‑‑details] [‑‑machinereadable] [‑‑password‑id] [‑‑password]

VBoxManage showvminfo <uuid | vmname> <‑‑log=index> [‑‑password‑idid] [‑‑passwordfile|‑]

描述

VBoxManage showvminfo 命令输出指定虚拟机 (VM) 的配置信息或日志文件内容。

查看虚拟机信息

VBoxManage showvminfo <uuid | vmname> [‑‑details] [‑‑machinereadable] [‑‑password‑id] [‑‑password]

VBoxManage showvminfo 命令以详细格式或机器可读格式输出指定 VM 的信息。

VBoxManage showvminfo 命令以与 VBoxManage list vms --long 命令相同的格式显示指定 VM 的相同信息。

--details

包括有关 VM 的详细信息。

--machinereadable

指定 VM 信息采用机器可读格式。

--password-id id

如果 VM 已加密,则指定其密码 ID。

--password file|-

指定 VM 的密码(如果已加密)。可以指定宿主操作系统上的密码文件的绝对路径,或者使用 - 提示您输入密码。

查看虚拟机日志内容

VBoxManage showvminfo <uuid | vmname> <‑‑log=index> [‑‑password‑idid] [‑‑passwordfile|‑]

VBoxManage showvminfo --log 命令输出指定 VM 的日志文件之一的内容。

--log=index

指定标识日志文件的数字索引。

索引值从 0 开始,表示 VBox.log 文件。索引值为 1 表示 VBoxHardening.log 文件。索引值从 2 开始表示其他日志文件,例如 VBox.log.1 文件。

--password-id id

如果 VM 已加密,则指定其密码 ID。

--password file|-

指定 VM 的密码(如果已加密)。可以指定宿主操作系统上的密码文件的绝对路径,或者使用 - 提示您输入密码。

示例

以下示例显示此命令的典型输出:

$ VBoxManage showvminfo "Windows 10"
VirtualBox Command Line Management Interface Version version-number
Copyright (C) 2005-2024 Oracle and/or its affiliates

Name:            Windows 10
Groups:          /
Guest OS:        Windows 10 (64-bit)
UUID:            1bf3464d-57c6-4d49-92a9-a5cc3816b7e7
Config file:     /home/username/VirtualBox VMs/Windows 10/Windows 10.vbox
Snapshot folder: /home/username/VirtualBox VMs/Windows 10/Snapshots
Log folder:      /home/username/VirtualBox VMs/Windows 10/Logs
Hardware UUID:   1bf3464d-57c6-4d49-92a9-a5cc3816b7e7
Memory size:     2048MB
Page Fusion:     off
VRAM size:       12MB
CPU exec cap:    100%
...

以下示例显示了以机器可读格式输出的信息,该格式将条目显示为 property=value 字符串。

$ VBoxManage showvminfo "Windows 10" --machinereadable
...
groups="/"
ostype="Windows 10 (64-bit)"
UUID="1bf3464d-57c6-4d49-92a9-a5cc3816b7e7"
...

以下示例显示 VBox.log 日志文件的内容。

$ VBoxManage showvminfo "Windows 10" --log 0
00:00:02.895106 VirtualBox VM 6.0.0_RC1 r127378 linux.amd64 (Dec 10 2018 17:16:06) release log
00:00:02.895109 Log opened 2018-12-14T14:31:44.088259000Z
00:00:02.895111 Build Type: release
00:00:02.895115 OS Product: Linux
00:00:02.895117 OS Release: 4.1.12-61.1.22.el7uek.x86_64
00:00:02.895119 OS Version: #2 SMP Fri Dec 2 09:28:44 PST 2016
...

另请参阅

VBoxManage signova

数字签名 OVA

概要

VBoxManage signova <ova> <‑‑certificate=file> <‑‑private‑key=file> [‑‑private‑key‑password‑file=password‑file | ‑‑private‑key‑password=password] [‑‑digest‑type=type] [‑‑pkcs7 | ‑‑no‑pkcs7] [‑‑intermediate‑cert=file] [‑‑force] [‑‑verbose] [‑‑quiet] [‑‑dry‑run]

描述

VBoxManage signova 命令向 OVA 文件添加数字签名。

ova

要签名的 OVA 文件。

--certificate=file

包含 OVA 应签名的证书的文件。可以是 PEM 格式(base64)或 DER(二进制)格式。

--private-key=file

包含私钥的文件。可以是 PEM(base64)或 DER(二进制)格式。

--private-key-password-file=password-file

包含私钥密码的文件。

--private-key-password=password

私钥密码。

--digest-type=type

选择用于签名 OVA 文件的加密摘要算法。可能的值为:SHA-256(默认)、SHA-512 和 SHA-1。

某些旧版本的 VMware OVF Tool 命令行实用程序和其他 VMware 产品可能需要 --digest-type=sha-1 选项。

--pkcs7--no-pkcs7

启用或禁用创建附加的 PKCS#7/CMS 签名。此选项默认启用。

--intermediate-cert=file

包含应包含在可选 PKCS#7/CMS 签名中的中间证书的文件。该文件可以是 PEM 格式(base64)或 DER(二进制)格式。此选项可以重复使用以添加多个中间证书。此选项表示 --pkcs7 选项。

--force

如果存在现有签名,则覆盖。默认行为是如果 OVA 已经签名则失败。

--dry-run

不实际修改 OVA,仅测试运行签名操作。

-v--verbose-q--quiet

控制命令执行的详细程度。可以多次指定 --verbose 选项以获得更多输出。

VBoxManage snapshot

管理虚拟机快照

概要

VBoxManage snapshot <uuid | vmname>

VBoxManage snapshot <uuid | vmname>take <snapshot‑name> [‑‑description=description] [‑‑live] [‑‑uniquename Number,Timestamp,Space,Force]

VBoxManage snapshot <uuid | vmname>delete <snapshot‑name>

VBoxManage snapshot <uuid | vmname>restore <snapshot‑name>

VBoxManage snapshot <uuid | vmname>restorecurrent

VBoxManage snapshot <uuid | vmname>edit <snapshot‑name | ‑‑current> [‑‑description=description] [‑‑name=new‑name]

VBoxManage snapshot <uuid | vmname>list [‑‑details | ‑‑machinereadable]

VBoxManage snapshot <uuid | vmname>showvminfo <snapshot‑name>

描述

VBoxManage snapshot 命令管理快照。

Oracle VirtualBox 使用快照来捕获虚拟机 (VM) 的状态。之后,您可以使用快照恢复到快照所描述的状态。

快照是 VM 设置的完整副本。如果您在 VM 运行时拍摄快照,快照还将包含 VM 当前的运行状态。

拍摄快照后,Oracle VirtualBox 会为与宿主计算机关联的每个普通硬盘创建 *差分硬盘*。恢复快照时,Oracle VirtualBox 使用这些差分文件来快速恢复 VM 虚拟硬盘的内容。

对于每个 VBoxManage snapshot 命令,您必须指定要为其拍摄快照的 VM 的名称或通用唯一标识符 (UUID)。

通用命令操作数

uuid | vmname

指定虚拟机的 UUID 或名称。

拍摄虚拟机快照

VBoxManage snapshot <uuid | vmname>take <snapshot‑name> [‑‑description=description] [‑‑live] [‑‑uniquename Number,Timestamp,Space,Force]

VBoxManage snapshot take 命令拍摄 VM 当前状态的快照。您必须提供快照名称,并且可以选择性地提供描述。新快照将插入快照树中,作为当前快照(如果 VM 有任何快照)的子项,然后成为新的当前快照。

--description=description

指定快照的描述。

--live

指定在创建快照时虚拟机不停止。此操作称为实时快照。

--uniquename Number,Timestamp,Space,Force

待定。

snapshot-name

指定要创建的快照的名称。

删除快照

VBoxManage snapshot <uuid | vmname>delete <snapshot‑name>

VBoxManage snapshot delete 命令会删除指定的快照。

删除操作可能需要一些时间才能完成。这是因为与快照关联的差异映像可能需要与其子差异映像合并。

snapshot-name

指定快照的 UUID 或名称。

恢复快照

VBoxManage snapshot <uuid | vmname>restore <snapshot‑name>

VBoxManage snapshot restore 命令会恢复指定的快照。此操作会将 VM 的设置和当前状态重置为快照的状态。恢复快照时,VM 的状态将丢失。恢复后,指定的快照将成为新的当前快照,后续快照将成为该快照的子项。

snapshot-name

指定快照的 UUID 或名称。

恢复当前快照

VBoxManage snapshot <uuid | vmname>restorecurrent

VBoxManage snapshot restorecurrent 命令会恢复当前快照。当前快照是从中派生当前状态的快照。此命令等同于使用 VBoxManage snapshot restore 命令并指定当前快照的名称或 UUID。

更改现有快照的名称或描述

VBoxManage snapshot <uuid | vmname>edit <snapshot‑name | ‑‑current> [‑‑description=description] [‑‑name=new‑name]

VBoxManage snapshot edit 命令允许您更改指定快照的名称或描述。

snapshot-name

指定要编辑的快照的 UUID 或名称。

此选项与 --current 选项互斥。

--current

指定您更新快照的当前版本。

此选项与特定快照名称或其 UUID 互斥。

--description=description

指定快照的新描述。

--name=new-name

指定快照的新名称。

列出快照

VBoxManage snapshot <uuid | vmname>list [‑‑details | ‑‑machinereadable]

VBoxManage snapshot list 命令会列出 VM 的所有快照。

--details

指定输出显示有关快照的详细信息。

此选项与 --machinereadable 选项互斥。

--machinereadable

指定输出以机器可读格式显示。

此选项与 --details 选项互斥。

显示快照设置的信息

VBoxManage snapshot <uuid | vmname>showvminfo <snapshot‑name>

VBoxManage snapshot showvminfo 命令允许您查看作为现有快照一部分的 VM 设置。

snapshot-name

指定快照的 UUID 或名称。

示例

以下命令为 ol7u4 VM 创建快照。快照名为 ol7u4-snap-001。该命令使用 --description 选项提供快照内容的描述。

$ VBoxManage snapshot ol7u4 take ol7u4-snap-001 \
--description="Oracle Linux 7.4"

以下命令列出 ol7u4 VM 的快照。

$ VBoxManage snapshot ol7u4 list

以下命令更改 ol7u4 VM 的 ol7u4-snap-001 快照的描述。

$ VBoxManage snapshot ol7u4 edit ol7u4-snap-001 \
--description="Oracle Linux 7.4 with UEK4 kernel"

以下命令显示 ol7u4 VM 的 ol7u1-snap-001 快照的 VM 设置。

$ VBoxManage snapshot ol7u4 showvminfo ol7u4-snap-001
Name:            ol7u4
Groups:          /
Guest OS:        Oracle (64-bit)
UUID:            43349d78-2ab3-4cb8-978f-0e755cd98090
Config file:     C:\Users\user1\VirtualBox VMs\ol7u4\ol7u4.vbox
...
Snapshots:

   Name: ol7u4-snap-001 (UUID: 1cffc37d-5c37-4b86-b9c5-a0f157a55f43)
   Description: Oracle Linux 7.4 with UEK4 kernel

VBoxManage startvm

启动虚拟机

概要

VBoxManage startvm [‑‑putenv=name[=value]] [‑‑type=<gui|headless|sdl|separate>] [‑‑password=file] [‑‑password‑id=password‑identifier] <uuid | vmname...>

描述

VBoxManage startvm 命令会启动处于“已关闭”或“已保存”状态的 Oracle VirtualBox 虚拟机 (VM)。

uuid | vmname

指定虚拟机的名称或全局唯一标识符 (UUID)。

--putenv=name=value

将值作为名称-值对分配给环境变量。例如,VBOX_DISABLE_HOST_DISK_CACHE=1。

此选项的短格式为 -E

--type=gui | headless | sdl | separate

指定用于启动虚拟机的前端。

您可以使用 VBoxManage setproperty 命令设置全局默认的前端值。或者,您可以使用 VBoxManage modifyvm 命令为特定 VM 指定默认前端值。如果未设置全局或每个 VM 的默认值,并且您未指定 --type 选项,则 VM 将在宿主桌面的窗口中打开。

--type 选项接受以下值:

gui

在图形用户界面 (GUI) 窗口中启动虚拟机。这是默认值。

headless(无头模式)

启动虚拟机仅用于远程显示。

sdl

使用 VBoxSDL 前端启动虚拟机。

separate(分离)

启动具有可分离用户界面 (UI) 的虚拟机,这意味着虚拟机以无头模式运行,UI 在单独的进程中。

这是一项实验性功能,缺少某些功能,例如 3D 加速。

--password

使用 --password 提供加密密码。可以指定宿主操作系统上的密码文件的绝对路径,或者使用 - 在命令行中提示您输入密码。

--password-id(密码 ID)

使用“--password-id”选项指定提供密码的 ID。

注意

如果虚拟机无法使用特定前端启动且错误信息不明确,请考虑直接运行前端来启动虚拟机。此解决方法可能会提供额外的错误信息。

示例

以下命令启动 ol7u6 VM。

$ VBoxManage startvm ol7u6

以下命令以无头模式启动 ol7u6-mininstall VM。

$ VBoxManage startvm ol7u6-mininstall --type headless

VBoxManage storageattach

附加、移除和修改虚拟机使用的存储介质

概要

VBoxManage storageattach <uuid | vmname> <‑‑storagectl=name> [‑‑bandwidthgroup=name | none] [‑‑comment=text] [‑‑device=number] [‑‑discard=on | off] [‑‑encodedlun=lun] [‑‑forceunmount] [‑‑hotpluggable=on | off] [‑‑initiator=initiator] [‑‑intnet] [‑‑lun=lun] [‑‑medium=none | emptydrive | additions | uuid | filename | host:drive | iscsi] [‑‑mtype=normal | writethrough | immutable | shareable | readonly | multiattach] [‑‑nonrotational=on | off] [‑‑passthrough=on | off] [‑‑passwordfile=file] [‑‑password=password] [‑‑port=number] [‑‑server=name | ip] [‑‑setparentuuid=uuid] [‑‑setuuid=uuid] [‑‑target=target] [‑‑tempeject=on | off] [‑‑tport=port] [‑‑type=dvddrive | fdd | hdd] [‑‑username=username]

描述

VBoxManage storageattach 命令会附加、修改或移除连接到使用 VBoxManage storagectl 命令先前添加的存储控制器上的存储介质。

uuid | vmname

指定虚拟机的通用唯一标识符 (UUID) 或名称。

--storagectl=name

指定存储控制器的名称。使用 VBoxManage showvminfo 命令可以列出附加到 VM 的存储控制器。

--port=number

指定要修改的存储控制器的端口号。除非存储控制器只有一个端口,否则必须指定此选项。

--device=number

指定要修改的端口设备号。除非存储控制器每个端口只有一个设备,否则必须指定此选项。

--type=dvddrive | fdd | hdd

指定介质关联的驱动器类型。仅当可以通过 --medium 选项或早期介质附加命令提供的信息确定介质类型时,才省略此选项。

--medium=none | emptydrive | additions | uuid | filename | host:drive | iscsi

指定以下值之一

none

从指定插槽中移除任何现有设备。

空驱动器

仅适用于虚拟 DVD 或软盘驱动器。

使设备插槽的行为类似于未插入任何介质的可移动驱动器。

附加项

仅适用于虚拟 DVD 驱动器。

将 VirtualBox 增强功能映像附加到指定的设备插槽。

uuid

指定要附加到指定设备插槽的存储介质的 UUID。存储介质必须是 Oracle VirtualBox 已知的,例如已附加到另一个 VM 的存储介质。使用 VBoxManage list 命令列出介质。

filename

指定现有磁盘映像的完整路径,以附加到指定的设备插槽。磁盘映像可以是 ISO、RAW、VDI、VMDK 或其他格式。

host:drive

仅适用于虚拟 DVD 或软盘驱动器。

将指定的设备插槽连接到主机计算机上指定的 DVD 或软盘驱动器。

iSCSI

仅适用于虚拟硬盘。

指定 iSCSI 目标,为此您必须提供其他信息。请参见 iSCSI 服务器

对于软盘和 DVD 等可移动介质,您可以在 VM 运行时进行配置更改。对设备或硬盘设备插槽的更改需要关闭 VM。

--mtype=normal | writethrough | immutable | shareable | readonly | multiattach

指定此介质在快照和写操作方面的行为。请参见 特殊映像写模式

--comment=text

指定要随介质存储的可选描述。

--setuuid=uuid

在将介质附加到虚拟机之前修改其 UUID。

这是一个专家选项。不适当的值可能会导致介质无法使用,或者如果另一个虚拟机已引用同一介质,则可能导致虚拟机配置损坏。

使用 --setuuid="" 选项会为映像分配一个新的随机 UUID,这可以解决由于您使用文件复制实用程序复制映像而导致的重复 UUID 错误。

--setparentuuid=uuid

在将介质附加到虚拟机之前修改其父 UUID。

这是一个专家选项。不适当的值可能会导致介质无法使用,或者如果另一个虚拟机已引用同一介质,则可能导致虚拟机配置损坏。

--passthrough=on | off

仅适用于虚拟 DVD 驱动器。

启用 DVD 写入。此功能是实验性的,请参见 CD/DVD 支持

--tempeject=on | off

仅适用于虚拟 DVD 驱动器。

指定是否允许临时客户机触发的介质弹出操作。当设置为 on 时,您可以弹出介质。如果 VM 被关闭并重新启动,客户机触发的弹出操作的能力不会保留。因此,当您将此选项设置为 on 并且 VM 重新启动时,驱动器中仍然是最初配置的介质。

--nonrotational=on | off

使您能够指定虚拟硬盘是非旋转的。某些访客操作系统(例如 Windows 7 或更高版本)将此类磁盘视为固态硬盘 (SSD),并且不会对其执行磁盘碎片整理。

--discard=on | off

指定是否为虚拟硬盘启用自动丢弃功能。当设置为 on 时,VDI 映像会响应客户机操作系统发出的 trim 命令而收缩。

此功能是实验性的,并且存在已知错误,可能导致客户机操作系统挂起和其他不稳定。如果您关心虚拟硬盘上数据的完整性,请勿使用。

虚拟硬盘必须满足以下要求

  • 磁盘格式必须是 VDI。

  • 磁盘清除区域的大小必须至少为 1 MB。

  • 确保要修剪的空间至少是 1 MB 边界上 1 MB 的连续块。

考虑将碎片整理命令作为后台 cron 作业运行以节省空间。在 Windows 上,运行 defrag.exe /D 命令。在 Linux 上,运行 btrfs filesystem defrag 命令。

注意

当您配置客户机操作系统发出 trim 命令时,客户机操作系统通常将磁盘视为 SSD。

Ext4 支持 -o discard 挂载选项。Mac OS X 可能需要其他设置。Windows 7、8 和 10 会自动检测并支持 SSD。来自三星的 Linux exFAT 驱动程序支持 trim 命令。

Microsoft 对 exFAT 的实现可能不支持此功能。

您可以使用其他方法发出 trim 命令。Linux fstrim 命令是 util-linux 包的一部分。早期解决方案需要您使用 zerofree 或类似命令将未使用区域清零,然后压缩磁盘。您只能在 VM 离线时执行这些步骤。

--bandwidthgroup=name

指定设备使用的带宽组。请参见 限制磁盘映像的带宽

--forceunmount

仅适用于虚拟 DVD 或软盘驱动器。

强制卸载 DVD、CD 或软盘,或者挂载新的 DVD、CD 或软盘,即使之前的可移动存储被客户机锁定以进行读取。请参见 CD/DVD 支持

当您指定 --medium=iscsi 选项时,以下选项适用:

--server=hostname | IP-address

指定 iSCSI 目标的主机名或 IP 地址。

--target=target

指定目标名称字符串,该字符串由 iSCSI 目标确定并用于标识存储资源。

--tport=port

指定目标上 iSCSI 服务的 TCP/IP 端口号。

--lun=LUN

指定目标资源的逻辑单元号 (LUN)。对于单个磁盘驱动器,该值为零。

--encodedlun=LUN

指定目标资源的十六进制编码。对于单个磁盘驱动器,该值为零。

--username=username

指定用于目标身份验证的用户名。

注意

除非您提供设置密码,否则用户名将以明文形式存储在 XML 机器配置文件中。

--password=password

指定用于目标身份验证的密码。

注意

除非您提供设置密码,否则此密码将以明文形式存储在 XML 机器配置文件中。当您首次指定设置密码时,目标身份验证密码将以加密形式存储。

--passwordfile=password-filename

指定包含目标身份验证密码的明文文件。

注意

使用权限和所有权设置以确保未经授权的用户无法读取此文件的内容。

--initiator=initiator

指定 iSCSI 发起程序。

Microsoft iSCSI Initiator 是一个系统,例如服务器,它连接到 IP 网络并启动来自 iSCSI 目标的请求并接收响应。iSCSI 启动器中的 SAN 组件在很大程度上类似于光纤通道 SAN 组件,并且它们包括以下内容:

  • iSCSI 驱动程序。 在 IP 网络上传输 iSCSI 命令块。此 iSCSI 驱动程序安装在 iSCSI 主机上,并包含在 Microsoft iSCSI Initiator 中。

  • 千兆以太网适配器。 连接到 iSCSI 目标。使用可以传输 1000 兆比特每秒 (Mbps) 的以太网适配器。与标准的 10/100 适配器一样,大多数千兆适配器都使用现有的 Category 5 或 Category 6E 网线。适配器上的每个端口都由一个唯一的 IP 地址标识。

  • iSCSI 目标。 是接收 iSCSI 命令的任何设备。该设备可以是终端节点,例如存储设备,也可以是中间设备,例如 IP 和 Fibre Channel 设备之间的网络桥。存储阵列控制器或网络桥上的每个端口都由一个或多个 IP 地址标识。

--intnet

指定是否连接到使用内部网络的 iSCSI 目标。此配置需要进一步配置。请参阅 使用内部网络访问 iSCSI 目标

示例

以下命令将 o7.vdi 磁盘映像附加到 ol7 VM 上指定的 SATA 存储控制器。

$ storageattach ol7 --storagectl "SATA Controller" --port 0 --device 0 \
--type hdd --medium /VirtualBox/ol7/ol7.vdi

以下命令将 o7-r6-dvd.iso DVD 映像附加到 ol7 VM 上指定的 IDE 存储控制器。

$ VBoxManage storageattach ol7 --storagectl "IDE Controller" --port 0 --device 0 \
--type dvddrive --medium ol7-r6-dvd.iso

VBoxManage storagectl

管理存储控制器

概要

VBoxManage storagectl <uuid | vmname> <‑‑name=controller‑name> [‑‑add=floppy | ide | pcie | sas | sata | scsi | usb] [‑‑controller=BusLogic | I82078 | ICH6 | IntelAhci | LSILogic | LSILogicSAS | NVMe | PIIX3 | PIIX4 | USB | VirtIO] [‑‑bootable=on | off] [‑‑hostiocache=on | off] [‑‑portcount=count] [‑‑remove] [‑‑rename=new‑controller‑name]

描述

VBoxManage storagectl 命令允许您附加、修改和删除存储控制器。配置存储控制器后,可以使用 VBoxManage storageattach 命令将虚拟媒体附加到控制器。

uuid | vmname

指定虚拟机的通用唯一标识符 (UUID) 或名称。

--name=controller-name

指定存储控制器的名称。

--add=system-bus-type

指定要连接存储控制器的系统总线类型。有效值为 floppyidepciesassatascsiusb

--controller=chipset-type

指定要为指定存储控制器模拟的芯片组类型。有效值为 BusLogicI82078ICH6IntelAHCILSILogicLSILogicSASNVMePIIX3PIIX4USB

默认值根据存储控制器的类型而异。

--portcount=count

指定存储控制器支持的端口数量。有效值取决于存储控制器的类型。

--hostiocache=on|off

指定是否为此存储控制器附加的所有磁盘映像使用主机 I/O 缓存。有效值为 onoff。请参阅 主机输入/输出缓存

--bootable=on|off

指定此控制器是否可引导。有效值为 onoff

--rename=new-controller-name

为存储控制器指定一个新名称。

--remove

从虚拟机配置中删除存储控制器。

示例

以下命令创建一个名为 sata01 的 SATA 存储控制器,并将其添加到 ol7 VM。该存储控制器模拟 IntelAHCI 芯片组。

$ VBoxManage storagectl ol7 --name "sata01" --add sata --controller IntelAHCI

以下命令创建一个名为 ide01 的 IDE 存储控制器,并将其添加到 ol7 VM。

$ VBoxManage storagectl ol7 --name "ide01" --add ide

VBoxManage unattended

无人值守的客户机操作系统安装

概要

VBoxManage unattended detect <‑‑iso=install‑iso> [‑‑machine‑readable]

VBoxManage unattended install <uuid | vmname> <‑‑iso=install‑iso> [‑‑user=login] [‑‑user‑password=password] [‑‑user‑password‑file=file] [‑‑admin‑password=password] [‑‑admin‑password‑file=file] [‑‑full‑user‑name=name] [‑‑key=product‑key] [‑‑install‑additions] [‑‑no‑install‑additions] [‑‑additions‑iso=add‑iso] [‑‑install‑txs] [‑‑no‑install‑txs] [‑‑validation‑kit‑iso=testing‑iso] [‑‑locale=ll_CC] [‑‑country=CC] [‑‑time‑zone=tz] [‑‑proxy=url] [‑‑hostname=fqdn] [‑‑package‑selection‑adjustment=keyword] [‑‑dry‑run] [‑‑auxiliary‑base‑path=path] [‑‑image‑index=number] [‑‑script‑template=file] [‑‑post‑install‑template=file] [‑‑post‑install‑command=command] [‑‑extra‑install‑kernel‑parameters=params] [‑‑language=lang] [‑‑start‑vm=session‑type]

描述

unattended detect

VBoxManage unattended detect <‑‑iso=install‑iso> [‑‑machine‑readable]

检测指定安装 ISO 上的访客操作系统 (OS) 并显示结果。这可以用作创建虚拟机以安装 ISO 时的输入。

--iso=install-iso

要运行检测的安装 ISO。

--machine-readable

生成更易于从脚本中解析的输出。

unattended install

VBoxManage unattended install <uuid | vmname> <‑‑iso=install‑iso> [‑‑user=login] [‑‑user‑password=password] [‑‑user‑password‑file=file] [‑‑admin‑password=password] [‑‑admin‑password‑file=file] [‑‑full‑user‑name=name] [‑‑key=product‑key] [‑‑install‑additions] [‑‑no‑install‑additions] [‑‑additions‑iso=add‑iso] [‑‑install‑txs] [‑‑no‑install‑txs] [‑‑validation‑kit‑iso=testing‑iso] [‑‑locale=ll_CC] [‑‑country=CC] [‑‑time‑zone=tz] [‑‑proxy=url] [‑‑hostname=fqdn] [‑‑package‑selection‑adjustment=keyword] [‑‑dry‑run] [‑‑auxiliary‑base‑path=path] [‑‑image‑index=number] [‑‑script‑template=file] [‑‑post‑install‑template=file] [‑‑post‑install‑command=command] [‑‑extra‑install‑kernel‑parameters=params] [‑‑language=lang] [‑‑start‑vm=session‑type]

重新配置指定的虚拟机以进行安装,并可选地启动它。

uuid | vmname

虚拟机的 UUID 或名称(区分大小写)。

--iso=install-iso

要运行检测的安装 ISO。

--user=login

登录名。(默认值:vboxuser)

--user-password=password

用户登录密码。此密码用于 --user 指定的用户(默认值:changeme)。

--user-password-file=file

提供用户密码的 --user-password 的替代方法。可以使用特殊文件名 stdin 从标准输入读取密码。

--admin-password=password

管理员/root 登录密码。如果未指定,将使用 --user-password 中的密码。

--admin-password-file=file

提供管理员/root 密码的 --admin-password 的替代方法。可以使用特殊文件名 stdin 从标准输入读取密码。

--full-user-name=name

完整用户名。(默认值:--user)

--key=product-key

访客操作系统产品密钥。并非所有访客操作系统都要求此密钥。

--install-additions, --no-install-additions

是否安装 VirtualBox 客户机增强功能。(默认值:--no-install-additions)

--additions-iso=add-iso

VirtualBox 增强功能 ISO 的路径。(默认值:已安装/已下载的增强功能)

--install-txs, --no-install-txs

是否安装 VirtualBox ValidationKit 中的 Test eXecution Service (TXS)。这在准备测试或类似用途的 VM 时非常有用。(默认值:--no-install-txs)

--validation-kit-iso=testing-iso

VirtualBox ValidationKit ISO 的路径。如果指定了 --install-txs,则需要此项。

--locale=ll_CC

访客的基本语言环境规范,例如 en_US、de_CH 或 nn_NO。(默认值:主机或 en_US)

--country=CC

如果与 --location 指定的不同,则为两字母国家/地区代码。

--time-zone=tz

访客操作系统要设置的时区。(默认值:主机时区或 UTC)

--proxy=url

要使用的代理 URL。

--hostname=fqdn

客户机计算机的完全限定域名。(默认值:vmname.myguest.virtualbox.org)

--package-selection-adjustment=keyword

调整客户机操作系统软件包/组件的选择。此选项可以指定多次。目前唯一识别的关键字是 minimal,它会触发某些客户机操作系统的最小安装。

--dry-run

不创建任何文件或更改虚拟机配置。

--start-vm=session-type

使用 session-type 给定的前端启动 VM。这与 startvm 命令的 --type 选项相同,但我们添加了 none 以指示不应启动 VM。(默认值:none

高级选项

--auxiliary-base-path=path

为安装生成的媒体相关文件的路径前缀。(默认值:vm-config-dir/Unattended-vm-uuid-)

--image-index=number

Windows 安装映像索引。(默认值:1)

--script-template=file

无人参与安装脚本模板。(默认值:取决于 IMachine::OSTypeId)

--post-install-template=file

安装后脚本模板。(默认值:取决于 IMachine::OSTypeId)

--post-install-command=command

安装完成后要运行的单个命令。确切的格式和运行时间取决于访客操作系统安装程序。

--extra-install-kernel-parameters=params

在安装期间使用的额外 Linux 内核参数列表。(默认值:IMachine::OSTypeId 依赖)

--language=lang

指定 Windows 安装的 UI 语言。lang 通常是 {ll}-{CC} 的形式。请参阅 VBoxManage unattended detect 的 detectedOSLanguages 结果。(默认值:detectedOSLanguages[0])

VBoxManage unregistervm

注销虚拟机

概要

VBoxManage unregistervm <uuid | vmname> [‑‑delete] [‑‑delete‑all]

描述

VBoxManage unregistervm 命令注销虚拟机 (VM)。

uuid | vmname

指定虚拟机的名称或全局唯一标识符 (UUID)。

--delete

自动删除与虚拟机相关的以下文件

  • 所有硬盘映像文件,包括差分文件。

  • 虚拟机创建的所有保存状态文件,包括每个快照的文件。

  • XML 虚拟机定义文件及其备份。

  • 虚拟机日志文件。

  • 与未注册虚拟机相关联的空目录。

--delete-all

删除 --delete 选项中描述的文件,以及 VM 文件夹中找到且仅附加到此 VM 的所有 DVD 和软盘。

示例

以下命令注销一个名为 vm2 的 VM。

$ VBoxManage unregistervm vm2

以下命令注销一个名为 vm3 的 VM。将删除与该 VM 相关的所有文件。

$ VBoxManage unregistervm vm3 --delete
%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100%

另请参阅

VBoxManage updatecheck

检查 Oracle VirtualBox 的更新版本

概要

VBoxManage updatecheck perform [‑‑machine‑readable]

VBoxManage updatecheck list [‑‑machine‑readable]

VBoxManage updatecheck modify [‑‑disable | ‑‑enable] [‑‑channel=stable | withbetas | all] [‑‑frequency=days]

描述

updatecheck 子命令用于检查是否有更新的 Oracle VirtualBox 版本可用。updatecheck 的两个子命令选项用于修改或查看与检查更新的 Oracle VirtualBox 版本相关的设置。

updatecheck perform

VBoxManage updatecheck perform [‑‑machine‑readable]

检查是否有更新的 Oracle VirtualBox 版本可用。

--machine-readable

机器可读输出。

updatecheck list

VBoxManage updatecheck list [‑‑machine‑readable]

显示当前用于指定何时检查更新的 Oracle VirtualBox 版本的设置。

--machine-readable

机器可读输出。

updatecheck modify

VBoxManage updatecheck modify [‑‑disable | ‑‑enable] [‑‑channel=stable | withbetas | all] [‑‑frequency=days]

修改用于指定何时检查更新的 Oracle VirtualBox 版本的设置。

--enable

启用更新检查服务。

--disable

禁用更新检查服务。

--channel=stable | withbetas | all

用于确定是否有更新的 Oracle VirtualBox 版本可用的首选发布类型。默认值为“stable”。

稳定版

检查 Oracle VirtualBox 的新稳定版本(同一主版本内的维护版本和次要版本)。

all

检查 Oracle VirtualBox 的新稳定版本(同一主版本内的维护版本和次要版本)以及主版本。

withbetas

检查 Oracle VirtualBox 的新稳定版本(同一主版本内的维护版本和次要版本)、主版本和 beta 版本。

--frequency=days

指定检查更新的 Oracle VirtualBox 版本的频率(天数)。

--proxy-mode=system | manual | none

指定要使用的代理模式。

--proxy-url=<address>

指定要使用的代理地址。设置为空字符串以清除代理地址。

VBoxManage usbdevsource

添加和删除 USB 设备源

概要

VBoxManage usbdevsource add <source‑name> <‑‑backend=backend> <‑‑address=address>

VBoxManage usbdevsource remove <source‑name>

描述

VBoxManage usbdevsource 命令将 USB 设备源添加到主机系统,并使其可用于 VM 客户机。您还可以使用此命令删除 USB 设备源。

添加 USB 设备源

VBoxManage usbdevsource add <source‑name> <‑‑backend=backend> <‑‑address=address>

VBoxManage usbdevsource add 命令添加 USB 设备源,该源随后可用于主机系统上的所有客户机 VM。

源名称

指定 USB 设备源的唯一名称。

--address=address

指定 USB 后端的地址。

--backend=backend

指定要使用的 USB 代理服务后端。

如果通过 USB/IP 协议指定远程服务器,当前唯一支持的后端值是 USBIP。

删除 USB 设备

VBoxManage usbdevsource remove <source‑name>

VBoxManage usbdevsource remove 命令删除 USB 设备。

源名称

指定要移除的 USB 设备源的名称。

示例

以下命令添加一个名为 hostusb01 的 USB 设备服务器。

$ VBoxManage usbdevsource add hostusb01 --backend USBIP --address 10.0.1.16

VBoxManage usbfilter

管理 USB 过滤器

概要

VBoxManage usbfilter add <index,0‑N> <‑‑target=<uuid | vmname | global>> <‑‑name=string> <‑‑action=ignore | hold> [‑‑active=yes | no] [‑‑vendorid=XXXX] [‑‑productid=XXXX] [‑‑revision=IIFF] [‑‑manufacturer=string] [‑‑product=string] [‑‑port=hex] [‑‑remote=yes | no] [‑‑serialnumber=string] [‑‑maskedinterfaces=XXXXXXXX]

VBoxManage usbfilter modify <index,0‑N> <‑‑target=<uuid | vmname | global>> [‑‑name=string] [‑‑action=ignore | hold] [‑‑active=yes | no] [‑‑vendorid=XXXX| ""] [‑‑productid=XXXX| ""] [‑‑revision=IIFF| ""] [‑‑manufacturer=string| ""] [‑‑product=string| ""] [‑‑port=hex] [‑‑remote=yes | no] [‑‑serialnumber=string| ""] [‑‑maskedinterfaces=XXXXXXXX]

VBoxManage usbfilter remove <index,0‑N> <‑‑target=<uuid | vmname | global>>

描述

VBoxManage usbfilter 命令使您能够管理特定虚拟机 (VM) 的 USB 过滤器,或影响整个 Oracle VirtualBox 配置的全局 USB 过滤器。

全局过滤器在 VM 特定过滤器之前应用。这意味着您可以使用全局过滤器来防止设备被任何 VM 捕获。

全局过滤器按照它们在列表中的位置(有关列表排序的详细信息,请参见下面的 --index 选项)顺序应用。只有第一个匹配设备的过滤器才会被应用。例如,如果创建了两个全局过滤器,第一个过滤器使特定的 Kingston 内存棒设备可用,而第二个过滤器忽略所有 Kingston 设备,则应用这两个过滤器的结果将是此特定的 Kingston 内存棒将可用于任何 VM,但其他 Kingston USB 设备将不可用。

常用操作数和选项

index,0-N

指定一个整数,表示过滤器在列表中的位置。零 (0) 代表列表中的第一个位置。如果指定的位置已存在过滤器,则现有过滤器及之后的所有过滤器将向下移动。否则,新过滤器将附加到列表末尾。

--action=ignore | hold

指定是否允许 VM 访问与 USB 过滤器匹配的设备(hold)或拒绝它们访问(ignore)。此选项仅适用于全局过滤器。

--active=yes | no

指定 USB 过滤器是否处于活动状态或被暂时禁用。有效值为 yes(激活过滤器)和 no(禁用过滤器)。默认值为 yes

--manufacturer=string

将制造商 ID 过滤器指定为字符串。默认值为一个空字符串 ("")。

--maskedinterfaces=XXXXXXXX

指定一个掩码接口过滤器,用于从客户机隐藏一个或多个 USB 接口。该值是一个位掩码,其中设置的位对应于要隐藏或屏蔽的 USB 接口。此功能仅在 Linux 主机系统上受支持。

--name=filter-name

指定过滤器的名称。

--port=hex

将集线器端口号过滤器指定为字符串。默认值为一个空字符串 ("")。

--product=string

将产品 ID 过滤器指定为字符串。默认值为一个空字符串 ("")。

--productid=XXXX

指定产品 ID 过滤器。精确匹配的字符串表示形式为 XXXX,其中 X 是十六进制数字,包括前导零。默认值为一个空字符串 ("")。

--remote=yes | no

指定一个远程过滤器,指示设备是物理连接到远程 VRDE 客户端还是本地主机系统。此选项仅适用于 VM 过滤器。默认值为 no

--revision=IIFF

指定修订 ID 过滤器。精确匹配的字符串表示形式为 IIFFI 是修订整数部分的一个十进制数字。F 是其小数部分的一个十进制数字,包括前导和尾随零。默认值为一个空字符串 ("")。

要指定修订 ID 的范围,请确保使用十六进制格式,以便修订以 16 位打包的 BCD 值存储。例如,int:0x0100-0x0199 表达式匹配从 1.0 到 1.99(含)的任何修订。

--serialnumber=string

将序列号过滤器指定为字符串。默认值为一个空字符串 ("")。

--target=uuid | vmname | global

指定过滤器附加到的 VM。您可以指定 VM 的通用唯一标识符 (UUID) 或名称。要将过滤器描述应用于所有 VM,请指定 global

--vendorid=XXXX

指定供应商 ID 过滤器,这是一个四位十六进制数字的字符串表示形式。X 是十六进制数字,包括前导零。默认值为一个空字符串 ("")。

添加 USB 过滤器或全局过滤器

VBoxManage usbfilter add <index,0‑N> <‑‑target=<uuid | vmname | global>> <‑‑name=string> <‑‑action=ignore | hold> [‑‑active=yes | no] [‑‑vendorid=XXXX] [‑‑productid=XXXX] [‑‑revision=IIFF] [‑‑manufacturer=string] [‑‑product=string] [‑‑port=hex] [‑‑remote=yes | no] [‑‑serialnumber=string] [‑‑maskedinterfaces=XXXXXXXX]

使用 VBoxManage usbfilter add 命令创建新的 USB 过滤器。

此外,还指定用于过滤的参数。您可以使用 VBoxManage list usbhost 命令查看连接到您系统的 USB 设备的参数。

修改 USB 过滤器或全局过滤器

VBoxManage usbfilter modify <index,0‑N> <‑‑target=<uuid | vmname | global>> [‑‑name=string] [‑‑action=ignore | hold] [‑‑active=yes | no] [‑‑vendorid=XXXX| ""] [‑‑productid=XXXX| ""] [‑‑revision=IIFF| ""] [‑‑manufacturer=string| ""] [‑‑product=string| ""] [‑‑port=hex] [‑‑remote=yes | no] [‑‑serialnumber=string| ""] [‑‑maskedinterfaces=XXXXXXXX]

使用 VBoxManage usbfilter modify 命令修改 USB 过滤器。您可以使用 VBoxManage list usbfilters 命令列出全局过滤器索引,并使用 VBoxManage showvminfo 命令列出特定虚拟机的索引。

删除 USB 过滤器或全局过滤器

VBoxManage usbfilter remove <index,0‑N> <‑‑target=<uuid | vmname | global>>

使用 VBoxManage usbfilter remove 命令删除 USB 过滤器条目。

示例

以下命令列出主机系统上可用的 USB 设备。

$ VBoxManage list usbhost

以下命令将一个名为 filter01 的 USB 过滤器添加到 ol7 VM。该过滤器指定了一个 Kingston DataTraveler 内存棒,并将其放置在 VM 的 USB 过滤器列表的第一个位置。

$ VBoxManage usbfilter add 0 --target ol7 --name filter01 --vendorid 0x0930 --productid 0x6545

以下命令删除 ol7 VM 的列表中第二个 USB 过滤器。

$ VBoxManage usbfilter remove 1 --target ol7

vboximg-mount

FUSE 挂载 Mac OS 和 Linux 主机的虚拟磁盘映像

概要

vboximg‑mount <‑? | ‑h | ‑‑help>

vboximg‑mount <‑‑image.=image‑UUID> [‑‑guest‑filesystem] [‑o=FUSE‑option [,FUSE‑option...]] [‑‑root] [‑‑rw] <mountpoint>

vboximg‑mount <‑‑list> [‑‑image=image‑UUID] [‑‑guest‑filesystem] [‑‑verbose] [‑‑vm=vm‑UUID] [‑‑wide]

描述

vboximg-mount 命令使您能够使 Oracle VirtualBox 磁盘映像可供 Mac OS 或 Linux 主机操作系统 (OS) 使用,以进行特权或非特权访问。您可以从其可用的快照历史记录中挂载磁盘的任何版本。使用此命令来挂载、查看以及可选地修改 Oracle VirtualBox 虚拟磁盘映像的内容,您还可以使用此命令来查看已注册虚拟机 (VM) 的信息。

此命令使用用户空间文件系统 (FUSE) 技术提供对 Oracle VirtualBox 虚拟磁盘映像的原始访问。

当您使用 --image 选项指定基础映像标识符时,仅挂载基础映像。将忽略所有相关的快照。或者,如果您使用 --image 选项指定快照,则 FUSE 挂载的虚拟磁盘的状态将从隐含的快照链(包括基础映像)合成。

vboximg-mount 命令包含对 VM 磁盘映像内文件系统的实验性只读访问。此功能使您能够从 VM 磁盘映像中提取文件,而无需启动 VM,也无需在主机系统上需要第三方文件系统驱动程序。Oracle VirtualBox 支持 FAT、NTFS、ext2ext3ext4 文件系统。

虚拟磁盘作为设备节点暴露在基于 FUSE 的文件系统中,该文件系统覆盖指定的挂载点。

FUSE 文件系统包含一个包含多个文件的目录。该文件系统还可以包含一个包含符号链接的目录,该链接具有与虚拟磁盘基础映像相同的基名(请参阅 basename(1) 手册页),并指向虚拟磁盘基础映像的位置。该目录可以是以下类型:

  • vhdd 提供对原始磁盘映像数据的访问,作为平面映像。

  • volID 提供对指定磁盘映像上单个卷的访问。

  • fsID 提供对支持的文件系统的访问,而无需主机文件系统驱动程序。

通用命令选项

vboximg‑mount <‑? | ‑h | ‑‑help>

使用以下选项获取有关 vboximg-mount 命令及其选项的信息。

--help, --h, 或--?

显示使用信息。

挂载 Oracle VirtualBox 磁盘映像

vboximg‑mount <‑‑image.=image‑UUID> [‑‑guest‑filesystem] [‑o=FUSE‑option [,FUSE‑option...]] [‑‑root] [‑‑rw] <mountpoint>

使用 vboximg-mount 命令在 Mac OS 或 Linux 主机系统上挂载 Oracle VirtualBox 虚拟磁盘映像。挂载后,您可以查看磁盘映像的内容或修改磁盘映像的内容。

您可以使用 vboximg-mount 命令将 FUSE 基础访问限制为虚拟磁盘的子部分。

--image=disk-image

指定 Oracle VirtualBox 磁盘映像的通用唯一标识符 (UUID)、名称或路径。

--image 选项的短形式为 -i

--guest-filesystem

启用对来宾文件系统的实验性只读支持。当您指定此选项时,所有已知文件系统都可供访问。

--guest-filesystem 选项的短形式为 -g

-o=FUSE-option[,FUSE-option...]

指定 FUSE 挂载选项。

vboximg-mount 命令允许您使用 mount.fuse(8) 手册页中描述的 FUSE 挂载选项。

--root

通过授予 root 用户文件访问权限,覆盖了限制文件访问到文件系统所有者的安全措施。

-o allow_root 选项相同。请参阅 -o 选项说明。

此选项与 -o allow_other 选项不兼容。

--rw

将指定镜像挂载为读写模式,如果要修改其内容,则需要此模式。默认情况下,镜像以只读模式挂载。

挂载点

指定要挂载 Oracle VirtualBox 磁盘映像的目录的路径名。

查看 Oracle VirtualBox 磁盘映像信息

vboximg‑mount <‑‑list> [‑‑image=image‑UUID] [‑‑guest‑filesystem] [‑‑verbose] [‑‑vm=vm‑UUID] [‑‑wide]

使用 vboximg-mount 命令查看有关已注册 VM 或 Oracle VirtualBox 虚拟磁盘映像的信息。

--image=disk-image

指定 Oracle VirtualBox 磁盘映像的 UUID、名称或路径。

--image 选项的短形式为 -i

--guest-filesystem

启用对来宾文件系统的实验性只读支持。当您指定此选项时,所有已知文件系统都可供访问。

--guest-filesystem 选项的短形式为 -g

--list

显示与已注册 VM 相关联的磁盘信息。如果您指定磁盘镜像,此选项将显示指定镜像的分区信息。

当您指定 --verbose 选项时,输出将包含有关 VM 和媒体的详细信息,包括快照映像和文件路径。

--list 选项的短形式为 -l

--verbose

显示或记录详细信息。

--verbose 选项的短形式为 -v

--vm=vm-UUID

输出有关与指定 UUID 关联的 VM 的信息。

--wide

以宽格式输出信息。此输出包括正在运行的 VM 的锁定状态信息。对于未运行的 VM,状态为 created

宽格式输出在 VM 列中使用树状结构,以显示 VM 基础镜像与其快照之间的关系。

示例

以下示例展示了如何在宿主机操作系统 (OS) 上挂载虚拟磁盘镜像。

$ mkdir fuse_mount_point
$ vboximg-mount --image=b490e578-08be-4f7d-98e9-4c0ef0952377 fuse_mount_point
$ ls fuse_mount_point
ubu.vdi[32256:2053029880]   vhdd
$ sudo mount fuse_mount_point/vhdd /mnt

使用 mkdir 命令在主机 OS 上创建一个名为 fuse_mount_point 的挂载点。然后使用 vboximg-mount 命令将指定的磁盘映像挂载到 fuse_mount_point 挂载点。挂载将包含磁盘映像的所有快照。

使用 ls 命令显示 fuse_mount_point 的内容。然后使用 mount 命令将 FUSE 挂载的设备节点 vhdd 挂载到 /mnt 挂载点。vhdd 设备节点代表虚拟磁盘映像。

以下示例显示了当 b490e578-08be-4f7d-98e9-4c0ef0952377 磁盘映像挂载到 fuse_mount_point 挂载点时,如何使其已知文件系统可访问。

$ vboximg-mount --image=b490e578-08be-4f7d-98e9-4c0ef0952377 \
--guest-filesystem fuse_mount_point

以下命令输出关于所有已注册 VM 及其快照的详细信息

$ vboximg-mount --list --verbose

以下命令显示宽格式列表输出的摘录。

$ vboximg-mount --list --wide

VM  Image                 Size Type State   UUID (hierarchy)
------------------------------------------  ------------------------------------
Proxy                                       0833f5bc-6304-42e1-b799-cdc81c576c60
 |
 +- Proxy.vdi             4.8G VDI  rlock   d5f84afb-0794-4952-ab71-6bbcbee07737
 |  +- <snapshot>        12.3G VDI  rlock     dffc67aa-3023-477f-8033-b27e3daf4f54
 |  +- <snapshot>         8.8G VDI  rlock       3b2755bd-5f2a-4171-98fe-647d510b6274
 |  +- <snapshot>        14.6G VDI  rlock         e2ccdb5f-49e8-4123-8623-c61f363cc5cf
 |  +- <snapshot>         7.4G VDI  wlock           3c1e6794-9091-4be3-9e80-11aba40c2649

------------------------------------------  ------------------------------------
Oracle Linux 7                              5365ab5f-470d-44c0-9863-dad532ee5905
 |
 +- Oracle Linux 7.vdi     7.0G VDI created 96d2e92e-0d4e-46ab-a0f1-008fdbf997e7
 | +- <snapshot>          15.9G VDI created   f9cc866a-9166-42e9-a503-bbfe9b7312e8
 |
 +- kernel.vdi            11.1G VDI created 79a370bd-0c4f-480a-30bb-10cdea68423f

输出显示 Proxy VM 正在运行 Proxy.vdi 虚拟磁盘映像的第四个快照。运行状态由状态列中的 wlock 值指示。

Oracle Linux 7 VM 未运行。它有两个映像:Oracle Linux 7.vdikernel.vdiOracle Linux 7.vdi 映像有一个快照。

以下命令显示关于具有指定 UUID 的 VM 的信息

$ vboximg-mount --list --vm=b1d5563b-2a5b-4013-89f1-26c81d6bbfa0
-----------------------------------------------------------------
VM:   ubu
UUID: b1d5563b-2a5b-4013-89f1-26c81d6bbfa0

  Image:   ubu.vdi
  UUID:    b490e578-08be-4f7d-98e9-4c0ef0952377

       Snapshot: 35afe1e0-0a51-44f3-a228-caf172f3306f
       Size:     12.1G

       Snapshot: 874279c1-4425-4282-ada8-a9c07c00bbf9
       Size:     13.6G

  Image:   kernel.vdi
  UUID:    79a370bd-6eb7-4dbf-8bc6-d29118f127e0

高级主题

自动客户机登录

Oracle VirtualBox 为 Windows、Linux 和 Oracle Solaris 提供了客户机增强功能模块,以实现客户机上的自动登录。

当客户机操作系统在虚拟机中运行时,可能需要使用从主机传递的凭据执行协调和自动登录。凭据包括用户名、密码和域名,其中每个值可能为空。

自动 Windows 客户机登录

Windows 提供了一个名为 Winlogon 的模块化系统登录子系统,可以通过所谓的 GINA(图形识别和身份验证)模块进行自定义和扩展。在 Windows Vista 及更高版本中,GINA 模块被替换为称为凭据提供程序的​​新机制。Oracle VirtualBox 的 Windows 客户机增强功能同时提供 GINA 和凭据提供程序模块,因此可以实现任何 Windows 客户机的自动登录。

要激活 Oracle VirtualBox GINA 或凭据提供程序模块,请使用命令行开关 /with_autologon 安装客户机增强功能。之后,安装程序将完成所有必需的手动安装这些模块的步骤。

要手动安装 Oracle VirtualBox GINA 模块,请按照 手动文件提取 中的说明提取客户机增强功能,然后将 VBoxGINA.dll 文件复制到 Windows SYSTEM32 目录。在注册表中,创建以下键,其值为 VBoxGINA.dll

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\GinaDLL
注意

Oracle VirtualBox GINA 模块实现为标准 Windows GINA 模块 MSGINA.DLL 的包装器。因此,它可能无法与第三方 GINA 模块正常工作。

要手动安装 Oracle VirtualBox 凭据提供程序模块,请按照 手动文件提取 中的说明提取客户机增强功能,并将 VBoxCredProv.dll 文件复制到 Windows SYSTEM32 目录。在注册表中,创建以下键:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\
Authentication\Credential Providers\{275D3BCC-22BB-4948-A7F6-3A3054EBA92B}

HKEY_CLASSES_ROOT\CLSID\{275D3BCC-22BB-4948-A7F6-3A3054EBA92B}

HKEY_CLASSES_ROOT\CLSID\{275D3BCC-22BB-4948-A7F6-3A3054EBA92B}\InprocServer32

所有默认值,名为 Default 的键,都必须设置为 VBoxCredProv

创建以下字符串,并为其赋值 Apartment

HKEY_CLASSES_ROOT\CLSID\{275D3BCC-22BB-4948-A7F6-3A3054EBA92B}\InprocServer32\ThreadingModel

要设置凭据,请在 *正在运行* 的 VM 上使用以下命令:

$ VBoxManage controlvm "Windows XP" setcredentials "John Doe" "secretpassword" "DOMTEST"

当 VM 运行时,登录凭据可以由 Oracle VirtualBox 登录模块(GINA 或凭据提供程序)使用 Oracle VirtualBox 客户机增强功能设备驱动程序进行查询。当 Windows 处于 *已注销* 模式时,登录模块将不断轮询凭据,如果存在凭据,则会尝试登录。检索凭据后,登录模块会将其删除,因此上述命令必须为后续登录重复执行。

出于安全原因,凭据不会以任何持久方式存储,并且在 VM 重置时会丢失。此外,凭据是写一次性的。无法从主机端检索凭据。可以通过将值设置为空来从主机端重置凭据。

根据 Windows 客户机版本,适用以下限制

  • 对于 **Windows XP 客户机**。需要将登录子系统配置为使用经典的登录对话框,因为 Oracle VirtualBox GINA 模块不支持 Windows XP 风格的欢迎对话框。

  • **Windows Vista、Windows 7、Windows 8、Windows 10 和 Windows 11 客户机**。登录子系统不支持所谓的“安全注意序列”Ctrl+Alt+Del。因此,需要更改客户机的组策略设置,使其不使用安全注意序列。此外,提供的用户名仅与真实用户名进行比较,而不是与用户友好的名称进行比较。这意味着当您重命名用户时,仍然必须提供原始用户名,因为 Windows 永远不会在内部重命名用户帐户。

  • 内置 **Windows 远程桌面服务**(以前称为终端服务)的自动登录处理默认情况下是禁用的。要启用它,请创建以下注册表项,并将其 DWORD 值设置为 1

    HKEY_LOCAL_MACHINE\SOFTWARE\Oracle\VirtualBox Guest Additions\AutoLogon

以下命令强制 Oracle VirtualBox 在读取凭据后以及 VM 重置时保留凭据。

$ VBoxManage setextradata "Windows XP" VBoxInternal/Devices/VMMDev/0/Config/KeepCredentials 1

请注意,这存在潜在的安全风险,因为在客户机上运行的恶意应用程序可能会使用适当的接口请求此信息。

自动 Linux 和 UNIX 客户机登录

Oracle VirtualBox 提供了一个自定义 PAM 模块(可插拔身份验证模块),可用于在支持此框架的平台上执行自动客户机登录。几乎所有现代 Linux 和 UNIX 发行版都依赖 PAM。

要在使用 LightDM 作为显示管理器的 Ubuntu 或基于 Ubuntu 的发行版上实现自动登录。请参阅 Ubuntu/LightDM 的 Oracle VirtualBox Greeter

pam_vbox.so 模块本身执行对传递到客户机操作系统的凭据的实际验证。相反,它依赖于 PAM 堆栈中的其他模块,如 pam_unix.so 或 pam_unix2.so,通过 pam_vbox.so 检索到的凭据来执行实际验证。因此,pam_vbox.so 必须位于身份验证 PAM 服务列表的顶部。

注意

pam_vbox.so 模块仅支持 auth 原语。不支持 account、session 或 password 等其他原语。

pam_vbox.so 模块作为客户机增强功能的一部分提供,但默认情况下未在客户机操作系统上安装或激活。要安装它,必须将其从 /opt/VBoxGuestAdditions-version/other/ 复制到安全模块目录。这通常是 32 位 Linux 客户机上的 /lib/security/ 或 64 位 Linux 客户机上的 /lib64/security/。请参阅您的客户机操作系统文档以获取正确的 PAM 模块目录。

例如,要在 Ubuntu Linux 客户机操作系统和 GNOME 桌面管理器 (GDM) 中使用 pam_vbox.so,通过主机传递凭据自动登录用户,请按以下方式配置客户机操作系统:

  1. 将 pam_vbox.so 模块复制到安全模块目录。在这种情况下,是 /lib/security。

  2. 编辑 GDM 的 PAM 配置文件,位于 /etc/pam.d/gdm。在顶部添加行 auth requisite pam_vbox.so。此外,在大多数 Linux 发行版中,有一个名为 /etc/pam.d/common-auth 的文件。此文件包含在许多其他服务中,例如上面提到的 GDM 文件。在那里,您还必须添加行 auth requisite pam_vbox.so。

  3. 如果需要使用 pam_unix.so 或 pam_unix2.so 对 shadow 数据库进行身份验证,则需要为 pam_unix.so 提供 try_first_pass 参数或为 pam_unix2.so 提供 use_first_pass 参数,以便将凭据从 Oracle VirtualBox 模块传递到 shadow 数据库身份验证模块。对于 Ubuntu,这必须添加到 /etc/pam.d/common-auth 中,添加到引用 pam_unix.so 的行末尾。此参数告诉 PAM 模块使用堆栈中已存在的凭据,例如 Oracle VirtualBox PAM 模块提供的凭据。

注意

配置不正确的 PAM 堆栈可能会有效地阻止您登录到客户机系统。

为了简化部署,您可以在 pam_vbox.so 语句之后直接传递 debug 参数。然后将使用 syslog 记录调试日志输出。

注意

默认情况下,pam_vbox 不等待凭据从主机到达。当显示登录提示时(例如,由 GDM/KDM 或文本控制台显示),并且 pam_vbox 还没有凭据时,它不会等待凭据到达。相反,PAM 堆栈中的下一个模块,取决于 PAM 配置,将有机会进行身份验证。

pam_vbox 支持位于 /VirtualBox/GuestAdd/PAM/ 下的各种客户机属性参数。这些参数允许 pam_vbox 等待主机提供凭据,并可选择在等待凭据时显示消息。可以设置以下客户机属性:

  • CredsWait:如果 pam_vbox 应开始等待凭据从主机到达,则设置为 1。在此之前,其他任何身份验证方法(如手动登录)都将不可用。如果此属性为空或被删除,将不执行等待凭据的操作,pam_vbox 将像以前一样运行。此属性必须对客户机设置为只读(RDONLYGUEST)。

  • CredsWaitAbort:设置为任何值时会中止等待凭据。可以从主机和客户机进行设置。

  • CredsWaitTimeout:以秒为单位的超时时间,让 pam_vbox 等待凭据到达。如果在超时时间内没有凭据到达,pam_vbox 的身份验证将设置为失败,并将询问链中的下一个 PAM 模块。如果未指定此属性,或将其设置为 0 或无效值,则将使用无限超时。此属性必须对客户机设置为只读(RDONLYGUEST)。

要进一步自定义 pam_vbox,可以使用以下客户机属性:

  • CredsMsgWaiting:在 pam_vbox 等待主机提供凭据时显示的自定义消息。此属性必须对客户机设置为只读(RDONLYGUEST)。

  • CredsMsgWaitTimeout:在 pam_vbox 等待凭据超时时显示的自定义消息。例如,凭据未及时到达。此属性必须对客户机设置为只读(RDONLYGUEST)。

注意

如果 pam_vbox 客户机属性未设置正确的标志(RDONLYGUEST),则该属性将被忽略,并且根据属性的不同,将使用默认值。这可能导致 pam_vbox 不等待凭据。有关更多信息,请查阅相应的 syslog 文件,并使用 debug 选项。

Ubuntu/LightDM 的 Oracle VirtualBox Greeter

Oracle VirtualBox 提供了一个名为 vbox-greeter 的 greeter 模块,可与 LightDM 一起使用。LightDM 是 Ubuntu Linux 的默认显示管理器,因此也可用于自动客户机登录。

vbox-greeter 不需要 pam_vbox 模块(如“自动 Linux 和 UNIX 客户机登录”中所述)即可运行。它提供了 LightDM 提供的自己的身份验证机制。但是,为了提供最大的灵活性,这两个模块可以在同一客户机上一起使用。

与 pam_vbox 模块一样,vbox-greeter 作为客户机增强功能的一部分提供,但默认情况下未在客户机操作系统上安装或激活。要在安装客户机增强功能时自动安装 vbox-greeter,请在运行 VBoxLinuxAdditions.run 文件时使用 --with-autologon 选项。

# ./VBoxLinuxAdditions.run -- --with-autologon

对于手动或延后安装,请将 vbox-greeter.desktop 文件从 /opt/VBoxGuestAdditions-version/other/ 复制到 xgreeters 目录,该目录通常是 /usr/share/xgreeters/。有关正确的 LightDM greeter 目录名称,请参阅您的客户机操作系统文档。

vbox-greeter 模块由 Oracle VirtualBox 客户机增强功能安装程序安装,位于 /usr/sbin/。要将 vbox-greeter 启用为标准 greeter 模块,请按以下方式编辑 /etc/lightdm/lightdm.conf 文件:

[SeatDefaults]
greeter-session=vbox-greeter
注意
  • 必须完全重新启动 LightDM 服务器才能将 vbox-greeter 用作默认 greeter。在 Ubuntu 上,以 root 身份运行 service lightdm --full-restart 或重新启动客户机。

  • vbox-greeter 独立于您选择的图形会话,例如 Gnome、KDE 或 Unity。但是,vbox-greeter 需要 FLTK 1.3 或更高版本来实现其自己的用户界面。

有许多客户机属性可用于进一步自定义登录体验。对于自动登录用户,与 pam_vbox 相同的客户机属性适用。请参阅“自动 Linux 和 UNIX 客户机登录”。

除了前面提到的客户机属性外,vbox-greeter 还允许您进一步自定义其用户界面。以下客户机属性位于 /VirtualBox/GuestAdd/Greeter/ 目录中:

  • HideRestart:如果 vbox-greeter 应隐藏重新启动客户机的按钮,则设置为 1。此属性必须对客户机设置为只读(RDONLYGUEST)。

  • HideShutdown:如果 vbox-greeter 应隐藏关闭客户机的按钮,则设置为 1。此属性必须对客户机设置为只读(RDONLYGUEST)。

  • BannerPath:用作 greeter 顶部横幅图像的 .PNG 文件的路径。图像大小必须为 460 x 90 像素,任何位深度。此属性必须对客户机设置为只读(RDONLYGUEST)。

  • UseTheming:设置为 1 以启用以下主题选项。此属性必须对客户机设置为只读(RDONLYGUEST)。

  • Theme/BackgroundColor:背景的十六进制 RRGGBB 颜色。此属性必须对客户机设置为只读(RDONLYGUEST)。

  • Theme/LogonDialog/HeaderColor:登录对话框标题文本的十六进制 RRGGBB 前景颜色。此属性必须对客户机设置为只读(RDONLYGUEST)。

  • Theme/LogonDialog/BackgroundColor:登录对话框背景的十六进制 RRGGBB 颜色。此属性必须对客户机设置为只读(RDONLYGUEST)。

  • Theme/LogonDialog/ButtonColor:登录对话框按钮的十六进制 RRGGBB 背景颜色。此属性必须对客户机设置为只读(RDONLYGUEST)。

注意

上述客户机属性与 pam_vbox 部分中指定的属性具有相同的限制。

Windows 客户机高级配置

自动 Windows 系统准备

Microsoft 提供了一个名为 Sysprep 的系统准备工具,用于准备 Windows 系统进行部署或重新分发。某些 Windows 版本在安装介质上包含 Sysprep,但该工具也可从 Microsoft 网站下载。在标准情况下,对于大多数 Windows 版本,Sysprep 包含在默认安装中。Sysprep 主要由一个名为 sysprep.exe 的可执行文件组成,该文件由用户调用以将 Windows 安装置于准备模式。

客户机增强功能提供了一种自动化的方式来启动客户机操作系统上的系统准备,该方式由主机系统控制。有关如何使用具有 sysprep 作为要执行的程序的特殊标识符,以及 sysprep 用户名和 sysprep 密码作为凭据的详细信息,请参阅“客户机控制应用程序”。然后,Sysprep 将以所需的系统权限启动。

注意

无法指定 sysprep.exe 的位置。而是根据 Windows 版本使用以下路径:

  • Windows XP 及更早版本:C:\sysprep\sysprep.exe

  • Windows Vista 及更高版本:%WINDIR%\System32\sysprep\sysprep.exe

Guest Additions 将自动使用适当的路径执行系统准备工具。

Linux 和 Oracle Solaris 客户机高级配置

在 Linux 上手动设置选定客户服务

Oracle VirtualBox 客户机增强功能包含几个不同的驱动程序。如果您不想配置所有这些驱动程序,请使用以下命令安装客户机增强功能:

$ sh ./VBoxLinuxAdditions.run no_setup

运行此脚本后,以 root 身份运行 rcvboxadd setup 命令以编译内核模块。

在某些 64 位客户机上,必须将 lib 替换为 lib64。在不运行 udev 服务的较旧客户机上,必须将 vboxadd 服务添加到默认运行级别,以确保加载模块。

要设置时间同步服务,请将 vboxadd-service 服务添加到默认运行级别。要设置客户机增强功能的 X11 和 OpenGL 部分,请运行 rcvboxadd-x11 setup 命令。请注意,您不需要启用其他服务。

使用 rcvboxadd setup 重新编译客户机内核模块。

编译后,重新启动客户机以确保加载新模块。

客户机图形和鼠标驱动程序深入设置

本节假定您熟悉使用 xorg.conf 配置 X.Org 服务器,以及可选地使用 hal 或 udev 和 xorg.conf.d 的较新机制。如果不熟悉,您可以通过学习 X.Org 附带的文档来了解它们。

Oracle VirtualBox 客户机增强功能包括 X.Org 的驱动程序。默认情况下,这些驱动程序位于以下目录:

/opt/VBoxGuestAdditions-version/other/

X 服务器的正确版本将符号链接到 X.Org 驱动程序目录中。

为了使图形集成正常工作,X 服务器必须加载 vboxvideo 驱动程序。许多较新的 X 服务器版本会自动查找它,如果它们检测到它们正在 Oracle VirtualBox 中运行。为了获得最佳用户体验,必须加载客户机内核驱动程序,并且 VBoxClient 客户机增强功能工具必须作为客户端在 X 会话中运行。

为了使鼠标集成正常工作,必须加载客户机内核驱动程序。此外,对于旧版 X 服务器,必须加载正确的 vboxmouse 驱动程序并将其与 /dev/mouse 或 /dev/psaux 相关联。对于大多数客户机,必须加载 PS/2 鼠标的驱动程序,并且必须将正确的 vboxmouse 驱动程序与 /dev/vboxguest 相关联。

Oracle VirtualBox 客户机图形驱动程序可以使用任何图形配置,只要其虚拟分辨率适合分配给虚拟机的虚拟视频内存,减去少量由客户机驱动程序使用的内存,如“显示设置”中所述。该驱动程序将提供一系列标准模式,至少达到所有活动客户机显示器的默认客户机分辨率。可以通过为任何客户机显示器设置输出属性 VBOX_MODE 为“x”来更改默认模式。当 VBoxClient 和内核驱动程序处于活动状态时,当主机请求模式更改时,会自动完成此操作。旧版本的驱动程序只能通过定期查询主机请求来接收新模式。

对于 1.3 版本之前的旧版 X 服务器,您还可以将自己的模式添加到 X 服务器配置文件中。将它们添加到“Screen”部分的“Display”子部分的“Modes”列表中。例如,以下部分添加了一个自定义的 2048x800 分辨率模式:

Section "Screen"
        Identifier    "Default Screen"
        Device        "VirtualBox graphics card"
        Monitor       "Generic Monitor"
        DefaultDepth  24
        SubSection "Display"
                Depth         24
                Modes         "2048x800" "800x600" "640x480"
        EndSubSection
EndSection

CPU 热插拔

对于运行现代服务器操作系统的虚拟机,Oracle VirtualBox 支持 CPU 热插拔。

在物理计算机上,CPU 热插拔意味着可以在机器运行时添加或移除 CPU。Oracle VirtualBox 支持在虚拟机运行时添加和移除虚拟 CPU。

CPU 热插拔仅适用于支持此功能的客户机操作系统。到目前为止,这仅适用于 Linux 和 Windows Server。Windows 仅支持热插拔,而 Linux 支持热插拔和热移除。要将此功能用于超过 8 个 CPU,需要 64 位 Linux 客户机。

CPU 热插拔是通过 VBoxManage 命令行界面完成的。首先,需要为虚拟机启用热插拔:

$ VBoxManage modifyvm VM-name --cpu-hotplug on

--cpus 选项用于指定虚拟机可以拥有的最大 CPU 数量。

$ VBoxManage modifyvm VM-name --cpus 8

当虚拟机关闭时,您可以使用 VBoxManage modifyvm --plug-cpu 和 VBoxManage modifyvm --unplug-cpu 命令添加和移除虚拟 CPU,这两个命令都以虚拟 CPU 的编号作为参数,如下所示:

$ VBoxManage modifyvm VM-name --plug-cpu 3
$ VBoxManage modifyvm VM-name --unplug-cpu 3

请注意,CPU 0 永远无法移除。

在虚拟机运行时,可以通过 VBoxManage controlvm plugcpu 和 VBoxManage controlvm unplugcpu 命令来添加和移除 CPU,如下所示:

$ VBoxManage controlvm VM-name plugcpu 3
$ VBoxManage controlvm VM-name unplugcpu 3

有关详细信息,请参阅 VBoxManage modifyvm 和 VBoxManage controlvm。

对于 Linux 客户机,适用以下情况

为防止在 CPU 仍在使用时弹出,必须先在客户机内弹出。Linux 客户机增强功能包含一个接收热移除事件并弹出 CPU 的服务。此外,在向虚拟机添加 CPU 后,Linux 不会自动使用它。如果安装了 Linux 客户机增强功能服务,该服务将负责处理。如果没有,可以使用以下命令启动 CPU:

$ echo 1 > /sys/devices/system/cpu/cpu<id>/online

网络摄像头直通

在客户机中使用主机网络摄像头

Oracle VirtualBox 包含一个名为“网络摄像头直通”的功能,该功能允许客户机使用主机的网络摄像头。这补充了通用的 USB 直通支持,而 USB 直通支持是在旧版本中使用主机网络摄像头的典型方式。网络摄像头直通支持理论上可以处理非 USB 视频源,但这未经任何测试。

注意

网络摄像头直通模块作为 Oracle VirtualBox Extension Pack 的一部分提供,必须单独安装。请参阅“安装 Oracle VirtualBox 和 Extension Pack”。

可以通过 VM 菜单栏中的“设备”菜单将主机网络摄像头连接到 VM。网络摄像头菜单包含主机上可用视频输入设备的列表。单击网络摄像头名称会连接或断开相应的主机设备。

可以使用 VBoxManage 命令行工具启用网络摄像头直通。有关其他详细信息,请参阅下面的特定于主机的部分。可以使用以下命令:

  • 获取主机网络摄像头或其他视频输入设备的列表

    $ VBoxManage list webcams

    输出格式如下

    alias "user friendly name"
    host path or identifier

    别名可以在其他命令中用作快捷方式。别名“.0”表示主机上的默认视频输入设备。别名“.1”、“.2”表示第一个、第二个视频输入设备,依此类推。设备顺序是主机特定的。

  • 将网络摄像头连接到正在运行的 VM,如下所示

    VBoxManage controlvm VM name webcam attach [host_path|alias [settings]]

    这将 USB 网络摄像头设备连接到客户机。

    settings 参数是一个字符串 Setting1=Value1;Setting2=Value2,它允许您配置模拟的网络摄像头设备。支持以下设置:

    • MaxFramerate:发送到客户机的视频帧的最高速率。更高的帧速率需要更多的 CPU 功率。因此,有时设置一个较低的限制是有用的。默认情况下不限制,允许客户机使用主机网络摄像头支持的所有帧速率。

    • MaxPayloadTransferSize:模拟的网络摄像头一次可以发送到客户机的字节数。默认值为 3060 字节,一些网络摄像头使用此值。较高的值可以稍微降低 CPU 负载,如果客户机能够使用更大的缓冲区。但是,一些客户机可能不支持较高的 MaxPayloadTransferSize。

  • 从正在运行的 VM 中分离网络摄像头,如下所示

    VBoxManage controlvm VM-name webcam detach [host_path|alias]
  • 列出连接到正在运行的 VM 的网络摄像头,如下所示

    VBoxManage controlvm VM-name webcam list

    输出包含在 webcam attach 命令中用于每个已连接网络摄像头的路径或别名。

Windows 主机

当网络摄像头设备从主机分离时,模拟的网络摄像头设备会自动从客户机分离。

macOS 主机

当网络摄像头设备与主机断开连接时,模拟的网络摄像头设备仍连接到客户机,并且必须使用 VBoxManage controlvm VM-name webcam detach 命令手动断开连接。

Linux 和 Oracle Solaris 主机

当网络摄像头与主机断开连接时,仅当网络摄像头正在流式传输视频时,模拟的网络摄像头设备才会自动从客户机断开连接。如果模拟的网络摄像头不活动,应使用 VBoxManage controlvm VM-name webcam detach 命令手动断开连接。

别名 .0 和 .1 映射到 /dev/video0,别名 .2 映射到 /dev/video1,依此类推。

高级显示配置

自定义 VESA 分辨率

除了标准的 VESA 分辨率外,Oracle VirtualBox VESA BIOS 还允许您添加多达 16 种自定义视频模式,这些模式将报告给客户机操作系统。当使用带有 Oracle VirtualBox 客户机增强功能的 Windows 客户机时,将使用自定义图形驱动程序而不是回退 VESA 解决方案,因此此信息不适用。

可以通过 extra data 设施为每个 VM 配置额外的视频模式。extra data 键称为 CustomVideoModex,其中 x 是从 1 到 16 的数字。请注意,模式将从 1 读取,直到下一个数字未定义或达到 16。以下示例添加了一个视频模式,该模式对应于许多笔记本电脑的本机显示分辨率:

$ VBoxManage setextradata VM-name "CustomVideoMode1" "1400x1050x16"

自定义视频模式的 VESA 模式 ID 从 0x160 开始。为了使用上面定义的自定义视频模式,必须向 Linux 提供以下命令行:

vga = 0x200 | 0x160
vga = 864

对于安装了客户机增强功能的客户机操作系统,可以使用视频模式提示功能设置自定义视频模式。

使用图形前端时配置客户机的最大分辨率

当使用图形前端(即 Oracle VirtualBox 应用程序)启动安装了客户机增强功能的客户机系统时,除非用户手动调整屏幕分辨率(通过拖动窗口、切换到全屏或无缝模式或使用 VBoxManage 发送视频模式提示),否则不允许它们使用大于主机屏幕尺寸的屏幕分辨率。大多数用户希望如此,但如果您有不同的需求,可以通过从命令行发出以下命令之一来更改它:

  • 移除客户机分辨率的所有限制。

    VBoxManage setextradata global GUI/MaxGuestResolution any
  • 手动指定最大分辨率。

    VBoxManage setextradata global GUI/MaxGuestResolution widthxheight
                            
  • 将所有客户机 VM 恢复到默认设置。

    VBoxManage setextradata global GUI/MaxGuestResolution auto

高级存储配置

从客户机使用裸主机硬盘

作为使用虚拟磁盘映像(如“虚拟存储”中所述)的替代方法,Oracle VirtualBox 还可以将整个物理硬盘或选定的分区作为虚拟磁盘呈现给虚拟机。

在 Oracle VirtualBox 中,此类访问称为“原始硬盘访问”。它允许客户机操作系统在不经过主机操作系统文件系统的情况下访问其虚拟硬盘。与映像文件相比,原始磁盘的实际性能差异很大,具体取决于主机文件系统的开销、是否使用动态增长映像以及主机操作系统的缓存策略。缓存也间接影响其他方面,例如故障行为。例如,虚拟磁盘是否包含在主机操作系统崩溃之前写入的所有数据。有关详细信息,请参阅您的主机操作系统文档。

注意

原始硬盘访问仅适用于专家用户。不正确的使用或过时的配置可能导致物理磁盘上的数据完全丢失。最重要的是,请勿尝试在客户机中引导当前运行的主机操作系统的分区。这会导致严重的数据损坏。

原始硬盘访问(包括整个磁盘和单个分区)都作为 VMDK 映像格式支持的一部分来实现。因此,您需要创建一个特殊的 VMDK 映像文件来定义数据的存储位置。创建此类特殊 VMDK 映像后,您可以像常规虚拟磁盘映像一样使用它。例如,您可以使用虚拟介质管理器或 VBoxManage 将映像分配给虚拟机。

访问整个物理硬盘

虽然此变体设置起来最简单,但您必须注意,这将使客户机操作系统能够直接完全访问整个物理磁盘。如果您的主机操作系统也是从该磁盘启动的,请务必不要让客户机访问该分区。从好的方面来看,物理磁盘可以以任意方式重新分区,而无需重新创建用于访问原始磁盘的映像文件。

在 Linux 主机上,要创建一个表示整个物理硬盘的映像(该映像不会包含任何实际数据,因为所有数据都将存储在物理磁盘上),请使用以下命令

$ VBoxManage createmedium disk --filename path-to-file.vmdk --format=VMDK
 --variant RawDisk --property RawDrive=/dev/sda

这将创建 path-to-file.vmdk 文件映像,该映像必须是绝对路径。所有数据都从 /dev/sda 读取和写入。

在 Windows 主机上,可以使用 \\.\PhysicalDrive0 代替上述设备规范。在 macOS 主机上,可以使用 /dev/rdisk1 代替上述设备规范。请注意,在 Mac OS X 上,只有在没有从中挂载卷的磁盘上才能访问整个磁盘。

创建映像需要对给定设备进行读/写访问。稍后从虚拟机使用映像时也需要读/写访问。在某些主机平台(如 Windows)上,原始磁盘访问可能会受到限制,并且在某些情况下可能不被主机操作系统允许。

就像常规磁盘映像一样,这不会自动将新创建的映像附加到虚拟机。这可以按如下方式完成

$ VBoxManage storageattach WindowsXP --storagectl "IDE Controller" \
 --port 0 --device 0 --type hdd --medium path-to-file.vmdk

完成此操作后,选定的虚拟机将从指定的物理磁盘启动。

访问单个物理硬盘分区

此“原始分区支持”与上面描述的完整硬盘访问非常相似。但是,在这种情况下,所有分区信息都将存储在 VMDK 映像中。这意味着您可以安装不同的引导加载程序到虚拟硬盘中,而不会影响主机的分区信息。虽然客户机将能够看到物理磁盘上的所有分区,但访问将受到过滤,即读取未被允许访问的分区将只产生零,而写入它们的操作将被忽略。

要创建一个用于裸分区支持的特殊映像,该映像将包含少量数据,在 Linux 主机上,使用命令

$ VBoxManage createmedium disk --filename path-to-file.vmdk --format=VMDK
--variant RawDisk --property RawDrive=/dev/sda --property Partitions=1,5

命令与完整硬盘访问的命令相同,只是额外增加了 --property Partitions=1,5 参数。此示例将创建 path-to-file.vmdk 文件映像,该映像必须是绝对路径,并且 /dev/sda 的分区 1 和 5 将对客户机可访问。

Oracle VirtualBox 使用与您的 Linux 主机相同的分区编号。因此,上面示例中给出的数字分别是指第一个主分区和扩展分区中的第一个逻辑驱动器。

在 Windows 主机上,可以使用 \\.\PhysicalDrive0 代替上述设备规范。在 macOS 主机上,可以使用 /dev/rdisk1 代替上述设备规范。请注意,在 OS X 上,只能使用未挂载的分区。请先使用 diskutil unmountDisk /dev/diskX 卸载相应磁盘。分区编号在 Linux、Windows 和 macOS 主机上是相同的。

分区列表的编号可以从以下命令的输出中获取

$ VBoxManage list hostdrives

输出列出了可用驱动器及其分区,并带有分区类型和大小,以便用户能够识别客户机所需的分区。

提供对单个分区进行访问的映像特定于特定的主机磁盘设置。您无法将这些映像传输到其他主机。另外,每当主机分区发生更改时,都必须重新创建映像。

创建映像需要对给定设备进行读/写访问。稍后从虚拟机使用映像时也需要读/写访问。如果这不可行,则有一个特殊的原始分区访问变体(目前仅在 Linux 主机上可用),它避免了给当前用户访问整个磁盘的需要。要设置此类映像,请使用:

$ VBoxManage createmedium disk --filename path-to-file.vmdk --format=VMDK
--variant RawDisk --property RawDrive=/dev/sda --property Partitions=1,5
--property Relative=1

从虚拟机使用时,映像将指向单个分区,而不是整个磁盘。在此示例中,是 /dev/sda1 和 /dev/sda5。因此,只需要对受影响的分区进行读/写访问,而不是对整个磁盘进行访问。但是,在创建期间,需要对整个磁盘进行只读访问以获取分区信息。

在某些配置中,可能需要更改所创建映像的 MBR 代码。例如,用另一个引导加载程序替换主机上使用的 Linux 引导加载程序。例如,这使得客户机可以直接引导到 Windows,而主机从“同一”磁盘引导 Linux。为此,提供了 --property-file BootSector= 参数。它指定了一个从中获取 MBR 代码的文件名。分区表根本不会被修改,因此可以使用具有完全不同分区的系统的 MBR 文件。例如:

$ VBoxManage createmedium disk --filename path-to-file.vmdk --format=VMDK
--variant RawDisk --property RawDrive=/dev/sda --property Partitions=1,5
--property-file BootSector=winxp.mbr

修改后的 MBR 将存储在映像内部,而不是主机磁盘上。

创建的映像可以像往常一样附加到 VM 配置中的存储控制器。

配置硬盘供应商产品数据 (VPD)

Oracle VirtualBox 会报告其虚拟硬盘的供应商产品数据,其中包括硬盘序列号、固件修订版和型号。这些可以通过以下命令进行更改:

$ VBoxManage setextradata VM-name \
"VBoxInternal/Devices/ahci/0/Config/Port0/SerialNumber" "serial"
$ VBoxManage setextradata VM-name \
"VBoxInternal/Devices/ahci/0/Config/Port0/FirmwareRevision" "firmware"
$ VBoxManage setextradata VM-name \
"VBoxInternal/Devices/ahci/0/Config/Port0/ModelNumber" "model"

序列号是 20 字节的字母数字字符串,固件修订版是 8 字节的字母数字字符串,型号是 40 字节的字母数字字符串。在 Port0(指第一个端口)处,指定所需的 SATA 硬盘端口。

上述命令适用于带有 AHCI (SATA) 控制器的虚拟机。带有 IDE 控制器的虚拟机的命令是

$ VBoxManage setextradata VM-name \
"VBoxInternal/Devices/piix3ide/0/Config/PrimaryMaster/SerialNumber" "serial"
$ VBoxManage setextradata VM-name \
"VBoxInternal/Devices/piix3ide/0/Config/PrimaryMaster/FirmwareRevision" "firmware"
$ VBoxManage setextradata VM-name \
"VBoxInternal/Devices/piix3ide/0/Config/PrimaryMaster/ModelNumber" "model"

对于硬盘,您可以使用以下命令将驱动器标记为具有非旋转介质:

$ VBoxManage setextradata VM-name \
"VBoxInternal/Devices/ahci/0/Config/Port0/NonRotational" "1"

CD/DVD 驱动器需要另外三个参数来报告供应商产品数据

$ VBoxManage setextradata VM-name \
"VBoxInternal/Devices/ahci/0/Config/Port0/ATAPIVendorId" "vendor"
VBoxManage setextradata VM-name \
"VBoxInternal/Devices/ahci/0/Config/Port0/ATAPIProductId" "product"
VBoxManage setextradata VM-name \
"VBoxInternal/Devices/ahci/0/Config/Port0/ATAPIRevision" "revision"

供应商 ID 是 8 字节的字母数字字符串,产品 ID 是 16 字节的字母数字字符串,修订版是 4 字节的字母数字字符串。在 Port0(指第一个端口)处,指定所需的 SATA 硬盘端口。

使用内部网络访问 iSCSI 目标

作为一项实验性功能,Oracle VirtualBox 支持访问在配置为使用内部网络模式的虚拟机中运行的 iSCSI 目标。请参阅“iSCSI 服务器”、“内部网络”和“VBoxManage storageattach”。

访问内部网络的 IP 堆栈必须在访问 iSCSI 目标的虚拟机中进行配置。必须选择一个免费的静态 IP 和一个未被其他虚拟机使用的 MAC 地址。在下面的示例中,请根据您的需要调整虚拟机名称、MAC 地址、IP 配置和内部网络名称(MyIntNet)。必须先发出以下八条命令:

$ VBoxManage setextradata VM-name \
VBoxInternal/Devices/IntNetIP/0/Trusted 1
$ VBoxManage setextradata VM-name \
VBoxInternal/Devices/IntNetIP/0/Config/MAC 08:00:27:01:02:0f
$ VBoxManage setextradata VM-name \
VBoxInternal/Devices/IntNetIP/0/Config/IP 10.0.9.1
$ VBoxManage setextradata VM-name \
VBoxInternal/Devices/IntNetIP/0/Config/Netmask 255.255.255.0
$ VBoxManage setextradata VM-name \
VBoxInternal/Devices/IntNetIP/0/LUN#0/Driver IntNet
$ VBoxManage setextradata VM-name \
VBoxInternal/Devices/IntNetIP/0/LUN#0/Config/Network MyIntNet
$ VBoxManage setextradata VM-name \
VBoxInternal/Devices/IntNetIP/0/LUN#0/Config/TrunkType 2
$ VBoxManage setextradata VM-name \
VBoxInternal/Devices/IntNetIP/0/LUN#0/Config/IsService 1

最后,必须使用 --intnet 选项附加 iSCSI 磁盘,以告知 iSCSI 启动器使用内部网络,如下所示:

$ VBoxManage storageattach ... --medium iscsi --server 10.0.9.30 \
--target iqn.2008-12.com.sun:sampletarget --intnet

与常规 iSCSI 设置相比,目标的 IP 地址必须指定为数字 IP 地址,因为内部网络没有 DNS 解析器。

iSCSI 目标虚拟机应在启动使用它的 VM 之前启动。如果启动使用 iSCSI 磁盘的虚拟机而没有启动 iSCSI 目标,则检测此情况最多可能需要 200 秒。VM 将无法启动。

精细调整 Oracle VirtualBox NAT 引擎

配置 NAT 网络接口的地址

在 NAT 模式下,客户机网络接口默认分配给 IPv4 地址范围 10.0.x.0/24,其中 x 对应于 NAT 接口的实例+2。因此,当只有一个 NAT 实例处于活动状态时,x 为 2。在这种情况下,客户机被分配到地址 10.0.2.15,网关设置为 10.0.2.2,名称服务器位于 10.0.2.3。

如果需要更改 NAT 网络,请使用以下命令

$ VBoxManage modifyvm VM-name \
--natnet1 "192.168/16"

此命令将网络地址从 192.168.0.0 到 192.168.254.254 保留给 VM-name 的第一个 NAT 网络实例。客户机 IP 将分配给 192.168.0.15,默认网关位于 192.168.0.2。

配置 NAT 网络接口的启动服务器(Next Server)

对于 NAT 模式下的网络启动,默认情况下 Oracle VirtualBox 使用 IP 地址 10.0.2.4 上的内置 TFTP 服务器。此默认行为对于典型的远程启动场景应该很好。但是,可以通过以下命令更改启动服务器 IP 和启动映像的位置:

$ VBoxManage modifyvm VM-name \
--nattftpserver1 10.0.2.2
$ VBoxManage modifyvm VM-name \
--nattftpfile1 /srv/tftp/boot/MyPXEBoot.pxe

在 NAT 模式下启用 DNS 代理

NAT引擎默认向客户机提供与主机配置相同的DNS服务器。在某些场景下,隐藏DNS服务器IP地址对客户机是合适的,例如当主机上的信息可能因DHCP租约过期而更改时。在这种情况下,您可以使用以下命令让NAT引擎充当DNS代理。

$ VBoxManage modifyvm VM-name --natdnsproxy1 on

在 NAT 模式下使用主机的解析器作为 DNS 代理

在网络名称解析方面,NAT引擎的DHCP服务器会提供主机已注册DNS服务器的列表。如果出于某种原因,您需要隐藏此DNS服务器列表并使用主机的解析器设置,从而强制Oracle VirtualBox NAT引擎拦截DNS请求并将其转发到主机的解析器,请使用以下命令。

$ VBoxManage modifyvm VM-name --natdnshostresolver1 on

请注意,此设置类似于DNS代理模式,但代理模式仅将DNS请求转发到适当的服务器,而解析器模式将解释DNS请求并使用主机的DNS API来查询信息并将其返回给客户机。

用户定义的主机名解析

在某些情况下,拦截名称解析机制,在特定的DNS请求上提供用户定义的IP地址可能很有用。拦截机制使用户不仅能够映射单个主机,还可以根据需要映射域甚至更复杂的命名约定。

以下命令设置了一个将名称映射到指定 IP 的规则

VBoxManage setextradata VM-name \
"VBoxInternal/Devices/{pcnet,e1000}/0/LUN#0/AttachedDriver/Config/HostResolverMappings/ \
unique-rule-name-of-interception-rule/HostIP" IPv4

VBoxManage setextradata VM-name \
"VBoxInternal/Devices/{pcnet,e1000}/0/LUN#0/AttachedDriver/Config/HostResolverMappings/ \
unique-rule-name/HostName" hostname
                     

以下命令设置一个将模式名称映射到指定 IP 的规则

VBoxManage setextradata VM-name \
"VBoxInternal/Devices/{pcnet,e1000}/0/LUN#0/AttachedDriver/Config/HostResolverMappings/ \
unique-rule-name/HostIP" IPv4

VBoxManage setextradata VM-name \
"VBoxInternal/Devices/{pcnet,e1000}/0/LUN#0/AttachedDriver/Config/HostResolverMappings/ \
unique-rule-name/HostNamePattern" hostpattern
                     

主机名模式可以包含以下通配符:竖线(|)、问号(?)和星号(*)。

此示例演示如何指示主机解析器机制将 www.blocked-site.info 网站的所有域和可能的一些镜像解析为 IP 127.0.0.1

$ VBoxManage setextradata VM-name \
"VBoxInternal/Devices/e1000/0/LUN#0/AttachedDriver/Config/HostResolverMappings/all_blocked_site/HostIP" 127.0.0.1
$ VBoxManage setextradata VM-name \
"VBoxInternal/Devices/e1000/0/LUN#0/AttachedDriver/Config/HostResolverMappings/all_blocked_site/HostNamePattern" "*.blocked-site.*|*.fb.org"

主机解析器机制应启用用户定义映射规则,否则它们将不起作用。

配置 NAT 引擎的别名

默认情况下,NAT核心使用别名,并在生成连接别名时使用随机端口。这对于SSH、FTP等大多数协议效果很好。尽管某些协议可能需要更透明的行为,或者可能依赖于发送数据包的实际端口号。您可以使用以下命令更改NAT模式。

$ VBoxManage modifyvm VM-name \
--nataliasmode1 proxyonly
$ VBoxManage modifyvm "Linux Guest" --nataliasmode1 sameports

第一个示例禁用别名并切换 NAT 到透明模式,第二个示例强制保留端口值。这些模式可以在必要时组合使用。

配置 BIOS DMI 信息

Oracle VirtualBox提供的DMI数据可以针对特定虚拟机进行更改。使用以下命令配置DMI BIOS信息。如果您的虚拟机配置为使用EFI固件,则需要将键中的pcibios替换为efi

  • DMI BIOS 信息(类型 0)

    $ VBoxManage setextradata VM-name \
    "VBoxInternal/Devices/pcbios/0/Config/DmiBIOSVendor"        "BIOS Vendor"
    $ VBoxManage setextradata VM-name \
    "VBoxInternal/Devices/pcbios/0/Config/DmiBIOSVersion"       "BIOS Version"
    $ VBoxManage setextradata VM-name \
    "VBoxInternal/Devices/pcbios/0/Config/DmiBIOSReleaseDate"   "BIOS Release Date"
    $ VBoxManage setextradata VM-name \
    "VBoxInternal/Devices/pcbios/0/Config/DmiBIOSReleaseMajor"  1
    $ VBoxManage setextradata VM-name \
    "VBoxInternal/Devices/pcbios/0/Config/DmiBIOSReleaseMinor"  2
    $ VBoxManage setextradata VM-name \
    "VBoxInternal/Devices/pcbios/0/Config/DmiBIOSFirmwareMajor" 3
    $ VBoxManage setextradata VM-name \
    "VBoxInternal/Devices/pcbios/0/Config/DmiBIOSFirmwareMinor" 4
  • DMI 系统信息(类型 1)

    $ VBoxManage setextradata VM-name \
    "VBoxInternal/Devices/pcbios/0/Config/DmiSystemVendor"      "System Vendor"
    $ VBoxManage setextradata VM-name \
    "VBoxInternal/Devices/pcbios/0/Config/DmiSystemProduct"     "System Product"
    $ VBoxManage setextradata VM-name \
    "VBoxInternal/Devices/pcbios/0/Config/DmiSystemVersion"     "System Version"
    $ VBoxManage setextradata VM-name \
    "VBoxInternal/Devices/pcbios/0/Config/DmiSystemSerial"      "System Serial"
    $ VBoxManage setextradata VM-name \
    "VBoxInternal/Devices/pcbios/0/Config/DmiSystemSKU"         "System SKU"
    $ VBoxManage setextradata VM-name \
    "VBoxInternal/Devices/pcbios/0/Config/DmiSystemFamily"      "System Family"
    $ VBoxManage setextradata VM-name \
    "VBoxInternal/Devices/pcbios/0/Config/DmiSystemUuid" \
    "9852bf98-b83c-49db-a8de-182c42c7226b"
  • DMI 主板信息(类型 2)

    $ VBoxManage setextradata VM-name \
    "VBoxInternal/Devices/pcbios/0/Config/DmiBoardVendor"       "Board Vendor"
    $ VBoxManage setextradata VM-name \
    "VBoxInternal/Devices/pcbios/0/Config/DmiBoardProduct"      "Board Product"
    $ VBoxManage setextradata VM-name \
    "VBoxInternal/Devices/pcbios/0/Config/DmiBoardVersion"      "Board Version"
    $ VBoxManage setextradata VM-name \
    "VBoxInternal/Devices/pcbios/0/Config/DmiBoardSerial"       "Board Serial"
    $ VBoxManage setextradata VM-name \
    "VBoxInternal/Devices/pcbios/0/Config/DmiBoardAssetTag"     "Board Tag"
    $ VBoxManage setextradata VM-name \
    "VBoxInternal/Devices/pcbios/0/Config/DmiBoardLocInChass"   "Board Location"
    $ VBoxManage setextradata VM-name \
    "VBoxInternal/Devices/pcbios/0/Config/DmiBoardBoardType"    10
  • DMI 系统机箱或外壳(类型 3)

    $ VBoxManage setextradata VM-name \
    "VBoxInternal/Devices/pcbios/0/Config/DmiChassisVendor"     "Chassis Vendor"
    $ VBoxManage setextradata VM-name \
    "VBoxInternal/Devices/pcbios/0/Config/DmiChassisType"       3
    $ VBoxManage setextradata VM-name \
    "VBoxInternal/Devices/pcbios/0/Config/DmiChassisVersion"    "Chassis Version"
    $ VBoxManage setextradata VM-name \
    "VBoxInternal/Devices/pcbios/0/Config/DmiChassisSerial"     "Chassis Serial"
    $ VBoxManage setextradata VM-name \
    "VBoxInternal/Devices/pcbios/0/Config/DmiChassisAssetTag"   "Chassis Tag"
  • DMI 处理器信息(类型 4)

    $ VBoxManage setextradata VM-name \
    "VBoxInternal/Devices/pcbios/0/Config/DmiProcManufacturer"  "GenuineIntel"
    $ VBoxManage setextradata VM-name \
    "VBoxInternal/Devices/pcbios/0/Config/DmiProcVersion"       "Pentium(R) III"
  • DMI OEM 字符串(类型 11)

    $ VBoxManage setextradata VM-name \
    "VBoxInternal/Devices/pcbios/0/Config/DmiOEMVBoxVer"        "vboxVer_1.2.3"
    $ VBoxManage setextradata VM-name \
    "VBoxInternal/Devices/pcbios/0/Config/DmiOEMVBoxRev"        "vboxRev_12345"

如果未设置DMI字符串,则使用Oracle VirtualBox的默认值。要设置空字符串,请使用"<EMPTY>"

请注意,在上面的列表中,所有带引号的参数(DmiBIOSVendor、DmiBIOSVersion,但不包括DmiBIOSReleaseMajor)都应为字符串。如果此类字符串是有效数字,则该参数将被视为数字,并且虚拟机很可能会因VERR_CFGM_NOT_STRING错误而无法启动。在这种情况下,请使用"string:value"。例如:

$ VBoxManage setextradata VM-name \
"VBoxInternal/Devices/pcbios/0/Config/DmiSystemSerial"      "string:1234"

更改此信息可能需要将主机的 DMI 信息提供给客户机,以防止 Windows 要求新的产品密钥。在 Linux 主机上,DMI BIOS 信息可以通过以下命令获取

$ dmidecode -t0

DMI 系统信息可以通过以下方式获取

$ dmidecode -t1

配置自定义 ACPI 表

您可以配置Oracle VirtualBox向客户机提供最多四个自定义ACPI表。使用类似以下命令来配置自定义ACPI表。请注意,除了CustomTable0之外,还有CustomTable1CustomTable2CustomTable3

$ VBoxManage setextradata VM-name \
"VBoxInternal/Devices/acpi/0/Config/CustomTable0" "/path-to-table.bin"

配置自定义ACPI表可以避免在Windows Vista、Windows 7、Windows 8及更高版本客户机上要求新的产品密钥。在Linux主机上,可以使用/sys/firmware/acpi/tables/读取系统的ACPI表之一。

精细调整计时器和时间同步

配置客户机时间戳计数器 (TSC) 以反映客户机执行

默认情况下,Oracle VirtualBox会将所有对客户机可见的时间源同步到单个时间源,即单调主机时间。这反映了许多客户机操作系统的假设,它们期望所有时间源都反映“挂钟”时间。但在特殊情况下,让客户机中的时间戳计数器(TSC)反映实际执行客户机所花费的时间可能很有用。

这种特殊的 TSC 处理模式可以按 VM 启用,为获得最佳结果,必须仅与硬件虚拟化结合使用。要启用此模式,请使用以下命令

$ VBoxManage setextradata VM-name "VBoxInternal/TM/TSCTiedToExecution" 1

要恢复到默认的 TSC 处理模式,请使用

$ VBoxManage setextradata VM-name "VBoxInternal/TM/TSCTiedToExecution"

请注意,如果您将特殊的TSC处理模式与非常严格地遵循时间源一致性的客户机操作系统一起使用,您可能会收到有关时间不一致的警告或错误消息。它还可能导致某些客户机操作系统上的时钟不可靠,具体取决于它们如何使用TSC。

加速或减慢客户机时钟

出于某些目的,加快或减慢虚拟客户机时钟可能很有用。这可以通过以下方式实现

$ VBoxManage setextradata VM-name "VBoxInternal/TM/WarpDrivePercentage" 200

以上示例将使客户机时钟速度加倍,而

$ VBoxManage setextradata VM-name "VBoxInternal/TM/WarpDrivePercentage" 50

将使客户机时钟速度减半。请注意,更改虚拟时钟速率可能会混淆客户机,甚至可能导致客户机行为异常。例如,更高的时钟速率意味着虚拟设备的超时时间更短,导致由于主机负载增加而导致的虚拟设备响应时间略有增加,可能会导致客户机故障。请进一步注意,任何时间同步机制都会尝试频繁地将客户机时钟与参考时钟重新同步,如果Oracle VirtualBox Guest Additions处于活动状态,则参考时钟为主机时钟。因此,如果如上所述更改了客户机时钟速率,则应禁用任何时间同步。请参阅调整客户机添加时间同步参数

调整客户增强功能时间同步参数

Oracle VirtualBox Guest Additions确保客户机的系统时间与主机时间同步。有几个参数可以进行调整。可以使用以下命令为特定VM设置参数。

$ VBoxManage guestproperty set VM-name "/VirtualBox/GuestAdd/VBoxService/property" value
                  

property是以下之一。

--timesync-interval

指定与主机同步时间的时间间隔。默认值为 10000 毫秒(10 秒)。

--timesync-min-adjust

进行调整的最小绝对漂移值(以毫秒为单位)。OS/2 上的默认值为 1000 毫秒,其他地方为 100 毫秒。

--timesync-latency-factor

将时间查询延迟乘以的因子,以计算动态最小调整时间。默认值为 8 倍,这意味着如下所示

测量确定主机时间所需的时间,客户机必须联系VM主机服务,这可能需要一些时间。将此值乘以8,并且仅在主机和客户机之间的时间差大于此值时才进行调整。否则,请勿进行任何时间调整。

--timesync-max-latency

可接受的最大主机计时器查询延迟。默认值为 250 毫秒。

--timesync-set-threshold

绝对漂移阈值,以毫秒为单位,表示何时开始设置时间而不是尝试平滑调整。默认值为 20 分钟。

--timesync-set-start

启动时间同步服务时设置时间。

--timesync-set-on-restore 0|1

当参数为 1 时,从保存状态恢复 VM 后设置时间。这是默认值。通过传递 0 禁用。在后一种情况下,时间将平滑调整,这可能需要很长时间。

所有这些参数也可以作为VBoxService的命令行参数进行指定。

禁用客户增强功能时间同步

安装并启动Oracle VirtualBox Guest Additions后,它将尝试将客户机时间与主机时间同步。可以通过阻止客户机服务读取主机时钟来防止这种情况。

$ VBoxManage setextradata VM-name "VBoxInternal/Devices/VMMDev/0/Config/GetHostTimeDisabled" 1

在 Oracle Solaris 11 主机上安装备用桥接网络驱动程序

Oracle VirtualBox包含一个网络过滤器驱动程序,该驱动程序利用Oracle Solaris 11的Crossbow功能。默认情况下,此新驱动程序会为支持它的Oracle Solaris 11主机安装。

要在安装Oracle VirtualBox软件包之前强制安装旧的基于STREAMS的网络过滤器驱动程序,请以root身份执行以下命令。

$ touch /etc/vboxinst_vboxflt

要在安装Oracle VirtualBox软件包之前强制安装基于Crossbow的网络过滤器驱动程序,请以root身份执行以下命令。

$ touch /etc/vboxinst_vboxbow

要检查Oracle VirtualBox当前使用的驱动程序,请执行。

$ modinfo | grep vbox

如果输出包含vboxbow,则表示Oracle VirtualBox正在使用Crossbow网络过滤器驱动程序,而名称vboxflt表示使用旧的STREAMS网络过滤器。

Oracle VirtualBox VLAN上的VNIC模板用于Oracle Solaris 11主机。

Oracle VirtualBox支持用于在VLAN上配置VM的虚拟网络接口(VNIC)模板。Oracle VirtualBox VNIC模板是一个以vboxvnic_template开头的VNIC。该字符串区分大小写。

在 Oracle Solaris 11 主机上,当使用基于 Crossbow 的桥接网络时,VNIC 模板可用于指定在通过网络链接进行桥接时要使用的 VLAN ID。

以下是如何使用VNIC模板在VLAN上配置VM的示例。通过以root身份执行以下命令,创建Oracle VirtualBox VNIC模板。

# dladm create-vnic -t -l nge0 -v 23 vboxvnic_template0

这将创建一个临时的VNIC模板,该模板连接到接口nge0,VLAN ID为23。要创建跨主机重新启动持久化的VNIC模板,请在上述命令中省略-t参数。您可以使用以下命令检查链接的当前状态。

$ dladm show-link
LINK        CLASS     MTU    STATE    BRIDGE     OVER
nge0        phys      1500   up       --         --
nge1        phys      1500   down     --         --
vboxvnic_template0 vnic 1500 up       --         nge0

$ dladm show-vnic
LINK         OVER         SPEED  MACADDRESS        MACADDRTYPE         VID
vboxvnic_template0 nge0   1000   2:8:20:25:12:75   random              23

创建VNIC模板后,需要连接到VLAN 23(通过接口nge0)的任何VM都可以配置为使用此VNIC模板进行桥接。

VNIC模板使VLAN上的VM管理更简单高效。VLAN详细信息不存储在每个VM的配置中,而是 VM启动时从VNIC模板继承。VNIC模板本身可以使用dladm命令随时修改。

VNIC 模板可以创建额外的属性,例如带宽限制和 CPU 扇出。有关详细信息,请参阅您的 Oracle Solaris 网络文档。这些附加属性也适用于使用 VNIC 模板进行桥接的 VM。

在 Oracle Solaris 主机上配置多个仅主机网络接口

默认情况下,Oracle VirtualBox提供一个主机专用网络接口。在Oracle Solaris主机上添加更多主机专用网络接口需要手动配置。以下是如何添加另一个主机专用网络接口。

首先停止所有正在运行的 VM。然后,以 root 身份执行以下命令,卸载现有的“vboxnet0”接口

# ifconfig vboxnet0 unplumb

如果您有多个 vboxnet 接口,则需要全部卸载它们。一旦所有 vboxnet 接口都已卸载,请以 root 身份执行以下命令来移除驱动程序

# rem_drv vboxnet

编辑文件/platform/i86pc/kernel/drv/vboxnet.conf,并为我们要添加的新接口添加一行,如下所示。

name="vboxnet" parent="pseudo" instance=1;
name="vboxnet" parent="pseudo" instance=2;

根据需要添加任意多行,每行都具有唯一的实例号。

接下来,以 root 身份执行以下命令重新加载 vboxnet 驱动程序

# add_drv vboxnet

在 Oracle Solaris 11.1 及更新版本的主机上,您可能需要重命名默认的虚名接口名称。要检查已分配的名称,请执行

$ dladm show-phys
LINK              MEDIA                STATE      SPEED  DUPLEX    DEVICE
net0              Ethernet             up         100    full      e1000g0
net2              Ethernet             up         1000   full      vboxnet1
net1              Ethernet             up         1000   full      vboxnet0

在上面的示例中,在继续安装接口之前,我们可以将“net2”重命名为“vboxnet1”。这可以通过以 root 身份执行以下命令来完成

# dladm rename-link net2 vboxnet1

现在,使用ifconfig vboxnetX plumb来关联所有接口,其中X在这种情况下为1。一旦接口被关联,它就可以像任何其他网络接口一样进行配置。有关更多详细信息,请参阅ifconfig文档。

为了使新添加接口的设置在重新启动后保持不变,您需要编辑文件/etc/inet/netmasks,如果您正在使用NWAM,则还需要编辑/etc/nwam/llp,并为每个接口添加适当的条目以设置子网掩码和静态IP。Oracle VirtualBox安装程序仅为它默认创建的“vboxnet0”接口更新这些配置文件。

配置Oracle Solaris主机上的Oracle VirtualBox CoreDumper。

Oracle VirtualBox能够生成自己的核心文件,以便在出现问题时进行广泛的调试。目前,这仅在Oracle Solaris主机上可用。

可以使用以下命令启用Oracle VirtualBox CoreDumper。

$ VBoxManage setextradata VM-name VBoxInternal2/CoreDumpEnabled 1

您可以使用此命令指定用于核心转储的目录,如下所示

$ VBoxManage setextradata VM-name VBoxInternal2/CoreDumpDir path-to-directory
               

请确保您指定的目录位于具有足够可用空间的卷上,并且Oracle VirtualBox进程具有将文件写入该目录的足够权限。如果您跳过此命令且未指定任何核心转储目录,则将使用Oracle VirtualBox可执行文件的当前目录。由于核心转储受root权限保护,因此在写入核心转储时很可能会失败。建议您明确设置核心转储目录。

您必须指定Oracle VirtualBox CoreDumper应何时触发。这可以通过以下命令完成。

$ VBoxManage setextradata VM-name VBoxInternal2/CoreDumpReplaceSystemDump 1
$ VBoxManage setextradata VM-name VBoxInternal2/CoreDumpLive 1

如果您已启用Oracle VirtualBox CoreDumper,则必须提供上述两个命令中的至少一个。

设置CoreDumpReplaceSystemDump会将VM配置为覆盖主机的核心转储机制,并且在任何崩溃事件中,只有Oracle VirtualBox CoreDumper会生成核心文件。

设置CoreDumpLive会将VM配置为在VM进程收到SIGUSR2信号时生成核心。生成核心文件后,VM不会终止,而是继续运行。因此,您可以使用以下命令获取VM进程的核心。

$ kill -s SIGUSR2 VM-process-id
               

Oracle VirtualBox CoreDumper创建的核心文件格式为core.vb.process-name.process-ID,例如core.vb.VBoxHeadless.11321

Oracle VirtualBox和Oracle Solaris Kernel Zones。

x86系统上的Oracle Solaris内核区域利用硬件辅助虚拟化功能,就像Oracle VirtualBox一样。但是,为了让内核区域和Oracle VirtualBox共享此硬件资源,它们需要进行协作。

默认情况下,出于性能考虑,Oracle VirtualBox会在主机机器上全局获取硬件辅助虚拟化资源(VT-x/AMD-V),并一直使用它,直到最后一个需要它的Oracle VirtualBox VM关闭。这会阻止其他软件在Oracle VirtualBox占用VT-x/AMD-V期间使用它。

Oracle VirtualBox可以被指示在不执行客户机代码时放弃使用硬件辅助虚拟化功能,从而允许内核区域使用它们。要做到这一点,请关闭所有Oracle VirtualBox VM,然后执行以下命令。

$ VBoxManage setproperty hwvirtexclusive off

此命令只需要执行一次,因为该设置将作为全局Oracle VirtualBox设置的一部分进行存储,并且将继续在主机重新启动和Oracle VirtualBox升级后保持不变。

锁定VirtualBox Manager。

自定义VirtualBox Manager。

有几个高级自定义设置用于锁定VirtualBox Manager。锁定意味着移除用户不应看到的一些功能。

VBoxManage setextradata global GUI/Customizations property[,property ...]

property是以下属性之一。

noSelector

不允许用户启动VirtualBox Manager。尝试这样做将显示一个包含正确错误消息的窗口。

noMenuBar

VM 窗口将不包含菜单栏。

noStatusBar

VM 窗口将不包含状态栏。

要禁用任何这些VirtualBox Manager自定义设置,请使用以下命令。

$ VBoxManage setextradata global GUI/Customizations

虚拟机选择器自定义

以下每机器 VM 额外数据设置可用于更改 VM 选择器窗口对某些 VM 的行为

$ VBoxManage setextradata VM-name
                     property true

property可以是以下任何一个。

GUI/HideDetails

不显示某个 VM 的 VM 配置。如果选择此 VM,详细信息窗口将保持为空。

GUI/PreventReconfiguration

不允许用户打开某个VM的设置对话框。

GUI/PreventSnapshotOperations

从 GUI 阻止 VM 的快照操作,无论是在运行时还是在 VM 关闭时。

GUI/HideFromManager

在 VM 选择器窗口中隐藏某个 VM。

GUI/PreventApplicationUpdate

禁用自动更新检查并隐藏相应的菜单项。

请注意,这些设置并不能阻止用户使用VBoxManage modifyvm命令重新配置VM。

配置虚拟机选择器菜单项

您可以禁用 VM 选择器全局设置页面中的某些条目

$ VBoxManage setextradata global GUI/RestrictedGlobalSettingsPages property[,property...]

property是以下之一。

概述

不显示常规设置窗格。

Input

不显示输入设置窗格。

Update

不显示更新设置窗格。

语言

不显示语言设置窗格。

显示

不显示显示设置窗格。

网络

不显示网络设置窗格。

Extensions

不显示扩展设置窗格。

Proxy

不显示代理设置窗格。

这是一个全局设置。您可以指定任何属性组合。要恢复默认行为,请使用以下命令

$ VBoxManage setextradata global GUI/RestrictedGlobalSettingsPages

配置虚拟机窗口菜单项

您可以禁用 VM 窗口中的某些菜单操作

VBoxManage setextradata "VM name"|global GUI/RestrictedRuntimeMenus OPTION[,OPTION...]

其中OPTION是以下关键字之一。

All

不在 VM 窗口中显示任何菜单。

Application

不在VM窗口中显示应用程序/文件菜单。

Machine

不在VM窗口中显示机器菜单。

View

不在VM窗口中显示视图菜单。

Input

不在VM窗口中显示输入菜单。

设备

不在VM窗口中显示设备菜单。

Help

不在VM窗口中显示帮助菜单。

Debug

不在VM窗口中显示调试菜单。调试菜单仅在GUI以特殊的命令行参数或环境变量设置启动时可见。

这是每个 VM 或全局设置。允许任何组合。要恢复默认行为,请使用以下命令

VBoxManage setextradata "VM name"|global GUI/RestrictedRuntimeMenus

您还可以禁用某些菜单的某些操作。使用以下命令禁用应用程序菜单的某些操作。这仅在macOS主机上可用。

VBoxManage setextradata "VM name"|global GUI/RestrictedRuntimeApplicationMenuActions OPTION[,OPTION...]

其中OPTION是以下关键字之一。

All

不在此菜单中显示任何菜单项。

About
不显示此菜单中的关于菜单项。
Preferences

不显示此菜单中的首选项菜单项。

NetworkAccessManager

不显示此菜单中的网络操作管理器菜单项。

ResetWarnings

不显示此菜单中的重置所有警告菜单项。

Close

不显示此菜单中的关闭菜单项。

这是每个 VM 或全局设置。允许任何组合。要恢复默认行为,请使用以下命令

VBoxManage setextradata "VM name"|global GUI/RestrictedRuntimeMenus

使用以下命令禁用机器菜单的某些操作。

VBoxManage setextradata "VM name"|global GUI/RestrictedRuntimeMachineMenuActions OPTION[,OPTION...]

其中OPTION是以下关键字之一。

All

不在此菜单中显示任何菜单项。

SettingsDialog

不显示此菜单中的设置菜单项。

TakeSnapshot

不显示此菜单中的拍摄快照...菜单项。

InformationDialog

不显示此菜单中的会话信息...菜单项。

FileManagerDialog

不显示此菜单中的文件管理器...菜单项。

Pause

不显示此菜单中的暂停菜单项。

Reset

不显示此菜单中的重置菜单项。

Shutdown

不显示此菜单中的ACPI关机菜单项。

这是每个 VM 或全局设置。允许任何组合。要恢复默认行为,请使用

VBoxManage setextradata "VM name"|global GUI/RestrictedRuntimeMachineMenuActions

使用以下命令禁用视图菜单的某些操作。

VBoxManage setextradata "VM name"|global GUI/RestrictedRuntimeViewMenuActions OPTION[,OPTION...]

其中OPTION是以下关键字之一。

All

不在此菜单中显示任何菜单项。

Fullscreen

不显示此菜单中的全屏模式菜单项。

Seamless

不显示此菜单中的无缝模式菜单项。

Scale

不显示此菜单中的缩放模式菜单项。

GuestAutoresize

不显示此菜单中的自动调整客户机显示菜单项。

AdjustWindow

不显示此菜单中的调整窗口大小菜单项。

TakeScreenshot

不显示此菜单中的截屏...菜单项。

录制

不显示此菜单中的录制菜单项。

VRDEServer

不显示此菜单中的远程显示菜单项。

MenuBar

不显示此菜单中的菜单栏菜单项。

MenuBarSettings

不显示此菜单中的菜单栏设置...菜单项。

StatusBar

不显示此菜单中的状态栏菜单项。

StatusbarSettings

不显示此菜单中的状态栏设置...菜单项。

这是每个 VM 或全局设置。允许任何组合。要恢复默认行为,请使用

VBoxManage setextradata "VM name"|global GUI/RestrictedRuntimeViewMenuActions

使用以下命令禁用输入菜单的某些操作。

VBoxManage setextradata "VM name"|global GUI/RestrictedRuntimeInputMenuActions OPTION[,OPTION...]

其中OPTION是以下关键字之一。

All

不在此菜单中显示任何菜单项。

Keyboard

不显示此菜单中的键盘菜单项。

KeyboardSettings

不显示此菜单中的键盘设置...菜单项。

SoftKeyboard

不显示此菜单中的软键盘...菜单项。

TypeCAD

不显示此菜单中的插入Ctrl-Alt-Del菜单项。

TypeCABS

不显示此菜单中的插入Ctrl-Alt-Backspace菜单项。

TypeCtrlBreak

不显示此菜单中的插入Ctrl-Break菜单项。

TypeInsert

不显示此菜单中的插入Insert菜单项。

TypePrintScreen

不显示此菜单中的插入Print Screen菜单项。

TypeAltPrintScreen

不显示此菜单中的插入Alt Print Screen菜单项。

TypeHostKeyCombo

不显示此菜单中的插入主机键组合菜单项。

MouseIntegration

不显示此菜单中的MouseIntegration菜单项。

这是每个 VM 或全局设置。允许任何组合。要恢复默认行为,请使用

VBoxManage setextradata "VM name"|global GUI/RestrictedRuntimeInputMenuActions

使用以下命令禁用设备菜单的某些操作。

VBoxManage setextradata "VM name"|global GUI/RestrictedRuntimeDevicesMenuActions OPTION[,OPTION...]

其中OPTION是在设备菜单中禁用操作的以下关键字之一。

All

不在此菜单中显示任何菜单项。

HardDrives

不显示此菜单中的硬盘菜单项。

OpticalDevices

不显示此菜单中的光驱菜单项。

FloppyDevices

不显示此菜单中的软盘驱动器菜单项。

音频

不显示此菜单中的音频菜单项。

网络

不显示此菜单中的网络菜单项。

NetworkSettings

不显示此菜单中的网络设置菜单项。

USBDevices

不显示此菜单中的USB菜单项。

WebCams

不显示此菜单中的网络摄像头菜单项。

SharedFolders

不显示此菜单中的共享文件夹菜单项。

SharedFoldersSettings

不显示此菜单中的共享文件夹设置...菜单项。

SharedClipboard

不显示此菜单中的共享剪贴板菜单项。

DragAndDrop

不显示此菜单中的拖放菜单项。

InstallGuestTools

不显示此菜单中的插入客户机添加CD映像...菜单项。

这是一个按虚拟机或全局设置。允许上述任意组合。要恢复默认行为,请使用

VBoxManage setextradata "VM name"|global GUI/RestrictedRuntimeDevicesMenuActions

使用以下命令禁用调试菜单的某些操作。

VBoxManage setextradata "VM name"|global GUI/RestrictedRuntimeDebuggerMenuActions OPTION[,OPTION...]

其中OPTION是在调试菜单中禁用操作的以下关键字之一,该菜单通常完全禁用。

All

不在此菜单中显示任何菜单项。

统计

不显示此菜单中的统计信息...菜单项。

命令行

不显示此菜单中的命令行...菜单项。

日志记录

不显示此菜单中的日志记录...菜单项。

日志对话框

不显示此菜单中的显示日志...菜单项。

客户机控制台

不显示此菜单中的客户机控制终端...菜单项。

这是每个 VM 或全局设置。允许任何组合。要恢复默认行为,请使用

VBoxManage setextradata "VM name"|global GUI/RestrictedRuntimeDebuggerMenuActions

使用以下命令禁用视图菜单的某些操作。

VBoxManage setextradata "VM name"|global GUI/RestrictedRuntimeHelpMenuActions OPTION[,OPTION...]

其中OPTION是在帮助菜单中禁用操作的以下关键字之一,该菜单通常完全禁用。

All

不在此菜单中显示任何菜单项。

目录

不显示此菜单中的内容...菜单项。

网站

不显示此菜单中的VirtualBox网站...菜单项。

Bug跟踪器

不显示此菜单中的VirtualBox Bug Tracker...菜单项。

论坛

不显示此菜单中的VirtualBox论坛...菜单项。

Oracle

不显示此菜单中的Oracle网站...菜单项。

About

不显示此菜单中的关于VirtualBox...菜单项。仅适用于非macOS主机。

这是每个 VM 或全局设置。允许任何组合。要恢复默认行为,请使用

VBoxManage setextradata "VM name"|global GUI/RestrictedRuntimeHelpMenuActions

配置虚拟机窗口状态栏项

您可以禁用某些状态栏项

VBoxManage setextradata "VM name"|global GUI/RestrictedStatusBarIndicators OPTION[,OPTION...]

其中OPTION是以下关键字之一。

硬盘

不在虚拟机窗口状态栏中显示硬盘图标。默认情况下,仅当虚拟机配置包含一个或多个硬盘时,才会显示硬盘图标。

光盘

不在虚拟机窗口状态栏中显示CD图标。默认情况下,仅当虚拟机配置包含一个或多个CD驱动器时,才会显示CD图标。

软盘

不在虚拟机窗口状态栏中显示软盘图标。默认情况下,仅当虚拟机配置包含一个或多个软盘驱动器时,才会显示软盘图标。

网络

不在虚拟机窗口状态栏中显示网络图标。默认情况下,仅当虚拟机配置包含一个或多个活动网络适配器时,才会显示网络图标。

USB

不在状态栏中显示USB图标。

SharedFolders

不在状态栏中显示共享文件夹图标。

捕获

不在状态栏中显示捕获图标。

功能

不在状态栏中显示CPU功能图标。

鼠标

不在状态栏中显示鼠标图标。

Keyboard

不在状态栏中显示键盘图标。

这是一个按虚拟机或全局设置。允许上述任意组合。如果指定了所有选项,则虚拟机窗口的状态栏中不会显示任何图标。要恢复默认行为,请使用

VBoxManage setextradata "VM name"|global GUI/RestrictedStatusBarIndicators

配置虚拟机窗口视觉模式

您可以禁用某些虚拟机视觉模式

$ VBoxManage setextradata VM-name GUI/RestrictedVisualStates property[,property...]

property是以下之一。

Fullscreen

不允许将虚拟机切换到全屏模式。

Seamless

不允许将虚拟机切换到无缝模式。

Scale

不允许将虚拟机切换到缩放模式。

这是一个按虚拟机设置。您可以指定属性的任意组合。要恢复默认行为,请使用以下命令

$ VBoxManage setextradata VM-name GUI/RestrictedVisualStates

主机键自定义

要禁用所有主机键组合,请打开首选项并将主机键更改为“无”。在使用Oracle VirtualBox的亭式模式下,这可能很有用。

要重新定义或禁用某些主机键操作,请使用以下命令

$ VBoxManage setextradata global GUI/Input/MachineShortcuts "FullscreenMode=F,...."

下表显示了可能的主机键操作及其默认主机键快捷方式。将操作设置为“无”将禁用该主机键操作。

表 5. 主机键自定义。 主机键自定义

操作

默认键

操作

TakeSnapshot

T

拍摄快照

TakeScreenshot

E

截屏

MouseIntegration

I

切换鼠标集成

TypeCAD

Del

注入 Ctrl+Alt+Del

TypeCABS

Backspace

注入 Ctrl+Alt+Backspace

Pause

P

暂停虚拟机

Reset

R

硬重置客户机

保存状态

保存虚拟机状态并终止虚拟机

Shutdown

H

按下虚拟ACPI电源按钮

断电

不保存状态地关闭虚拟机电源

Close

Q

显示关闭虚拟机对话框

全屏模式

F

将虚拟机切换到全屏模式

无缝模式

L

将虚拟机切换到无缝模式

缩放模式

C

将虚拟机切换到缩放模式

客户机自动调整大小

G

自动调整客户机窗口大小

窗口调整

A

立即调整客户机窗口大小

弹出菜单

首页

在全屏模式和无缝模式下显示弹出菜单

SettingsDialog

S

打开虚拟机设置对话框

InformationDialog

N

显示虚拟机会话信息窗口

网络适配器对话框

显示虚拟机网络适配器对话框

共享文件夹对话框

显示虚拟机共享文件夹对话框

安装增强功能

D

挂载包含增强功能的ISO

要禁用全屏模式和无缝模式,请使用以下命令

$ VBoxManage setextradata global GUI/Input/MachineShortcuts "FullscreenMode=None,SeamlessMode=None"

终止虚拟机时的操作

您可以禁止在终止虚拟机时执行某些操作。要禁止特定操作,请使用以下命令

$ VBoxManage setextradata VM-name GUI/RestrictedCloseActions property[,property...]

property是以下之一。

保存状态

不允许用户在终止虚拟机时保存虚拟机状态。

Shutdown

不允许用户通过向客户机发送ACPI关机事件来关闭虚拟机。

断电

不允许用户关闭虚拟机电源。

关机恢复快照

不允许用户在关闭虚拟机电源时返回到上次快照。

分离

如果虚拟机以分离模式启动,则不允许用户从虚拟机进程中分离。

这是一个按虚拟机设置。您可以指定属性的任意组合。如果指定了所有属性,则无法关闭虚拟机。

终止虚拟机时的默认操作

您可以为终止虚拟机定义一个特定操作。与上一节中描述的设置不同,此设置允许用户在终止虚拟机时只执行一个操作。不会显示退出菜单。使用以下命令

$ VBoxManage setextradata VM-name GUI/DefaultCloseAction action
                  

action是以下之一。

保存状态

在终止虚拟机进程之前保存虚拟机状态。

Shutdown

通过向客户机发送ACPI关机事件来关闭虚拟机。

断电

虚拟机已断电。

关机恢复快照

虚拟机已断电,保存的状态恢复到上次快照。

分离

终止前端但保持虚拟机进程运行。

这是一个按虚拟机设置。您可以指定属性的任意组合。如果指定了所有属性,则无法关闭虚拟机。

处理“大师冥想”的操作

如果出现无法通过终止进程以外的方式修复的问题,虚拟机将陷入“大师级冥想”(Guru Meditation)状态。默认是显示一个消息窗口,指示用户打开错误报告。

此行为可以配置如下

$ VBoxManage setextradata VM-name GUI/GuruMeditationHandler mode
                  

mode是以下之一。

默认

显示一个消息窗口。用户确认后,虚拟机终止。

断电

虚拟机立即断电,不显示任何消息窗口。虚拟机日志文件将显示发生事件的信息。

忽略

虚拟机处于停滞模式。执行已停止,但未显示消息窗口。必须手动关闭虚拟机电源。

这是一个按虚拟机设置。

配置自动鼠标捕获

默认情况下,如果用户单击客户机窗口并且客户机此时需要相对鼠标坐标,则鼠标将被捕获。当指向设备配置为PS/2鼠标且客户机尚未启动Oracle VirtualBox Guest Additions时,会发生这种情况。例如,客户机正在启动或未安装Guest Additions,或者指向设备配置为USB平板电脑但客户机尚未加载USB驱动程序。一旦Guest Additions变为活动状态或USB客户机驱动程序启动,鼠标捕获将被自动释放。

默认行为有时不合适。因此,可以按以下方式进行配置。

VBoxManage setextradata VM-name GUI/MouseCapturePolicy mode
                  

mode是以下之一。

默认

如上所述的默认行为。

仅限主机组合键

仅当切换主机键时才捕获鼠标。

禁用

鼠标永远不会被捕获,即使通过切换主机键也不会

这是一个按虚拟机设置。

请求传统全屏模式

Oracle VirtualBox使用特殊的窗口管理器功能将多屏幕机器切换到多显示器主机系统上的全屏模式。但是,并非所有窗口管理器都能正确提供这些功能。通过使用以下命令,可以配置Oracle VirtualBox以使用旧方法切换到全屏模式。

VBoxManage setextradata global GUI/Fullscreen/LegacyMode true

您可以使用以下命令回到默认方法

VBoxManage setextradata global GUI/Fullscreen/LegacyMode

这是一个全局设置。

从 GUI 中移除某些网络模式

可以从Oracle VirtualBox GUI中删除网络模式。要做到这一点,请使用以下命令。

VBoxManage setextradata global GUI/RestrictedNetworkAttachmentTypes property[,property...]

property是以下之一。

NAT

从GUI中删除NAT选项。

NAT网络

从GUI中删除NAT网络选项。

桥接适配器

从GUI中删除桥接网络选项。

内部网络

从GUI中删除内部网络选项。

仅主机适配器

从GUI中删除主机专用网络选项。

通用驱动程序

从GUI中删除通用网络选项。

这是一个全局设置。您可以指定任何属性组合。要恢复默认行为,请使用以下命令

VBoxManage setextradata global GUI/RestrictedNetworkAttachmentTypes

自动启动Oracle VirtualBox Web服务。

Oracle VirtualBox Web服务vboxwebsrv用于远程控制Oracle VirtualBox。它在Oracle VirtualBox软件开发工具包(SDK)中有详细说明。请参阅Oracle VirtualBox编程接口。Web服务启动脚本适用于支持的主机操作系统。以下各节介绍如何使用脚本。Oracle VirtualBox Web服务从未作为标准安装的结果自动启动。

Linux:使用 init 启动 Web 服务

在Linux上,可以通过向文件/etc/default/virtualbox添加适当的参数来在主机启动期间自动启动Web服务。有一个强制参数VBOXWEB_USER,必须将其设置为稍后将启动VM的用户。下表中所有参数都以VBOXWEB_前缀字符串开头。例如:VBOXWEB_HOSTVBOXWEB_PORT

表 6. Web服务配置参数。 Web服务配置参数

参数

描述

默认

用户

Web服务运行的用户

主机

Web服务绑定的主机

localhost

端口

Web服务绑定的端口

18083

SSL_KEYFILE

PEM格式的服务器密钥和证书文件

SSL_PASSWORDFILE

服务器密钥密码的文件名

SSL_CACERT

PEM格式的CA证书文件

SSL_CAPATH

CA证书路径

SSL_DHFILE

DH文件名或DH密钥长度(比特)

SSL_RANDFILE

包含随机数生成器种子的文件

TIMEOUT

会话超时(秒),0表示禁用超时

300

CHECK_INTERVAL

超时检查频率(秒)

5

THREADS

并行运行的最大工作线程数

100

KEEPALIVE

套接字关闭前的最大请求数

100

ROTATE

日志文件数量,0表示禁用日志轮转

10

LOGSIZE

触发轮转的最大日志文件大小(字节)

1MB

LOGINTERVAL

触发日志轮转的最大时间间隔(秒)

1天

设置参数SSL_KEYFILE可启用SSL/TLS支持。强烈建议使用加密,因为否则所有内容(包括密码)都以明文传输。

Oracle Solaris:使用 SMF 启动 Web 服务

在Oracle Solaris主机上,Oracle VirtualBox Web服务守护进程已集成到SMF框架中。您可以更改参数,但如果默认值已满足您的需求,则无需更改。

svccfg -s svc:/application/virtualbox/webservice:default setprop config/host=localhost
svccfg -s svc:/application/virtualbox/webservice:default setprop config/port=18083
svccfg -s svc:/application/virtualbox/webservice:default setprop config/user=root

位于Linux:使用init启动Web服务的表中的参数名称和默认值也适用于Oracle Solaris。参数名称必须更改为小写,并且必须添加config/前缀。例如:config/userconfig/ssl_keyfile。如果您进行任何更改,请不要忘记运行以下命令以立即生效。

svcadm refresh svc:/application/virtualbox/webservice:default

如果您忘记了上述命令,则在启用服务时将使用之前的设置。按如下方式检查当前属性设置

svcprop -p config svc:/application/virtualbox/webservice:default

当一切配置正确后,您可以使用以下命令启动Oracle VirtualBox Web服务。

svcadm enable svc:/application/virtualbox/webservice:default

有关SMF的更多信息,请参阅Oracle Solaris文档。

macOS:使用 launchd 启动 Web 服务

在macOS上,launchd用于启动Oracle VirtualBox Web服务。可以在$HOME/Library/LaunchAgents/org.virtualbox.vboxwebsrv.plist中找到示例配置文件。可以通过将Disabled键从true更改为false来启用它。要手动启动服务,请使用以下命令。

launchctl load ~/Library/LaunchAgents/org.virtualbox.vboxwebsrv.plist

有关如何配置launchd服务的更多信息,请参见

https://developer.apple.com/library/mac/documentation/MacOSX/Conceptual/BPSystemStartup/Chapters/CreatingLaunchdJobs.html.

Oracle VirtualBox Watchdog。

内存气球服务,以前称为VBoxBalloonCtrl,已重命名为VBoxWatchdog。此服务现在包含以下适用于服务器环境的主机服务。

  • 内存气球控制。此服务会自动处理VM的配置内存气球。请参阅内存气球。此服务对于VM在运行时可能动态需要更多或更少内存的服务器环境很有用。

    该服务会定期检查VM的当前内存气球和可用客户机RAM,并根据需要自动膨胀或收缩当前内存气球。此处理仅适用于运行的VM,且已安装最新的Guest Additions。

  • 主机隔离检测。此服务提供了一种检测主机是否无法再访问特定Oracle VirtualBox服务器实例的方法,并采取适当的措施,例如关闭、保存当前状态甚至关闭某些VM。

所有配置值都可以通过命令行或全局附加数据指定,而命令行值在设置时始终具有更高的优先级。一些配置值也可以在每台VM的基础上指定。因此,整体查找顺序是:命令行,如果可用,则为每台VM的附加数据,然后是全局附加数据。

内存气球化控制

内存气球控制根据VM的可用内存和请求的最大气球大小来膨胀和收缩VM的内存气球。

要设置内存气球控制,需要设置虚拟机可以达到的最大气球大小。这可以通过命令行指定,如下所示

--balloon-max <Size in MB>

使用按虚拟机额外数据值,如下所示

VBoxManage setextradata <VM-Name> VBoxInternal2/Watchdog/BalloonCtrl/BalloonSizeMax <Size in MB>

使用全局额外数据值,如下所示

VBoxManage setextradata global VBoxInternal2/Watchdog/BalloonCtrl/BalloonSizeMax <Size in MB>
注意

如果上述任何参数未指定最大气球大小,则根本不会执行气球操作。

气球增量(MB)可以通过命令行设置,如下所示

--balloon-inc <Size in MB>

使用全局额外数据值,如下所示

VBoxManage setextradata global VBoxInternal2/Watchdog/BalloonCtrl/BalloonIncrementMB <Size in MB>

如果未指定,默认的气球增量为256 MB。

同样适用于气球减量。使用命令行,如下所示

--balloon-dec <Size in MB>

使用全局额外数据值,如下所示

VBoxManage setextradata global VBoxInternal2/Watchdog/BalloonCtrl/BalloonDecrementMB <Size in MB>

如果未指定,默认的气球减量为128 MB。

气球的下限(MB)可以通过命令行定义,如下所示

--balloon-lower-limit <Size in MB>

使用全局额外数据值,如下所示

VBoxManage setextradata global VBoxInternal2/Watchdog/BalloonCtrl/BalloonLowerLimitMB <Size in MB>

如果未指定,默认下限为128 MB。

主机隔离检测

为了检测主机是否被隔离,即主机是否无法再访问Oracle VirtualBox服务器实例,主机需要在一定时间段内将一个交替值设置为全局附加数据值。如果在该时间段内未设置此值,则发生超时,将对处理的VM执行所谓的“主机隔离响应”。可以根据定义VM组并将VM分配到这些组来控制处理哪些VM。默认情况下,未设置组,这意味着在30秒内未收到主机响应时,服务器上的所有VM都将被处理。

使用以下命令行设置主机隔离检测处理的组

--apimon-groups=<string[,stringN]>

使用全局额外数据值,如下所示

VBoxManage setextradata global VBoxInternal2/Watchdog/APIMonitor/Groups <string[,stringN]>

使用以下命令行设置主机隔离超时

--apimon-isln-timeout=<ms>

使用全局额外数据值,如下所示

VBoxManage setextradata global VBoxInternal2/Watchdog/APIMonitor/IsolationTimeoutMS <ms>

使用以下命令行设置实际主机隔离响应

--apimon-isln-response=<cmd>

使用全局额外数据值,如下所示

VBoxManage setextradata global VBoxInternal2/Watchdog/APIMonitor/IsolationResponse <cmd>

以下响应命令可用

  • none。这没有效果。

  • pause。暂停VM的执行。

  • poweroff。通过按下虚拟电源按钮关闭虚拟机。虚拟机将没有机会保存任何数据或否决关机过程。

  • save。保存当前机器状态,然后关闭虚拟机。如果保存机器状态失败,虚拟机将暂停。

  • shutdown。通过向虚拟机操作系统发送ACPI关机事件,以温和的方式关闭虚拟机。操作系统随后有机会进行干净的关机。

更多信息

有关更高级的选项和参数(如详细日志记录),请查阅可通过--help访问的内置命令行帮助。

Linux:使用 init 启动看门狗服务

在 Linux 上,可以通过向/etc/default/virtualbox文件添加适当的参数,在主机启动期间自动启动看门狗服务。有一个强制参数VBOXWATCHDOG_USER,必须将其设置为稍后将启动虚拟机的用户。为了向后兼容,您还可以指定VBOXBALLOONCTRL_USER

下表中所有参数都以VBOXWATCHDOG_前缀字符串开头。例如:VBOXWATCHDOG_BALLOON_INTERVALVBOXWATCHDOG_LOGSIZE。遗留参数(如VBOXBALLOONCTRL_INTERVAL)仍可使用。

表 7。 Oracle VirtualBox 看门狗配置参数。 Oracle VirtualBox 看门狗配置参数

参数

描述

默认

用户

看门狗服务运行的用户

ROTATE

日志文件数量,0表示禁用日志轮转

10

LOGSIZE

触发轮转的最大日志文件大小(字节)

1MB

LOGINTERVAL

触发日志轮转的最大时间间隔(秒)

1天

BALLOON_INTERVAL

检查气球大小的间隔(毫秒)

30000

BALLOON_INCREMENT

气球大小增量(兆字节)

256

BALLOON_DECREMENT

气球大小减量(兆字节)

128

BALLOON_LOWERLIMIT

气球大小下限(兆字节)

64

BALLOON_SAFETYMARGIN

减小气球大小所需的空闲内存(兆字节)

1024

Oracle Solaris:使用 SMF 启动看门狗服务

在 Oracle Solaris 主机上,Oracle VirtualBox 看门狗服务守护程序已集成到 SMF 框架中。您可以更改参数,但如果默认值已满足您的需求,则无需更改。

svccfg -s svc:/application/virtualbox/balloonctrl:default setprop \
  config/balloon_interval=10000
svccfg -s svc:/application/virtualbox/balloonctrl:default setprop \
config/balloon_safetymargin=134217728

表 7 也适用于 Oracle Solaris。参数名称必须更改为小写,并且必须添加config/前缀。例如:config/userconfig/balloon_safetymargin。如果您进行了任何更改,请不要忘记运行以下命令以立即生效:

svcadm refresh svc:/application/virtualbox/balloonctrl:default

如果您忘记了上述命令,则在启用服务时将使用之前的设置。使用以下命令检查当前属性设置

svcprop -p config svc:/application/virtualbox/balloonctrl:default

一切配置正确后,您可以使用以下命令启动Oracle VirtualBox看门狗服务:

svcadm enable svc:/application/virtualbox/balloonctrl:default

有关SMF的更多信息,请参阅Oracle Solaris文档。

其他扩展包

还有一个名为 VNC 的扩展包。此扩展包是开源的,并取代了以前的 VNC 远程访问协议集成。这是实验性代码,最初仅在Oracle VirtualBox源代码包中提供。它很大程度上是用户贡献的代码,Oracle 不提供任何形式的支持。

键盘处理功能严重受限,只有美式键盘布局有效。其他键盘布局至少会使某些键产生错误的结果,通常会产生非常意外的效果,而对于与美式键盘布局有显著差异的布局,它很可能无法使用。

可以同时安装Oracle VirtualBox Extension Pack和 VNC,但任何时候只能有一个 VRDE 模块处于活动状态。以下命令切换到 VNC 中的 VNC VRDE 模块:

VBoxManage setproperty vrdeextpack VNC

远程访问的配置与 VRDP 非常相似,请参阅远程显示(VRDP 支持),但有一些限制。VNC 不支持指定多个端口号,并且身份验证方式不同。VNC 只能处理密码身份验证,没有使用密码哈希的选项。这使得别无选择,只能在虚拟机配置中留下明文密码,可以使用以下命令设置:

VBoxManage modifyvm VM-name --vrde-property VNCPassword=secret

用户负责保守此密码的秘密,并且在将虚拟机配置传递给其他人时,无论出于何种目的,都应将其删除。某些 VNC 服务器声称在配置中具有加密密码。这不是真正的加密,只是隐藏了密码,其安全性与使用明文密码一样。

以下命令切换回VRDP(如果已安装)

VBoxManage setproperty vrdeextpack "Oracle VirtualBox Extension Pack"

在系统启动时启动虚拟机

您可以在Linux、Oracle Solaris和macOS平台上为所有用户在系统启动时自动启动虚拟机。

Linux:使用 init 启动自动启动服务

在 Linux 上,通过在/etc/default/virtualbox中设置两个变量来激活自动启动服务。第一个是VBOXAUTOSTART_DB,它包含指向自动启动数据库目录的绝对路径。该目录应具有所有应能自动启动虚拟机的用户的写入权限。此外,该目录应设置粘滞位。第二个变量是VBOXAUTOSTART_CONFIG,它指向自动启动配置文件,该文件在启动时用于确定是否允许单个用户自动启动虚拟机以及配置启动延迟。配置文件可以放在/etc/vbox中,并包含多个选项。其中一个是default_policy,它控制自动启动服务是否允许或拒绝为不在例外列表中的用户启动虚拟机。例外列表以exception_list开头,并包含一个由逗号分隔的用户名列表。此外,可以为每个用户配置单独的启动延迟,以避免过载主机。下面是一个示例配置:

# Default policy is to deny starting a VM, the other option is "allow".
default_policy = deny

# Bob is allowed to start virtual machines but starting them
# will be delayed for 10 seconds
bob = {
    allow = true
    startup_delay = 10
}

# Alice is not allowed to start virtual machines, useful to exclude certain users
# if the default policy is set to allow.
alice = {
    allow = false
}

任何希望为单个机器启用自动启动的用户都必须使用以下命令设置自动启动数据库目录的路径

VBoxManage setproperty autostartdbpath autostart-directory
                  

Oracle Solaris:使用 SMF 启动自动启动服务

在 Oracle Solaris 主机上,Oracle VirtualBox自动启动守护程序已集成到 SMF 框架中。要启用它,您必须将服务指向一个现有的配置文件,该文件的格式与 Linux 上的相同,请参阅Linux:使用 init 启动自动启动服务。例如:

# svccfg -s svc:/application/virtualbox/autostart:default setprop \
  config/config=/etc/vbox/autostart.cfg

一切配置正确后,您可以使用以下命令启动Oracle VirtualBox自动启动服务:

# svcadm enable svc:/application/virtualbox/autostart:default

有关SMF的更多信息,请参阅Oracle Solaris文档。

macOS:使用 launchd 启动自动启动服务

在 macOS 上,launchd 用于启动Oracle VirtualBox自动启动服务。可以在/Applications/VirtualBox.app/Contents/MacOS/org.virtualbox.vboxautostart.plist中找到一个示例配置文件。要启用该服务,请将文件复制到/Library/LaunchDaemons,并将Disabled键从true更改为false。此外,将第二个参数替换为现有配置文件,该文件的格式与 Linux 上的相同,请参阅Linux:使用 init 启动自动启动服务

要手动启动服务,请使用以下命令

# launchctl load /Library/LaunchDaemons/org.virtualbox.vboxautostart.plist

有关如何配置launchd服务的其他信息,请参见

http://developer.apple.com/mac/library/documentation/MacOSX/Conceptual/BPSystemStartup/BPSystemStartup.html.

Windows:启动自动启动服务

在 Windows 上,自动启动功能包含两个组件。第一个组件是配置文件,管理员可以在其中设置虚拟机的延迟启动,并暂时禁用特定用户的自动启动。配置文件应位于所有必需用户都可以访问的文件夹中,但应具有除管理员外的所有用户只能读取的权限。配置文件包含多个选项。default_policy控制自动启动服务是否允许或拒绝为不在例外列表中的用户启动虚拟机。例外列表以exception_list开头,并包含一个由逗号分隔的用户名列表。此外,可以为每个用户配置单独的启动延迟,以避免过载主机。下面是一个示例配置:

    # Default policy is to deny starting a VM, the other option is "allow".
    default_policy = deny

    # Bob is allowed to start virtual machines but starting them
    # will be delayed for 10 seconds
    bob = {
        allow = true
        startup_delay = 10
    }

    # Alice is not allowed to start virtual machines, useful to exclude certain users
    # if the default policy is set to allow.
    alice = {
        allow = false
    }

用户名可以使用以下形式指定:“user”、“domain\user”、“.\user”和“user@domain”。管理员必须将VBOXAUTOSTART_CONFIG环境变量添加到系统变量中,该变量包含上述配置文件的路径。环境变量告诉自动启动服务正在使用哪个配置文件。

自动启动功能的第二个组件是Windows服务。此服务的每个实例都代表特定用户使用其凭据工作。

要为特定用户启用自动启动,管理员组的成员必须运行以下命令

VBoxAutostartSvc install --user=user [--password-file=password_file]

密码文件应包含密码,后跟一个换行符。文件的其余部分将被忽略。如果未指定密码文件,将要求用户输入密码。

要禁用特定用户的自动启动,管理员组的成员必须运行以下命令

VBoxAutostartSvc delete --user=user
                  

如果用户更改了密码,则管理员组的成员必须重新安装服务或使用 Windows 服务管理器更改服务凭据。由于 Windows 安全策略,自动启动服务不能为具有空密码的用户安装。

最后,用户应定义在启动时启动哪些虚拟机。用户应为他们希望在启动时启动的每个虚拟机运行以下命令:

VBoxManage modifyvm VM name or UUID --autostart-enabled on

用户可以通过运行以下命令从启动时启动的虚拟机中删除特定虚拟机

VBoxManage modifyvm VM name or UUID --autostart-enabled off
注意

在 Windows 主机上,使用自动启动服务启动虚拟机可能会导致一些问题,因为虚拟机是在与 VBoxSVC 相同的会话中启动的。有关更多信息,请参阅VBoxSVC 在 Windows Session 0 中运行

虚拟机加密

Oracle VirtualBox允许您透明地加密虚拟机配置文件、保存状态和 EFI 启动数据中存储的虚拟机数据。

Oracle VirtualBox在各种模式下使用 AES 算法。所选模式取决于虚拟机的加密组件。Oracle VirtualBox支持 128 位或 256 位数据加密密钥(DEK)。DEK 以加密形式存储在虚拟机配置文件中,并在虚拟机启动期间解密。

由于 DEK 作为虚拟机配置文件的一部分存储,因此妥善保管该文件非常重要。丢失 DEK 意味着存储在虚拟机中的数据将无法恢复。用户负责维护所有与虚拟机相关数据的完整且最新的备份。

虚拟机,即使已加密,也可能包含用不同密码加密的媒体。为处理此问题,虚拟机密码具有密码标识符,与媒体密码相同。密码 ID 是一个任意字符串,用于唯一标识虚拟机及其媒体中的密码。您可以为虚拟机及其媒体使用相同的密码和 ID。

虚拟机加密的限制

使用此功能时,用户需要注意一些限制

  • 导出包含加密虚拟机的设备是不可能的,因为OVF规范不支持此功能。因此,虚拟机在导出期间会被解密。

  • DEK在虚拟机运行时保持在内存中,以便能够加密和解密虚拟机数据。虽然这应该很明显,但用户需要注意这一点,因为攻击者可能能够从受感染的主机中提取密钥并解密数据。

  • 在加密或解密虚拟机时,密码会通过Oracle VirtualBox API 以明文形式传递。需要牢记这一点,尤其是在使用利用 Web 服务的第三方 API 客户端时,密码可能会通过网络传输。在这种情况下,HTTPS 是必需的。

加密虚拟机

加密虚拟机可以使用VirtualBox ManagerVBoxManage完成。要使用VBoxManage加密未加密的虚拟机,请使用:

VBoxManage encryptvm uuid|vmname setencryption --new-password filename|- \
--cipher cipher-ID --new-password-id ID
                  

要提供加密密码,请将VBoxManage指向存储密码的文件,或指定-以让VBoxManage在命令行提示输入密码。

cipher 参数指定用于加密的密码,可以是AES-128AES-256。相应的操作模式(如 GCM、CTR 或 XTS)将由虚拟机根据加密组件选择。指定的密码标识符可由用户自由选择,并用于在提供多个密码时进行正确标识。

打开加密虚拟机

Oracle VirtualBox刚启动时,加密的虚拟机无法打开,并且保持不可访问状态。此外,如果没有提供密码或密码不正确,新注册的加密虚拟机也无法访问。用户需要使用VirtualBox Manager或以下VBoxManage命令提供密码:

VBoxManage encryptvm uuid|vmname addpassword --password filename|- --password-id ID
                  

要提供加密密码,请将VBoxManage指向存储密码的文件,或指定-以让VBoxManage在命令行提示输入密码。

如果 ID 与加密虚拟机时提供的密码标识符相同,则会更新可访问性状态。

要从虚拟机内存中删除输入的密码,请使用VBoxManage,如下所示:

VBoxManage encryptvm uuid|vmname removepassword ID
                  

如果 ID 与加密虚拟机时提供的密码标识符相同,则会更新可访问性状态。

注意

如果机器变得不可访问,所有密码都会被清除。您必须重新添加所需的密码,使用VBoxManage encryptvm vmname addpassword命令。请参阅打开加密虚拟机

解密加密虚拟机

在某些情况下,可能需要解密以前加密的虚拟机。这可以在VirtualBox Manager中完成,或使用VBoxManage执行以下命令来完成:

VBoxManage encryptvm uuid|vmname setencryption --old-password file|-

唯一必需的参数是用于加密虚拟机的密码。选项与加密虚拟机相同。

Oracle VirtualBox专家存储管理

如果Oracle VirtualBox的快照模型不够用,可以启用一种特殊模式,该模式可以在虚拟机暂停时重新配置存储附件。用户必须确保磁盘数据与客户机保持一致,因为与热插拔不同,客户机不会被告知分离或新附加的媒体。

可以通过执行以下命令在每个虚拟机上启用专家存储管理模式

$ VBoxManage setextradata VM-name "VBoxInternal2/SilentReconfigureWhilePaused" 1

您可以使用VBoxManage storageattach命令在虚拟机暂停时重新配置存储附件。

处理主机电源管理事件

Oracle VirtualBox处理一些主机电源管理事件。实际行为取决于平台:

  • 主机挂起。当主机即将挂起时(即主机将状态保存到某些非易失性存储并断电)会生成此事件。

    此事件目前仅在 Windows 主机和 Mac OS X 主机上处理。当生成此事件时,Oracle VirtualBox将暂停所有正在运行的虚拟机。

  • 主机恢复。当主机从挂起状态唤醒时会生成此事件。

    此事件目前仅在 Windows 主机和 Mac OS X 主机上处理。当生成此事件时,Oracle VirtualBox将恢复所有之前被暂停的虚拟机。

  • 电池电量低。电池电量已达到关键级别,通常低于 5% 的充电量。

    此事件目前仅在 Windows 主机和 Mac OS X 主机上处理。当生成此事件时,Oracle VirtualBox将保存状态并终止所有虚拟机,为可能的主机断电做准备。

    行为可以配置。通过执行以下命令,不会保存任何虚拟机

    $ VBoxManage setextradata global "VBoxInternal2/SavestateOnBatteryLow" 0

    这是一个全局设置,也是一个按虚拟机设置。按虚拟机的值优先于全局值。以下命令将保存所有虚拟机的状态,但不保存虚拟机“foo”的状态

    $ VBoxManage setextradata global "VBoxInternal2/SavestateOnBatteryLow" 1
    $ VBoxManage setextradata "foo" "VBoxInternal2/SavestateOnBatteryLow" 0

    第一行实际上不是必需的,因为默认情况下会执行保存状态操作。

传递 SSE4.1/SSE4.2 指令

为了向客户机提供SSE 4.1/SSE 4.2支持,主机CPU必须实现这些指令集。这些指令集默认暴露给客户机,但可以通过使用以下命令为某些客户机禁用这些指令

$ VBoxManage setextradata VM-name \
VBoxInternal/CPUM/IsaExts/SSE4.1 0
$ VBoxManage setextradata VM-name \
VBoxInternal/CPUM/IsaExts/SSE4.2 0

这些是按虚拟机设置,默认情况下已启用。

支持键盘指示器同步

此功能使主机键盘指示灯(LED)在机器窗口激活时与虚拟机模拟键盘的指示灯匹配。它目前在 macOS 和 Windows 主机上实现。此功能在支持的主机操作系统上默认启用。您可以通过运行以下命令禁用此功能:

$ VBoxManage setextradata VM-name GUI/HidLedsSync 0

这是一个按虚拟机设置,默认启用。

捕获选定设备的 USB 流量

您可以捕获单个 USB 设备的 USB 流量,或者在根集线器级别捕获所有连接到根集线器的 USB 设备的流量。Oracle VirtualBox将流量以与 Wireshark 兼容的格式存储。要捕获特定 USB 设备的流量,必须使用VBoxManage将其连接到虚拟机,使用以下命令:

VBoxManage controlvm VM-name usbattach device uuid|address --capturefile filename
               

要在虚拟机未运行时在根集线器上启用捕获,请使用以下命令

VBoxManage setextradata VM-name \
VBoxInternal/Devices/usb-ehci/0/LUN#0/Config/CaptureFilename filename
               

上面的命令启用了连接到 EHCI 控制器的根集线器的捕获。要为其启用 OHCI 或 XHCI 控制器,请将usb-ehci替换为usb-ohciusb-xhci

配置心跳服务

Oracle VirtualBox提供了一个简单的健康检查服务。一旦客户机增强功能激活,客户机就会向主机发送频繁的健康检查 ping。如果客户机在未正确终止服务的情况下停止发送健康检查 ping,虚拟机进程将在 VBox.log 文件中记录此事件。将来可能可以配置专用操作,但目前日志文件中只有一个警告。

有两个参数需要配置。健康检查间隔定义了两次健康检查 ping 之间的时间。默认值为 2 秒,即Oracle VirtualBox客户机增强功能的健康检查服务将每两秒发送一次健康检查 ping。可以通过以下方式配置纳秒值:

VBoxManage setextradata VM-name \
VBoxInternal/Devices/VMMDev/0/Config/HeartbeatInterval 2000000000

健康检查超时定义了主机在将客户机定义为无响应之前等待最后一次健康检查 ping 的时间。默认值为健康检查间隔的 2 倍(4 秒),可以按以下方式配置(以纳秒为单位):

VBoxManage setextradata VM-name \
VBoxInternal/Devices/VMMDev/0/Config/HeartbeatTimeout 4000000000

如果健康检查超时,将出现类似VMMDev: HeartBeatCheckTimer: Guest seems to be unresponsive. Last heartbeat received 5 seconds ago.的日志消息。如果在此警告之后收到另一个健康检查 ping,将出现类似VMMDev: GuestHeartBeat: Guest is alive.的日志消息。

磁盘映像加密

Oracle VirtualBox允许您透明地加密存储在虚拟机硬盘映像中的数据。它不依赖于特定的映像格式。已加密数据的映像在Oracle VirtualBox和其他虚拟化软件之间不可移植。

Oracle VirtualBox在 XTS 模式下使用 AES 算法,并支持 128 位或 256 位数据加密密钥(DEK)。DEK 以加密形式存储在介质属性中,并在虚拟机启动期间通过输入在映像加密时选择的密码来解密。

由于 DEK 作为虚拟机配置文件的一部分存储,因此妥善保管它非常重要。丢失 DEK 意味着存储在磁盘映像中的数据将无法恢复。用户负责维护所有与虚拟机相关数据的完整且最新的备份。

磁盘加密的限制

使用此功能时,用户需要注意一些限制

  • 此功能是Oracle VirtualBox Extension Pack的一部分,需要安装。否则,磁盘加密将不可用。

  • 由于加密仅对存储的用户数据有效,因此目前无法检查磁盘映像的元数据完整性。攻击者可能会通过删除或更改映像中的数据块或更改磁盘大小等元数据项来破坏数据。

  • 导出包含加密磁盘映像的设备是不可能的,因为OVF规范不支持此功能。因此,所有映像在导出期间都会被解密。

  • DEK 在虚拟机运行时保留在内存中,以便能够解密客户机读取的数据和加密客户机写入的数据。尽管这应该是显而易见的,但用户需要意识到这一点,因为攻击者可能会从受损的主机中提取密钥并解密数据。

  • 在加密或解密映像时,密码会通过Oracle VirtualBox API 以明文形式传递。需要牢记这一点,尤其是在使用利用 Web 服务的第三方 API 客户端时,密码可能会通过网络传输。在这种情况下,HTTPS 是必需的。

  • 只有在没有快照或存在线性快照链的情况下,才能对具有差异映像的加密映像进行加密。此限制可能会在将来的Oracle VirtualBox版本中得到解决。

  • 磁盘加密功能只能保护为虚拟机配置的磁盘内容。它不涵盖与虚拟机相关的任何其他数据,包括保存状态或配置文件本身。

加密磁盘映像

加密磁盘映像可以使用VirtualBox ManagerVBoxManage完成。虽然VirtualBox Manager更容易使用,但它是按虚拟机工作的,并加密附加到特定虚拟机的 <$>所有磁盘映像。使用VBoxManage可以加密单个映像,包括所有差异映像。要使用VBoxManage加密未加密的介质,请使用:

VBoxManage encryptmedium uuid|filename \
--newpassword filename|- --cipher cipher-ID --newpasswordid "ID
                  

要提供加密密码,请将VBoxManage指向存储密码的文件,或指定-以让VBoxManage在命令行上询问您密码。

cipher 参数指定用于加密的密码,可以是AES-XTS128-PLAIN64AES-XTS256-PLAIN64。指定的密码标识符可由用户自由选择,并用于在虚拟机启动期间提供多个密码时进行正确标识。

如果用户在加密多个映像时使用相同的密码,并且使用相同的密码标识符,则用户在虚拟机启动期间只需提供一次密码。

启动带有加密映像的虚拟机

当使用VirtualBox Manager启动虚拟机时,将打开一个对话框,用户需要在其中输入附加到虚拟机的所有加密映像的所有密码。如果使用 VBoxHeadless 等其他前端,一旦客户机尝试访问加密磁盘,虚拟机就会暂停。用户需要使用VBoxManage通过以下命令提供密码:

VBoxManage controlvm uuid|vmname addencpassword ID
                     password [--removeonsuspend yes|no]

ID必须与加密映像时提供的密码标识符相同。password是在加密映像时使用的密码。可选地,您可以指定--removeonsuspend yes|no 来指定是否在虚拟机挂起时从虚拟机内存中删除密码。在虚拟机恢复之前,用户需要再次提供密码。当虚拟机因主机挂起事件而挂起,并且用户不希望密码保留在内存中时,这很有用。

解密加密映像

在某些情况下,可能需要解密以前加密的映像。这可以在VirtualBox Manager中对整个虚拟机进行,或使用VBoxManage执行以下命令来完成:

VBoxManage encryptmedium uuid|filename --oldpassword file|-

唯一必需的参数是用于加密映像的密码。选项与加密映像相同。

半虚拟化调试

本节介绍如何使用准虚拟化提供程序支持的接口调试客户机操作系统。

注意

准虚拟化调试会显著改变客户机操作系统的行为,应仅供专家用户用于调试和诊断。

这些调试选项以逗号分隔的键值对字符串形式指定。空字符串会禁用准虚拟化调试。

Hyper-V 调试选项

下面列出的所有选项都是可选的,因此当未指定相应的键值对时,将使用指定的默认值。

  • Key: enabled

    Value: 01

    Default: 0

    指定1以启用 Hyper-V 调试接口。如果未指定此键值对或值为1以外的值,则无论是否存在其他键值对,Hyper-V 调试接口都将禁用。

  • Key: address

    值:IPv4地址

    默认值:127.0.0.1

    指定远程调试器连接的IPv4地址。

  • Key: port

    值:UDP端口号

    默认值:50000

    指定远程调试器连接的UDP端口号。

  • Key: vendor

    值:CPUID报告给客户机的Hyper-V供应商签名

    Default: 启用调试时:Microsoft Hv,否则:VBoxVBoxVBox

    指定通过CPUID暴露给客户机的Hyper-V供应商签名。对于调试Microsoft Windows客户机,要求虚拟机管理程序报告Microsoft供应商。

  • Key: hypercallinterface

    Value: 01

    Default: 0

    指定当客户机请求时,是否应建议使用超调用而不是MSR来启动主机和客户机之间的调试数据传输。

  • Key: vsinterface

    Value: 01

    Default: 启用调试时为1,否则为0

    指定是否向客户机公开VS#1虚拟化服务接口。此接口是调试Microsoft Windows 10 32位客户机所必需的,但对于其他Windows版本是可选的。

设置 Windows 客户机以使用 Hyper-V 半虚拟化提供程序进行调试

Windows支持通过串行电缆、USB、IEEE 1394 Firewire和以太网进行调试。USB和IEEE 1394不适用于虚拟机,以太网需要Windows 8或更高版本。虽然串行连接通用可用,但速度慢。

使用 Hyper-V 调试传输进行调试,支持 Windows Vista 及更高版本,具有显著优势。由于直接的主机到客户机传输,它提供了出色的性能,易于设置,并且对虚拟机监控程序的要求最低。它可以与运行在虚拟机相同主机上的调试器一起使用,也可以与网络连接上的单独计算机上的调试器和虚拟机一起使用。

先决条件

  • 配置了 Hyper-V 半虚拟化并且运行 Windows Vista 或更新 Windows 客户机的虚拟机。您可以使用以下VBoxManage命令的输出检查虚拟机的有效半虚拟化提供程序:

    $ VBoxManage showvminfo VM-name
                               
  • 足以调试虚拟机中Windows版本的最新版Microsoft WinDbg调试器。

  • 虽然 Windows 8 及更高版本 Windows 客户机自带 Hyper-V 调试支持,但 Windows 7 和 Vista 不自带。要将 Hyper-V 调试与 Windows 7 或 Vista 客户机一起使用,请从 Windows 8.0 安装中复制kdvm.dll文件。该文件通常位于C:\Windows\System32。将其复制到 Windows 7/Vista 客户机中的相同位置。确保复制与客户机操作系统匹配的 DLL 的 32 位或 64 位版本。

    注意

    只有 Windows 8.0 包含kdvm.dll。Windows 8.1 及更高版本 Windows 不包含。

虚拟机和客户机配置

  1. 关闭虚拟机。

  2. 使用以下VBoxManage命令启用调试选项:

    $ VBoxManage modifyvm VM-name --paravirt-debug "enabled=1"

    上述命令假定您的调试器将连接到您主机上的UDP端口50000。但是,如果您需要在远程机器上运行调试器,则可以在此处指定远程地址和端口。例如

    $ VBoxManage modifyvm VM-name \
    --paravirt-debug "enabled=1,address=192.168.32.1,port=55000"

    有关完整选项集,请参阅Hyper-V 调试选项

  3. 启动虚拟机。

  4. 在客户机中,启动一个提升的命令提示符并执行以下命令

    • 对于Windows 8或更高版本的Windows客户机

      bcdedit /dbgsettings net hostip:5.5.5.5 port:50000 key:1.2.3.4
    • 对于Windows 7或Vista客户机

      bcdedit /set loadoptions host_ip=5.5.5.5,host_port=50000,encryption_key=1.2.3.4
      bcdedit /set dbgtransport kdvm.dll

      使用 Hyper-V 调试传输时,bcdedit命令中的 IP 地址和端口将被忽略。可以输入任何有效的 IP 和大于 49151 且小于 65536 的端口号。

      bcdedit命令中的加密密钥是相关的,并且必须有效。上面示例中使用的密钥“1.2.3.4”是有效的,如果安全性不构成问题,则可以使用。如果您不指定任何加密密钥,bcdedit将为您生成一个,您需要复制此密钥,稍后在远程端输入到 Microsoft WinDbg 中。此加密密钥用于加密 Windows 和调试器之间交换的调试数据。

    • 运行以下一个或多个命令以启用Windows客户机相应阶段或组件的调试

      bcdedit /set debug on
      bcdedit /set bootdebug on
      bcdedit /set {bootmgr} bootdebug on

      请注意,bootdebug选项仅在 Windows 8 或更高版本使用 Hyper-V 调试传输时才有效。有关bcdedit选项的详细说明,请参阅 Microsoft Windows 文档。

  5. 在您的主机或远程主机上启动Microsoft WinDbg。

    文件菜单中,选择内核调试。在NET选项卡中,指定您在paravirtdebug选项中使用的 UDP 端口号。如果您没有指定任何端口,则保留为 50000。确保 UDP 端口未被防火墙或其他安全软件阻止。

    密钥字段中,输入1.2.3.4或 Windows 客户机中bcdedit命令的加密密钥。

    单击确定开始监听连接。Microsoft WinDbg 在此阶段通常会显示“等待重新连接”消息。

    或者,要直接启动调试会话,请像这样从命令行运行 WinDbg:

    windbg.exe -k net:port=50000,key=1.2.3.4

    有关完整的命令行语法,请参阅WinDbg文档。

  6. 重新启动您的Windows客户机,然后它应该作为调试对象连接到Microsoft WinDbg。

PC 扬声器直通

作为一项实验性功能,主要是因为它仅限于 Linux 主机且 Linux 发行版覆盖范围未知,Oracle VirtualBox支持将 PC 扬声器传递给主机。PC 扬声器,有时称为系统扬声器,是一种无需常规音频和声卡支持即可产生哔哔声等声音反馈的方式。

Oracle VirtualBox中的 PC 扬声器直通功能仅处理哔哔声。虚拟机的高级 PC 扬声器使用,如 PCM 音频,将无法工作,将导致主机行为未定义。

在 Linux 上产生哔哔声是一个非常复杂的主题。Oracle VirtualBox提供了一系列选项,以尝试使其在尽可能多的 Linux 发行版和系统配置上工作得确定且可靠。这些选项总结在下表中。

表 8。 PC 扬声器配置选项。 PC 扬声器配置选项

代码

设备

备注

1

/dev/input/by-path/platform-pcspkr-event-spkr

直接使用主机PC扬声器。

2

/dev/tty

使用虚拟机进程的终端关联。虚拟机需要在虚拟控制台上启动。

3

/dev/tty0/dev/vc/0

只能由root用户或具有cap_sys_tty_config能力的用户的用户使用。

9

用户指定的控制台或evdev设备路径。

与代码1到3相同,但使用自定义设备路径。

70

/dev/tty

仅标准蜂鸣声。丢失频率和长度。参见代码2。

79

用户指定的终端设备路径。

与代码70相同,但使用自定义设备路径。

100

以上所有。

尝试所有可用代码。

要启用PC扬声器直通,请使用以下命令

VBoxManage setextradata VM-name "VBoxInternal/Devices/i8254/0/Config/PassthroughSpeaker" N
               

N替换为您要使用的代码。更改此设置将在下次启动虚拟机时生效。在所有主机操作系统上启用 PC 扬声器直通是安全的。它只会对 Linux 生效。

虚拟机日志文件VBox.log包含以PIT: speaker:为前缀的行,显示 PC 扬声器直通设置活动。它会提示它选择了哪个设备或为什么失败。

为虚拟机启用 PC 扬声器直通通常是简单部分。真正的困难在于确保Oracle VirtualBox可以访问必要的设备,因为在典型的 Linux 安装中,大多数设备只能由root用户访问。您应该遵循首选方法来永久更改此设置,例如参考您的发行版的文档。由于存在无数的 Linux 发行版变体,我们只能提供一般性提示,即通常有一种方法可以允许 X11 会话用户访问其他设备,或者您需要使用 udev 配置文件找到一个有效的解决方案。如果所有方法都失败,您可以尝试使用在主机系统启动时足够晚运行的脚本来设置权限。

有时内核会应用额外的规则来限制访问。例如,虚拟机进程必须具有与配置用于发出哔哔声的设备相同的控制终端,这对于Oracle VirtualBox等 GUI 应用程序来说通常非常困难。上表包含一些提示,但总的来说,请参考 Linux 文档。

如果您在即使设备权限已设置且 VBox.log 确认其使用 evdev 或控制台进行 PC 扬声器控制的情况下仍无法获得任何哔哔声,请检查您的系统是否具有 PC 扬声器。某些系统没有。其他并发症可能源于 Linux 将 PC 扬声器输出重定向到声卡。检查连接到声卡的扬声器是否能听到哔哔声。如今几乎所有系统都有一台。最后,检查音频混音器控件是否有一个名为beep的通道,该通道可能隐藏在混音器设置中,并且未静音。

通过 USB/IP 访问通过网络公开的 USB 设备

Oracle VirtualBox支持通过 USB over IP 协议在网络上公开 USB 设备,而无需配置内核和 usbip 工具提供的客户端。此外,此功能与在任何支持的主机上运行的Oracle VirtualBox兼容,而不是像官方客户端那样仅限于 Linux。

要启用对USB/IP设备直通的支持,请使用以下命令添加导出设备的设备服务器

VBoxManage usbdevsource add unique-name --backend USBIP --address device-server[:port]

导出到设备服务器的 USB 设备随后可以通过VirtualBox ManagerVBoxManage访问,就像任何本地连接的 USB 设备一样。这可以多次使用以访问不同的设备服务器。

要删除设备服务器,可以使用以下命令

$ VBoxManage usbdevsource remove unique-name            

在 Linux 系统上设置 USB/IP 支持

本节简要概述了如何设置基于 Linux 的系统作为 USB 设备服务器。服务器上的系统要求usbip-core.kousbip-host.ko内核驱动程序可用,并且已安装 USB/IP 工具包。必要工具的具体安装方法取决于所使用的发行版。例如,对于基于 Debian 的系统,使用以下命令安装所需的工具:

$ apt-get install usbip-utils

要检查是否已安装必要的工具,请使用以下命令

$ usbip list -l
      

这将产生类似于下面示例中所示的输出

 - busid 4-2 (0bda:0301)
   Realtek Semiconductor Corp. : multicard reader (0bda:0301)

 - busid 5-1 (046d:c52b)
   Logitech, Inc. : Unifying Receiver (046d:c52b)
      

如果一切都已安装,则需要使用以下命令以root身份启动 USB/IP 服务器:

# usbipd -D

请参阅已安装发行版的文档,以确定如何在系统启动时启动服务。

默认情况下,服务器上不导出任何设备。必须手动为每个设备执行此操作。要导出设备,请使用以下命令

# usbip bind -b "bus identifier"

要导出上一个示例中的多卡读卡器

# usbip bind -b 4-2

安全注意事项

服务器和客户端之间的通信未加密,并且不需要任何授权即可访问导出的设备。攻击者可能会嗅探敏感数据或控制设备。为减轻此风险,应将设备公开到只有受信任的客户端才能访问的本地网络。要在公共网络上远程访问设备,应使用 VPN 解决方案来提供所需的安全性保护。

在 Windows 主机上使用 Hyper-V 和Oracle VirtualBox

Oracle VirtualBox可以在运行 Hyper-V 的 Windows 主机上使用。这是一项实验性功能。

无需进行任何配置。 Oracle VirtualBox 会自动检测 Hyper-V,并将其用作主机系统的虚拟化引擎。虚拟机窗口状态栏中的 CPU 图标表示正在使用 Hyper-V。

注意

使用此功能时,某些主机系统可能会出现显著的 Oracle VirtualBox 性能下降。

嵌套虚拟化

Oracle VirtualBox 支持嵌套虚拟化。此功能可将硬件虚拟化功能直通(passthrough)到客户机虚拟机。这意味着您可以在 Oracle VirtualBox 客户机、Oracle VM Server 或 KVM 等虚拟机监控程序上安装 Oracle VirtualBox。然后,您可以在客户机虚拟机中创建和运行虚拟机。

主机CPU上不存在的硬件虚拟化功能将不会暴露给客户机。此外,某些功能(如嵌套分页)尚未支持直通到客户机。

您可以通过以下方式之一启用嵌套虚拟化功能

  • VirtualBox Manager 中,选择“处理器”选项卡下的“启用嵌套 VT-x/AMD-V”复选框。要禁用此功能,请取消选中该复选框。

  • 使用 VBoxManage modifyvm 命令的 --nested-hw-virt 选项来启用或禁用嵌套虚拟化。请参阅 VBoxManage modifyvm

VBoxSVC 在 Windows Session 0 中运行

Oracle VirtualBox 支持在 Windows 会话 0 中执行 VBoxSVC。这允许 VBoxSVC 作为常规 Windows 服务运行,进而使无界面虚拟机即使在用户注销后也能继续运行。
注意

这目前是一项实验性功能。

此功能默认禁用,可以通过在 Windows 注册表项 HKEY_LOCAL_MACHINE\Software\Oracle\VirtualBox\VBoxSDS 中创建 REG_DWORD 值 ServerSession0 来启用。将值的数据指定为 1 可启用该功能,指定为 0 可禁用该功能。需要重新启动主机才能使更改生效。

已知问题

  • 由于不同的 Windows 会话具有各自的资源集,因此当至少一个 Oracle VirtualBox 进程在会话 0 中运行时,在访问交互式用户会话中创建的网络共享时可能会出现一些问题。

    要在会话0中访问网络共享,一种可能的解决方法是建立对共享的永久访问,然后重新启动主机。

VISO 文件格式 / RTIsoMaker

ISO 映像制作器

概要

RTIsoMaker [选项] [@commands.rsp] <文件规范...>

描述

构造虚拟ISO 9660 / Joliet / UDF / HFS混合镜像,并将其写入文件 (RTIsoMaker) 或作为虚拟镜像 (VISO) 提供服务。

VISO 文件格式

VISO文件是一个虚拟ISO镜像,即从主机上的一堆文件在内存中构建。VISO只是描述如何使用与mkisofs和genisoimage大致相似的语法进行操作的“食谱”。

一个要求是 VISO 文件必须以 --iprt-iso-maker-file-marker 选项之一开头。您使用的选项将决定读取文件时使用的引号和转义规则。该选项将映像 UUID 作为参数。

VISO文件被视为UTF-8,且不得包含任何字节顺序标记 (BOM)。目前无法在VISO文件中注释掉行。

文件规范和 --name-setup

所有不以“@”开头的非选项都被视为指示应添加到ISO映像的文件、目录或类似内容。目录会递归添加,内容受筛选选项的约束。

由于 ISO 上最多可以有六个不同的命名空间,因此控制每个命名空间使用的名称并能够将某个对象排除在一个或多个命名空间之外会非常方便。 --name-setup 选项指定了将要使用的文件规范格式。

默认设置为

--name-setup iso+joliet+udf+hfs

这意味着您为所有命名空间指定一个ISO上的名称,后跟“=”和源文件系统名称。仅指定源文件系统会将文件/目录/其他添加到ISO映像的根目录。

让我们看看以下两个例子

/docs/readme.txt=/home/user/Documents/product-x-readme.txt

/home/user/Documents/product-x-readme.txt

在第一种情况下,文件 '/home/user/Documents/product-x-readme.txt' 将作为 '/docs/readme.txt' 添加到所有启用的命名空间中的 ISO 映像。在主 ISO 9660 命名空间中,文件名将默认转换为大写,因为这是规范的要求。

在第二种情况下,该文件将以名称 'product-x-readme.txt' 添加到所有命名空间下的根目录中。但是,在主 ISO 9660 命名空间中,该名称将根据当前 ISO 级别进行转换,可能大写,也可能截断。

给定 --name-setup iso,joliet,udf,您可以为每个命名空间单独指定名称。如果省略任何名称,它们将使用最后给定的名称。任何留空的名称(==)都将被视为省略。

每个命名空间中使用不同的名称

/ISO.TXT=/Joliet.TxT=/UDF.txt=/tmp/iso/real.txt

在 ISO 9660 命名空间中使用特定名称,其余命名空间使用相同名称

/ISO.TXT=/OtherNamespaces.TxT=/tmp/iso/real.txt

从 ISO 9660 命名空间中省略文件

=/OtherNamespaces.TxT=/tmp/iso/real.txt

从 joliet 命名空间中省略文件

/ISO.TXT==/UDF.TxT=/tmp/iso/real.txt

在所有地方使用与源文件相同的名称

/tmp/iso/real.txt

例如,使用 --name-setup udf,您可以将文件/目录/其他内容添加到选定的命名空间,而无需使用上面更复杂的空名称语法。

添加目录时,您只能控制目录本身的命名和省略,而不能控制其下任何递归添加的文件和目录。

选项

概述

-o output-file
--output=output-file

输出文件名。VISO 模式不支持此选项。

--name-setup=spec

配置活动命名空间以及如何解释文件规范。规范是逗号分隔的列表。列表中的每个元素都是由空格、“'+'”或“'|'”分隔的子列表,这些列表给出了元素控制的命名空间。命名空间分为主命名空间和次命名空间,您不能在次命名空间属于主命名空间之前指定它。

主要命名空间和括号中的别名

  • iso(primary, iso9660, iso-9660, primary-iso, iso-primary)

  • joliet

  • udf

  • hfs (hfs-plus)

次要命名空间

  • rock: 之前主要命名空间上的 rock ridge (iso / joliet)

  • iso-rock: 主 ISO 9660 命名空间上的 rock ridge 扩展

  • joliet-rock: joliet 命名空间上的 rock ridge (只是为了好玩)

  • trans-tbl: 之前主要命名空间上的翻译表文件

  • iso-trans-tbl

  • joliet-trans-tbl

  • udf-trans-tbl

  • hfs-trans-tbl

--name-setup-from-import

此选项用于一个或多个 --import-iso 操作之后,它将尽可能选择与导入内容匹配的配置。如果导入的 ISO 仅包含 iso9660 命名空间,则会删除 joliet、udf 和 hfs 命名空间。这在向 ISO 添加其他文件时非常有用,可以防止客户机在挂载 ISO 时选择不包含导入 ISO 内容的命名空间。

--push-iso=iso-file
--push-iso-no-joliet=iso-file
--push-iso-no-rock-iso-file
--push-iso-no-rock-no-joliet=iso-file

打开指定的 ISO 文件,并将其用作源文件系统,直到遇到相应的 --pop 选项。这些变体用于选择要访问(或不访问)的 ISO 上的命名空间。这些选项对于从 ISO 复制文件/目录/内容非常方便,无需先提取它们,或使用 :iprtvfs: 语法。

--pop

弹出源文件系统堆栈的 --push-iso

--import-iso=iso-file

导入给定 ISO 文件中的所有内容,包括引导配置和系统区域(前 16 个扇区)的内容。您可以使用 --name-setup 来省略命名空间。

命名空间

--iso-level=0|1|2|3

设置 ISO 级别

  • 0: 禁用主 ISO 命名空间。

  • 1: ISO 级别 1: 文件名为 8.3 格式,且限制为 4GB - 1。

  • 2: ISO 级别 2: 31 个字符的名称,且限制为 4GB - 1。

  • 3: ISO 级别 3: 31 个字符的名称,并支持大于等于 4GB 的文件。(默认)

  • 4: 其他工具使用的虚构级别。尚未实现。

--rock-ridge
--limited-rock-ridge
--no-rock-ridge

启用或禁用主 ISO 9660 命名空间的 rock ridge 支持。 --limited-rock-ridge 选项会省略根目录中的一些位,这些位会导致 Linux 选择 rock ridge 而非 joliet。

默认:--limited-rock-ridge

-J
--joliet
--no-joliet

启用或禁用 joliet 命名空间。此选项必须位于任何文件规范之前。

默认:--joliet

--joliet-ucs-level=1|2|3
--ucs-level=1|2|3

设置 Joliet UCS 支持级别。目前这仅在映像中标记,但不在实际路径名上强制执行。

默认级别:3

文件属性

--rational-attribs

启用合理的文件属性处理(默认)

  • 所有者 ID 设置为零

  • 组 ID 设置为零

  • 对于不可执行文件,模式设置为 0444。

  • 对于可执行文件,模式设置为 0555。

  • 对于目录,模式设置为 0555,保留粘滞位。

--strict-attribs

--rational-attribs 计数器并导致属性按其在源中出现的原样记录。

--file-mode=mode
--no-file-mode

控制 rock ridge、UDF 和 HFS 的强制文件模式掩码。

--dir-mode=mode
--no-dir-mode

控制 rock ridge、UDF 和 HFS 的强制目录模式掩码。

--new-dir-mode=mode

控制隐式创建的目录的默认模式掩码(rock ridge、UDF、HFS)。 --dir-mode 选项将覆盖此设置。

--chmod=mode:on-iso-file

显式设置已添加到 ISO 的文件/目录/其他内容的 rock ridge、UDF 和 HFS 文件模式。模式可以是八进制、ra+xa+ra+rx。(更复杂的模式规范的支持可能会在以后实现。)

请注意,只有当前 --name-setup 中的命名空间会受到影响。

--chown=owner-id:on-iso-file

显式设置已添加到 ISO 的文件/目录/任何内容的 rock ridge、UDF 和 HFS 文件所有者 ID(数字)。

请注意,只有当前 --name-setup 中的命名空间会受到影响。

--chgrp=group-id:on-iso-file

显式设置已添加到 ISO 的文件/目录/任何内容的 rock ridge、UDF 和 HFS 文件组 ID(数字)。

请注意,只有当前 --name-setup 中的命名空间会受到影响。

引导

--eltorito-new-entry
--eltorito-alt-boot

开始一个新的 El Torito 引导条目。

--eltorito-add-image=filespec

文件规范,指定应添加到映像并用作当前引导条目的 El Torito 引导映像的文件。

-b on-iso-file
--eltorito-boot=on-iso-file

指定 ISO 上的文件作为当前引导条目的 El Torito 引导映像。

--eltorito-floppy-12
--eltorito-floppy-144
--eltorito-floppy-288
--no-emulation-boot
--hard-disk-boot

设置当前 El Torito 引导条目的引导映像仿真类型。

--boot-load-seg=seg

为当前 El Torito 引导条目指定映像加载段。

默认:0x7c0

--boot-load-size=sectors

为当前 El Torito 引导条目指定以仿真扇区为单位的映像加载大小。

默认:4(512 字节的扇区)

--no-boot

指示当前 El Torito 引导条目不可引导。(据称 BIOS 将配置仿真,但不会尝试引导。)

--boot-info-table

将 isolinux/syslinux 引导信息表写入当前 El Torito 引导条目的引导映像中。

--eltorito-platform-id=id

设置当前条目的 El Torito 平台 ID,根据使用时是新条目还是验证条目。ID 必须是以下之一:x86PPCMacefi

-c namespec
--boot-catalog=namespec

将 El Torito 引导目录作为文件输入到命名空间中。 namespec 使用与“filespec”相同的格式,但省略了最终的源文件系统名称组件。

-G file
--generic-boot=file

指定一个应在 ISO 映像中偏移量 0 处加载的文件。文件大小不得超过 32KB。创建混合映像时,此文件的某些部分可能会被分区表等重新生成。

字符串属性(仅应用于活动命名空间)

--abstract=file-id

根目录中抽象文件的名称。

-A text|_file-id
--application-id=text|_file-id

应用程序 ID 字符串或根文件名。后者必须以 "_"(下划线) 为前缀。

--biblio=file-id

根目录中参考书目文件的名称。

--copyright=file-id

根目录中版权文件的名称。

-P text|_file-id
--publisher=text|_file-id

发布者 ID 字符串或根文件名。后者必须以 "_"(下划线) 为前缀。

-p text|_file-id
--preparer=text|_file-id

数据准备者 ID 字符串或根文件名。后者必须以 "_"(下划线) 为前缀。

--sysid=text

系统 ID 字符串。

--volid=text
--volume-id=text

卷 ID 字符串(标签)。(可以通过在 --volume-id 出现之间更改活动命名空间,来为主 ISO 9660、joliet、UDF 和 HFS 设置不同的标签。)

--volset=text

卷集 ID 字符串。

兼容性

--graft-points

--name-setup iso+joliet+udf+hfs 的别名。

-l
--long-names

允许 31 个字符的文件名。在此处只需确保 ISO 级别大于等于 2。

-R
--rock

--rock-ridge--strict-attribs 相同。

-r
--rational-rock

--rock-ridge--rational-attribs 相同。

VISO 特有

--iprt-iso-maker-file-marker=UUID
--iprt-iso-maker-file-marker-bourne=UUID
--iprt-iso-maker-file-marker-bourne-sh=UUID

在 VISO 文件中用作第一个选项,用于指定文件 UUID,并指示其使用 bourne-shell 参数引用和转义样式进行格式化。

--iprt-iso-maker-file-marker-ms=UUID
--iprt-iso-maker-file-marker-ms-sh=UUID

在 VISO 文件中用作第一个选项,用于指定文件 UUID,并指示其使用 microsoft CRT 参数引用和转义样式进行格式化。

测试(不适用于 VISO)

--output-buffer-size=bytes

选择特定的输出缓冲区大小以测试虚拟映像读取。

--random-output-buffer-size

启用每个虚拟映像的随机缓冲区大小,使用当前输出缓冲区大小(--output-buffer-size)作为最大值。

--random-order-verification=size

启用映像的验证通过,该验证将虚拟映像和输出映像中给定大小的块以随机顺序进行比较。

技术背景

本章为熟悉计算机体系结构和技术的读者提供额外信息,他们希望进一步了解 Oracle VirtualBox幕后工作原理。阅读本章内容不是成功使用 Oracle VirtualBox 的必需项。

Oracle VirtualBox 存储其文件在哪里

Oracle VirtualBox 中,虚拟机及其设置在 XML 格式的虚拟机设置文件中进行描述。此外,大多数虚拟机都有一个或多个虚拟硬盘。这些通常由磁盘映像表示,例如 VDI 格式的磁盘映像。这些文件的位置可能因主机操作系统而异。请参阅 计算机文件夹

Oracle VirtualBox 的全局配置数据保存在主机上的另一个位置。请参阅 全局设置

虚拟机文件夹

默认情况下,每台虚拟机在您的主机计算机上都有一个目录,其中存储了该机器的所有文件:XML 设置文件(扩展名为 .vbox)及其磁盘映像。这称为计算机文件夹

默认情况下,此计算机文件夹位于一个名为 VirtualBox VMs 的公共文件夹中,该文件夹由 Oracle VirtualBox 在当前系统用户的家目录中创建。此家目录的位置取决于主机操作系统的约定,如下所示:

  • 在 Windows 上,这是 Windows 系统库 Shell32.dll 的 SHGetFolderPath 函数返回的位置,请求用户配置文件。典型位置是 C:\Users\username

  • 在 Linux、macOS 和 Oracle Solaris 上,这通常取自环境变量 $HOME,但对于 root 用户,它取自帐户数据库。这是为了解决用户在使用 Oracle VirtualBox 结合 sudo 工具时经常遇到的问题,因为 sudo 默认不会重置环境变量 $HOME

    在 Linux 和 Oracle Solaris 上,典型位置是 /home/username ,在 macOS 上是 /Users/username

为简单起见,我们将家目录的位置缩写为 $HOME。使用此约定,所有虚拟机的公共文件夹是 $HOME/VirtualBox VMs

例如,当您创建名为Example VM的虚拟机时,Oracle VirtualBox 将创建以下内容:

  • 计算机文件夹:$HOME/VirtualBox VMs/Example VM/

  • 在计算机文件夹中,设置文件:Example VM.vbox

  • 在计算机文件夹中,虚拟磁盘映像:Example VM.vdi

这是使用 创建您的第一个虚拟机 中所述的 创建新虚拟机 向导的默认布局。一旦您开始使用虚拟机,会添加其他文件。日志文件位于名为 Logs 的子文件夹中,如果您拍摄了快照,则它们位于 Snapshots 子文件夹中。对于每个虚拟机,您可以在虚拟机设置中更改其快照文件夹的位置。

您可以通过在 Oracle VirtualBox 主窗口的 文件菜单中选择 首选项来更改默认计算机文件夹。然后,在显示的窗口中,单击 常规选项卡。或者,使用 VBoxManage setproperty machinefolder 命令。请参阅 VBoxManage setproperty

全局设置

除了虚拟机的文件外,Oracle VirtualBox 还在以下目录中维护全局配置数据:

  • Linux 和 Oracle Solaris:$HOME/.config/VirtualBox

  • Windows:$HOME/.VirtualBox

  • macOS:$HOME/Library/VirtualBox

Oracle VirtualBox 会在必要时自动创建此配置目录。您可以通过设置 VBOX_USER_HOME 环境变量,或在 Linux 或 Oracle Solaris 上使用标准的 XDG_CONFIG_HOME 变量来指定备用配置目录。由于全局 VirtualBox.xml 设置文件指向所有其他配置文件,因此这可以实现多个 Oracle VirtualBox 配置之间的切换。

在此配置目录中,Oracle VirtualBox 存储其全局设置文件,一个名为 VirtualBox.xml 的 XML 文件。此文件包括全局配置选项以及已注册的虚拟机列表,并指向它们的 XML 设置文件。

配置数据位置摘要

下表简要概述了 Oracle VirtualBox 主机上的配置数据位置。

表 9. 配置文件位置。 配置文件位置

设置

位置

默认虚拟机文件夹

$HOME/VirtualBox VMs

默认磁盘镜像位置

在每个虚拟机的文件夹中

虚拟机设置文件扩展名

.vbox

媒体注册表

每个虚拟机设置文件

当存储介质连接到虚拟机时,会自动进行媒体注册

Oracle VirtualBox XML 文件

Oracle VirtualBox 将 XML 用于计算机设置文件和全局配置文件 VirtualBox.xml

所有 Oracle VirtualBox XML 文件都已版本化。当创建新的设置文件时(例如,因为创建了新的虚拟机),Oracle VirtualBox 会自动使用当前 Oracle VirtualBox 版本的设置格式。如果降级到早期版本的 Oracle VirtualBox,这些文件可能无法读取。但是,当 Oracle VirtualBox 遇到早期版本的设置文件时(例如,在升级 Oracle VirtualBox 后),它会尝试尽可能地保留设置格式。只有当当前设置无法用旧格式表达时(例如,您启用了早期版本的 Oracle VirtualBox 中不存在的功能),它才会静默升级设置格式。

在这种情况下,Oracle VirtualBox 会将旧的设置文件备份到虚拟机的配置目录中。如果您需要回滚到早期版本的 Oracle VirtualBox,则需要手动将这些备份文件复制回去。

我们故意不记录 Oracle VirtualBox XML 文件的规范,因为我们必须保留将来修改它们的权利。因此,我们强烈建议您不要手动编辑这些文件。 Oracle VirtualBox 通过其 VBoxManage 命令行工具(请参阅 VBoxManage)及其 API(请参阅 Oracle VirtualBox 编程接口)提供对其配置数据的完整访问。

Oracle VirtualBox 可执行文件和组件

Oracle VirtualBox 被设计为模块化和灵活的。当打开 Oracle VirtualBox 图形用户界面 (GUI) 并启动虚拟机时,至少有以下三个进程正在运行:

  • VBoxSVCOracle VirtualBox 服务进程,始终在后台运行。此进程由第一个 Oracle VirtualBox 客户端进程自动启动,并在最后一个客户端退出后不久退出。第一个 Oracle VirtualBox 服务可以是 VirtualBox ManagerVBoxManageVBoxHeadless、Web 服务等。该服务负责记账、维护所有虚拟机状态以及提供 Oracle VirtualBox 组件之间的通信。这种通信是通过 COM/XPCOM 实现的。

    注意

    当我们在此处提及*客户端*时,我们指的是特定 VBoxSVC 服务器进程的本地客户端,而不是网络中的客户端。 Oracle VirtualBox 采用自己的客户端/服务器设计来允许其进程协同工作,但所有这些进程都在主机操作系统上的同一用户帐户下运行,这对用户来说是完全透明的。

  • GUI 进程 VirtualBoxVM,它是一个基于跨平台 Qt 库的客户端应用程序。当不带 --startvm 选项启动时,此应用程序充当 VirtualBox Manager,显示虚拟机及其设置。然后,它将设置和状态更改通信给 VBoxSVC,并反映通过其他方式(例如 VBoxManage 命令)进行的更改。

  • 如果 VirtualBoxVM 客户端应用程序使用 --startvm 参数启动,它将加载包含实际虚拟机监控程序的 VMM 库,然后运行虚拟机并为客户机提供输入和输出。

任何 Oracle VirtualBox 前端或客户端都将与服务进程通信,并且可以控制和反映当前状态。例如,可以使用虚拟机选择器、虚拟机窗口或 VBoxManage 来暂停正在运行的虚拟机,其他组件将始终反映更改后的状态。

Oracle VirtualBox GUI 应用程序称为 VirtualBox Manager,它是几种可用前端或客户端之一。随 Oracle VirtualBox 一起提供的完整列表如下:

  • VirtualBoxVM:实现 VirtualBox Manager 并运行虚拟机的 Qt 前端。

  • VBoxManage:一个不太用户友好但功能更强大的替代方案。请参阅 VBoxManage

  • VBoxHeadless:一个虚拟机前端,不直接提供任何视频输出和键盘或鼠标输入,但可以通过 VirtualBox 远程桌面扩展进行重定向。请参阅 VBoxHeadless,远程桌面服务器

  • vboxwebsrvOracle VirtualBox Web 服务进程,允许远程控制 Oracle VirtualBox 主机。这在 Oracle VirtualBox 软件开发工具包 (SDK) 参考中进行了详细描述。请参阅 Oracle VirtualBox 编程接口

  • Oracle VirtualBox Python Shell:VBoxManage 的 Python 替代品。这也包含在 SDK 参考中。

在内部,Oracle VirtualBox 由许多或多或少独立分离的组件组成。您在分析 Oracle VirtualBox 内部错误消息或日志文件时可能会遇到这些组件。这些包括以下内容:

  • IPRT:一个可移植运行时库,用于抽象文件访问、线程和字符串操作。每当 Oracle VirtualBox 访问主机操作系统功能时,它都会通过此库进行访问,以实现跨平台可移植性。

  • VMM (Virtual Machine Monitor,虚拟机监视器):Hypervisor 的核心。

  • EM (Execution Manager,执行管理器):控制客户机代码的执行。

  • TRPM (Trap Manager,陷阱管理器):拦截和处理客户机陷阱和异常。

  • HM (Hardware Acceleration Manager,硬件加速管理器):提供对 VT-x 和 AMD-V 的支持。

  • GIM (Guest Interface Manager,客户机接口管理器):为客户机提供各种半虚拟化接口的支持。

  • PDM(可插拔设备管理器):VMM 和仿真设备之间的抽象接口,将设备实现与 VMM 内部结构分离,并易于添加新仿真设备。通过 PDM,第三方开发人员可以在不更改 Oracle VirtualBox 本身的情况下向 Oracle VirtualBox 添加新虚拟设备。

  • PGM (Page Manager,页面管理器):一个控制客户机分页的组件。

  • TM (Time Manager,时间管理器):处理计时器和客户机内部时间的所有方面。

  • CFGM (Configuration Manager,配置管理器):提供一个树形结构,其中包含虚拟机和所有模拟设备的配置设置。

  • SSM (Saved State Manager,保存状态管理器):保存和加载虚拟机状态。

  • VUSB (Virtual USB,虚拟 USB):一个 USB 层,它将模拟的 USB 控制器与主机上的控制器和 USB 设备分离。此组件还支持远程 USB。

  • DBGF (Debug Facility,调试工具):一个内置的虚拟机调试器。

  • Oracle VirtualBox 仿真了许多设备,以提供各种客户机所需的硬件环境。其中大多数是许多 PC 兼容计算机中的标准设备,并得到客户机操作系统的广泛支持。特别是对于网络和存储设备,有几种选项可用于仿真设备以访问底层硬件。这些设备由 PDM 管理。

  • 各种客户机操作系统的客户机增强功能。这是从虚拟机内部安装的代码。请参阅 客户机增强功能

  • “Main”组件是特殊的。它将上述所有部分绑定在一起,并且是 Oracle VirtualBox 提供的唯一公共 API。上面列出的所有客户端进程仅使用此 API,从不直接访问虚拟机监控程序组件。因此,使用 Oracle VirtualBox Main API 的第三方应用程序可以确信它始终经过充分测试,并且 Oracle VirtualBox 的所有功能都已完全公开。本 API 在 Oracle VirtualBox SDK 中有描述。请参阅 Oracle VirtualBox 编程接口

硬件虚拟化

Oracle VirtualBox 允许虚拟机中的软件直接在主机处理器上运行,但它采用了一系列复杂的技术来拦截会干扰您的主机的操作。每当客户机尝试执行可能损害您的计算机及其数据的操作时,Oracle VirtualBox 就会介入并采取行动。特别是,对于客户机认为正在访问的许多硬件,Oracle VirtualBox 会根据您如何配置虚拟机来模拟特定的*虚拟*环境。例如,当客户机尝试访问硬盘时,Oracle VirtualBox 会将这些请求重定向到您配置为虚拟机虚拟硬盘的任何内容。这通常是主机上的映像文件。

不幸的是,x86 平台最初不是为虚拟化设计的。检测 Oracle VirtualBox 需要控制正在执行的客户机代码的情况(如上所述)非常困难。为了实现这一点,Oracle VirtualBox 使用*硬件虚拟化*。

Intel 和 AMD 处理器支持硬件虚拟化。这意味着这些处理器可以帮助 Oracle VirtualBox 拦截客户机操作系统可能正在尝试执行的潜在危险操作,并且还使其更容易向虚拟机呈现虚拟硬件。

这些硬件功能在英特尔和 AMD 处理器之间有所不同。英特尔将其技术命名为 VT-x,AMD 将其命名为 AMD-V。英特尔和 AMD 对虚拟化的支持在细节上差异很大,但在原理上差异不大。

注意

在许多系统中,硬件虚拟化功能首先需要在 BIOS 中启用,然后 Oracle VirtualBox 才能使用它们。

在以下场景中,*需要*启用硬件虚拟化:

  • 某些罕见的客户机操作系统,如 OS/2,使用了非常深奥的处理器指令。对于配置为使用此类操作系统的虚拟机,硬件虚拟化会自动启用。

  • Oracle VirtualBox 的 64 位客户机和多处理(SMP)支持都需要启用硬件虚拟化。这并不是一个很大的限制,因为绝大多数 64 位和多核 CPU 都附带硬件虚拟化。此规则的例外情况是一些旧的 Intel 和 AMD CPU。

注意

请不要与Oracle VirtualBox一起运行其他管理程序,无论是开源的还是商业虚拟化产品。虽然通常可以将多个管理程序安装在并行环境中,但请勿尝试同时运行来自竞争性管理程序的多个虚拟机。 Oracle VirtualBox无法跟踪另一个管理程序在同一主机上当前正在尝试做什么,特别是当多个产品尝试使用硬件虚拟化功能(如VT-x)时,这可能会导致整个主机崩溃。

有关硬件虚拟化的技术讨论,请参阅关于硬件虚拟化的详细信息

关于硬件虚拟化的详细信息

对于英特尔 VT-x,CPU 操作有两种不同的模式:VMX 根模式和非根模式。

  • 在根模式下,CPU的运行方式与没有VT-x支持的旧处理器非常相似。有四种权限级别,称为环(ring),并支持相同的指令集,此外还增加了几个虚拟化特定指令。根模式是未虚拟化主机操作系统使用的模式,当虚拟化处于活动状态时,管理程序也使用该模式。

  • 在非根模式下,CPU的运行方式有显著不同。仍然有四种权限环和相同的指令集,但现在有一个称为VMCS(虚拟机控制结构)的新结构来控制CPU的运行并决定某些指令的行为方式。非根模式是访客系统运行的地方。

从根模式切换到非根模式称为“VM入口”,反向切换称为“VM出口”。VMCS包含一个访客和主机状态区域,该区域在VM入口和出口时保存/恢复。最重要的是,VMCS控制哪些访客操作将导致VM出口。

VMCS为访客可以做什么和不可以做什么提供了相当精细的控制。例如,管理程序可以允许访客写入影子控制寄存器中的某些位,但不能写入其他位。这使得在访客可以写入控制位而不干扰管理程序,同时阻止它们修改管理程序需要完全控制的控制位的情况下实现高效虚拟化。VMCS还提供对中断传递和异常的控制。

每当指令或事件导致VM出口时,VMCS都包含有关出口原因的信息,通常附有详细信息。例如,如果对CR0寄存器的写入导致退出,则会记录违规指令,以及写入控制寄存器导致退出这一事实,以及有关源和目标寄存器的信息。因此,管理程序可以高效地处理该条件,而无需像上面描述的CSAM和PATM这样的高级技术。

VT-x 本质上避免了软件虚拟化面临的许多问题。访客拥有自己完全独立的地址空间,与管理程序不共享,从而消除了潜在的冲突。此外,访客操作系统内核代码在VMX非根模式下的权限环0运行,通过在较低权限级别运行环0代码来避免问题。例如,SYSENTER指令可以在不引起问题的情况下过渡到环0。当然,即使在VMX非根模式下的环0,访客代码的任何I/O访问仍然会导致VM退出,从而允许设备仿真。

VT-x 和 AMD-V 之间最大的区别在于 AMD-V 提供了更完整的虚拟化环境。VT-x 要求 VMX 非根代码在启用分页的情况下运行,这排除了实模式代码和非分页保护模式软件的硬件虚拟化。这通常只包括固件和操作系统加载程序,但仍然使 VT-x 管理程序的实现复杂化。AMD-V 没有这个限制。

当然,硬件虚拟化并不完美。与软件虚拟化相比,VM退出的开销相对较高。这对于那些仿真需要大量陷阱的设备来说是个问题。一个例子是16色模式下的VGA设备,其中不仅每个I/O端口访问,而且每个帧缓冲内存访问都必须被捕获。

半虚拟化提供程序

Oracle VirtualBox支持暴露半虚拟化接口,以促进虚拟机内软件的准确高效执行。这些接口要求访客操作系统识别它们的存在并使用它们,以便利用与Oracle VirtualBox管理程序通信的优势。

大多数现代主流客户机操作系统,包括 Windows 和 Linux,都自带一个或多个半虚拟化接口的支持。因此,通常无需在客户机中安装额外软件即可利用此功能。

向访客操作系统暴露半虚拟化提供程序不依赖于主机平台的选择。例如,Hyper-V半虚拟化提供程序可用于在Oracle VirtualBox支持的任何主机平台上运行的虚拟机,而不仅仅是Windows。

Oracle VirtualBox提供以下接口

  • 最小:宣布虚拟化环境的存在。此外,向访客操作系统报告TSC和APIC频率。此提供程序是运行任何Mac OS X访客的强制性要求。

  • KVM:提供Linux KVM管理程序接口,该接口被Linux内核2.6.25或更高版本识别。Oracle VirtualBox的实现目前支持半虚拟化时钟和SMP自旋锁。此提供程序推荐用于Linux访客。

  • Hyper-V:提供Microsoft Hyper-V管理程序接口,该接口被Windows 7及更新的操作系统识别。Oracle VirtualBox的实现目前支持半虚拟化时钟、APIC频率报告、访客调试、访客崩溃报告和宽松的计时器检查。此提供程序推荐用于Windows访客。

嵌套分页和 VPID

除了普通的硬件虚拟化之外,您的处理器还可能支持以下额外的复杂技术:

  • 嵌套分页在硬件中实现了一些内存管理,这可以大大加速硬件虚拟化,因为这些任务不再需要由虚拟化软件执行。

    通过嵌套分页,硬件在翻译线性地址到物理地址时提供了另一个间接层。页表像以前一样工作,但线性地址现在首先被翻译成“访客物理”地址,而不是直接翻译成物理地址。在传统的页表机制下,现在存在一组新的页表寄存器,用于从访客物理地址翻译到主机物理地址,以便访问内存。

    嵌套分页消除了由VM退出和页表访问引起的开销。本质上,使用嵌套页表,访客可以在没有管理程序干预的情况下处理分页。因此,嵌套分页显著提高了虚拟化性能。

    在AMD处理器上,自Barcelona (K10)架构以来就支持嵌套分页。他们现在称之为快速虚拟化索引(RVI)。英特尔通过其Core i7(Nehalem)处理器增加了对嵌套分页的支持,称之为扩展页表(EPT)。

    如果启用了嵌套分页,Oracle VirtualBox管理程序还可以使用大页来减少TLB使用和开销。这可以带来高达5%的性能提升。要为虚拟机启用此功能,请使用VBoxManage modifyvm --large-pages命令。请参阅VBoxManage modifyvm

    如果您拥有支持EPT的Intel CPU,请参阅CVE-2018-3646以了解有关EPT的安全问题。

  • 在英特尔 CPU 上,一项名为虚拟处理器标识符 (VPID) 的硬件功能可以通过减少昂贵的处理器转换旁路缓冲器 (TLB) 刷新需求来大大加速上下文切换。

    要为虚拟机启用这些功能,请使用VBoxManage modifyvm --vtx-vpidVBoxManage modifyvm --large-pages命令。请参阅VBoxManage modifyvm

Oracle VirtualBox编程接口

Oracle VirtualBox为第三方开发者提供了全面的支持。所谓的主API公开了虚拟化引擎的全部功能集。它是完全文档化的,并可供任何想要以编程方式控制Oracle VirtualBox的人使用。

主 API 可通过 Windows 主机上的 COM 或其他主机上的 XPCOM 提供给 C++ 客户端。此外,还存在适用于 SOAP、Java 和 Python 的桥接器。

所有编程信息,如文档、参考信息、头文件和其他接口文件以及示例,都已拆分到一个单独的软件开发工具包(SDK)中。SDK可从https://virtualbox.ac.cn下载。特别是,SDK附带了PDF格式的编程指南和参考手册。本手册包含之前在此用户指南章节中的信息。

故障排除

本章提供常见问题的解答。为了改善您使用Oracle VirtualBox的用户体验,建议阅读本节以了解更多关于常见陷阱的信息,并获得有关如何使用该产品的建议。

过程和工具

问题分类和隔离

虚拟化访客的行为通常与物理系统类似。物理机器遇到的任何问题,虚拟机也会遇到。例如,如果由于外部问题导致Internet连接丢失,虚拟机将与物理机一样受到影响。

如果遇到真正的Oracle VirtualBox问题,首先对其进行分类和隔离会有所帮助。在报告问题之前,应回答以下一些问题:

  • 问题是否特定于某个客户机操作系统?或者特定于某个客户机操作系统的特定版本?特别是对于与 Linux 客户机相关的问题,问题可能特定于 Linux 的某个发行版和版本。

  • 问题是否特定于某个主机操作系统?问题通常不是特定于主机操作系统的,因为Oracle VirtualBox的大部分代码库在所有支持的平台上都是共享的,但尤其是在网络和USB支持方面,主机平台之间存在显著差异。一些GUI相关问题也是特定于主机的。

  • 问题是否特定于某些主机硬件?此类问题通常与主机CPU有关。由于VT-x和AMD-V之间存在显著差异,问题可能特定于其中一种技术。确切的CPU型号也可能产生影响,因为不同的CPU支持不同的功能,这可能会影响访客CPU操作的某些方面。

  • 问题是否特定于客户机 SMP?也就是说,它是否与客户机中的虚拟 CPU (VCPU) 数量有关?使用多个 CPU 通常会显著影响客户机操作系统的内部运行。

  • 问题是否特定于客户附加组件?在某些情况下,这是显而易见的,例如共享文件夹问题。在其他情况下,如显示问题,可能不太明显。如果问题是客户附加组件特定的,它是否也特定于某个版本的客户附加组件?

  • 问题是否特定于某种环境?有些问题与虚拟机外部的特定环境有关。这通常涉及网络设置。某些外部服务器(如DHCP或PXE)的配置可能会暴露不发生于其他类似服务器上的问题。

  • 问题是否是回归问题?知道某个问题是回归问题通常会使其解决方案更容易找到。在这种情况下,了解哪个版本受到影响以及哪个版本不受影响至关重要。

收集调试信息

对于问题确定,收集可以由Oracle VirtualBox支持分析的调试信息通常很重要。本节包含有关可以获取的信息类型的信息。

每次Oracle VirtualBox启动虚拟机时,都会创建一个所谓的发布日志文件,其中包含有关虚拟机配置和运行时事件的大量信息。日志文件名为VBox.log,位于虚拟机日志文件文件夹中,该文件夹默认为$HOME/VirtualBox VMs/VM-name/Logs

启动虚拟机时,最后一次运行的配置文件将被重命名为.1,最多为.3。有时当出现问题时,查看日志会很有用。此外,在请求Oracle VirtualBox支持时,提供相应的日志文件是强制性的。

为了方便起见,对于每个虚拟机,VirtualBox Manager可以在窗口中显示这些日志。从左侧的机器列表中选择一个虚拟机,然后单击机器工具菜单中的日志

发布日志文件VBox.log包含大量诊断信息,例如主机操作系统类型和版本、Oracle VirtualBox版本和构建。它还包括访客配置(CFGM)的完整转储、有关主机CPU类型和支持功能的详细信息、是否启用了硬件虚拟化、有关VT-x/AMD-V设置的信息、状态转换(如创建、运行、暂停、停止)、访客BIOS消息、客户附加组件消息、设备特定日志条目以及执行结束时的最终访客状态和压缩统计信息。

在崩溃的情况下,收集崩溃转储非常重要。这对于主机和访客崩溃都适用。有关在Linux、Oracle Solaris和macOS系统上启用核心转储的信息,请参阅Oracle VirtualBox网站上的以下核心转储文章:

https://virtualbox.ac.cn/wiki/Core_dump.

您还可以使用VBoxManage debugvm创建完整虚拟机的转储。请参阅VBoxManage debugvm

对于与网络相关的问题,捕获网络流量跟踪通常很有帮助。如果流量通过主机上的适配器路由,可以使用Wireshark或类似工具在那里捕获流量。然而,这通常也包括大量与虚拟机无关的流量。

Oracle VirtualBox提供了捕获特定虚拟机网络适配器网络流量的功能。有关启用此捕获的信息,请参阅Oracle VirtualBox网站上的以下网络跟踪文章:

https://virtualbox.ac.cn/wiki/Network_tips.

Oracle VirtualBox创建的跟踪文件是.pcap格式的,并且可以使用Wireshark轻松分析。

使用 VBoxBugReport 命令自动收集调试信息

VBoxBugReport命令用于自动收集Oracle VirtualBox安装的调试信息。当您需要收集信息发送给Oracle支持时,此命令可能很有用。

以下示例显示了如何使用VBoxBugReport

默认情况下,该命令收集Oracle VirtualBox主机的VBoxSVC进程日志、设备设置和全局配置数据。

$ VBoxBugReport
  ...
  0% - collecting VBoxSVC.log.10...
  7% - collecting VBoxSVC.log.9...
  ...
 64% - collecting VBoxSVC.log.1...
 71% - collecting VBoxSVC.log...
 78% - collecting VirtualBox.xml...
 85% - collecting HostUsbDevices...
 92% - collecting HostUsbFilters...
100% - compressing...

Report was written to '2019-03-26-13-32-02-bugreport.tgz'

结果以压缩的 tar 文件存档形式保存在运行该命令的同一目录中。

指定不同的输出文件位置:

$ VBoxBugReport --output ~/debug/bug004.tgz

将所有调试信息输出到单个文本文件,而不是tgz文件

$ VBoxBugReport --text

为名为Windows_10的特定虚拟机收集信息

$ VBoxBugReport Windows_10

此命令收集指定虚拟机的机器设置、客户机属性和日志文件。还包括主机的全局配置信息。

为名为Windows_7Windows_8Windows_10的多个虚拟机收集信息

$ VBoxBugReport Windows_7 Windows_8 Windows_10

收集所有虚拟机的信息:

$ VBoxBugReport --all

要显示可用命令选项的完整列表,请运行VBoxBugReport --help

内置虚拟机调试器

Oracle VirtualBox包含一个内置的虚拟机调试器,高级用户可能会觉得它很有用。该调试器允许您检查并在一定程度上控制虚拟机状态。

注意

请自行承担使用虚拟机调试器的风险。对此不提供支持,并且以下文档仅提供给对x86/AMD64机器指令集有非常高熟悉度以及对PC架构有详细了解的高级用户。熟悉相关访客操作系统内部结构也有很大帮助。

虚拟机调试器在所有常规生产版本的Oracle VirtualBox中都可用,但默认情况下是禁用的,因为普通用户很少需要它。有两种方法可以访问调试器:

  • 使用与虚拟机同时显示的调试器控制台窗口。

  • 使用端口5000上的telnet协议

可以通过以下方式启用调试器:

  • 直接使用VirtualBoxVM --startvm启动虚拟机,并附加--dbg--debug--debug-command-line参数。有关详细信息,请参阅VirtualBoxVM --help命令用法帮助。

  • 在启动Oracle VirtualBox进程之前,将VBOX_GUI_DBG_ENABLEDVBOX_GUI_DBG_AUTO_SHOW环境变量设置为true。设置这些变量(仅检查其是否存在)即使在第一个Oracle VirtualBox进程是虚拟机选择器窗口时也有效。之后从选择器启动的虚拟机将启用调试器。

  • 在启动虚拟机之前,将GUI/Dbg/Enabled附加数据项设置为true。这可以全局或按虚拟机设置。

Oracle VirtualBox应用程序中添加了一个新的调试菜单项。此菜单允许用户打开调试器控制台。

虚拟机调试器命令语法在很大程度上模仿了Microsoft和IBM在DOS、OS/2和Windows上使用的调试器。熟悉symdeb、CodeView或OS/2内核调试器的用户会发现Oracle VirtualBox虚拟机调试器很熟悉。

最重要的命令是help。这将打印所有调试器命令的简要使用帮助。虚拟机调试器支持的命令集会频繁更改,而help命令始终是最新的。

常用命令的简要总结如下:

  • stop:停止虚拟机执行并启用单步执行

  • g:继续虚拟机执行

  • t:单步执行指令

  • rgrhr:打印访客、管理程序和当前寄存器

  • kgkhk:打印访客、管理程序和当前调用堆栈

  • dadbdwdddq:将内存内容打印为ASCII、字节、字、双字和四字

  • u:反汇编内存

  • dg:打印访客的GDT

  • di:打印访客的IDT

  • dl:打印访客的LDT

  • dt:打印访客的TSS

  • dp*:打印访客的页表结构

  • bpbr:设置正常断点和重编译器断点

  • bl:列出断点

  • bc:清除断点

  • writecore:将虚拟机核心文件写入磁盘。请参阅虚拟机核心格式

有关其他可用命令,请参阅内置的help

虚拟机调试器支持符号调试,尽管访客代码的符号通常不可用。对于Oracle Solaris访客,detect命令会自动确定访客操作系统版本并定位访客内存中的内核符号。然后可以使用符号调试。对于Linux访客,detect命令也确定访客操作系统版本,但访客内存中没有符号。内核符号在Linux访客的/proc/kallsyms文件中可用。此文件必须复制到主机,例如使用scp。可以使用loadmap调试器命令使符号信息可供虚拟机调试器使用。请注意,kallsyms文件包含当前加载模块的符号。如果访客的配置发生变化,符号也会发生变化,并且必须进行更新。

对于所有访客,验证是否正确加载了符号的简单方法是使用k命令。访客通常处于空闲状态,并且从符号信息中应该清楚访客操作系统正在执行空闲循环。

另一组调试器命令是info命令集。运行info help可提供完整的用法信息。信息命令提供与各种模拟设备和VMM方面相关的临时数据。没有使用info命令的一般指南,正确的命令取决于正在调查的问题。一些info命令如下:

  • cfgm:打印配置树的分支

  • cpuid:显示访客CPUID叶

  • ioport:打印已注册的I/O端口范围

  • mmio:打印已注册的MMIO范围

  • mode:打印当前分页模式

  • pit:打印i8254 PIT状态

  • pic:打印i8259A PIC状态

  • ohciehcixhci:打印OHCI、EHCI和xHCI USB控制器状态的子集

  • pcnet0:打印PCnet状态

  • vgatext:将VGA帧缓冲区的原始内容打印为标准文本模式

  • timers:打印所有虚拟机计时器

info命令的输出通常需要对模拟设备或Oracle VirtualBox VMM内部进行深入了解。但是,正确使用时,提供的信息可能非常有价值。

虚拟机核心格式

Oracle VirtualBox使用64位ELF格式作为其由VBoxManage debugvm创建的虚拟机核心文件,请参阅VBoxManage debugvm。虚拟机核心文件包含虚拟机的内存和CPU转储,可用于调试您的访客操作系统。64位ELF对象格式规范可在以下网址获得:

http://downloads.openwatcom.org/ftp/devel/docs/elf-64-gen.pdf.

虚拟机核心转储的整体布局如下:

[ ELF 64 Header]
[ Program Header, type PT_NOTE ]
  → offset to COREDESCRIPTOR
[ Program Header, type PT_LOAD ] - one for each contiguous physical memory range
  → Memory offset of range
  → File offset
[ Note Header, type NT_VBOXCORE ]
[ COREDESCRIPTOR ]
  → Magic
  → VM core file version
  → VBox version
  → Number of vCPUs etc.
[ Note Header, type NT_VBOXCPU ] - one for each vCPU
[ vCPU 1 Note Header ]
  [ DBGFCORECPU - vCPU 1 dump ]
[ Additional Notes + Data ] - currently unused
[ Memory dump ]

内存描述符包含相对于客户机的物理地址,而不是虚拟地址。核心文件不包含 MMIO 区域等内存区域。

相关的 C 数据结构和定义可以在Oracle VirtualBox源代码下的以下头文件中找到:include/VBox/dbgfcorefmt.hinclude/iprt/x86.hsrc/VBox/Runtime/include/internal/ldrELFCommon.h

可以使用elfdump和GNU readelf或其他类似实用程序检查虚拟机核心文件。

常规故障排除

在慢速主机文件系统上,客户机显示基于文件的映像的 IDE/SATA 错误

偶尔,某些主机文件系统会提供非常差的写入性能,并因此导致访客超时IDE/SATA命令。这是正常行为,通常不应引起真正的问题,因为访客应重试已超时的命令。然而,像某些Linux版本这样的访客,如果写入映像文件所需的时间超过约15秒,就会出现严重问题。然而,某些文件系统在主机缓存包含大量需要写入的数据时,完成一次写入需要超过一分钟。

此问题的症状是,在大量写入或复制操作期间,客户机无法再访问其文件,通常导致客户机立即挂起。

为了解决这个问题,真正的修复是使用一个不表现出如此不可接受的写入性能的更快的ファイルシステム,但可以配置在写入一定量数据后刷新映像文件。此间隔通常是无限的,但可以为虚拟机的每个磁盘单独配置。

对于 IDE 磁盘,使用以下命令:

VBoxManage setextradata VM-name
"VBoxInternal/Devices/piix3ide/0/LUN#[x]/Config/FlushInterval" [b]

对于 SATA 磁盘,使用以下命令:

VBoxManage setextradata VM-name
"VBoxInternal/Devices/ahci/0/LUN#[x]/Config/FlushInterval" [b]

[x]指定磁盘。对于IDE,0代表主通道上的设备0,1代表主通道上的设备1,2代表次通道上的设备0,3代表次通道上的设备1。对于SATA,使用介于029之间的值。此配置选项仅适用于磁盘。不要将此选项用于CD或DVD驱动器。

间隔的单位([b])是自上次刷新以来写入的字节数。其值必须选择得当,以避免偶尔出现长时间的写入延迟。由于正确的刷新间隔取决于主机和主机文件系统的性能,因此找到能解决问题的最佳值需要一些实验。1000000到10000000(1到10兆字节)之间的值是一个很好的起点。减小间隔会降低问题的可能性和访客的写入性能。将值设置得过低会浪费性能而没有任何好处。间隔为1将为每次写入操作执行一次刷新,并在任何情况下都能解决问题,但写入性能会受到严重影响。

[b]的值设置为0被视为无限刷新间隔,有效地禁用此解决方法。通过为[b]指定空值来删除附加数据键具有相同的效果。

响应客户机 IDE/SATA 刷新请求

如果需要,可以在访客发出IDE FLUSH CACHE命令时刷新虚拟磁盘映像。通常会忽略这些请求以提高性能。以下参数仅适用于磁盘驱动器。不得为DVD驱动器设置。

要为 IDE 磁盘启用刷新,请发出以下命令:

$ VBoxManage setextradata VM-name "VBoxInternal/Devices/piix3ide/0/LUN#[x]/Config/IgnoreFlush" 0

[x]指定磁盘。输入0代表主通道上的设备0,1代表主通道上的设备1,2代表次通道上的设备0,或者3代表次通道上的设备1。

要为 SATA 磁盘启用刷新,请发出以下命令:

$ VBoxManage setextradata VM-name "VBoxInternal/Devices/ahci/0/LUN#[x]/Config/IgnoreFlush" 0

选择磁盘的值 [x] 可以是 0 到 29 之间的值。

请注意,这不会影响根据访客显示基于文件的映像在慢速主机文件系统上的IDE/SATA错误中描述的配置执行的刷新。通过将值设置为1或删除键,可以恢复忽略刷新命令的默认设置。

频率提升下的性能变化

许多多核处理器支持某种形式的频率提升,这意味着如果只有一个核心被利用,它可以运行得比额定CPU频率快50%甚至更多。这导致测量的性能因瞬时整体系统负载而异。确切的行为强烈取决于特定的处理器型号。

因此,在利用频率提升的系统上进行基准测试可能会产生不稳定和不可重复的结果。如果基准测试运行时间短,例如几秒钟,情况尤其如此。为了获得稳定的结果,必须在更长的时间段内运行基准测试,并且除被测试虚拟机外,系统负载保持不变。

频率缩放对 CPU 使用率的影响

在某些硬件平台和操作系统上,CPU 频率缩放可能导致 CPU 使用率报告高度误导。这发生在主机 CPU 负载显著但不重的情况,例如最大值的 15% 到 30% 之间。

大多数操作系统以时间花费来确定CPU使用率,例如测量系统或进程在一秒钟内活跃了多少纳秒。然而,为了节省能源,系统可以在系统未满载时显著降低CPU速度。当CPU以例如一半的最大速度运行时,与全速运行时相比,相同的指令数将花费大约两倍的时间来执行。

取决于特定的硬件和主机操作系统,这种影响会非常显著地扭曲操作系统报告的CPU使用率。报告的CPU使用率可能比CPU全速运行时高出几倍。这种影响可以在主机操作系统和访客操作系统中观察到。

不准确的 Windows CPU 使用率报告

Windows自带的CPU使用率报告工具,如任务管理器或资源监视器,不考虑处理硬件中断所花费的时间。如果中断负载很重,每秒有数千次中断,CPU使用率可能会被显著低估。

此问题影响作为主机和客户机操作系统的 Windows。Sysinternals 工具(例如 Process Explorer)没有此问题。

主机电源管理导致的性能低下

在某些硬件平台和操作系统上,主机 CPU 电源管理会对虚拟化性能产生负面影响。症状可能是客户机中出现断断续续的音频或客户机时钟行为异常。

一些问题可能是由固件或主机操作系统错误引起的。因此,建议更新固件并应用操作系统修复。

为了获得最佳虚拟化性能,应禁用系统中BIOS中的C1E电源状态支持(如果可用)。并非所有系统都支持C1E电源状态。在Intel系统上,应禁用Intel C State设置。禁用其他电源管理设置也可能提高性能。但是,性能和功耗之间必须始终考虑平衡。

Windows 客户机

Windows 7 客户机不支持 USB 3.0

如果为Windows 7或Windows Server 2008 R2访客配置了USB 3.0(xHCI)支持,则访客操作系统将根本没有USB支持。发生这种情况是因为Windows 7早于USB 3.0,因此不附带任何xHCI驱动程序。Microsoft也不通过Windows Update提供任何供应商提供的xHCI驱动程序。

为了解决此问题,需要在客户机中下载并安装 Intel xHCI 驱动程序。Intel 提供的驱动程序是用于 Intel 7 系列/C216 芯片组的 USB 3.0 可扩展主机控制器 (xHCI) 驱动程序。

请注意,该驱动程序仅支持 Windows 7 和 Windows Server 2008 R2。驱动程序包包括对 32 位和 64 位操作系统变体的支持。

更改虚拟机配置后 Windows 蓝屏

更改某些虚拟机设置可能导致Windows访客启动时出现蓝屏。如果您在安装Windows后更改VM设置,或者将已安装Windows的磁盘映像复制到具有不同于原始机器的设置的新虚拟机,则可能会发生这种情况。

这尤其适用于以下设置:

  • ACPI和I/O APIC设置在安装Windows后不应更改。根据这些硬件功能是否存在,Windows安装程序会选择特殊的内核和设备驱动程序版本,如果删除这些硬件功能,将无法启动。为未安装这些功能的Windows虚拟机启用它们不会造成任何伤害。但是,在这种情况下,Windows将不会使用这些功能。

  • 更改存储控制器硬件也会导致启动失败。如果您将磁盘映像从旧版本的Oracle VirtualBox复制到新虚拟机,这也可能适用于您。Oracle VirtualBox使用的IDE控制器硬件的默认子类型是PIIX4。请确保存储控制器设置相同。

启用 SMP 后的 Windows 0x101 蓝屏(IPI 超时)

如果虚拟机配置为具有多个处理器(对称多处理,SMP),则某些Windows访客配置会崩溃并显示0x101错误消息,表明处理器间中断(IPI)超时。这些中断同步处理器之间的内存管理。

根据 Microsoft 的说法,这是由于 Windows 中的竞争条件。Microsoft 提供了热修复程序。

如果这不起作用,请将虚拟处理器数量减少到 1。

Windows 2000 安装失败

安装 Windows 2000 客户机时,您可能会遇到以下问题之一:

  • 安装重新启动,通常在组件注册期间。

  • 安装将整个硬盘填满空日志文件。

  • 安装抱怨msgina.dll安装失败。

这些问题都由Windows 2000的硬盘驱动器驱动程序中的错误引起。发出硬盘请求后,Windows驱动程序代码中存在竞态条件,如果操作完成得太快,就会导致损坏。例如,IDE控制器硬件中断来得太早。在物理硬件上,大多数系统都有保证的延迟,所以问题通常在那里隐藏。然而,也应该可以在物理硬件上重现它。在虚拟环境中,操作可能立即完成,尤其是在具有多个CPU的非常快的系统上,并且中断信号比物理系统更早。解决方案是在传递此类中断之前引入人工延迟。可以使用以下命令为虚拟机配置此延迟:

$ VBoxManage setextradata VM-name "VBoxInternal/Devices/piix3ide/0/Config/IRQDelay" 1

这会将延迟设置为一毫秒。如果这不起作用,请将其增加到 1 到 5 毫秒之间的值。请注意,这会降低磁盘性能。安装后,您应该能够删除该键,或将其设置为 0。

如何记录 Windows 客户机的蓝屏信息

当Windows访客遇到内核崩溃时,它们会显示蓝屏错误。根据Windows的配置方式,信息会保留在屏幕上直到机器重新启动,或者它会自动重新启动。在安装过程中,Windows通常配置为自动重启。通过自动重启,没有机会记录可能对问题确定很重要的蓝屏信息。

Oracle VirtualBox提供了一种在访客想要执行重置时暂停访客的方法。为了启用此功能,请使用以下命令:

$ VBoxManage setextradata VM-name "VBoxInternal/PDM/HaltOnReset" 1

Windows Vista 客户机无网络

在Windows Vista中,Microsoft停止了对Oracle VirtualBox旧版本曾经用作默认虚拟网卡的AMD PCNet卡的供应商支持。对于Windows Vista访客,Oracle VirtualBox现在默认使用Intel E1000卡。

如果出于某种原因,您仍然想使用AMD卡,您需要从AMD网站下载PCNet驱动程序。此驱动程序仅适用于32位Windows。您可以使用共享文件夹将其传输到虚拟机中。请参阅共享文件夹

Windows 客户机导致高 CPU 负载

Windows访客中的许多后台应用程序,尤其是病毒扫描程序,即使访客看似处于空闲状态,也已知会显著增加CPU负载。在虚拟机中停用病毒扫描程序(如果可能)可以减轻此问题。

Windows更新,尤其是在Windows 10和Windows 11访客上,也可能导致访客CPU使用率和存储活动暂时增加。现代Windows版本会在后台进行大量更新,以部署新功能和安全修复程序。

访问共享文件夹时延迟过长

Windows访客对共享文件夹的访问性能可能会因Oracle VirtualBox共享文件夹名称服务解析期间的延迟而降低。为了解决这些延迟,请将以下条目添加到Windows访客的\windows\system32\drivers\etc\lmhosts文件中:

255.255.255.255        VBOXSVR #PRE
255.255.255.255        VBOXSRV #PRE

进行此更改后,需要重新启动客户机。

Windows 98 客户机中 USB 平板电脑坐标错误

如果 Windows 98 虚拟机配置为使用模拟 USB 平板电脑(绝对定位设备),则坐标转换可能不正确,并且指针被限制在客户机屏幕的左上角四分之一区域。

Windows 98 中的 USB HID(人机接口设备)驱动程序非常老旧,并且不像现代操作系统那样处理平板电脑。为了解决此问题,请使用以下命令:

$ VBoxManage setextradata VM-name "VBoxInternal/USB/HidMouse/0/Config/CoordShift" 0

要恢复默认行为,请删除该键或将其值设置为 1。

还原快照后,Windows 客户机从 Active Directory 域中移除

如果 Windows 客户机是 Active Directory 域的成员,并且使用了 Oracle VirtualBox 的快照功能,则在恢复较旧快照后,客户机可能会从 Active Directory 域中移除。

这是由 Windows 为安全目的定期执行的自动计算机密码更改引起的。您可以禁用此功能,方法如 Microsoft 的这篇文章 所示。

Windows 3.x 限制为 64 MB 内存

Windows 3.x 客户机通常内存限制为 64 MB,即使虚拟机分配了更多内存也是如此。尽管 Windows 3.1 理论上可以使用高达 512 MB 的内存,但它只能使用 XMS 接口提供的内存。随 MS-DOS 和 Microsoft Windows 3.x 提供的 HIMEM.SYS(Microsoft XMS 管理器)版本在标准 PC 上只能使用高达 64 MB 的内存。

这是一个已知的 HIMEM.SYS 限制。Microsoft 知识库文章 KB 84388 详细描述了 Windows 3.1 内存限制。

如果使用不同的 XMS 提供程序,Windows 3.x 客户机可以使用超过 64 MB 的内存。这可以是较新的 HIMEM.SYS 版本(例如 Windows 98 随附的版本),或功能更强大的第三方内存管理器(例如 QEMM)。

Linux 和 X11 客户机

Linux 客户机可能导致高 CPU 负载

某些 Linux 客户机即使在客户机系统显示空闲时也可能导致高 CPU 负载。这可能是由于客户机内核的计时器频率过高造成的。例如,某些 Linux 发行版(如 Fedora)提供的 Linux 内核配置的计时器频率为 1000Hz。我们建议重新编译客户机内核,并将计时器频率选择为 100Hz。

Red Hat Enterprise Linux 随附的 Linux 内核以及相关的 Linux 发行版(如 CentOS 和 Oracle Linux)的内核支持 divider=N 内核参数。因此,这些内核无需重新编译即可支持较低的计时器频率。我们建议您添加 divider=10 内核参数,将客户机内核计时器频率选择为 100Hz。

有错误的 Linux 2.6 内核版本

Linux 内核中以下几个 bug 会阻止它们在 Oracle VirtualBox 中正确执行,导致虚拟机启动崩溃。

  • Linux 内核版本 2.6.18 和某些 2.6.17 版本引入了一个竞态条件,可能导致 Oracle VirtualBox 启动失败。请使用内核版本 2.6.19 或更高版本。

  • 启用硬件虚拟化和 I/O APIC 后,2.6.24-rc6 之前的内核在引导时可能会出现以下消息而崩溃:

    Kernel panic - not syncing: IO-APIC + timer doesn't work!  Boot with
    apic=debug and send a report.  Then try booting with the 'noapic' option

    如果您看到此消息,请按照 系统设置 中的描述禁用硬件虚拟化或 I/O APIC,或者将客户机升级到较新的内核。

    有关内核修复的详细信息,请参阅 此消息

X11 客户机中的共享剪贴板、自动调整大小和无缝桌面

在运行 X11 窗口系统的客户机(如 Oracle Solaris 和 Linux)中,由一个名为 VBoxClient 的客户机服务提供桌面服务。该服务在启动桌面会话的用户 ID 下运行,如果您使用的是 Gnome 或 KDE 等常见桌面环境,当您的 X11 用户会话启动时,它会使用以下命令行自动启动。

$ VBoxClient --clipboard
$ VBoxClient --display
$ VBoxClient --seamless

如果某个特定的桌面服务无法正常工作,则值得检查提供该服务的进程是否正在运行。

正在运行的 VBoxClient 进程会在用户的主目录中创建名为 .vboxclient-*.pid 的文件,以防止给定服务被启动两次。由于配置错误,这些文件可能会被 root 拥有,并且在服务停止时不会被删除,这会阻止它们在将来的会话中启动。如果服务无法启动,您可能需要检查这些文件是否存在。

Oracle Solaris 客户机

某些 Oracle Solaris 10 版本在使用 SMP 启动时可能需要很长时间

使用多个 CPU 时,Oracle Solaris 10 10/08 和 Oracle Solaris 10 5/09 可能需要很长时间才能启动,并且可能在系统控制台上打印关于从磁盘读取失败的警告。这是 Oracle Solaris 10 中的一个 bug,它会影响特定的物理和虚拟配置。这是由于在磁盘中断被重新分配给尚未完全初始化的辅助 CPU 时,尝试从引导磁盘读取微码更新造成的。磁盘读取将超时并失败,触发约 45 秒的延迟和警告。

建议的解决方案是升级到至少包含此问题修复的 Oracle Solaris 10 10/09。替代解决方案包括将虚拟 CPU 数量限制为一个或可能使用不同的存储控制器。

较旧的 Solaris 版本不适用于 E1000 以太网

Solaris 10 1/06 之前的 Solaris 版本,包括 Solaris 9、Solaris 10 1/05 (GA) 和 Solaris 10 3/05 (HW2),无法通过 Intel E1000 网卡进行通信。Solaris e1000g 驱动程序未为网卡启用 PCI 总线主控,因此无法发送和接收数据。此问题似乎特定于 e1000g 驱动程序,并不反映一般的 Solaris 驱动程序行为。

可以使用 AMD PCnet 仿真(使用 Solaris pcn 驱动程序)代替 Intel E1000。Solaris 10 1/06 (U1) 及更高版本没有此问题,并且可以与模拟的 E1000 以太网控制器配合使用。

Windows 主机

拖放不工作

Microsoft Windows 使用 UAC(用户帐户控制)和 UIPI(用户界面权限隔离)等技术来预防和缓解安全问题。默认情况下,UAC 和 UIPI 是启用的。

Oracle VirtualBox 虚拟机进程以比希望通过拖放(或系统剪贴板)与虚拟机进程交互的另一个进程更高的特权级别运行时,Windows 出于安全原因默认会阻止此操作。这导致 Oracle VirtualBox 无法接收任何用于拖放的 Windows 消息。为了使此功能正常工作,Oracle VirtualBox 虚拟机进程必须以与通过拖放进行交互的进程相同的(或更低的)特权级别运行。

不建议禁用 UAC 或 UIPI。

VBoxSVC 进程外 COM 服务器问题

Oracle VirtualBox 利用 Microsoft 组件对象模型 (COM) 进行进程间和进程内通信。这使 Oracle VirtualBox 能够共享不同虚拟机进程之间的通用配置,并基于通用架构提供多种用户界面选项。所有全局状态信息和配置由进程 VBoxSVC.exe 维护,该进程是进程外 COM 服务器。每当启动 Oracle VirtualBox 进程时,它都会请求访问 COM 服务器,Windows 会自动启动该进程。请注意,它绝不应由最终用户启动。

当最后一个进程断开与 COM 服务器的连接后,它会在几秒钟后自行终止。Oracle VirtualBox 配置 XML 文件由 COM 服务器维护和拥有,并且在服务器运行时文件会被锁定。

在某些情况下,例如虚拟机意外终止时,COM 服务器将不会注意到客户端已断开连接,并会保持活动状态较长时间(约 10 分钟),从而锁定配置文件。在其他罕见情况下,COM 服务器可能会遇到内部错误,随后其他进程将无法初始化它。在这些情况下,建议使用 Windows 任务管理器结束 VBoxSVC.exe 进程。

CD 和 DVD 更改未识别

如果您已将物理 CD 或 DVD 驱动器分配给客户机,但客户机未注意到介质更改,请确保未关闭 Windows 介质更改通知 (MCN) 功能。这在 Windows 注册表中通过以下项表示:

HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\Cdrom\Autorun

某些应用程序可能会根据 Microsoft 的建议禁用此项。如果将其设置为 0,请将其更改为 1 并重新启动系统。Oracle VirtualBox 依赖于 Windows 通知其介质更改。

使用 Microsoft RDP 客户端时响应迟钝

使用名为远程桌面连接的 Microsoft RDP 客户端连接到虚拟机时,在输入(如鼠标移过菜单)和输出之间可能会有很大的延迟。这是因为此 RDP 客户端会收集输入一段时间,然后再将其发送到 RDP 服务器。

可以通过将 Windows 注册表项设置为小于默认值 100 的值来减小该间隔。该项最初不存在,必须是 DWORD 类型。其值的单位是毫秒。对于 RDP 客户端和服务器之间的低带宽连接,大约 20 的值是合适的。对于千兆以太网连接,可以使用大约 4 的值。通常,低于 10 的值可提供接近虚拟机运行所在的宿主机本地输入设备和屏幕的性能。

根据是为单个用户还是为系统更改设置,设置以下任一选项。

HKEY_CURRENT_USER\Software\Microsoft\Terminal Server Client\Min Send Interval
HKEY_LOCAL_MACHINE\Software\Microsoft\Terminal Server Client\Min Send Interval

在单个系统上运行 iSCSI 启动器和目标

当尝试在客户机虚拟机中运行的 iSCSI 目标(例如宿主机上运行的 Microsoft iSCSI Initiator)上使用 iSCSI 启动器访问 iSCSI 目标时,Windows 宿主机上可能会发生死锁。这是由 Windows 缓存管理器组件中的一个缺陷引起的,会导致宿主机系统响应迟缓数分钟,随后在系统托盘或单独的消息窗口中出现“延迟写入失败”错误消息。客户机在此期间被阻止,并可能显示错误消息或变得不稳定。

VBOX_DISABLE_HOST_DISK_CACHE 环境变量设置为 1 可以作为此问题的临时解决方案,直到 Microsoft 解决该问题。例如,打开命令提示符窗口并按如下方式启动 Oracle VirtualBox

set VBOX_DISABLE_HOST_DISK_CACHE=1
VirtualBox

虽然这会降低客户机磁盘性能,尤其是写入性能,但它不会影响在主机上运行的其他应用程序的性能。

缺少桥接网络适配器

如果在 VM 设置的“网络”部分未显示任何桥接适配器,这通常意味着桥接网络驱动程序未在宿主机上正确安装。这可能由以下原因引起:

  • 宿主机上已达到允许的最大过滤器计数。在这种情况下,MSI 日志会像下面这样提及 NetFlt 网络组件安装时返回的 0x8004a029 错误代码:

    VBoxNetCfgWinInstallComponent: Install failed, hr (0x8004a029)

    您可以尝试使用以下注册表项增加 Windows 注册表中的最大过滤器计数:

    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Network\MaxNumFilters

    允许的最大数量是 14。重启后,请尝试重新安装 Oracle VirtualBox

  • INF 缓存已损坏。在这种情况下,安装日志 %windir%\inf\setupapi.dev.log 通常会提及找不到 sun_VBoxNetFltsun_VBoxNetFltmp 组件的合适驱动程序包。然后,解决方案是卸载 Oracle VirtualBox,清除 INF 缓存(%windir%\inf\INFCACHE.1),重新启动,然后尝试重新安装 Oracle VirtualBox

无法创建仅主机网络适配器

如果无法创建仅主机适配器(无论是通过 VirtualBox Manager 还是 VBoxManage 命令),则 INF 缓存很可能已损坏。在这种情况下,安装日志 %windir%\inf\setupapi.dev.log 通常会提及找不到 sun_VBoxNetAdp 组件的合适驱动程序包。同样,与上面描述的桥接网络问题一样,解决方案是卸载 Oracle VirtualBox,清除 INF 缓存(%windir%\inf\INFCACHE.1),重新启动,然后尝试重新安装 Oracle VirtualBox

Linux 主机

Linux 内核模块拒绝加载

如果 Oracle VirtualBox 内核模块 vboxdrv 无法加载,您可能会看到“Error inserting vboxdrv: Invalid argument”消息。以 root 身份,检查 dmesg 命令的输出,找出加载失败的原因。最可能的原因是内核不同意用于编译模块的 gcc 版本。请确保您使用的编译器与构建内核所用的编译器相同。

未找到 Linux 主机 CD/DVD 或软盘驱动器

如果您已将虚拟机配置为使用宿主机的 CD 或 DVD 驱动器或软盘驱动器,但似乎不起作用,请确保当前用户有权访问相应的 Linux 设备文件。例如,对于 CD 或 DVD 驱动器,这可能是 /dev/hdc/dev/scd0/dev/cdrom 或类似的。在大多数发行版中,用户必须添加到相应的组,通常称为 cdromcdrwfloppy

在支持的 Linux 发行版上,Oracle VirtualBox 使用 udev 来定位硬件,如 CD/DVD 驱动器和软盘驱动器。

写入 CD 或 DVD 时出现奇怪的客户机 IDE 错误消息

如果启用了不正确的宿主机或客户机配置的实验性 CD 或 DVD 刻录机支持,则访问 CD 或 DVD 刻录机的任何尝试都可能失败,并简单地导致 Linux 客户机的客户机内核错误消息或 Windows 客户机的应用程序错误消息。Oracle VirtualBox 在虚拟机启动时执行常规一致性检查。特别是,如果启动虚拟机的用户无法写入 CD 或 DVD 刻录机设备,它将中止并显示错误消息。但是,Oracle VirtualBox 无法检测所有配置错误。必要的宿主机和客户机操作系统配置并非 Oracle VirtualBox 特有,但此处列出了一些与 Oracle VirtualBox 相关的常见问题。

必须特别注意使用正确的设备。配置的宿主机 CD 或 DVD 设备文件名(大多数情况下为 /dev/cdrom)必须指向允许写入 CD 或 DVD 单元的设备。对于连接到 SCSI 控制器或 IDE 控制器(这些控制器会连接到 Linux SCSI 子系统,这对于某些 SATA 控制器很常见)的 CD 或 DVD 刻录机单元,这必须指向 SCSI 设备节点,例如 /dev/scd0。即使对于 IDE CD 或 DVD 刻录机单元,如果加载了 ide-scsi 内核模块,也必须指向相应的 SCSI CD-ROM 设备节点,例如 /dev/scd0。许多 Linux 发行版会在检测到系统中的 CD 或 DVD 刻录机时加载此模块,即使内核在没有该模块的情况下也支持 CD 或 DVD 刻录机。Oracle VirtualBox 支持使用 IDE 设备文件,例如 /dev/hdc,前提是内核支持此功能且未加载 ide-scsi 模块。

除了在客户机中 CD 或 DVD 写入器始终是 IDE 设备之外,类似的规则也适用于客户机配置。由于此设置非常常见,因此客户机的默认配置很可能按预期工作。

VBoxSVC IPC 问题

在 Linux 上,Oracle VirtualBox 使用 Mozilla XPCOM(跨平台组件对象模型)的自定义版本进行进程间和进程内通信 (IPC)。VBoxSVC 进程充当不同 Oracle VirtualBox 进程之间的通信中心,并维护全局配置,例如 XML 数据库。启动 Oracle VirtualBox 组件时,VBoxSVCVBoxXPCOMIPCD 进程会自动启动。它们只能从它们运行的用户帐户访问。VBoxSVC 拥有 Oracle VirtualBox 配置数据库,该数据库通常位于 ~/.config/VirtualBox 或您操作系统相应的配置目录中。在运行时,配置文件会被锁定。各种 Oracle VirtualBox 组件与 VBoxSVC 之间的通信通过位于 /tmp/.vbox-username-ipc 的本地域套接字执行。如果出现通信问题,例如 Oracle VirtualBox 应用程序无法与 VBoxSVC 通信,请终止守护进程并删除本地域套接字目录。

USB 不工作

如果 USB 在 Linux 宿主机上无法正常工作,请确保当前用户是 vboxusers 组的成员。请记住,组成员身份不会立即生效,而是在下次登录时生效。如果可用,newgrp 命令可以避免注销和登录的需要。

PAX/grsec 内核

包含 grsec 补丁(请参阅 http://www.grsecurity.net/)及其衍生的 Linux 内核必须禁用 VBox 二进制文件的 PAX_MPROTECT 才能启动虚拟机。原因是 Oracle VirtualBox 必须在匿名内存上创建可执行代码。

Linux 内核 vmalloc 池耗尽

在 Linux 系统上运行大量具有大量 RAM 的虚拟机时(例如,20 个虚拟机,每个虚拟机 1 GB RAM),其他虚拟机可能会因内核错误而无法启动,错误提示 vmalloc 池已耗尽,应扩展该池。错误消息还指示您在内核参数列表中指定 vmalloc=256MB。如果将此参数添加到 GRUB 或 LILO 配置后内核启动失败,并显示诸如 failed to mount the root partition 的错误消息,则您可能遇到了内核和初始 RAM 磁盘之间的内存冲突。这可以通过将以下参数添加到 GRUB 配置来解决:

uppermem 524288

Oracle Solaris 主机

无法启动虚拟机,连续内存不足

众所周知,ZFS 文件系统会使用几乎所有可用 RAM 作为缓存(如果未更改默认系统设置)。这可能导致宿主机内存严重碎片化,从而阻止 Oracle VirtualBox 虚拟机启动。我们建议通过将以下行添加到 /etc/system 来限制 ZFS 缓存,其中 xxxx 字节是可用于 ZFS 缓存的内存量。

set zfs:zfs_arc_max = xxxx

安全指南

一般安全原则

以下原则是安全使用任何应用程序的基础。

  • 保持软件最新。 良好的安全实践原则之一是保持所有软件版本和补丁最新。激活 Oracle VirtualBox 更新通知,以便在新的 Oracle VirtualBox 版本可用时收到通知。更新 Oracle VirtualBox 时,请勿忘记更新客户机增强功能。保持宿主机操作系统和客户机操作系统最新。

  • 限制网络访问关键服务。 使用适当的手段,例如防火墙,保护您的计算机和客户机免受外部访问。为虚拟机选择合适的网络模式有助于将宿主机网络与客户机分离,反之亦然。

  • 遵循最小特权原则。 最小特权原则规定,用户应获得执行其工作所需的最低特权。始终 以普通用户身份运行 Oracle VirtualBox。我们强烈建议任何人都不要以系统特权运行 Oracle VirtualBox

    创建配置文件时,请选择严格的权限,例如创建 /etc/default/virtualbox 时,请参阅 自动安装选项。首选模式为 0600。

  • 监控系统活动。 系统安全建立在三个支柱之上:良好的安全协议、正确的系统配置和系统监控。审计和审查审计记录解决了第三个要求。系统中的每个组件都有一定程度的监控能力。遵循本文档中的审计建议,并定期监控审计记录。

  • 了解最新的安全信息。 Oracle 会持续改进其软件和文档。请每年查阅此说明以获取修订。

安全安装和配置

安装概述

Oracle VirtualBox 基础包应仅从受信任的来源下载,例如官方网站 https://virtualbox.ac.cn。应使用提供的 SHA256 校验和验证包的完整性,该校验和可以在官方网站上找到。

支持的宿主机上 Oracle VirtualBox 的通用安装说明可在 安装详细信息 中找到。

在 Windows 宿主机上,可以使用安装程序禁用 USB 支持、桥接网络支持、仅主机网络支持和 Python 语言绑定。请参阅 在 Windows 宿主机上安装。所有这些功能默认都已启用,但如果任何虚拟机不需要相应的功能,禁用其中一些功能可能是合适的。只有当外部 Python 应用程序要使用 Oracle VirtualBox API 时,才需要 Python 语言绑定。特别是 USB 支持和两种网络模式的支持需要安装 Windows 内核驱动程序到宿主机。因此,禁用这些选定的功能不仅可以限制用户使用某些功能,还可以最大限度地减少提供给潜在攻击者的攻击面。

通常是安装完整的 Oracle VirtualBox 包。安装必须使用系统权限完成。所有 Oracle VirtualBox 二进制文件都应以普通用户的身份执行,切勿以特权用户的身份执行。

Oracle VirtualBox Extension Pack 提供附加功能,并且必须单独下载和安装,请参阅 安装 Oracle VirtualBox 和扩展包。与基础包一样,应验证扩展包的 SHA256 校验和。由于安装需要系统权限,Oracle VirtualBox 将在安装扩展包期间请求系统密码。

安装后配置

通常不需要对 Oracle VirtualBox 组件进行安装后配置。但是,在 Oracle Solaris 和 Linux 宿主机上,有必要为执行虚拟机并应该能够访问某些宿主机资源的用户的适当权限进行配置。例如,Linux 用户必须是 vboxusers 组的成员才能将 USB 设备传递给客户机。如果应该从虚拟机访问串行宿主机接口,则必须授予用户访问该设备的适当权限。其他资源(如原始分区、DVD/CD 驱动器和声卡)也适用。

安全功能

本节概述了 Oracle VirtualBox 提供的特定安全机制。

安全模型

虚拟机监视器 (VMM)(如 Oracle VirtualBox)的一个特性是通过在宿主机操作系统上作为用户进程运行的受保护环境(虚拟机)中执行客户机来封装客户机。客户机不能直接与硬件或其他计算机通信,只能通过 VMM 进行通信。VMM 向客户机提供模拟的物理资源和设备,客户机操作系统通过这些资源和设备执行所需任务。VM 设置控制提供给客户机的资源,例如客户机内存量或客户机处理器数量以及为该客户机启用的功能。例如远程控制、某些屏幕设置等。请参阅 常规设置

虚拟机安全配置

虚拟机配置的几个方面需要考虑安全性。

网络

虚拟机的默认网络模式是 NAT,这意味着虚拟机就像一台路由器后面的计算机(请参阅 网络地址转换 (NAT))。客户机是此虚拟机所属的私有子网的一部分,客户机的 IP 地址无法从外部可见。此网络模式无需任何额外设置即可正常工作,并且对于许多用途来说已足够。请记住,NAT 允许访问宿主机操作系统的环回接口。

如果使用桥接网络,虚拟机就像一台位于与宿主机相同网络中的计算机(请参阅 桥接网络)。在这种情况下,客户机具有与宿主机相同的网络访问权限,可能需要防火墙来保护子网上的其他计算机免受潜在恶意客户机的侵害,并保护客户机免受其他计算机的直接访问。在某些情况下,可以考虑在 NAT 模式下为特定端口使用端口转发规则,而不是使用桥接网络。

某些设置不需要虚拟机连接到公共网络。内部网络(请参阅 内部网络)或仅主机网络(请参阅 仅主机网络)通常足以将虚拟机相互连接,或仅将虚拟机连接到宿主机,但不连接到公共网络。

远程虚拟机的安全性

远程虚拟机 需要设置安全协议来控制对虚拟机从提供访问的 VRDP 服务器的访问。您可以使用 VBoxManage 或 VirtualBox Manager 中的 VM 设置来更改安全方法,如 RDP 加密 中所述。

默认安全方法是 TLS,它需要证书才能运行。您可以设置自定义证书,或接受默认的自签名证书。有关更多信息,请参阅 RDP 加密

VRDP 远程桌面认证

当使用 Oracle 提供的 Oracle VirtualBox Extension Pack 进行 VRDP 远程桌面支持时,您可以选择使用各种方法来配置 RDP 身份验证。“null”方法非常不安全,在公共网络中应避免使用。请参阅 RDP 身份验证

剪贴板

共享剪贴板使用户能够在宿主机和客户机之间共享数据。启用双向剪贴板模式可让客户机读取和写入宿主机剪贴板。宿主机到客户机模式和客户机到宿主机模式将访问限制为单向。如果客户机能够访问宿主机剪贴板,它也可能访问通过剪贴板共享的宿主机上的敏感数据。

如果客户机能够读取或写入宿主机剪贴板,则通过网络连接到客户机的远程用户也将获得此能力,这可能不合适。因此,新的虚拟机默认禁用共享剪贴板。

共享文件夹

如果任何主机文件夹与客户机共享,则通过网络连接到客户机的远程用户也可以访问这些文件,因为无法针对远程用户选择性地禁用文件夹共享机制。

CD/DVD 直通

启用 CD/DVD 直通可让客户机对 CD/DVD 驱动器执行高级操作(请参阅 CD/DVD 支持)。这可能引起安全风险,因为客户机可能会覆盖 CD/DVD 介质上的数据。

USB 直通

将 USB 设备传递给客户机可使客户机完全访问这些设备(请参阅 USB 设置)。例如,除了读取和写入外部 USB 磁盘分区的内容之外,客户机还将能够读取和写入该磁盘的分区表和硬件数据。

配置和使用认证

Oracle VirtualBox 的以下组件可以使用密码进行身份验证:

  • 当使用远程 iSCSI 存储并且存储服务器需要身份验证时,可以选择使用 VBoxManage storageattach 命令提供启动器密钥。只要未提供设置密码(通过使用命令行选项 --settingspwfile),此密钥将以*未加密*形式存储在计算机配置中,因此在宿主机上可能可读。请参阅 iSCSI 服务器VBoxManage storageattach

  • 当使用 Oracle VirtualBox Web 服务远程控制 Oracle VirtualBox 宿主机时,对 Web 服务的连接以各种方式进行身份验证。这在 Oracle VirtualBox 软件开发工具包 (SDK) 参考中已详细描述。请参阅 Oracle VirtualBox 编程接口

潜在不安全操作

Oracle VirtualBox 的以下功能可能存在安全问题:

  • 在传送虚拟机时,用于将虚拟机的内存内容从一个宿主机传输到另一个宿主机的流数据未加密。因此,有权访问数据传输网络的第三方可以拦截该数据。可以使用 SSH 隧道来保护两个宿主机之间的连接。但在考虑在不可信网络上传送虚拟机时,首先要回答的问题是两个虚拟机如何安全地以合理的性能访问相同的虚拟磁盘映像。

    如果网络不够可信,则每次传送都应更改密码,因为第三方可能会在目标和源宿主机之间传输未加密的密码哈希时检测到它。

  • 当启用 页面融合 时,可能会出现一个侧信道,允许恶意客户机确定同一宿主机上运行的另一个虚拟机的地址空间布局。例如,DLL 通常在此加载。这种信息泄露本身是无害的,但是恶意客户机可以利用它来通过不相关的攻击途径优化对该虚拟机的攻击。建议仅在您认为在您的设置中这不是一个问题时才启用页面融合。

  • 当使用 Oracle VirtualBox Web 服务远程控制 Oracle VirtualBox 宿主机时,通过该服务(使用 SOAP XML 传输 API 调用)进行的连接不加密。它们默认使用纯 HTTP。这是一个潜在的安全风险。有关 Web 服务的详细信息,请参阅 Oracle VirtualBox 编程接口

    Web 服务默认不启动。请参阅 自动启动 Oracle VirtualBox Web 服务,了解如何启动此服务以及如何启用 SSL/TLS 支持。它必须以普通用户身份启动,并且只能控制该用户的虚拟机。默认情况下,该服务绑定到 localhost,阻止任何远程连接。

  • 通过 UDP 隧道网络附件发送的流量未加密。您可以选择在主机网络级别使用 IPsec 进行加密,或在客户机网络中使用加密协议,例如 SSH。其安全特性与桥接以太网相似。

  • 由于早期 Windows 版本存在缺陷,不建议在 Windows Vista SP1 之前的 Windows 版本上使用 Oracle VirtualBox

加密

Oracle VirtualBox 的以下组件使用加密来保护敏感数据:

  • 当使用 Oracle 提供的 Oracle VirtualBox Extension Pack 进行 VRDP 远程桌面支持时,RDP 数据可以选择性地加密。请参阅 RDP 加密。只有使用 TLS 协议的增强型 RDP 安全方法(RDP5.2)才能提供安全连接。标准 RDP 安全(RDP4 和 RDP5.1)容易受到中间人攻击。

  • 当使用 Oracle 提供的 Oracle VirtualBox Extension Pack 进行磁盘加密时,磁盘映像中存储的数据可以选择性地加密。请参阅 磁盘映像加密。此功能仅涵盖磁盘映像内容。虚拟机的所有其他数据都以未加密形式存储,包括 VM 的内存和设备状态(这些状态以已保存状态的一部分形式存储),无论是在显式创建时还是作为正在运行的 VM 的快照的一部分。

安全建议

本节包含针对特定问题的安全建议。默认情况下,VirtualBox 会将虚拟机配置为以安全的方式运行,但这并非总能在不进行额外的用户操作(如主机操作系统或固件配置更改)的情况下实现。

CVE-2018-3646

此安全问题影响一系列具有嵌套分页的 Intel CPU。AMD CPU 预计不会受到影响(有待 AMD 的直接确认)。此外,该问题不影响禁用硬件虚拟化或禁用嵌套分页的虚拟机。

有关嵌套分页的更多信息,请参阅 嵌套分页和 VPID

以下缓解选项可用。

禁用嵌套分页

通过禁用嵌套分页 (EPT),VMM 将构建影子页表以映射客户机中的页表。客户机无法在页表中插入任何可疑内容,因为 VMM 在映射之前会仔细验证每个条目。

作为禁用嵌套分页的副作用,几项 CPU 功能将无法提供给客户机。这些功能包括 AVX、AVX2、XSAVE、AESNI 和 POPCNT。并非所有客户机都能在安装后应对这些功能的禁用。此外,对于某些客户机,尤其是在 SMP 配置中,禁用嵌套分页可能会导致稳定性问题。最后,某些工作负载可能会出现性能下降。

刷新一级数据缓存

此举旨在在运行客户机代码时从 L1 数据缓存中移除潜在的敏感数据。然而,由于超线程设置共享 L1 缓存,从而可能允许另一线程填充缓存,导致用户不希望客户机看到的数据,这使得此举变得困难。此外,刷新 L1 数据缓存通常会产生性能副作用。

最新的 CPU 微码是缓存刷新缓解措施的前提。某些主机操作系统可能会自动安装这些更新,尽管传统上这是由系统固件执行的最佳任务。因此,请咨询您的系统/主板制造商以获取最新的固件更新。

我们建议禁用主机上的超线程。这通常从固件设置中完成,但某些操作系统也提供了禁用超线程的方法。在某些情况下,它可能默认是禁用的,但请务必验证,因为缓解措施的有效性取决于此。

VirtualBox 默认采取的措施是在线程被调度执行客户机代码时刷新 L1 数据缓存,而不是在每次虚拟机进入时刷新。这降低了对性能的影响,同时假设主机操作系统在没有采取预防措施的情况下不会处理来自中断处理程序等的安全敏感数据。

可以使用 VBoxManage modifyvm--l1d-flush-on-vm-entry 选项提供更激进的刷新选项。启用后,L1 数据缓存将在每次虚拟机进入时刷新。性能影响比默认选项更大,尽管这当然取决于工作负载。产生大量虚拟机退出的工作负载(如网络、VGA 访问等)可能会受到最大影响。

对于不受此安全问题困扰的用户,可以使用 VBoxManage modifyvm name --l1d-flush-on-sched off 命令禁用默认缓解措施。

CVE-2018-12126、CVE-2018-12127、CVE-2018-12130、CVE-2019-11091

这些安全问题影响一系列 Intel CPU,从 Nehalem 开始。CVE-2018-12130 还影响某些 Atom Silvermont、Atom Airmont 和 Knights 系列 CPU,但其范围非常有限,主机操作系统应该能够处理,因此 Oracle VirtualBox 不受影响。仅在进入和退出 C 状态时发生泄漏。

以下缓解选项可用。

缓冲区覆盖和禁用超线程

首先,最新的 CPU 微码是缓冲区覆盖(清除)缓解措施的前提。某些主机操作系统可能会自动安装这些更新,尽管传统上这是由系统固件执行的最佳任务。请咨询您的系统或主板制造商以获取最新的固件更新。

此缓解措施旨在在运行客户机代码之前从受影响的缓冲区中移除潜在的敏感数据。由于这意味着每次调度客户机时都需要额外的工作,因此可能会有一些性能副作用。

我们建议禁用受 CVE-2018-12126 和 CVE-2018-12127 影响的主机上的超线程 (HT),因为受影响的缓冲区集通常在线程对之间共享,因此会导致线程之间的泄漏。这通常从固件设置中完成,但某些操作系统也提供了禁用超线程的方法。在某些情况下,它可能默认是禁用的,但请务必验证,因为缓解措施的有效性取决于此。

Oracle VirtualBox 默认采取的措施是在线程被调度执行客户机代码时清除受影响的缓冲区,而不是在每次虚拟机进入时清除。这降低了对性能的影响,同时假设主机操作系统在没有采取预防措施的情况下不会处理来自中断处理程序等的安全敏感数据。

VBoxManage modifyvm 命令通过 --mds-clear-on-vm-entry 选项提供更激进的刷新选项。启用后,受影响的缓冲区将在每次虚拟机进入时清除。性能影响比默认选项更大,尽管这当然取决于工作负载。产生大量虚拟机退出的工作负载(如网络、VGA 访问等)可能会受到最大影响。

对于不受此安全问题困扰的用户,可以使用 VBoxManage modifyvm name --mds-clear-on-sched off 命令禁用默认缓解措施。

已知限制

实验性功能

一些 Oracle VirtualBox 功能被标记为实验性功能。此类功能按“原样”提供,不受正式支持。但是,欢迎提供关于这些功能的反馈和建议。以下是实验性功能的详尽列表

  • Windows、Linux 和 Oracle Solaris 客户机的硬件 3D 加速支持

  • Mac OS X 客户机(仅限 macOS 主机)

  • ICH9 芯片组模拟

  • 主机 CD/DVD 驱动器直通

  • 使用内部网络的 iSCSI 支持

  • 在同一主机上同时使用 Oracle VirtualBox 和 Hyper-V

已知问题

以下部分描述了 Oracle VirtualBox 此版本中已知的问题。除非另有说明,否则这些问题计划在后续版本中修复。

  • 在 Oracle VirtualBox 7.1 中为 Arm 虚拟机创建的保存状态和在线快照在后续版本中将无法使用。7.1 中的保存状态工作正常。
  • macOS 主机上的内部网络在由不同用户运行的虚拟机之间不起作用。
  • 同时使用 Oracle VirtualBox 和 Hyper-V 时性能低下。要解决此问题,必须关闭某些 Windows 功能,如“Hyper-V 平台”、“虚拟机平台”和“Windows Hypervisor 平台”,然后重启主机。

    在较新的 Windows 版本中,即使您之前已将其关闭,启用设备安全功能 Core Isolation 或 Memory Integrity 也会使用 Hyper-V。

    此外,可能需要使用 Microsoft Device Guard 和 Credential Guard 硬件准备工具来关闭更多功能。例如,运行以下命令:

    .\DG_Readiness_Tool_vX.X.ps1 -Disable -AutoReboot
    注意

    禁用 Device Guard 和 Credential Guard 功能将影响主机的整体安全性。请事先就此与您的管理员联系。

  • 存在以下 Guest SMP(多处理器)限制

    • 在 AMD CPU 上运行 32 位客户机时性能低下。这主要影响 Windows 和 Oracle Solaris 客户机,但也可能影响某些 Linux 内核版本。对 32 位 Windows NT、2000、XP 和 2003 客户机已部分解决。需要安装 Guest Additions。

    • 在不支持虚拟 APIC 硬件优化支持的某些 Intel CPU 型号上运行 32 位客户机时性能低下。这主要影响 Windows 和 Oracle Solaris 客户机,但也可能影响某些 Linux 内核版本。对 32 位 Windows NT、2000、XP 和 2003 客户机已部分解决。需要安装 Guest Additions。

  • NX(不可执行,数据执行保护)仅适用于在 64 位主机上运行的客户机,并且要求启用硬件虚拟化。

  • Guest Control。在 Windows 客户机上,使用 guest control execute 支持启动的进程将无法显示图形用户界面,*除非* 其运行的用户帐户当前已登录并具有桌面会话。

    此外,要使用没有密码或密码为空的帐户,必须更改客户机的组策略。为此,请在命令行中键入 gpedit.msc 打开组策略编辑器,打开 计算机配置\Windows 设置\安全设置\本地策略\安全选项 键,并将 帐户: 将空密码的本地帐户使用限制为仅进行控制台登录 的值更改为“禁用”。

  • 压缩虚拟磁盘映像仅限于 VDI 文件。VBoxManage modifymedium --compact 命令目前仅对 VDI 文件实现。目前,优化 VMDK 或 VHD 等其他格式的虚拟磁盘映像大小的唯一方法是克隆映像,然后将克隆的映像用于虚拟机配置。

  • OVF 导入/导出

    • 尚不支持 OVF 本地化,即单个 OVF 文件中包含多种语言。

    • 某些 OVF 部分(如 StartupSection、DeploymentOptionSection 和 InstallSection)将被忽略。

    • 尚不支持 OVF 环境文档,包括其属性部分和带有 ISO 映像的设备配置。

    • 尚不支持使用 HTTP 或其他机制的远程文件。

  • Oracle VirtualBox 扩展包中的 RDP 服务器仅支持 22.05kHz 立体声 16 位格式的音频流。如果 RDP 客户端请求任何其他音频格式,将没有音频。

  • 在缩放模式下保持宽高比仅适用于 Windows 主机和 macOS 主机。

  • 在 macOS 主机上,以下功能尚未实现

    • 数字锁定键模拟

    • CPU 频率指标

    • 内存气球

  • macOS/Arm 64(Apple 芯片)主机包
    • x86 架构的客户机操作系统将无法运行。

    • 仅支持 Arm (AArch64) 客户机。目前不支持 Arm 32。

    • Arm 主机在声音、存储、图形、客户机增强功能和无人值守安装方面存在限制。

  • Mac OS X 客户机

    • Mac OS X 客户机只能在特定的主机硬件上运行。有关许可和主机硬件限制的详细信息。请参阅 Mac OS X 客户机 并检查 Apple 软件许可条款。

    • Oracle VirtualBox 目前不提供 Mac OS X 的客户机增强功能。

    • 图形分辨率目前默认为 1024x768,因为 Mac OS X 会回退到内置的 EFI 显示支持。有关如何更改 EFI 视频模式的更多信息,请参阅 EFI 中的视频模式

    • Mac OS X 客户机仅支持分配给 VM 的一个 CPU。SMP 支持将在未来的版本中提供。

    • 根据您的系统和 Mac OS X 版本,您可能会在一段时间后遇到客户机挂起的问题。这可以通过关闭节能来解决。在系统偏好设置中将超时设置为“永不”。

    • 默认情况下,Oracle VirtualBox EFI 会启用 Mac OS X 内核的调试输出,以帮助您诊断启动问题。请注意,输出量很大,并非所有错误都是致命的。使用物理 Apple Macintosh 计算机时也会显示这些错误。您可以使用以下命令关闭这些消息

      $ VBoxManage setextradata VM-name "VBoxInternal2/EfiBootArgs" "  "

      要恢复到之前的行为,请使用以下命令:

      $ VBoxManage setextradata VM-name "VBoxInternal2/EfiBootArgs" ""
    • 目前无法通过在 extradata 中指定 VBoxInternal2/EfiBootArgs-x 选项来启动 Mac OS X 客户机的安全模式。

  • Oracle Solaris 主机

    • Oracle Solaris 主机上的 USB 支持需要 Oracle Solaris 11 FCS 或更高版本。已知网络摄像头和其他等时设备性能不佳。

    • 由于 Oracle Solaris V4L2 API 的限制,主机网络摄像头直通仅限于 640x480 帧,每秒 20 帧。这可能会在未来的 Oracle Solaris 版本中解决。

    • 不向客户机报告 ACPI 信息,例如电池状态或电源。

    • 不支持使用无线适配器进行桥接网络。

    • Oracle Solaris 11 主机上基于 Crossbow 的桥接网络不能直接与聚合链接一起使用。但是,您可以使用 dladm 在聚合链接上手动创建一个 VNIC,并将其与虚拟机一起使用。此限制在 Oracle Solaris 11 更新 1 (11.1) 及更高版本中不存在。

  • Windows XP 客户机的 virtio 和 Intel PRO/1000 驱动程序均不支持分段卸载。因此,与其它客户机类型相比,Windows XP 客户机的传输速率较低。有关更多信息,请参阅 MS 知识库文章 842264。

  • OS/2 的客户机增强功能。由于 OS/2 图形系统的固有局限性,无缝窗口和自动客户机调整可能永远不会实现。

  • 一些早于 ATAPI CD-ROM 的客户机操作系统在某些配置中可能会出现长时间延迟或完全无法启动。这最有可能发生在 IDE/ATAPI CD-ROM 单独存在于主或次 IDE 通道上时。

    受影响的操作系统包括 MS OS/2 1.21:以引用 COUNTRY.SYS 的错误消息无法启动;MS OS/2 1.3:长时间引导延迟。为避免此类问题,请禁用模拟的 IDE/ATAPI CD-ROM。无论如何,客户机操作系统都无法使用此设备。

更新日志

本节总结了 Oracle VirtualBox 版本之间的更改。请注意,此更改日志并非详尽无遗,并非所有更改都已列出。

Oracle VirtualBox 版本号由三个由点分隔的数字组成,其中第一个和第二个数字代表主版本,第三个数字代表次版本。官方版本的次版本号始终是偶数。奇数次版本号代表内部开发或测试版本。此外,每个构建都包含一个修订号。

版本 7.1.12(日期待定)

这是一个维护版本。以下项目已修复和/或添加:

  • VMM:修复了运行嵌套虚拟机时导致外部虚拟机出现 Guru Mediation 的问题

  • NAT:修复了虚拟机名称过长导致无法启动的问题 (github:GH-16)

  • Linux 主机:修复了在较新内核中使用桥接网络和由 ixgbe 驱动程序处理的网络接口时可能发生的内核崩溃

  • Windows 主机:修复了在卸载主机包后关闭 VirtualBox GUI 时导致 BSOD 的问题 (github:GH-38)

  • Windows 主机:驱动程序安装区域的总体改进

  • Windows 主机:实现对在 Hyper-V 使用时向客户机暴露 AVX/AVX2 的支持 (github:GH-36)

  • 录制:修复了在显示设置中启用录制时 Windows 虚拟机无法启动的问题 (bug #22363)

  • Linux 主机和客户机:添加了额外修复以支持内核 6.16

  • Linux 增强功能:修复了当客户机运行 3.10 系列及更旧的内核时,'rcvboxadd status-kernel' 报告状态不正确的问题

  • Linux 增强功能:修复了当客户机运行 2.6 系列及更旧的内核时,VBoxClient 无法启动的问题

  • Linux 增强功能:修复了由于不正确的 udev 规则导致系统日志中出现警告的问题

版本 7.1.10 (2025-06-03)

这是一个维护版本。以下项目已修复和/或添加:

  • VBoxManage:修复了在 Windows 主机上运行 'guestcontrol run' 时崩溃的问题 (bug #22175)

  • 音频:修复了 Windows 主机上的设备切换问题 (bug #22267)

  • Windows 主机安装程序:修复了“添加或删除程序”对话框中的多个安装条目和升级问题

  • Linux 主机:修复了因缺少 libdl.so 和 libpthread.so 库导致 VM 选择器进程崩溃的问题 (bug #22193)

  • Linux 主机:在从源代码构建 VirtualBox 时移除了 libIDL 作为构建时依赖项 (bug #21169)

  • Linux 客户机和主机:增加了对内核 6.15 的初始支持 (bug #22420)

  • Linux 客户机:添加了对内核 6.16-RC0 的初步支持

  • Linux 客户机和主机:修复了在 Oracle Linux 9 发行版上构建 UEK8 内核模块的问题

  • RDP:修复了无法通过 RDP 远程会话将剪贴板内容粘贴到客户机中的问题

版本 7.1.8 (2025-04-15)

这是一个维护版本。以下项目已修复和/或添加:

  • VMM:修复了虚拟机时钟在罕见情况下倒退的问题 (bug #22334)

  • GUI:修复了加速光标图像未正确显示的问题 (bug #22096)

  • DevVirtioSCSI:修复了恢复保存状态的问题

  • 图形:修复了在使用 VMSVGA 图形适配器且未启用 3D 加速时恢复虚拟机状态时触发断言的问题 (bug #21955)

  • Main:修复了通过 VirtualBox Web 服务保存机器配置时 VBoxSVC 崩溃的问题 (bug #22259)

  • Main:修复了在现代 Linux 发行版上无法检测到无线网卡的问题 (bug #22362)

  • Main:修复了删除正在运行的虚拟机快照后,.sav 文件仍保留在磁盘上的问题 (bug #21345)

  • NAT:修复了 Windows 主机上的连接丢失问题 (bug #22364)

  • VBoxManage:更新了用户手册,以更正将虚拟机配置为使用主机网络连接的 'VBoxManage modifyvm' 调用 (bug #22158)

  • VBoxManage:修复了无法使用 'VBoxManage bandwidthctl' 命令设置磁盘带宽的问题 (bug #22328)

  • Windows 安装程序:在成功安装后自动加载支持驱动程序 (bug #22292)

  • Linux 主机安装程序:修复了因错误检查前一个 VirtualBox 安装是否正在运行而导致安装失败的问题

  • Linux 客户机增强功能:修复了 VBoxClient 在 XWayland 客户机中可能崩溃的问题 (bug #22345)

  • Linux 增强功能:修复了当虚拟机使用 VBoxVGA 显卡时导致光标图像损坏的问题

  • Linux 增强功能:修复了在未安装 X11 库的系统上安装可能失败的问题

  • Linux 增强功能:添加了对内核 6.14 的初步支持

  • Linux 增强功能:引入了对 RHEL 9.7 内核的初步支持

  • Linux 客户机增强功能:为 RHEL 9.4 内核引入了额外的修复 (bug #22277)

  • Linux 增强功能:改进了“rcvboxadd status-kernel”检查

  • Windows 安装程序:新安装代码的各种错误修复

  • Windows 安装程序:实现了新的致命错误对话框,可以直接打开安装程序日志文件

  • Windows 增强功能:修复了 Vista 客户机上的鼠标驱动程序安装问题

  • Windows 客户机增强功能:修复了卸载完整性问题 (bug #22290)

  • Windows 客户机增强功能:修复了驱动程序安装错误 ERROR_AUTHENTICODE_TRUST_NOT_ESTABLISHED (bug #22300)

  • Windows 客户机增强功能:修复了在特定情况下 VBoxTray 出现 100% CPU 使用率的问题 (bug #22123)

  • Windows 增强功能:现在还附带 VBoxAudioTest 二进制文件,用于执行客户机音频测试/诊断

  • Windows 增强功能:对于旧版 Windows(Windows 2000 到 Windows 7),安装替代的共享文件夹驱动程序,以避免常规驱动程序的一些兼容性问题

版本 7.1.6 (2025-01-21)

这是一个维护版本。以下项目已修复和/或添加:

  • VMM:修复了 Windows 11 24H2 客户机在罕见情况下出现蓝屏的问题

  • GUI:改进了在某些 Linux 主题下显示禁用偏好设置内容(蒙版+字体)时的表示

  • GUI:修复了根据 GA 状态事件,无缝模式未能及时正确启用或禁用的问题

  • GUI:修复了 macOS 主机上应用程序退出时罕见的崩溃问题

  • GUI:修复了 7.1.4 版本在偏好设置窗口中筛选器编辑器未获得焦点时的小型回归问题

  • GUI:对高级属性/设置对话框区域进行了改进

  • GUI:恢复了虚拟机启动时更改桥接适配器的缺失功能,如果当前适配器未找到

  • GUI:修复了在 macOS 主机上尝试在运行中和已关机虚拟机之间切换时,会创建“显示”操作重复项的问题

  • GUI:修复了某些客户操作系统和图形控制器类型无法使用 3D 加速复选框的回归问题

  • GUI:恢复了 macOS 上偏好设置窗口中丢失的帮助按钮

  • GUI:恢复了某些窗口丢失的帮助按钮快捷方式

  • GUI:修复了虚拟机以全屏模式启动时显示错误消息的问题

  • VirtioNet:修复了重置后功能重新协商的问题

  • 图形:修复了当 Linux 客户机使用 VMSVGA 显卡时屏幕闪烁的问题

  • VBoxManage:添加了导出和导入包含 NVMe 存储控制器的虚拟机的能力

  • VBoxManage:修复了无法使用 modifyvm 命令将图形控制器设置为“QemuRamFB”的问题 (bug #22232)

  • 主程序:修复了在 GUI 设置中指定自定义代理服务器无效的问题

  • 网络:添加了将 NAT 引擎替换为 libslirp 的更改

  • 客户操作系统:添加了 Windows Server 2025 的操作系统类型

  • Linux 客户机和主机:为 UBSAN 相关警告增加了更多修复 (bug #21877)

  • Linux 客户机和主机:添加了对 RHEL 9.6 内核的初步支持

  • Windows 客户机和主机:重新实现了驱动程序安装

  • Solaris 主机:从 Solaris 安装包中移除了 VirtualBox GUI 共享对象 libqgtk2styleVBox.so 和 libqgtk2VBox.so,因为它们依赖于已 EOL 且不再受支持的 GTK2

  • Linux 增强功能:引入了对内核 6.13 的初步支持

  • Linux 增强功能:vboxvideo:添加了对内核 6.4 支持的改进,并修复了使用 VBoxVGA 适配器时图形可能冻结的问题

  • Linux 增强功能:在 vboxvideo 中引入了针对内核 6.12 的额外修复

版本 7.1.4 (2024-10-15)

这是一个维护版本。以下项目已修复和/或添加:

  • GUI:添加了土耳其语、印度尼西亚语和意大利语的最新 NLS 更新

  • VMSVGA:改进了近期 Linux 内核的闪烁、黑屏和其他屏幕更新问题 (bug #21955)

  • NAT:修复了恢复 7.0.X 保存状态的问题

  • VBoxManage:修复了对无法访问的虚拟机执行“list vms”和“showvminfo”命令时中断的问题

  • Windows 主机:修复了 Windows 11 24H2 和近期 Insider Preview 版本上失败的系统 DLL 大小检查 (bug #22162)

  • Linux 客户机增强功能:引入了对内核 6.12 的初始支持(注意:在内核 6.12 中,KVM 默认在加载模块时初始化虚拟化。这会阻止 VirtualBox 虚拟机启动。为避免这种情况,请将“kvm.enable_virt_at_load=0”参数添加到内核命令行,或卸载相应的 kvm_XXX 模块)

  • Linux/Arm 增强功能:添加了通过“设备”菜单自动升级增强功能的可能性

  • EFI:再次添加了缺失的 LsiLogic MPT SCSI 驱动程序,以修复在使用 EFI 固件时从连接到此设备的设备启动的问题(7.1.0 回归)

  • EFI:恢复了损坏的网络启动支持(7.1.0 回归)

版本 7.1.2 (2024-09-26)

这是一个维护版本。以下项目已修复和/或添加:

  • GUI:添加了多窗口布局和翻译相关修复

  • GUI:修复了使用无人值守安装创建的虚拟机无法干净移除的问题

  • GUI:添加了更改远程显示安全方法选项

  • GUI:从 macOS/Arm 用户界面中移除了 BETA 标签

  • NAT:修复了 Windows 主机上的性能缓慢问题(bug #22164 和 #22180)

  • NAT:修复了当域为空时某些客户机上的 DHCP 问题

  • 3D:修复了虚拟机设置中启用 3D 加速的问题

  • 3D:修复了 Windows 虚拟机黑屏问题

  • 3D:修复了由不正确的视图处理导致的渲染问题

  • 3D:添加了为 Arm 平台虚拟机启用 3D 加速功能的可能性

  • GCM:修复了加载 7.0.x 创建的保存状态的问题

  • API:修复了传统 BIOS 处理 NVRAM 状态不正确以及在虚拟机删除时移除 NVRAM 的问题

  • API:修复了虚拟机从未启动时查询 UEFI 安全启动状态的问题

  • 增强功能:修复了自动升级时的错误消息

  • SDK:修复了使用 XPCOM 绑定构建代码的问题 (bug #22174)

版本 7.1.0 (2024-09-09)

这是一个重大更新。添加了以下新功能

  • GUI:现代化外观和感觉,提供基础和高级用户级别选择,具有精简或完整的用户界面功能

  • OCI 集成:性能仪表板现在显示云虚拟机的资源使用情况

  • OCI 集成:克隆计算实例

  • OCI 集成:重置计算实例

  • Oracle VirtualBox Extension Pack:更新至 PUEL 许可证,移除评估选项。如需评估 Extension Pack 的使用,请从 Oracle Software Delivery Cloud 下载

  • VRDE:如果用户未设置带有自定义证书的 TLS,则启用自签名证书,包括在旧证书过期前颁发新证书

  • NAT:支持 IPv6 的新引擎

  • macOS/Arm 主机:适用于 Linux 和 BSD 虚拟机的 Arm 虚拟化

  • Linux 主机和客户机:增加了对剪贴板共享的 Wayland 支持 (bug #20808)

  • 共享剪贴板:添加了在 Linux 和 Windows 主机/客户机上文件传输的初步支持。这需要安装 7.1 增强功能。请参阅用户指南了解已知限制

  • 屏幕录制:编码管道性能显著提升,录制活动时 CPU 使用率更低。这需要在 Windows 客户机上安装 7.1 增强功能

此外,以下项目已修复和/或添加:

  • VMM:修复了在使用 Hyper-V 时 CPUID 指令的 EFLAGS.TF 处理问题 (bug #17961)

  • virtio-net:后续修复了 FreeBSD 12.3 和 pfSense 2.6.0 的问题 (bug #21201)。

  • EFI:能够向新创建的虚拟机添加新的 Microsoft DB/KEX 证书

  • Oracle 扩展包:修复了附带用于完整虚拟机加密的加密支持模块的问题

  • GUI:改进了整体可访问性

  • GUI:更新了使用的 Qt 版本

  • 无人值守安装:添加了对基于 subiquity- / cloud-init 的安装程序的支*持;这使得能够在无人值守模式下安装更现代的基于 Linux 的客户操作系统

  • 无人值守安装:添加了为用户和管理员/root 账户指定单独密码的支持

  • VBoxManage:添加了显示和(重新)连接到虚拟机(视频)录制进度的功能

  • VBoxManage:添加了通过新的“mount”客户机控制子命令查询客户机挂载点的功能。需要至少 7.1 增强功能

  • Python:我们针对 Python 2.x 的 API 绑定现已标记为已弃用,并将在未来版本中移除。请将您的代码升级到使用 Python 3

  • VBoxShell:许多大大小小的错误修复 + Python 3.x 兼容性

旧版本的更改日志

要查看 VirtualBox 遗留版本的更改日志,请参阅相关 Oracle VirtualBox 发行版的文档。

变更日志也可在以下位置查阅:

https://virtualbox.ac.cn/wiki/Changelog.

7.1 版许可信息用户手册

Oracle VirtualBox 隐私信息

版本 6,2024 年 7 月 19 日

发布在 https://www.oracle.com/legal/privacy/ 上的 Oracle 隐私政策适用于 Oracle 收集和使用的您的个人数据。以下隐私信息更详细地描述了 Oracle VirtualBox 应用程序和 Oracle 之间交换的信息,以及 virtualbox.org 网站收集的信息。

§ 1 virtualbox.org。 “virtualbox.org”网站在您访问期间会记录匿名使用信息,例如您的 IP 地址、地理位置、浏览器类型、推荐来源、访问时长和页面浏览量(统称为“匿名数据”)。此外,仅当您选择注册 Oracle 单点登录帐户时,网站的 bug 跟踪和论坛服务才会存储您选择在个人资料中显示的数据,例如您的用户名和联系信息。

§ 2 Cookie。 virtualbox.org 网站、bug 跟踪器和论坛服务使用 Cookie 来识别和跟踪访问的 Web 浏览器,如果您已注册,则用于方便登录。大多数浏览器允许您拒绝接受 Cookie。虽然禁用 Cookie 后您仍然可以访问网站,但没有 Cookie 将无法登录 bug 跟踪器和论坛服务。

§ 3 更新通知。 Oracle VirtualBox 应用程序可能会联系 Oracle 以确定是否已发布新版本的 Oracle VirtualBox,并在发布时通知用户。在此过程中,会发送匿名数据,例如您的 IP 地址和一个非标识性计数器,以及使用的产品版本和平台,以便服务器可以确定是否有可用更新。默认情况下,此检查每天进行一次。您可以在 Oracle VirtualBox 首选项中更改此间隔或完全禁用这些检查。

§ 4 个人信息的使用。 Oracle 可能会出于统计目的使用通过上述方式收集的匿名和个人数据,并自动通知您有关 bug 跟踪器和论坛服务上帖子的新通知,以管理网站并因技术问题与您联系。Oracle 也可能通知您与 Oracle VirtualBox 相关的新产品发布。

在任何情况下,未经您的明确同意,个人数据均不会提供给任何第三方,除非 Oracle 可能根据法律或法律程序的要求这样做。

§ 5 更新。 Oracle 可以随时通过在 https://www.oracle.com/legal/privacy/ 上发布新版本来更新隐私政策,并且隐私信息将在 Oracle VirtualBox 应用程序附带的文档中保持最新。您应不时检查这些地方,以确保您对任何更改感到满意。

词汇表

本章描述了本文档中使用的一些术语和缩写。

ACPI

高级配置与电源接口,一个行业规范,用于 BIOS 和硬件扩展以配置 PC 硬件并执行电源管理。Windows 2000 及更高版本以及 Linux 2.4 及更高版本支持 ACPI。Windows 只能在安装时启用或禁用 ACPI 支持。

AHCI

高级主机控制器接口,支持硬盘等 SATA 设备的接口。请参阅 硬盘控制器

AMD-V

现代 AMD 处理器中内置的硬件虚拟化功能。请参阅 硬件虚拟化

API

应用程序编程接口。

APIC

高级可编程中断控制器,是原始 PC PIC(可编程中断控制器)的新版本。大多数现代 CPU 都包含一个片上 APIC,称为局部 APIC。许多系统还包含一个 I/O APIC(输入输出 APIC)作为独立芯片,它提供超过 16 个 IRQ。Windows 2000 及更高版本在安装期间检测到 I/O APIC 时会使用不同的内核。因此,在安装后不得移除 I/O APIC。

ATA

高级技术附件,硬盘接口的行业标准,与 IDE 同义。请参阅 硬盘控制器

BIOS

基本输入/输出系统,大多数个人计算机内置的固件,负责在计算机开机后初始化硬件,然后引导操作系统。Oracle VirtualBox 随附自己的虚拟 BIOS,在虚拟机启动时运行。

COM

Microsoft 组件对象模型,一种模块化软件的编程基础结构。COM 使应用程序能够提供应用程序编程接口,这些接口可以从各种其他编程语言和应用程序访问。Oracle VirtualBox 在内部和外部都利用 COM 为第三方开发人员提供全面的 API。

DHCP

动态主机配置协议。它使网络中的网络设备能够自动获取其 IP 地址和其他网络详细信息,以避免必须为网络中的所有设备配置固定的 IP 地址。Oracle VirtualBox 具有内置的 DHCP 服务器,当网络配置为 NAT 时,它会向虚拟机分配 IP 地址。请参阅 虚拟网络

EFI

可扩展固件接口,计算机内置的固件,旨在取代过时的 BIOS。最初由 Intel 设计,现在大多数现代操作系统都可以在具有 EFI 而非内置 BIOS 的计算机上启动。请参阅 替代固件 (UEFI)

EHCI

增强型主机控制器接口,实现 USB 2.0 标准的接口。

GUI

图形用户界面。通常用作“命令行界面”的对义词。在 Oracle VirtualBox 的上下文中,我们有时将主要的图形 VirtualBox 程序称为“GUI”,以区别于 VBoxManage 界面。

GUID

请参阅 UUID

IOAPIC

请参阅 APIC

IDE

集成驱动器电子设备,硬盘接口的行业标准。请参阅 硬盘控制器

iSCSI

Internet SCSI。请参阅 iSCSI 服务器

MAC

媒体访问控制,以太网网卡的一部分。MAC 地址是一个 6 字节的数字,用于标识网卡。它通常以十六进制表示法书写,字节之间用冒号分隔,例如 00:17:3A:5E:CB:08

MSI

消息信号中断,由 ICH9 等现代芯片组支持。请参阅 主板选项卡。与传统的引脚中断不同,使用 MSI 时,实际中断消息可以附带少量数据。这减少了所需的硬件引脚数量,并允许更多的中断和更好的性能。

NAT

网络地址转换。一种共享网络接口的技术,其中接口根据特定规则修改网络数据包的源 IP 地址和/或目标 IP 地址。Oracle VirtualBox 通常由路由器和防火墙使用,以保护内部网络免受 Internet 的影响,它可以使用 NAT 轻松地与虚拟机共享主机的物理网络硬件。请参阅 网络地址转换 (NAT)

OVF

开放虚拟化格式,一种跨平台行业标准,用于在虚拟化产品之间交换虚拟设备。请参阅 导入和导出虚拟机

PAE

物理地址扩展。这使得在 32 位环境中也能访问超过 4 GB 的 RAM。请参阅 高级选项卡

PIC

请参阅 APIC

PXE

预启动执行环境,一种从远程网络位置启动 PC 系统的行业标准。它包括用于 IP 配置的 DHCP 和用于文件传输的 TFTP。使用 UNDI,可以使用独立的硬件驱动程序堆栈,从引导代码访问网卡。

RDP

远程桌面协议,微软开发的一种协议,是 ITU T.128 和 T.124 视频会议协议的扩展。通过 RDP,可以通过网络连接从远程位置控制 PC 系统,数据在两个方向上传输。通常,图形更新和音频从远程计算机发送,键盘和鼠标输入事件从客户端发送。Oracle 提供的 Oracle VirtualBox 扩展包提供了 VRDP,这是相关标准的增强实现,与微软的 RDP 实现基本兼容。有关详细信息,请参阅 远程显示(VRDP 支持)

SAS

串行连接 SCSI,硬盘接口的行业标准。请参阅 硬盘控制器

SATA

串行 ATA,硬盘接口的行业标准。请参阅 硬盘控制器

SCSI

小型计算机系统接口。一种用于设备之间数据传输的行业标准,尤其用于存储。请参阅 硬盘控制器

SMP

对称多处理,意味着计算机的资源在多个处理器之间共享。这些可以是多个处理器芯片,或者像现代硬件那样,一个处理器中的多个 CPU 核心。

SSD

固态硬盘,使用微芯片在计算机系统中存储数据。与传统的硬盘相比,它们没有机械组件,如旋转磁盘。

TAR

一种广泛使用的归档文件格式。最初,它代表 Tape ARchive(磁带归档),并且已经被非常早期的 UNIX 版本支持,用于在磁带上备份数据。该文件格式至今仍被广泛使用。例如,OVF 归档使用 `.ova` 文件扩展名。请参阅 导入和导出虚拟机

UUID

通用唯一标识符,通常也称为 GUID(全局唯一标识符)。UUID 是一个数字和字母的字符串,可以动态计算,并保证是唯一的。通常,它被用作标识实体的全局句柄。Oracle VirtualBox 使用 UUID 来标识虚拟机、虚拟磁盘映像(VDI 文件)和其他实体。

VM

虚拟机。Oracle VirtualBox 使您能够在实际硬件之上运行的虚拟计算机。有关详细信息,请参阅 一些术语

VMM

虚拟机管理器。Oracle VirtualBox 中控制虚拟机执行的组件。请参阅 Oracle VirtualBox 可执行文件和组件 获取 Oracle VirtualBox 组件列表。

VRDE

VirtualBox 远程桌面扩展。此接口内置于 Oracle VirtualBox 中,允许 Oracle VirtualBox 扩展包提供对虚拟机的远程访问。Oracle 提供的 Oracle VirtualBox 扩展包支持 VRDP。有关详细信息,请参阅 远程显示(VRDP 支持)

VRDP

请参阅 RDP

VT-x

现代 Intel 处理器中内置的硬件虚拟化功能。请参阅 硬件虚拟化

xHCI

扩展主机控制器接口。实现 USB 3.0 标准的接口。

XML

可扩展标记语言,是一种适用于各种文本信息的元标准。XML 仅指定文档中的数据通常如何组织,而不规定如何语义化地组织内容。

XPCOM

Mozilla 跨平台组件对象模型,由 Mozilla 浏览器项目开发的编程基础结构,类似于 Microsoft COM,并使应用程序能够提供模块化编程接口。Oracle VirtualBox 在 Linux 上在内部和外部都使用 XPCOM,为第三方开发人员提供全面的 API。