Oracle VirtualBox 为 Windows、Linux 和 Oracle Solaris 提供 Guest Addition 模块,以实现在客户机上自动登录。
当客户机操作系统在虚拟机中运行时,可能需要使用从主机传递的凭据执行协调的自动化登录。凭据包括用户名、密码和域名,其中每个值都可以为空。
Windows 提供了一个模块化系统登录子系统,称为 Winlogon,可以通过 GINA(图形识别和身份验证)模块进行定制和扩展。在 Windows Vista 及更高版本中,GINA 模块已被一种称为凭据提供程序的新机制取代。Oracle VirtualBox Windows Guest Additions 同时附带 GINA 和凭据提供程序模块,因此能够使任何 Windows 客户机执行自动化登录。
要激活 Oracle VirtualBox GINA 或凭据提供程序模块,请使用命令行开关 /with_autologon
安装 Guest Additions。所有后续安装这些模块所需的手动步骤将由安装程序完成。
要手动安装 Oracle VirtualBox GINA 模块,请按照手动文件提取中所示提取 Guest Additions,并将 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 凭据提供程序模块,请按照手动文件提取中所示提取 Guest Additions,并将 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 Guest Additions 设备驱动程序查询凭据。当 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
请注意,这存在潜在的安全风险,因为在客户机上运行的恶意应用程序可能会使用适当的接口请求此信息。
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 模块作为 Guest Additions 的一部分提供,但默认情况下未在客户机操作系统上安装或激活。为了安装它,必须将其从 /opt/VBoxGuestAdditions-version/other/ 复制到安全模块目录。这通常是 32 位 Linux 客户机上的 /lib/security/ 或 64 位 Linux 客户机上的 /lib64/security/。有关正确的 PAM 模块目录,请参阅您的客户机操作系统文档。
例如,要将 pam_vbox.so 与 Ubuntu Linux 客户机操作系统和 GNOME 桌面管理器 (GDM) 结合使用,以使用主机传递的凭据自动登录用户,请按如下方式配置客户机操作系统
将 pam_vbox.so 模块复制到安全模块目录。在此示例中为 /lib/security。
编辑 GDM 的 PAM 配置文件,位于 /etc/pam.d/gdm。在顶部添加行 auth requisite pam_vbox.so
。此外,在大多数 Linux 发行版中,有一个名为 /etc/pam.d/common-auth 的文件。此文件包含在许多其他服务中,例如上面提到的 GDM 文件。您还需要在那里添加行 auth requisite pam_vbox.so
。
如果需要使用 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
选项。
Oracle VirtualBox 附带一个名为 vbox-greeter 的 greeter 模块,可与 LightDM 一起使用。LightDM 是 Ubuntu Linux 的默认显示管理器,因此也可用于自动化客户机登录。
vbox-greeter 不需要 自动化 Linux 和 UNIX 客户机登录中描述的 pam_vbox 模块即可运行。它自带 LightDM 提供的身份验证机制。但是,为了提供最大的灵活性,这两个模块可以在同一客户机上一起使用。
与 pam_vbox 模块一样,vbox-greeter 作为 Guest Additions 的一部分提供,但默认情况下未在客户机操作系统上安装或激活。要在安装 Guest Additions 时自动安装 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 Guest Additions 安装程序安装,位于 /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
部分中指定的限制相同。
Microsoft 提供了一个名为 Sysprep 的系统准备工具,用于准备 Windows 系统进行部署或重新分发。某些 Windows 版本在安装介质中包含 Sysprep,但该工具也可以从 Microsoft 网站下载。在标准安装中,大多数 Windows 版本都包含 Sysprep。Sysprep 主要由一个名为 sysprep.exe 的可执行文件组成,用户调用它将 Windows 安装置于准备模式。
Guest Additions 提供了一种从主机系统控制在客户机操作系统上以自动化方式启动系统准备的方法。有关如何使用此功能以及将特殊标识符 sysprep
作为要执行的程序,以及用户名 sysprep
和密码 sysprep
作为凭据的详细信息,请参阅应用程序的客户机控制。然后,Sysprep 以所需的系统权限启动。
无法指定 sysprep.exe 的位置。相反,将根据 Windows 版本使用以下路径
C:\sysprep\sysprep.exe (适用于 Windows XP 及更早版本)
%WINDIR%\System32\sysprep\sysprep.exe (适用于 Windows Vista 及更高版本)
Guest Additions 将自动使用适当的路径执行系统准备工具。
Oracle VirtualBox Guest Additions 包含几个不同的驱动程序。如果您不想全部配置它们,请使用以下命令安装 Guest Additions
$ sh ./VBoxLinuxAdditions.run no_setup
运行此脚本后,以 root
用户身份运行 rcvboxadd setup 命令以编译内核模块。
在某些 64 位客户机上,您必须将 lib 替换为 lib64。在不运行 udev 服务的老旧客户机上,您必须将 vboxadd 服务添加到默认运行级别,以确保模块已加载。
要设置时间同步服务,请将 vboxadd-service 服务添加到默认运行级别。要设置 Guest Additions 的 X11 和 OpenGL 部分,请运行 rcvboxadd-x11 setup 命令。请注意,您不需要启用其他服务。
使用 rcvboxadd setup 重新编译客户机内核模块。
编译后,重新启动客户机以确保加载新模块。
本节假定您熟悉使用 xorg.conf 配置 X.Org 服务器,以及可选地使用 hal 或 udev 和 xorg.conf.d 的较新机制。如果不熟悉,您可以通过学习 X.Org 附带的文档来了解它们。
Oracle VirtualBox Guest Additions 包含 X.Org 的驱动程序。默认情况下,这些驱动程序位于以下目录中
/opt/VBoxGuestAdditions-version/other/
X 服务器的正确版本将符号链接到 X.Org 驱动程序目录中。
为了使图形集成正常工作,X 服务器必须加载 vboxvideo
驱动程序。许多最新版本的 X 服务器在检测到它们正在 Oracle VirtualBox 中运行时会自动查找它。为了获得最佳用户体验,必须加载客户机内核驱动程序,并且 Guest Additions 工具 VBoxClient 必须作为客户端在 X 会话中运行。
为了使鼠标集成正常工作,必须加载客户机内核驱动程序。此外,对于旧版 X 服务器,必须加载正确的 vboxmouse
驱动程序并将其与 /dev/mouse 或 /dev/psaux 关联。对于大多数客户机,必须加载 PS/2 鼠标的驱动程序,并且必须将正确的 vboxmouse 驱动程序与 /dev/vboxguest 关联。
Oracle VirtualBox 客户机图形驱动程序可以使用任何图形配置,只要虚拟分辨率适合分配给虚拟机的虚拟视频内存(减去客户机驱动程序使用的小部分),如显示设置中所述。该驱动程序将为所有活动的客户机显示器提供一系列标准模式,至少达到默认客户机分辨率。可以通过将输出属性 VBOX_MODE 设置为 "<width>x<height>" 来更改任何客户机显示器的默认模式。当 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
对于运行现代服务器操作系统的虚拟机,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
当 VM 关闭时,您可以使用 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 永远无法移除。
当 VM 运行时,可以使用 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 Guest Additions 包含一个接收热移除事件并弹出 CPU 的服务。此外,将 CPU 添加到 VM 后,Linux 不会自动使用它。如果已安装,Linux Guest Additions 服务将负责处理。如果没有,则可以使用以下命令启动 CPU
$ echo 1 > /sys/devices/system/cpu/cpu<id>/online
Oracle VirtualBox 包含一个名为网络摄像头直通的功能,它允许客户机使用主机网络摄像头。这补充了通用的 USB 直通支持,后者是旧版本中使用主机网络摄像头的典型方式。从理论上讲,网络摄像头直通支持可以处理非 USB 视频源,但这完全未经测试。
网络摄像头直通模块作为 Oracle VirtualBox Extension Pack 的一部分提供,必须单独安装。请参阅安装 Oracle VirtualBox 和扩展包。
可以通过 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 命令中使用的路径或别名。
当网络摄像头设备从主机分离时,模拟的网络摄像头设备会自动从客户机分离。
当网络摄像头设备从主机分离时,模拟的网络摄像头设备仍保持连接到客户机,必须使用 VBoxManage controlvm VM-name webcam detach 命令手动分离。
当网络摄像头从主机分离时,只有当网络摄像头正在流式传输视频时,模拟的网络摄像头设备才会自动从客户机分离。如果模拟的网络摄像头处于非活动状态,则应使用 VBoxManage controlvm VM-name webcam detach 命令手动分离。
别名 .0 和 .1 映射到 /dev/video0,别名 .2 映射到 /dev/video1,依此类推。
除了标准 VESA 分辨率之外,Oracle VirtualBox VESA BIOS 允许您添加多达 16 种自定义视频模式,这些模式将报告给客户机操作系统。当将 Windows 客户机与 Oracle VirtualBox Guest Additions 一起使用时,将使用自定义图形驱动程序而不是备用 VESA 解决方案,因此此信息不适用。
可以使用附加数据功能为每个 VM 配置其他视频模式。附加数据键名为 CustomVideoModex
,其中 x 是 1 到 16 之间的数字。请注意,模式将从 1 开始读取,直到未定义下一个数字或达到 16。以下示例添加了一个与许多笔记本电脑的本机显示分辨率相对应的视频模式
$ VBoxManage setextradata VM-name "CustomVideoMode1" "1400x1050x16"
自定义视频模式的 VESA 模式 ID 从 0x160
开始。为了使用上述定义的自定义视频模式,必须向 Linux 提供以下命令行
vga = 0x200 | 0x160 vga = 864
对于安装了 Oracle VirtualBox Guest Additions 的客户机操作系统,可以使用视频模式提示功能设置自定义视频模式。
当使用图形前端(正常的 Oracle VirtualBox 应用程序)启动安装了 Guest Additions 的客户机系统时,除非用户通过拖动窗口、切换到全屏或无缝模式或使用 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=path-to-file-with-boot-sector 参数。它指定一个文件名,从中获取 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 配置中的存储控制器。
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 硬盘端口,Port0 指的是第一个端口。
上述命令适用于带有 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 硬盘端口,Port0 指的是第一个端口。
作为一项实验性功能,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 将无法启动。
在 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"
此命令将为 VM-name 的第一个 NAT 网络实例保留从 192.168.0.0
到 192.168.254.254
的网络地址。客户机 IP 将分配到 192.168.0.15
,默认网关位于 192.168.0.2
。
对于 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 服务器。在某些情况下,可能需要向客户机隐藏 DNS 服务器 IP,例如当由于 DHCP 租约过期导致主机上的此信息可能更改时。在这种情况下,您可以使用以下命令告诉 NAT 引擎充当 DNS 代理
$ VBoxManage modifyvm VM-name --natdnsproxy1 on
为了解析网络名称,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 核心使用别名并在为连接生成别名时使用随机端口。这对于 SSH、FTP 等大多数协议都运行良好。尽管某些协议可能需要更透明的行为,或者可能依赖于发送数据包的真实端口号。您可以使用以下命令更改 NAT 模式
$ VBoxManage modifyvm VM-name \ --nataliasmode1 proxyonly
$ VBoxManage modifyvm "Linux Guest" --nataliasmode1 sameports
第一个示例禁用别名并切换 NAT 到透明模式,第二个示例强制保留端口值。这些模式可以在必要时组合使用。
Oracle VirtualBox 提供给客户机的 DMI 数据可以针对特定 VM 进行更改。使用以下命令配置 DMI BIOS 信息。如果您的 VM 配置为使用 EFI 固件,则需要将键中的 pcbios
替换为 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)都被认为是字符串。如果这样的字符串是有效数字,则该参数将被视为数字,VM 很可能因 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
您可以配置 Oracle VirtualBox 以向客户机提供最多四个自定义 ACPI 表。使用以下命令配置自定义 ACPI 表。请注意,除了 CustomTable0
之外,还提供 CustomTable1
、CustomTable2
和 CustomTable3
。
$ 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 表之一。
默认情况下,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 处于活动状态,则为主机时钟)重新同步。因此,如果按上述方式更改客户机时钟的速率,则应禁用任何时间同步。请参阅调整 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 VirtualBox 包含一个利用 Oracle Solaris 11 的 Crossbow 功能的网络过滤驱动程序。默认情况下,该新驱动程序安装在支持它的 Oracle Solaris 11 主机上。
要强制安装较旧的基于 STREAMS 的网络过滤驱动程序,请在安装 Oracle VirtualBox 软件包之前以 root 身份执行以下命令
$ touch /etc/vboxinst_vboxflt
要强制安装基于 Crossbow 的网络过滤驱动程序,请在安装 Oracle VirtualBox 软件包之前以 root 身份执行以下命令
$ touch /etc/vboxinst_vboxbow
要检查 Oracle VirtualBox 当前正在使用哪个驱动程序,请执行
$ modinfo | grep vbox
如果输出包含 vboxbow,则表示 Oracle VirtualBox 正在使用 Crossbow 网络过滤驱动程序,而名称 vboxflt 则表示使用较旧的 STREAMS 网络过滤驱动程序。
Oracle VirtualBox 支持虚拟网络接口 (VNIC) 模板,用于通过 VLAN 配置 VM。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
这将通过接口 nge0 创建一个 VLAN ID 为 23 的临时 VNIC 模板。要创建在主机重启后仍然存在的 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 模板创建完成后,任何需要通过接口 nge0 在 VLAN 23 上运行的 VM 都可以配置为使用此 VNIC 模板进行桥接。
VNIC 模板使 VLAN 上的 VM 管理更简单高效。VLAN 详细信息不作为每个 VM 配置的一部分存储,而是从 VNIC 模板继承,同时启动 VM。VNIC 模板本身可以使用 dladm 命令随时修改。
VNIC 模板可以创建额外的属性,例如带宽限制和 CPU 扇出。有关详细信息,请参阅您的 Oracle Solaris 网络文档。这些附加属性也适用于使用 VNIC 模板进行桥接的 VM。
默认情况下,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 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。
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。锁定意味着移除用户不应看到的一些功能。
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。
您可以禁用某些状态栏项
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,...."
下表显示了可能的主机键操作及其默认主机键快捷方式。将操作设置为“无”将禁用该主机键操作。
操作 |
默认键 |
操作 |
---|---|---|
|
T |
拍摄快照 |
|
E |
截屏 |
|
I |
切换鼠标集成 |
|
Del |
注入 Ctrl+Alt+Del |
|
Backspace |
注入 Ctrl+Alt+Backspace |
|
P |
暂停虚拟机 |
|
R |
硬重置客户机 |
|
保存虚拟机状态并终止虚拟机 |
|
|
H |
按下虚拟ACPI电源按钮 |
|
不保存状态地关闭虚拟机电源 |
|
|
Q |
显示关闭虚拟机对话框 |
|
F |
将虚拟机切换到全屏模式 |
|
L |
将虚拟机切换到无缝模式 |
|
C |
将虚拟机切换到缩放模式 |
|
G |
自动调整客户机窗口大小 |
|
A |
立即调整客户机窗口大小 |
|
首页 |
在全屏模式和无缝模式下显示弹出菜单 |
|
S |
打开虚拟机设置对话框 |
|
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增强功能;例如,客户机正在启动或未安装增强功能;或者指针设备配置为USB平板电脑但客户机尚未加载USB驱动程序。一旦增强功能变为活动状态或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
这是一个全局设置。
可以从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服务vboxwebsrv用于远程控制Oracle VirtualBox。它在Oracle VirtualBox软件开发工具包(SDK)中有详细记录。参见Oracle VirtualBox编程接口。Web服务启动脚本适用于受支持的主机操作系统。以下部分描述了如何使用这些脚本。Oracle VirtualBox Web服务绝不会作为标准安装的结果而自动启动。
在Linux上,可以通过向文件/etc/default/virtualbox添加适当的参数,在主机启动期间自动启动Web服务。有一个强制参数VBOXWEB_USER
,必须将其设置为以后将启动虚拟机的用户。下表中的所有参数都以VBOXWEB_
前缀字符串开头。例如:VBOXWEB_HOST
和VBOXWEB_PORT
。
参数 |
描述 |
默认 |
---|---|---|
|
Web服务运行的用户 |
|
|
Web服务绑定的主机 |
本地主机 |
|
Web服务绑定的端口 |
18083 |
|
PEM格式的服务器密钥和证书文件 |
|
|
服务器密钥密码的文件名 |
|
|
PEM格式的CA证书文件 |
|
|
CA证书路径 |
|
|
DH文件名或DH密钥长度(比特) |
|
|
包含随机数生成器种子的文件 |
|
|
会话超时(秒),0表示禁用超时 |
300 |
|
超时检查频率(秒) |
5 |
|
并行运行的最大工作线程数 |
100 |
|
套接字关闭前的最大请求数 |
100 |
|
日志文件数量,0表示禁用日志轮转 |
10 |
|
触发轮转的最大日志文件大小(字节) |
1MB |
|
触发日志轮转的最大时间间隔(秒) |
1天 |
设置参数SSL_KEYFILE
可启用SSL/TLS支持。强烈建议使用加密,否则所有内容(包括密码)都将以明文传输。
在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/user
或config/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启动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.
内存气球服务(以前称为VBoxBalloonCtrl)已更名为VBoxWatchdog。此服务现在包含以下旨在在服务器环境中运行的主机服务
内存气球控制。此服务自动处理虚拟机的已配置内存气球。参见内存气球。此服务对于服务器环境很有用,在服务器环境中虚拟机可能在运行时动态地需要更多或更少的内存。
该服务定期检查虚拟机的当前内存气球及其空闲客户机RAM,并根据需要自动膨胀或收缩当前内存气球。此处理仅适用于安装了最新增强功能正在运行的虚拟机。
主机隔离检测。此服务提供一种方式来检测主机是否无法再访问特定的Oracle VirtualBox服务器实例,并采取适当的行动,例如关闭、保存当前状态甚至关闭某些虚拟机电源。
所有配置值都可以通过命令行或全局额外数据指定,其中命令行值在设置时始终具有更高的优先级。某些配置值也可以按每个虚拟机指定。因此,总体查找顺序是:命令行,如果可用则为按虚拟机额外数据,全局额外数据。
内存气球控制根据虚拟机的空闲内存和请求的最大气球大小来膨胀和收缩虚拟机的内存气球。
要设置内存气球控制,需要设置虚拟机可以达到的最大气球大小。这可以通过命令行指定,如下所示
--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服务器实例,主机需要在一段时间内将交替值设置为全局额外数据值。如果在此时间段内未设置此值,则会发生超时,并且将对处理的虚拟机执行所谓的主机隔离响应。通过定义虚拟机组并将虚拟机分配到这些组可以控制哪些虚拟机被处理。默认情况下,未设置组,这意味着当30秒内未收到主机响应时,服务器上的所有虚拟机都将被处理。
使用以下命令行设置主机隔离检测处理的组
--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
。暂停虚拟机的执行。
poweroff
。通过按下虚拟电源按钮关闭虚拟机。虚拟机将无法保存任何数据或否决关机进程。
save
。保存当前机器状态,然后关闭虚拟机电源。如果保存机器状态失败,虚拟机将暂停。
shutdown
。通过向虚拟机的操作系统发送ACPI
关机事件来温和地关闭虚拟机。然后操作系统有机会执行干净的关机。
有关更高级的选项和参数,例如详细日志记录,请查看通过--help
访问的内置命令行帮助。
在Linux上,可以通过向文件/etc/default/virtualbox添加适当的参数,在主机启动期间自动启动看门狗服务。有一个强制参数VBOXWATCHDOG_USER
,必须将其设置为以后将启动虚拟机的用户。为了向后兼容,您还可以指定VBOXBALLOONCTRL_USER
。
下表中的参数都以VBOXWATCHDOG_
前缀字符串开头。例如:VBOXWATCHDOG_BALLOON_INTERVAL
和VBOXWATCHDOG_LOGSIZE
。旧参数(如VBOXBALLOONCTRL_INTERVAL
)仍可使用。
参数 |
描述 |
默认 |
---|---|---|
|
看门狗服务运行的用户 |
|
|
日志文件数量,0表示禁用日志轮转 |
10 |
|
触发轮转的最大日志文件大小(字节) |
1MB |
|
触发日志轮转的最大时间间隔(秒) |
1天 |
|
检查气球大小的间隔(毫秒) |
30000 |
|
气球大小增量(兆字节) |
256 |
|
气球大小减量(兆字节) |
128 |
|
气球大小下限(兆字节) |
64 |
|
减小气球大小所需的空闲内存(兆字节) |
1024 |
在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
表 3也适用于Oracle Solaris。参数名称必须更改为小写,并且必须添加config/
前缀。例如:config/user
或config/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扩展包和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上,通过在/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主机上,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用于启动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上,自动启动功能由两个组件组成。第一个组件是配置文件,管理员可以在其中设置虚拟机的延迟启动,并暂时禁用特定用户的自动启动。配置文件应位于所有必需用户可访问的文件夹中,但其权限应允许除管理员以外的任何人仅读取。配置文件包含多个选项。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会话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管理器或VBoxManage来加密虚拟机。要使用VBoxManage加密未加密的虚拟机,请使用
VBoxManage encryptvm uuid|vmname setencryption --new-password filename|- \ --cipher cipher-ID --new-password-id ID
要提供加密密码,请将VBoxManage指向存储密码的文件,或指定-
以让VBoxManage在命令行上提示输入密码。
密码参数指定用于加密的密码,可以是AES-128
或AES-256
。虚拟机将根据加密组件选择合适的操作模式,例如GCM、CTR或XTS。指定的密码标识符可以由用户自由选择,并在为虚拟机提供多个密码时用于正确识别。
Oracle VirtualBox刚启动时,加密的虚拟机无法打开,并且无法访问。此外,如果加密的虚拟机只是注册而没有密码,或者密码不正确,则它仍然无法访问。用户需要使用VirtualBox管理器或以下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管理器中完成,或使用VBoxManage配合以下命令
VBoxManage encryptvm uuid|vmname setencryption --old-password file|-
唯一必需的参数是用于加密虚拟机的密码。选项与加密虚拟机相同。
如果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
第一行实际上不是必需的,因为默认情况下会执行保存状态操作。
为了向客户机提供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设备的流量。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-ohci
或usb-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扩展包的一部分,需要安装。否则,磁盘加密将不可用。
由于加密仅作用于存储的用户数据,因此目前无法检查磁盘映像的元数据完整性。攻击者可能通过删除或更改映像中的数据块或更改元数据项(如磁盘大小)来破坏数据。
导出包含加密磁盘映像的设备是不可能的,因为OVF规范不支持此功能。因此,所有映像在导出期间都会被解密。
DEK在虚拟机运行时保存在内存中,以便能够解密读取的数据和加密客户机写入的数据。虽然这应该是显而易见的,但用户需要注意这一点,因为攻击者可能能够从受损主机中提取密钥并解密数据。
加密或解密映像时,密码会以明文形式通过Oracle VirtualBox API传递。这需要牢记,尤其是在使用利用Web服务的第三方API客户端时,密码可能会通过网络传输。在这种情况下,强制使用HTTPS。
加密包含差异映像的映像仅在没有快照或线性快照链时才可能。此限制可能会在未来的Oracle VirtualBox版本中解决。
磁盘加密功能只能保护为虚拟机配置的磁盘内容。它不涵盖与虚拟机相关的任何其他数据,包括保存状态或配置文件本身。
可以使用VirtualBox管理器或VBoxManage来加密磁盘映像。VirtualBox管理器更易于使用,但它按虚拟机操作,并加密连接到特定虚拟机的所有磁盘映像。使用VBoxManage可以加密单个映像,包括所有差异映像。要使用VBoxManage加密未加密的介质,请使用
VBoxManage encryptmedium uuid|filename \ --newpassword filename|- --cipher cipher-ID --newpasswordid "ID
要提供加密密码,请将VBoxManage指向存储密码的文件,或指定-
以让VBoxManage在命令行上提示您输入密码。
密码参数指定用于加密的密码,可以是AES-XTS128-PLAIN64
或AES-XTS256-PLAIN64
。指定的密码标识符可以由用户自由选择,并在虚拟机启动期间提供多个密码时用于正确识别。
如果用户在加密多个映像时使用相同的密码,并且使用相同的密码标识符,则用户在虚拟机启动期间只需提供一次密码。
当使用VirtualBox Manager启动虚拟机时,将打开一个对话框,用户需要在其中输入连接到虚拟机的所有加密映像的所有密码。如果使用VBoxHeadless等其他前端,虚拟机将在客户机尝试访问加密磁盘时暂停。用户需要使用以下命令通过VBoxManage提供密码
VBoxManage controlvm uuid|vmname addencpassword ID password [--removeonsuspend yes|no]
ID必须与加密映像时提供的密码标识符相同。password是加密映像时使用的密码。可选地,您可以指定--removeonsuspend
yes|no以指定在虚拟机挂起时是否从虚拟机内存中删除密码。在虚拟机可以恢复之前,用户需要再次提供密码。当虚拟机因主机挂起事件而挂起且用户不希望密码保留在内存中时,此功能很有用。
在某些情况下,可能需要解密以前加密的映像。这可以在VirtualBox管理器中针对完整的虚拟机完成,或使用VBoxManage配合以下命令
VBoxManage encryptmedium uuid|filename --oldpassword file|-
唯一必需的参数是用于加密映像的密码。选项与加密映像相同。
本节介绍如何使用准虚拟化提供程序支持的接口调试客户机操作系统。
准虚拟化调试会显著改变客户机操作系统的行为,应仅供专家用户用于调试和诊断。
这些调试选项以逗号分隔的键值对字符串形式指定。空字符串会禁用准虚拟化调试。
下面列出的所有选项都是可选的,因此当未指定相应的键值对时,将使用指定的默认值。
键:enabled
值:0
或1
默认值:0
指定1
以启用Hyper-V调试接口。如果未指定此键值对或值不是1
,则无论是否存在其他键值对,Hyper-V调试接口都将禁用。
键:address
值:IPv4地址
默认值:127.0.0.1
指定远程调试器连接的IPv4地址。
键:port
值:UDP端口号
默认值:50000
指定远程调试器连接的UDP端口号。
键:vendor
值:CPUID报告给客户机的Hyper-V供应商签名
默认值:启用调试时为Microsoft Hv
,否则为VBoxVBoxVBox
指定通过CPUID暴露给客户机的Hyper-V供应商签名。对于调试Microsoft Windows客户机,要求虚拟机管理程序报告Microsoft供应商。
键:hypercallinterface
值:0
或1
默认值:0
指定当客户机请求时,是否应建议使用超调用而不是MSR来启动主机和客户机之间的调试数据传输。
键:vsinterface
值:0
或1
默认值:启用调试时为1
,否则为0
指定是否向客户机公开VS#1虚拟化服务接口。此接口是调试Microsoft Windows 10 32位客户机所必需的,但对于其他Windows版本是可选的。
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不支持。要在Windows 7或Vista客户机中使用Hyper-V调试,请从Windows 8.0安装中复制文件kdvm.dll。此文件通常位于C:\Windows\System32。将其复制到Windows 7/Vista客户机中的相同位置。请确保复制与客户机操作系统匹配的32位或64位DLL版本。
只有Windows 8.0附带kdvm.dll。Windows 8.1及更高版本的Windows不附带。
虚拟机和客户机配置
关闭虚拟机。
使用以下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调试选项。
启动虚拟机。
在客户机中,启动一个提升的命令提示符并执行以下命令
对于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选项仅在使用Hyper-V调试传输时对Windows 8或更高版本有效。有关bcdedit选项的详细说明,请参阅Microsoft Windows文档。
在您的主机或远程主机上启动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文档。
重新启动您的Windows客户机,然后它应该作为调试对象连接到Microsoft WinDbg。
作为一项实验性功能,主要是因为仅限于Linux主机且Linux发行版覆盖范围未知,Oracle VirtualBox支持将PC扬声器直通到主机。PC扬声器,有时称为系统扬声器,是一种无需常规音频和声卡支持即可产生可听反馈(如蜂鸣声)的方式。
Oracle VirtualBox中的PC扬声器直通功能仅处理蜂鸣声。虚拟机对PC扬声器的其他高级使用,例如PCM音频,将不起作用,导致未定义的主机行为。
在Linux上产生蜂鸣声是一个非常复杂的话题。Oracle VirtualBox提供了一系列选项,旨在尽可能多的Linux发行版和系统配置上确定且可靠地实现此功能。这些选项总结在下表中。
代码 |
设备 |
备注 |
---|---|---|
1 |
/dev/input/by-path/platform-pcspkr-event-spkr |
直接使用主机PC扬声器。 |
2 |
/dev/tty |
使用虚拟机进程的终端关联。虚拟机需要在虚拟控制台上启动。 |
3 |
/dev/tty0或/dev/vc/0 |
只能由 |
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的通道,该通道可能隐藏在混音器设置中,并且没有被静音。
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管理器或VBoxManage访问,就像任何本地连接的USB设备一样。这可以多次用于访问不同的设备服务器。
要删除设备服务器,可以使用以下命令
$ VBoxManage usbdevsource remove unique-name
本节简要概述了如何设置基于Linux的系统以充当USB设备服务器。服务器上的系统需要usbip-core.ko和usbip-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解决方案提供所需级别的安全保护。
Oracle VirtualBox可以在运行Hyper-V的Windows主机上使用。这是一个实验性功能。
无需配置。Oracle VirtualBox会自动检测Hyper-V并将其用作主机系统的虚拟化引擎。虚拟机窗口状态栏中的CPU图标表示正在使用Hyper-V。
使用此功能时,某些主机系统可能会出现Oracle VirtualBox性能显著下降的情况。
Oracle VirtualBox支持嵌套虚拟化。此功能允许将硬件虚拟化功能直通到客户机虚拟机。这意味着您可以在Oracle VirtualBox客户机上安装虚拟机管理程序,例如Oracle VirtualBox、Oracle VM Server或KVM。然后,您可以在客户机虚拟机中创建和运行虚拟机。
主机CPU上不存在的硬件虚拟化功能将不会暴露给客户机。此外,某些功能(如嵌套分页)尚未支持直通到客户机。
您可以通过以下方式之一启用嵌套虚拟化功能
从VirtualBox管理器中,选中处理器选项卡上的启用嵌套VT-x/AMD-V复选框。要禁用此功能,请取消选中该复选框。
使用VBoxManage modifyvm命令的--nested-hw-virt
选项来启用或禁用嵌套虚拟化。参见VBoxManage modifyvm。
这目前是一项实验性功能。
该功能默认禁用,可以通过在Windows注册表项HKEY_LOCAL_MACHINE\Software\Oracle\VirtualBox\VBoxSDS
中创建REG_DWORD值ServerSession0
来启用。将值的数据指定为1
以启用该功能,或0
以禁用该功能。需要重新启动主机才能使更改生效。
由于不同的Windows会话拥有各自的资源集,当至少有一个Oracle VirtualBox进程在会话0中运行时,访问在交互式用户会话中创建的网络共享可能会出现一些问题。
要在会话0中访问网络共享,一种可能的解决方法是建立对共享的永久访问,然后重新启动主机。
ISO镜像制作器
构造虚拟ISO 9660 / Joliet / UDF / HFS混合镜像,并将其写入文件 (RTIsoMaker) 或作为虚拟镜像 (VISO) 提供服务。
VISO文件是一个虚拟ISO镜像,即从主机上的一堆文件在内存中构建。VISO只是描述如何使用与mkisofs和genisoimage大致相似的语法进行操作的“食谱”。
一个要求是VISO文件必须以--iprt-iso-maker-file-marker选项之一开头。您使用的选项将决定读取文件时使用的引用和转义规则。该选项将镜像UUID作为参数。
VISO文件被视为UTF-8,且不得包含任何字节顺序标记 (BOM)。目前无法在VISO文件中注释掉行。
所有不以“@”开头的非选项都被视为指示应添加到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' 被添加到 ISO 映像中,作为所有已启用命名空间下的 '/docs/readme.txt'。在主 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,您可以将文件/目录/任何内容添加到选定的命名空间,而无需使用上面更复杂的空名称语法。
添加目录时,您只能控制目录本身的命名和省略,而不能控制其下任何递归添加的文件和目录。
输出文件名。VISO 模式不支持此选项。
配置活动命名空间以及文件规范的解释方式。该规范是一个逗号分隔的列表。列表中的每个元素都是一个子列表,通过空格、'+' 或 '|' 分隔,指示元素控制的命名空间。命名空间分为主要和次要两种,您不能在次要命名空间所属的主要命名空间之前指定它。
主要命名空间和括号中的别名
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
此选项用于一个或多个 --import-iso 操作之后,它将尽可能选择与导入内容匹配的配置。如果导入的 ISO 仅包含 iso9660 命名空间,则 joliet、udf 和 hfs 命名空间将被移除。这在向 ISO 添加额外文件时很有用,并且可以防止访客在挂载时选择不包含导入 ISO 内容的命名空间。
打开指定的 ISO 文件并将其用作源文件系统,直到遇到相应的 --pop 选项。这些变体用于选择 ISO 上要(不)访问的命名空间。这些选项便于从 ISO 复制文件/目录/内容,而无需先提取它们或使用 :iprtvfs: 语法。
从源文件系统堆栈中弹出一个 --push-iso。
导入给定 ISO 文件上的所有内容,包括引导配置和系统区域(前 16 个扇区)内容。您可以使用 --name-setup 来省略命名空间。
设置 ISO 级别
0: 禁用主 ISO 命名空间。
1: ISO 级别 1: 文件名为 8.3 格式,且限制为 4GB - 1。
2: ISO 级别 2: 31 个字符的名称,且限制为 4GB - 1。
3: ISO 级别 3: 31 个字符的名称,并支持大于等于 4GB 的文件。(默认)
4: 其他工具使用的虚构级别。尚未实现。
为主要 ISO 9660 命名空间启用或禁用 rock ridge 支持。--limited-rock-ridge 选项会省略根目录中的几个位,这会使 Linux 选择 rock ridge 而非 joliet。
默认:--limited-rock-ridge
启用或禁用 joliet 命名空间。此选项必须位于任何文件规范之前。
默认:--joliet
设置 Joliet UCS 支持级别。目前这仅在映像中标记,但不在实际路径名上强制执行。
默认级别:3
启用合理的文件属性处理(默认)
所有者 ID 设置为零
组 ID 设置为零
对于不可执行文件,模式设置为 0444。
对于可执行文件,模式设置为 0555。
对于目录,模式设置为 0555,保留粘滞位。
与 --rational-attribs 相反,导致属性完全按照它们在源中的样子记录。
控制 rock ridge、UDF 和 HFS 的强制文件模式掩码。
控制 rock ridge、UDF 和 HFS 的强制目录模式掩码。
控制隐式创建目录的默认模式掩码(rock ridge、UDF、HFS)。--dir-mode 选项会覆盖此设置。
显式设置已添加到 ISO 的文件/目录/任何内容的 rock ridge、UDF 和 HFS 文件模式。模式可以是八进制、ra+x、a+r 或 a+rx。(对更复杂的模式规范的支持可能会在以后实现。)
请注意,只有当前 --name-setup 中的命名空间会受到影响。
显式设置已添加到 ISO 的文件/目录/任何内容的 rock ridge、UDF 和 HFS 文件所有者 ID(数字)。
请注意,只有当前 --name-setup 中的命名空间会受到影响。
显式设置已添加到 ISO 的文件/目录/任何内容的 rock ridge、UDF 和 HFS 文件组 ID(数字)。
请注意,只有当前 --name-setup 中的命名空间会受到影响。
开始一个新的 El Torito 引导条目。
文件规范,指定应添加到映像并用作当前引导条目的 El Torito 引导映像的文件。
指定 ISO 上的文件作为当前引导条目的 El Torito 引导映像。
设置当前 El Torito 引导条目的引导映像仿真类型。
为当前 El Torito 引导条目指定映像加载段。
默认:0x7c0
为当前 El Torito 引导条目指定以仿真扇区为单位的映像加载大小。
默认:4(512 字节的扇区)
指示当前 El Torito 引导条目不可引导。(据称 BIOS 将配置仿真,但不会尝试引导。)
将 isolinux/syslinux 引导信息表写入当前 El Torito 引导条目的引导映像中。
设置当前条目、新条目或验证条目的 El Torito 平台 ID,具体取决于何时使用。ID 必须是以下之一:x86、PPC、Mac、efi
将 El Torito 引导目录作为文件输入到命名空间中。namespec 使用与 'filespec' 相同的格式,但省略了最终的源文件系统名称组件。
指定一个应在 ISO 映像中偏移量 0 处加载的文件。文件大小不得超过 32KB。创建混合映像时,此文件的某些部分可能会被分区表等重新生成。
根目录中抽象文件的名称。
应用程序 ID 字符串或根文件名。后者必须以 "_"(下划线) 为前缀。
根目录中参考书目文件的名称。
根目录中版权文件的名称。
发布者 ID 字符串或根文件名。后者必须以 "_"(下划线) 为前缀。
数据准备者 ID 字符串或根文件名。后者必须以 "_"(下划线) 为前缀。
系统 ID 字符串。
卷 ID 字符串(标签)。(通过在 --volume-id 出现之间使用 --name-setup 选项更改活动命名空间,可以为主要 ISO 9660、joliet、UDF 和 HFS 设置不同的标签。)
卷集 ID 字符串。
--name-setup iso+joliet+udf+hfs 的别名。
允许 31 个字符的文件名。在此处只需确保 ISO 级别大于等于 2。
与 --rock-ridge 和 --strict-attribs 相同。
与 --rock-ridge 和 --rational-attribs 相同。
在 VISO 文件中用作第一个选项,用于指定文件 UUID,并指示其使用 bourne-shell 参数引用和转义样式进行格式化。
在 VISO 文件中用作第一个选项,用于指定文件 UUID,并指示其使用 microsoft CRT 参数引用和转义样式进行格式化。
选择特定的输出缓冲区大小以测试虚拟映像读取。
为每次虚拟映像读取启用随机缓冲区大小,使用当前输出缓冲区大小(--output-buffer-size)作为最大值。
启用映像的验证通过,该验证将虚拟映像和输出映像中给定大小的块以随机顺序进行比较。