目录
Oracle VM VirtualBox 为 Windows、Linux 和 Oracle Solaris 提供增强功能模块,以实现在来宾机上自动登录。
当来宾操作系统在虚拟机中运行时,可能需要使用从主机传递的凭据进行协调和自动登录。凭据包括用户名、密码和域名,其中每个值都可以为空。
Windows 提供了一个模块化系统登录子系统,称为 Winlogon,可以通过 GINA(图形识别和认证)模块进行自定义和扩展。在 Windows Vista 及更高版本中,GINA 模块被一种称为凭据提供程序的新机制取代。Oracle VM VirtualBox 针对 Windows 的增强功能附带了 GINA 和凭据提供程序模块,因此可以使任何 Windows 来宾机执行自动登录。
要激活 Oracle VM VirtualBox GINA 或凭据提供程序模块,请使用命令行开关 /with_autologon
安装增强功能。安装这些模块所需的所有后续手动步骤都将由安装程序完成。
要手动安装 Oracle VM VirtualBox GINA 模块,请按照第 4.2.1.4 节,“手动文件提取”所示提取增强功能,并将 VBoxGINA.dll
文件复制到 Windows SYSTEM32
目录。在注册表中,创建以下键,其值为 VBoxGINA.dll
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\GinaDLL
Oracle VM VirtualBox GINA 模块是作为 MSGINA.DLL
标准 Windows GINA 模块的包装器实现的。因此,它可能无法与第三方 GINA 模块正确配合使用。
要手动安装 Oracle VM VirtualBox 凭据提供程序模块,请按照第 4.2.1.4 节,“手动文件提取”所示提取增强功能,并将 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
要设置凭据,请在正在运行的虚拟机上使用以下命令
$ VBoxManage controlvm "Windows XP" setcredentials "John Doe" "secretpassword" "DOMTEST"
当虚拟机运行时,Oracle VM VirtualBox 登录模块(GINA 或凭据提供程序)可以使用 Oracle VM VirtualBox 增强功能设备驱动程序查询凭据。当 Windows 处于注销模式时,登录模块将不断轮询凭据,如果凭据存在,将尝试登录。检索凭据后,登录模块将清除它们,因此对于后续登录,必须重复上述命令。
出于安全原因,凭据不会以任何持久方式存储,并且在虚拟机重置时会丢失。此外,凭据是只写的。无法从主机端检索凭据。凭据可以通过设置空值从主机端重置。
根据 Windows 客户机版本,适用以下限制
对于Windows XP 来宾机。登录子系统需要配置为使用经典登录对话框,因为 Oracle VM VirtualBox GINA 模块不支持 Windows XP 风格的欢迎对话框。
Windows Vista、Windows 7、Windows 8 和 Windows 10 来宾机。登录子系统不支持所谓的安全注意序列 Ctrl+Alt+Del
。因此,需要更改来宾机的组策略设置以不使用安全注意序列。此外,给定的用户名仅与真实用户名进行比较,而不是与用户友好名称进行比较。这意味着当您重命名用户时,仍然必须提供原始用户名,因为 Windows 从不在内部重命名用户帐户。
默认情况下,内置的Windows 远程桌面服务(以前称为终端服务)的自动登录处理已禁用。要启用它,请创建以下注册表键,其 DWORD
值为 1
。
HKEY_LOCAL_MACHINE\SOFTWARE\Oracle\VirtualBox Guest Additions\AutoLogon
以下命令强制 Oracle VM VirtualBox 在凭据被来宾机读取后以及虚拟机重置时保留凭据
$ VBoxManage setextradata "Windows XP" VBoxInternal/Devices/VMMDev/0/Config/KeepCredentials 1
请注意,这存在潜在的安全风险,因为在客户机上运行的恶意应用程序可能会使用适当的接口请求此信息。
Oracle VM VirtualBox 提供了一个自定义 PAM 模块(可插入认证模块),可用于在支持此框架的平台上执行自动来宾登录。几乎所有现代 Linux 和 UNIX 发行版都依赖 PAM。
有关使用 LightDM 作为显示管理器的 Ubuntu 或 Ubuntu 派生发行版上的自动登录,请参阅第 9.1.2.1 节,“适用于 Ubuntu/LightDM 的 Oracle VM VirtualBox 问候模块”。
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-
复制到安全模块目录。这通常是 32 位 Linux 来宾机上的 version
/other//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
对影子数据库进行身份验证,则需要为 pam_unix.so
提供参数 try_first_pass
或为 pam_unix2.so
提供参数 use_first_pass
,以便将凭据从 Oracle VM VirtualBox 模块传递到影子数据库身份验证模块。对于 Ubuntu,这需要添加到 /etc/pam.d/common-auth
中,位于引用 pam_unix.so
的行的末尾。此参数告诉 PAM 模块使用堆栈中已存在的凭据,例如 Oracle VM VirtualBox PAM 模块提供的凭据。
配置不正确的 PAM 堆栈可能会有效地阻止您登录到客户机系统。
为了简化部署,您可以在 pam_vbox.so
语句之后立即传递参数 debug
。然后调试日志输出将使用 syslog 记录。
默认情况下,pam_vbox 不会等待凭据从主机到达。当显示登录提示时(例如,由 GDM/KDM 或文本控制台显示),如果pam_vbox 尚未获得凭据,它不会等到它们到达。相反,PAM 堆栈中的下一个模块,根据 PAM 配置,将有机会进行身份验证。
pam_vbox 支持位于 /VirtualBox/GuestAdd/PAM/
中的各种来宾属性参数。这些参数允许pam_vbox 等待主机提供凭据,并且可以选择在等待期间显示消息。可以设置以下来宾属性
CredsWait
: 设置为 1 表示pam_vbox 应开始等待,直到凭据从主机到达。在此之前,其他身份验证方法(如手动登录)将不可用。如果此属性为空或被删除,则不会执行凭据等待,并且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 VM VirtualBox 附带一个名为vbox-greeter 的问候模块,可与 LightDM 配合使用。LightDM 是 Ubuntu Linux 的默认显示管理器,因此也可用于自动来宾登录。
vbox-greeter 不需要第 9.1.2 节,“自动 Linux 和 UNIX 来宾登录”中描述的pam_vbox 模块即可运行。它自带 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 问候目录的名称,请参阅您的来宾操作系统文档。
vbox-greeter 模块由 Oracle VM VirtualBox 增强功能安装程序安装,位于 /usr/sbin/
。要将vbox-greeter 启用为标准问候模块,请按如下编辑文件 /etc/lightdm/lightdm.conf
[SeatDefaults] greeter-session=vbox-greeter
LightDM 服务器必须完全重启才能将vbox-greeter 用作默认问候模块。作为 Ubuntu 上的 root
用户,运行service lightdm --full-restart 或重启来宾机。
vbox-greeter 独立于您选择的图形会话,例如 Gnome、KDE 或 Unity。但是,vbox-greeter 确实需要 FLTK 1.3 或更高版本来实现其自己的用户界面。
有许多来宾属性可用于进一步自定义登录体验。对于自动登录用户,适用的来宾属性与pam_vbox 相同。请参阅第 9.1.2 节,“自动 Linux 和 UNIX 来宾登录”。
除了前面提到的来宾属性,vbox-greeter 还允许您进一步自定义其用户界面。以下来宾属性位于 /VirtualBox/GuestAdd/Greeter/
目录中
HideRestart
: 设置为 1 表示vbox-greeter 应该隐藏重启来宾机的按钮。此属性必须设置为来宾只读 (RDONLYGUEST
)。
HideShutdown
: 设置为 1 表示vbox-greeter 应该隐藏关闭来宾机的按钮。此属性必须设置为来宾只读 (RDONLYGUEST
)。
BannerPath
: .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 安装置于准备模式。
增强功能提供了一种在来宾操作系统上以自动化方式启动系统准备的方法,该方法由主机系统控制。有关如何使用此功能的详细信息,请参阅第 4.9 节,“应用程序的来宾控制”,其中将特殊标识符 sysprep
作为要执行的程序,以及用户名 sysprep
和密码 sysprep
作为凭据。然后以所需的系统权限启动 Sysprep。
无法指定sysprep.exe 的位置。而是根据 Windows 版本使用以下路径
Windows XP 及更早版本为 C:\sysprep\sysprep.exe
Windows Vista 及更高版本为 %WINDIR%\System32\sysprep\sysprep.exe
Guest Additions 将自动使用适当的路径执行系统准备工具。
Oracle VM 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 VM VirtualBox 增强功能包含 X.Org 的驱动程序。默认情况下,这些驱动程序位于以下目录中
/opt/VBoxGuestAdditions-
version
/other/
X 服务器的正确版本将符号链接到 X.Org 驱动程序目录中。
为了使图形集成正常工作,X 服务器必须加载 vboxvideo
驱动程序。许多最新版本的 X 服务器在检测到它们在 Oracle VM VirtualBox 中运行时会自动查找它。为了获得最佳用户体验,必须加载来宾内核驱动程序,并且增强功能工具VBoxClient 必须作为客户端在 X 会话中运行。
为了使鼠标集成正常工作,必须加载来宾内核驱动程序。此外,对于传统 X 服务器,必须加载正确的 vboxmouse
驱动程序并将其与 /dev/mouse
或 /dev/psaux
相关联。对于大多数来宾机,必须加载 PS/2 鼠标的驱动程序,并且正确的 vboxmouse 驱动程序必须与 /dev/vboxguest
相关联。
Oracle VM VirtualBox 来宾图形驱动程序可以使用任何图形配置,只要虚拟分辨率适合分配给虚拟机的虚拟显存(减去来宾驱动程序使用的少量内存),如第 3.6 节,“显示设置”所述。驱动程序将为所有活动的来宾显示器提供一系列标准模式,至少达到默认来宾分辨率。默认模式可以通过将输出属性 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
对于运行现代服务器操作系统的虚拟机,Oracle VM VirtualBox 支持 CPU 热插拔。
在物理计算机上,CPU 热插拔意味着可以在机器运行时添加或移除 CPU。Oracle VM 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 modifyvmVM-name
--plug-cpu 3 $ VBoxManage modifyvmVM-name
--unplug-cpu 3
请注意,CPU 0 永远无法移除。
当虚拟机运行时,可以使用VBoxManage controlvm plugcpu 和VBoxManage controlvm unplugcpu 命令添加和移除 CPU,如下所示
$ VBoxManage controlvmVM-name
plugcpu 3 $ VBoxManage controlvmVM-name
unplugcpu 3
有关详细信息,请参阅第 8.10 节,“VBoxManage modifyvm”和第 8.20 节,“VBoxManage controlvm”。
对于 Linux 客户机,适用以下情况
为防止 CPU 在仍在使用时被弹出,必须先从来宾机内部将其弹出。Linux 增强功能包含一个接收热移除事件并弹出 CPU 的服务。此外,将 CPU 添加到虚拟机后,Linux 不会自动使用它。如果安装了 Linux 增强功能服务,它将处理此事。否则,可以使用以下命令启动 CPU
$ echo 1 > /sys/devices/system/cpu/cpu<id>/online
Oracle VM VirtualBox 包含一个名为摄像头直通的功能,它使来宾机能够使用主机摄像头。这补充了通用 USB 直通支持,这是在旧版本中使用主机摄像头的典型方式。摄像头直通支持理论上可以处理非 USB 视频源,但这完全未经测试。
摄像头直通模块作为 Oracle VM VirtualBox 扩展包的一部分提供,必须单独安装。请参阅第 1.5 节,“安装 Oracle VM VirtualBox 和扩展包”。
主机摄像头可以使用虚拟机菜单栏中的设备菜单连接到虚拟机。摄像头菜单包含主机上可用视频输入设备的列表。单击摄像头名称将连接或分离相应的主机设备。
可以使用VBoxManage 命令行工具启用摄像头直通。请参阅下面的主机特定部分以获取更多详细信息。以下命令可用
获取主机网络摄像头或其他视频输入设备的列表
$ VBoxManage list webcams
输出格式如下
alias "user friendly name" host path or identifier
别名可以在其他命令中用作快捷方式。别名“.0”表示主机上的默认视频输入设备。别名“.1”、“.2”表示第一个、第二个视频输入设备,依此类推。设备顺序是主机特定的。
将网络摄像头连接到正在运行的 VM,如下所示
VBoxManage controlvmVM name
webcam attach [host_path
|alias
[settings
]]
这将 USB 网络摄像头设备连接到客户机。
settings
参数是一个字符串 Setting1=Value1;Setting2=Value2
,它使您能够配置模拟摄像头设备。支持以下设置
MaxFramerate
: 视频帧发送到来宾机的最高速率。更高的帧速率需要更多的 CPU 功率。因此,有时设置较低的限制很有用。默认情况下没有限制,并允许来宾机使用主机摄像头支持的所有帧速率。
MaxPayloadTransferSize
: 模拟摄像头一次可以向来宾机发送多少字节。默认值为 3060 字节,一些摄像头使用此值。如果来宾机能够使用更大的缓冲区,更高的值可以稍微降低 CPU 负载。但是,某些来宾机可能不支持较高的 MaxPayloadTransferSize
。
从正在运行的 VM 中分离网络摄像头,如下所示
VBoxManage controlvmVM-name
webcam detach [host_path
|alias
]
列出连接到正在运行的 VM 的网络摄像头,如下所示
VBoxManage controlvm VM-name
webcam list
输出包含用于每个连接摄像头的webcam attach 命令中使用的路径或别名。
除了标准 VESA 分辨率外,Oracle VM VirtualBox VESA BIOS 允许您添加最多 16 个自定义视频模式,这些模式将报告给来宾操作系统。当使用带有 Oracle VM VirtualBox 增强功能的 Windows 来宾机时,将使用自定义图形驱动程序而不是后备 VESA 解决方案,因此此信息不适用。
可以使用额外数据功能为每个虚拟机配置额外的视频模式。额外数据键名为 CustomVideoMode
,其中 x
x
是 1 到 16 的数字。请注意,模式将从 1 开始读取,直到下一个数字未定义或达到 16。以下示例添加了一个与许多笔记本电脑的本机显示分辨率相对应的视频模式
$ VBoxManage setextradata VM-name
"CustomVideoMode1" "1400x1050x16"
自定义视频模式的 VESA 模式 ID 从 0x160
开始。为了使用上述定义的自定义视频模式,必须向 Linux 提供以下命令行
vga = 0x200 | 0x160 vga = 864
对于带有 Oracle VM VirtualBox 增强功能的来宾操作系统,可以使用视频模式提示功能设置自定义视频模式。
当使用图形前端(即普通 Oracle VM VirtualBox 应用程序)启动安装了增强功能的来宾系统时,将不允许它们使用大于主机屏幕尺寸的屏幕分辨率,除非用户通过拖动窗口、切换到全屏或无缝模式或使用VBoxManage 发送视频模式提示来手动调整其大小。这种行为是大多数用户所希望的,但如果您有不同的需求,可以通过从命令行发出以下命令之一来更改它
移除客户机分辨率的所有限制。
VBoxManage setextradata global GUI/MaxGuestResolution any
手动指定最大分辨率。
VBoxManage setextradata global GUI/MaxGuestResolutionwidth
xheight
将所有客户机 VM 恢复到默认设置。
VBoxManage setextradata global GUI/MaxGuestResolution auto
作为第 5 章,虚拟存储中所述使用虚拟磁盘映像的替代方案,Oracle VM VirtualBox 还可以将整个物理硬盘或选定分区作为虚拟磁盘呈现给虚拟机。
在 Oracle VM VirtualBox 中,这种访问类型称为裸硬盘访问。它使来宾操作系统能够访问其虚拟硬盘而无需通过主机操作系统文件系统。映像文件与裸磁盘的实际性能差异很大,具体取决于主机文件系统的开销、是否使用动态增长映像以及主机操作系统缓存策略。缓存间接影响其他方面,例如故障行为。例如,在主机操作系统崩溃之前,虚拟磁盘是否包含所有写入的数据。有关此事的详细信息,请查阅您的主机操作系统文档。
裸硬盘访问仅供专家用户使用。不正确的使用或使用过时的配置可能导致物理磁盘上的数据完全丢失。最重要的是,不要尝试在来宾机中启动当前正在运行主机操作系统的分区。这将导致严重的数据损坏。
裸硬盘访问,包括整个磁盘和单个分区,都作为 VMDK 映像格式支持的一部分实现。因此,您需要创建一个特殊的 VMDK 映像文件来定义数据存储位置。创建这样一个特殊的 VMDK 映像后,您可以像使用常规虚拟磁盘映像一样使用它。例如,您可以使用虚拟介质管理器(参见第 5.3 节,“虚拟介质管理器”)或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 VM 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 文件。一个示例如下path-to-file-with-boot-sector
$ 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 VM VirtualBox 报告其虚拟硬盘的厂商产品数据,包括硬盘序列号、固件版本和型号。可以使用以下命令更改这些数据
$ VBoxManage setextradataVM-name
\ "VBoxInternal/Devices/ahci/0/Config/Port0/SerialNumber" "serial" $ VBoxManage setextradataVM-name
\ "VBoxInternal/Devices/ahci/0/Config/Port0/FirmwareRevision" "firmware" $ VBoxManage setextradataVM-name
\ "VBoxInternal/Devices/ahci/0/Config/Port0/ModelNumber" "model"
序列号是 20 字节的字母数字字符串,固件版本是 8 字节的字母数字字符串,型号是 40 字节的字母数字字符串。请指定所需的 SATA 硬盘端口,而不是 Port0(指第一个端口)。
上述命令适用于带有 AHCI (SATA) 控制器的虚拟机。带有 IDE 控制器的虚拟机的命令是
$ VBoxManage setextradataVM-name
\ "VBoxInternal/Devices/piix3ide/0/Config/PrimaryMaster/SerialNumber" "serial" $ VBoxManage setextradataVM-name
\ "VBoxInternal/Devices/piix3ide/0/Config/PrimaryMaster/FirmwareRevision" "firmware" $ VBoxManage setextradataVM-name
\ "VBoxInternal/Devices/piix3ide/0/Config/PrimaryMaster/ModelNumber" "model"
对于硬盘,您可以使用以下命令将驱动器标记为具有非旋转介质
$ VBoxManage setextradata VM-name
\
"VBoxInternal/Devices/ahci/0/Config/Port0/NonRotational" "1"
CD/DVD 驱动器需要另外三个参数来报告供应商产品数据
$ VBoxManage setextradataVM-name
\ "VBoxInternal/Devices/ahci/0/Config/Port0/ATAPIVendorId" "vendor" VBoxManage setextradataVM-name
\ "VBoxInternal/Devices/ahci/0/Config/Port0/ATAPIProductId" "product" VBoxManage setextradataVM-name
\ "VBoxInternal/Devices/ahci/0/Config/Port0/ATAPIRevision" "revision"
厂商 ID 是一个 8 字节的字母数字字符串,产品 ID 是一个 16 字节的字母数字字符串,版本号是一个 4 字节的字母数字字符串。请指定所需的 SATA 硬盘端口,而不是 Port0(指第一个端口)。
作为一项实验性功能,Oracle VM VirtualBox 允许访问在配置为使用内部网络模式的虚拟机中运行的 iSCSI 目标。请参阅第 5.10 节,“iSCSI 服务器”、第 6.6 节,“内部网络”和第 8.26 节,“VBoxManage storageattach”。
访问内部网络的 IP 堆栈必须在访问 iSCSI 目标的虚拟机中进行配置。必须选择一个未被其他虚拟机使用的空闲静态 IP 和 MAC 地址。在下面的示例中,请根据您的需要调整虚拟机的名称、MAC 地址、IP 配置和内部网络名称 (MyIntNet)。必须首先发出以下八个命令
$ VBoxManage setextradataVM-name
\ VBoxInternal/Devices/IntNetIP/0/Trusted 1 $ VBoxManage setextradataVM-name
\ VBoxInternal/Devices/IntNetIP/0/Config/MAC 08:00:27:01:02:0f $ VBoxManage setextradataVM-name
\ VBoxInternal/Devices/IntNetIP/0/Config/IP 10.0.9.1 $ VBoxManage setextradataVM-name
\ VBoxInternal/Devices/IntNetIP/0/Config/Netmask 255.255.255.0 $ VBoxManage setextradataVM-name
\ VBoxInternal/Devices/IntNetIP/0/LUN#0/Driver IntNet $ VBoxManage setextradataVM-name
\ VBoxInternal/Devices/IntNetIP/0/LUN#0/Config/Network MyIntNet $ VBoxManage setextradataVM-name
\ VBoxInternal/Devices/IntNetIP/0/LUN#0/Config/TrunkType 2 $ VBoxManage setextradataVM-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 目标的虚拟机应在使用它的虚拟机开机之前启动。如果在使用 iSCSI 磁盘的虚拟机启动时 iSCSI 目标未开机,则可能需要长达 200 秒才能检测到此情况。虚拟机将无法启动。
在 NAT 模式下,来宾网络接口默认分配到 IPv4 范围 10.0.
,其中 x
.0/24x
对应于 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 VM VirtualBox 默认使用 IP 地址为 10.0.2.4 的内置 TFTP 服务器。此默认行为对于典型的远程引导场景应该运行良好。但是,可以通过以下命令更改引导服务器 IP 和引导映像的位置
$ VBoxManage modifyvmVM-name
\ --nattftpserver1 10.0.2.2 $ VBoxManage modifyvmVM-name
\ --nattftpfile1 /srv/tftp/boot/MyPXEBoot.pxe
Oracle VM VirtualBox NAT 堆栈性能通常由其与主机 TCP/IP 堆栈的交互以及几个缓冲区(SO_RCVBUF
和 SO_SNDBUF
)的大小决定。对于某些设置,用户可能希望调整缓冲区大小以获得更好的性能。这可以通过以下命令实现,其中值以千字节为单位,范围从 8 到 1024
$ VBoxManage modifyvm VM-name
\
--natsettings1 16000,128,128,0,0
此示例说明了如何调整 NAT 设置。第一个参数是 MTU,然后是套接字发送缓冲区的大小和套接字接收缓冲区的大小,TCP 发送窗口的初始大小,最后是 TCP 接收窗口的初始大小。请注意,指定零表示回退到默认值。
每个缓冲区的默认大小为 64KB,默认 MTU 为 1500。
默认情况下,Oracle VM VirtualBox 的 NAT 引擎将通过主机 TCP/IP 堆栈分配的默认接口路由 TCP/IP 数据包。这样做的技术原因是 NAT 引擎使用套接字进行通信。如果您想更改此行为,可以告诉 NAT 引擎绑定到特定 IP 地址。例如,使用以下命令
$ VBoxManage modifyvm VM-name
\
--natbindip1 "10.45.0.2"
在此之后,所有出站流量将通过 IP 地址为 10.45.0.2 的接口发送。在更改 NAT 绑定地址之前,请确保此接口已启动并正在运行。
NAT 引擎默认向来宾机提供与主机上配置相同的 DNS 服务器。在某些情况下,可能希望向来宾机隐藏 DNS 服务器 IP,例如当此信息可能由于 DHCP 租约过期而在主机上更改时。在这种情况下,您可以使用以下命令指示 NAT 引擎充当 DNS 代理
$ VBoxManage modifyvm VM-name
--natdnsproxy1 on
为了解析网络名称,NAT 引擎的 DHCP 服务器提供了主机已注册的 DNS 服务器列表。如果由于某种原因您需要隐藏此 DNS 服务器列表并使用主机的解析器设置,从而强制 Oracle VM VirtualBox NAT 引擎拦截 DNS 请求并将其转发到主机的解析器,请使用以下命令
$ VBoxManage modifyvm VM-name
--natdnshostresolver1 on
请注意,此设置类似于 DNS 代理模式,但代理模式仅将 DNS 请求转发到相应的服务器,而解析器模式将解释 DNS 请求并使用主机的 DNS API 查询信息并将其返回给来宾机。
在某些情况下,拦截名称解析机制,在特定的 DNS 请求上提供用户定义的 IP 地址可能很有用。拦截机制使用户不仅可以映射单个主机,还可以映射域,甚至在需要时映射更复杂的命名约定。
以下命令设置了一个将名称映射到指定 IP 的规则
VBoxManage setextradataVM-name
\ "VBoxInternal/Devices/{pcnet,e1000}/0/LUN#0/AttachedDriver/Config/HostResolverMappings/ \unique-rule-name-of-interception-rule
/HostIP"IPv4
VBoxManage setextradataVM-name
\ "VBoxInternal/Devices/{pcnet,e1000}/0/LUN#0/AttachedDriver/Config/HostResolverMappings/ \unique-rule-name
/HostName"hostname
以下命令设置一个将模式名称映射到指定 IP 的规则
VBoxManage setextradataVM-name
\ "VBoxInternal/Devices/{pcnet,e1000}/0/LUN#0/AttachedDriver/Config/HostResolverMappings/ \unique-rule-name
/HostIP"IPv4
VBoxManage setextradataVM-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 setextradataVM-name
\ "VBoxInternal/Devices/e1000/0/LUN#0/AttachedDriver/Config/HostResolverMappings/all_blocked_site/HostIP" 127.0.0.1 $ VBoxManage setextradataVM-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 VM VirtualBox 提供给来宾机的 DMI 数据可以针对特定的虚拟机进行更改。使用以下命令配置 DMI BIOS 信息。如果您的虚拟机配置为使用 EFI 固件,则需要在键中将 pcbios
替换为 efi
。
DMI BIOS 信息(类型 0)
$ VBoxManage setextradataVM-name
\ "VBoxInternal/Devices/pcbios/0/Config/DmiBIOSVendor" "BIOS Vendor" $ VBoxManage setextradataVM-name
\ "VBoxInternal/Devices/pcbios/0/Config/DmiBIOSVersion" "BIOS Version" $ VBoxManage setextradataVM-name
\ "VBoxInternal/Devices/pcbios/0/Config/DmiBIOSReleaseDate" "BIOS Release Date" $ VBoxManage setextradataVM-name
\ "VBoxInternal/Devices/pcbios/0/Config/DmiBIOSReleaseMajor" 1 $ VBoxManage setextradataVM-name
\ "VBoxInternal/Devices/pcbios/0/Config/DmiBIOSReleaseMinor" 2 $ VBoxManage setextradataVM-name
\ "VBoxInternal/Devices/pcbios/0/Config/DmiBIOSFirmwareMajor" 3 $ VBoxManage setextradataVM-name
\ "VBoxInternal/Devices/pcbios/0/Config/DmiBIOSFirmwareMinor" 4
DMI 系统信息(类型 1)
$ VBoxManage setextradataVM-name
\ "VBoxInternal/Devices/pcbios/0/Config/DmiSystemVendor" "System Vendor" $ VBoxManage setextradataVM-name
\ "VBoxInternal/Devices/pcbios/0/Config/DmiSystemProduct" "System Product" $ VBoxManage setextradataVM-name
\ "VBoxInternal/Devices/pcbios/0/Config/DmiSystemVersion" "System Version" $ VBoxManage setextradataVM-name
\ "VBoxInternal/Devices/pcbios/0/Config/DmiSystemSerial" "System Serial" $ VBoxManage setextradataVM-name
\ "VBoxInternal/Devices/pcbios/0/Config/DmiSystemSKU" "System SKU" $ VBoxManage setextradataVM-name
\ "VBoxInternal/Devices/pcbios/0/Config/DmiSystemFamily" "System Family" $ VBoxManage setextradataVM-name
\ "VBoxInternal/Devices/pcbios/0/Config/DmiSystemUuid" \ "9852bf98-b83c-49db-a8de-182c42c7226b"
DMI 主板信息(类型 2)
$ VBoxManage setextradataVM-name
\ "VBoxInternal/Devices/pcbios/0/Config/DmiBoardVendor" "Board Vendor" $ VBoxManage setextradataVM-name
\ "VBoxInternal/Devices/pcbios/0/Config/DmiBoardProduct" "Board Product" $ VBoxManage setextradataVM-name
\ "VBoxInternal/Devices/pcbios/0/Config/DmiBoardVersion" "Board Version" $ VBoxManage setextradataVM-name
\ "VBoxInternal/Devices/pcbios/0/Config/DmiBoardSerial" "Board Serial" $ VBoxManage setextradataVM-name
\ "VBoxInternal/Devices/pcbios/0/Config/DmiBoardAssetTag" "Board Tag" $ VBoxManage setextradataVM-name
\ "VBoxInternal/Devices/pcbios/0/Config/DmiBoardLocInChass" "Board Location" $ VBoxManage setextradataVM-name
\ "VBoxInternal/Devices/pcbios/0/Config/DmiBoardBoardType" 10
DMI 系统机箱或外壳(类型 3)
$ VBoxManage setextradataVM-name
\ "VBoxInternal/Devices/pcbios/0/Config/DmiChassisVendor" "Chassis Vendor" $ VBoxManage setextradataVM-name
\ "VBoxInternal/Devices/pcbios/0/Config/DmiChassisType" 3 $ VBoxManage setextradataVM-name
\ "VBoxInternal/Devices/pcbios/0/Config/DmiChassisVersion" "Chassis Version" $ VBoxManage setextradataVM-name
\ "VBoxInternal/Devices/pcbios/0/Config/DmiChassisSerial" "Chassis Serial" $ VBoxManage setextradataVM-name
\ "VBoxInternal/Devices/pcbios/0/Config/DmiChassisAssetTag" "Chassis Tag"
DMI 处理器信息(类型 4)
$ VBoxManage setextradataVM-name
\ "VBoxInternal/Devices/pcbios/0/Config/DmiProcManufacturer" "GenuineIntel" $ VBoxManage setextradataVM-name
\ "VBoxInternal/Devices/pcbios/0/Config/DmiProcVersion" "Pentium(R) III"
DMI OEM 字符串(类型 11)
$ VBoxManage setextradataVM-name
\ "VBoxInternal/Devices/pcbios/0/Config/DmiOEMVBoxVer" "vboxVer_1.2.3" $ VBoxManage setextradataVM-name
\ "VBoxInternal/Devices/pcbios/0/Config/DmiOEMVBoxRev" "vboxRev_12345"
如果未设置 DMI 字符串,则使用 Oracle VM 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
您可以配置 Oracle VM VirtualBox,最多向来宾机提供四个自定义 ACPI 表。使用以下命令配置自定义 ACPI 表。请注意,除了 CustomTable0
之外,还提供 CustomTable1
、CustomTable2
和 CustomTable3
。
$ VBoxManage setextradataVM-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 VM 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 VM VirtualBox 增强功能处于活动状态,则是主机时钟)重新同步。因此,如果按上述方式更改来宾时钟的速率,则应禁用任何时间同步。请参阅第 9.11.3 节,“调整增强功能时间同步参数”。
Oracle VM VirtualBox 增强功能可确保来宾系统的系统时间与主机时间同步。有几个参数可以调整。可以使用以下命令为特定虚拟机设置参数
$ VBoxManage guestproperty setVM-name
"/VirtualBox/GuestAdd/VBoxService/property
"value
property
是以下之一
--timesync-interval
指定与主机同步时间的时间间隔。默认值为 10000 毫秒(10 秒)。
--timesync-min-adjust
进行调整的最小绝对漂移值(以毫秒为单位)。OS/2 上的默认值为 1000 毫秒,其他地方为 100 毫秒。
--timesync-latency-factor
将时间查询延迟乘以的因子,以计算动态最小调整时间。默认值为 8 倍,这意味着如下所示
测量确定主机时间所需的时间,来宾机必须联系虚拟机主机服务,这可能需要一些时间。将此值乘以 8,并且仅当主机和来宾机之间的时间差大于此值时才进行调整。否则不进行任何时间调整。
--timesync-max-latency
可接受的最大主机计时器查询延迟。默认值为 250 毫秒。
--timesync-set-threshold
绝对漂移阈值,以毫秒为单位,表示何时开始设置时间而不是尝试平滑调整。默认值为 20 分钟。
--timesync-set-start
启动时间同步服务时设置时间。
--timesync-set-on-restore 0|1
当参数为 1 时,从保存状态恢复 VM 后设置时间。这是默认值。通过传递 0 禁用。在后一种情况下,时间将平滑调整,这可能需要很长时间。
所有这些参数也可以作为命令行参数提供给 VBoxService。
Oracle VM VirtualBox 包含一个利用 Oracle Solaris 11 的 Crossbow 功能的网络过滤器驱动程序。默认情况下,此新驱动程序会安装到支持它的 Oracle Solaris 11 主机上。
要强制安装基于旧 STREAMS 的网络过滤器驱动程序,请在安装 Oracle VM VirtualBox 软件包之前以 root 身份执行以下命令
$ touch /etc/vboxinst_vboxflt
要强制安装基于 Crossbow 的网络过滤器驱动程序,请在安装 Oracle VM VirtualBox 软件包之前以 root 身份执行以下命令
$ touch /etc/vboxinst_vboxbow
要检查 Oracle VM VirtualBox 当前正在使用哪个驱动程序,请执行
$ modinfo | grep vbox
如果输出包含“vboxbow”,则表示 Oracle VM VirtualBox 正在使用 Crossbow 网络过滤器驱动程序,而名称“vboxflt”则表示使用旧的 STREAMS 网络过滤器。
Oracle VM VirtualBox 支持虚拟网络接口 (VNIC) 模板,用于通过 VLAN 配置虚拟机。Oracle VM VirtualBox VNIC 模板是一个 VNIC,其名称以 vboxvnic_template
开头。该字符串区分大小写。
在 Oracle Solaris 11 主机上,当使用基于 Crossbow 的桥接网络时,VNIC 模板可用于指定在通过网络链接进行桥接时要使用的 VLAN ID。
以下是使用 VNIC 模板通过 VLAN 配置虚拟机的示例。以 root 身份执行以下命令创建 Oracle VM 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 运行的虚拟机都可以配置为使用此 VNIC 模板进行桥接。
VNIC 模板使 VLAN 上的虚拟机管理更简单高效。VLAN 详细信息不作为每个虚拟机配置的一部分存储,而是在启动虚拟机时从 VNIC 模板继承。VNIC 模板本身可以随时使用dladm 命令进行修改。
VNIC 模板可以创建额外的属性,例如带宽限制和 CPU 扇出。有关详细信息,请参阅您的 Oracle Solaris 网络文档。这些附加属性也适用于使用 VNIC 模板进行桥接的 VM。
默认情况下,Oracle VM 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 对所有接口进行 plumb 操作,其中 X
在本例中为 1。一旦接口被 plumb,就可以像配置任何其他网络接口一样配置它。有关更多详细信息,请参阅ifconfig 文档。
为了使新添加的接口的设置在重启后仍然存在,您需要编辑文件 /etc/inet/netmasks
,如果您正在使用 NWAM,还需要编辑 /etc/nwam/llp
并添加相应的条目以设置每个接口的子网掩码和静态 IP。Oracle VM VirtualBox 安装程序仅更新它默认创建的一个“vboxnet0”接口的这些配置文件。
Oracle VM VirtualBox 能够在出现问题时生成自己的核心文件以进行广泛调试。目前这仅在 Oracle Solaris 主机上可用。
可以使用以下命令启用 Oracle VM VirtualBox CoreDumper
$ VBoxManage setextradata VM-name
VBoxInternal2/CoreDumpEnabled 1
您可以使用此命令指定用于核心转储的目录,如下所示
$ VBoxManage setextradataVM-name
VBoxInternal2/CoreDumpDirpath-to-directory
确保您指定的目录具有足够的可用空间,并且 Oracle VM VirtualBox 进程具有足够的权限向该目录写入文件。如果您跳过此命令并且未指定任何核心转储目录,则将使用 Oracle VM VirtualBox 可执行文件的当前目录。这很可能在写入核心时失败,因为它们受到 root 权限的保护。建议您明确设置核心转储目录。
您必须指定何时触发 Oracle VM VirtualBox CoreDumper。这可以通过以下命令完成
$ VBoxManage setextradataVM-name
VBoxInternal2/CoreDumpReplaceSystemDump 1 $ VBoxManage setextradataVM-name
VBoxInternal2/CoreDumpLive 1
如果您已启用 Oracle VM VirtualBox CoreDumper,则必须提供上述两个命令中的至少一个。
设置 CoreDumpReplaceSystemDump
会将虚拟机设置为覆盖主机的核心转储机制,并且在发生任何崩溃时,只有 Oracle VM VirtualBox CoreDumper 会生成核心文件。
设置 CoreDumpLive
会将虚拟机设置为在虚拟机进程收到 SIGUSR2
信号时生成核心。生成核心文件后,虚拟机不会终止并将继续运行。因此,您可以使用以下命令获取虚拟机进程的核心
$ kill -s SIGUSR2 VM-process-id
Oracle VM VirtualBox CoreDumper 以 core.vb.
的形式创建核心文件,例如 process-name
.process-ID
core.vb.VBoxHeadless.11321
。
x86 系统上的 Oracle Solaris 内核区域利用硬件辅助虚拟化功能,就像 Oracle VM VirtualBox 一样。但是,为了让内核区域和 Oracle VM VirtualBox 共享此硬件资源,它们需要协作。
默认情况下,出于性能原因,Oracle VM VirtualBox 在主机上全局获取硬件辅助虚拟化资源 (VT-x/AMD-V),并一直使用它,直到最后一个需要它的 Oracle VM VirtualBox 虚拟机关闭。这会阻止其他软件在 Oracle VM VirtualBox 控制期间使用 VT-x/AMD-V。
可以指示 Oracle VM VirtualBox 在不执行来宾代码时放弃使用硬件辅助虚拟化功能,从而允许内核区域使用它们。为此,请关闭所有 Oracle VM VirtualBox 虚拟机并执行以下命令
$ VBoxManage setproperty hwvirtexclusive off
此命令只需执行一次,因为该设置作为全局 Oracle VM VirtualBox 设置的一部分存储,该设置将在主机重启和 Oracle VM VirtualBox 升级后继续存在。
有几个高级自定义设置用于锁定 VirtualBox 管理器。锁定意味着删除用户不应看到的一些功能。
VBoxManage setextradata global GUI/Customizationsproperty
[,property
...]
property
是以下属性之一
noSelector
不允许用户启动 VirtualBox 管理器。尝试这样做将显示一个包含适当错误消息的窗口。
noMenuBar
VM 窗口将不包含菜单栏。
noStatusBar
VM 窗口将不包含状态栏。
要禁用 VirtualBox 管理器的任何这些自定义设置,请使用以下命令
$ VBoxManage setextradata global GUI/Customizations
以下每机器 VM 额外数据设置可用于更改 VM 选择器窗口对某些 VM 的行为
$ VBoxManage setextradataVM-name
property
true
property
可以是以下任何一项
GUI/HideDetails
不显示某个 VM 的 VM 配置。如果选择此 VM,详细信息窗口将保持为空。
GUI/PreventReconfiguration
不允许用户打开特定虚拟机的设置对话框。
GUI/PreventSnapshotOperations
从 GUI 阻止 VM 的快照操作,无论是在运行时还是在 VM 关闭时。
GUI/HideFromManager
在 VM 选择器窗口中隐藏某个 VM。
GUI/PreventApplicationUpdate
禁用自动更新检查并隐藏相应的菜单项。
请注意,这些设置不会阻止用户使用VBoxManage modifyvm 命令重新配置虚拟机。
您可以禁用 VM 选择器全局设置页面中的某些条目
$ VBoxManage setextradata global GUI/RestrictedGlobalSettingsPagesproperty
[,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
不显示虚拟机窗口中的应用程序/文件菜单。
Machine
不显示虚拟机窗口中的控制菜单。
View
不显示虚拟机窗口中的视图菜单。
Input
不显示虚拟机窗口中的输入菜单。
设备
不显示虚拟机窗口中的设备菜单。
Help
不显示虚拟机窗口中的帮助菜单。
Debug
不显示虚拟机窗口中的调试菜单。调试菜单仅当 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
不显示此菜单中的插入打印屏幕菜单项。
TypeAltPrintScreen
不显示此菜单中的插入 Alt 打印屏幕菜单项。
TypeHostKeyCombo
不显示此菜单中的插入主机组合键菜单项。
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 错误跟踪器...菜单项。
论坛
不显示此菜单中的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 setextradataVM-name
GUI/RestrictedVisualStatesproperty
[,property
...]
property
是以下之一
Fullscreen
不允许将虚拟机切换到全屏模式。
Seamless
不允许将虚拟机切换到无缝模式。
Scale
不允许将虚拟机切换到缩放模式。
这是一个按虚拟机设置。您可以指定属性的任意组合。要恢复默认行为,请使用以下命令
$ VBoxManage setextradata VM-name
GUI/RestrictedVisualStates
要禁用所有主机组合键,请打开首选项并将主机组合键更改为“无”。这在使用 Oracle VM VirtualBox 的自助服务终端模式时可能有用。
要重新定义或禁用某些主机键操作,请使用以下命令
$ VBoxManage setextradata global GUI/Input/MachineShortcuts "FullscreenMode=F,...."
下表显示了可能的主机键操作及其默认主机键快捷方式。将操作设置为“无”将禁用该主机键操作。
表 9.1. 主机组合键自定义
操作 | 默认键 | 操作 |
---|---|---|
| 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 setextradataVM-name
GUI/RestrictedCloseActionsproperty
[,property
...]
property
是以下之一
保存状态
不允许用户在终止虚拟机时保存虚拟机状态。
Shutdown
不允许用户通过向客户机发送ACPI关机事件来关闭虚拟机。
断电
不允许用户关闭虚拟机电源。
关机恢复快照
不允许用户在关闭虚拟机电源时返回到上次快照。
分离
如果虚拟机以分离模式启动,则不允许用户从虚拟机进程中分离。
这是一个按虚拟机设置。您可以指定属性的任意组合。如果指定了所有属性,则无法关闭虚拟机。
您可以为终止虚拟机定义一个特定操作。与上一节中描述的设置不同,此设置允许用户在终止虚拟机时只执行一个操作。不会显示退出菜单。使用以下命令
$ VBoxManage setextradataVM-name
GUI/DefaultCloseActionaction
action
是以下选项之一
保存状态
在终止虚拟机进程之前保存虚拟机状态。
Shutdown
通过向客户机发送ACPI关机事件来关闭虚拟机。
断电
虚拟机已断电。
关机恢复快照
虚拟机已断电,保存的状态恢复到上次快照。
分离
终止前端但保持虚拟机进程运行。
这是一个按虚拟机设置。您可以指定属性的任意组合。如果指定了所有属性,则无法关闭虚拟机。
如果出现无法通过终止进程以外的方式修复的问题,虚拟机将陷入“大师级冥想”(Guru Meditation)状态。默认是显示一个消息窗口,指示用户打开错误报告。
此行为可以配置如下
$ VBoxManage setextradataVM-name
GUI/GuruMeditationHandlermode
mode
是以下选项之一
默认
显示一个消息窗口。用户确认后,虚拟机终止。
断电
虚拟机立即断电,不显示任何消息窗口。虚拟机日志文件将显示发生事件的信息。
忽略
虚拟机处于停滞模式。执行已停止,但未显示消息窗口。必须手动关闭虚拟机电源。
这是一个按虚拟机设置。
默认情况下,如果用户点击客户机窗口,并且客户机此时期望相对鼠标坐标,则会捕获鼠标。如果指向设备配置为 PS/2 鼠标,并且客户机尚未启动 Oracle VM VirtualBox 增强功能,则会发生这种情况。例如,如果客户机正在启动或未安装增强功能,或者指向设备配置为 USB 平板但客户机尚未加载 USB 驱动程序,则会发生这种情况。一旦增强功能激活或 USB 客户机驱动程序启动,鼠标捕获将自动释放。
默认行为有时不尽如人意。因此可以按如下方式配置
VBoxManage setextradataVM-name
GUI/MouseCapturePolicymode
mode
是以下选项之一
默认
如上所述的默认行为。
仅限主机组合键
仅当切换主机键时才捕获鼠标。
禁用
鼠标永远不会被捕获,即使通过切换主机键也不会
这是一个按虚拟机设置。
Oracle VM VirtualBox 使用特殊的窗口管理器功能,可在多显示器主机系统上将多屏幕机器切换到全屏。然而,并非所有窗口管理器都能正确提供这些功能。Oracle VM VirtualBox 可以配置为使用旧版方法切换到全屏模式,方法是使用以下命令
VBoxManage setextradata global GUI/Fullscreen/LegacyMode true
您可以使用以下命令回到默认方法
VBoxManage setextradata global GUI/Fullscreen/LegacyMode
这是一个全局设置。
可以从 Oracle VM VirtualBox GUI 中移除网络模式。为此,请使用以下命令
VBoxManage setextradata global GUI/RestrictedNetworkAttachmentTypesproperty
[,property
...]
property
是以下之一
NAT
从 GUI 中移除NAT选项。
NAT网络
从 GUI 中移除NAT 网络选项。
桥接适配器
从 GUI 中移除桥接网络选项。
内部网络
从 GUI 中移除内部网络选项。
仅主机适配器
从 GUI 中移除仅主机网络选项。
通用驱动程序
从 GUI 中移除通用网络选项。
这是一个全局设置。您可以指定任何属性组合。要恢复默认行为,请使用以下命令
VBoxManage setextradata global GUI/RestrictedNetworkAttachmentTypes
Oracle VM VirtualBox Web 服务(vboxwebsrv)用于远程控制 Oracle VM VirtualBox。它在 Oracle VM VirtualBox 软件开发工具包 (SDK) 中有详细说明。参见第 11 章,Oracle VM VirtualBox 编程接口。Web 服务启动脚本适用于受支持的主机操作系统。以下各节描述了如何使用这些脚本。Oracle VM VirtualBox Web 服务在标准安装后绝不会自动启动。
在 Linux 上,可以通过向 /etc/default/virtualbox
文件添加适当的参数,在主机启动期间自动启动 Web 服务。有一个强制参数 VBOXWEB_USER
,必须将其设置为以后将启动虚拟机的用户。下表中的所有参数都以 VBOXWEB_
前缀字符串开头。例如:VBOXWEB_HOST
和 VBOXWEB_PORT
。
表 9.2. Web 服务配置参数
参数 | 描述 | 默认 |
---|---|---|
| Web服务运行的用户 | |
| Web服务绑定的主机 | localhost |
| Web服务绑定的端口 | 18083 |
| PEM格式的服务器密钥和证书文件 | |
| 服务器密钥密码的文件名 | |
| PEM格式的CA证书文件 | |
| CA证书路径 | |
| DH文件名或DH密钥长度(比特) | |
| 包含随机数生成器种子的文件 | |
| 会话超时(秒),0表示禁用超时 | 300 |
| 超时检查频率(秒) | 5 |
| 并行运行的最大工作线程数 | 100 |
| 套接字关闭前的最大请求数 | 100 |
| 日志文件数量,0表示禁用日志轮转 | 10 |
| 触发轮转的最大日志文件大小(字节) | 1MB |
| 触发日志轮转的最大时间间隔(秒) | 1天 |
设置参数 SSL_KEYFILE
可启用 SSL/TLS 支持。强烈建议使用加密,否则所有内容(包括密码)都将以明文形式传输。
在 Oracle Solaris 主机上,Oracle VM 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
第 9.18.1 节,“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 VM VirtualBox Web 服务
svcadm enable svc:/application/virtualbox/webservice:default
有关SMF的更多信息,请参阅Oracle Solaris文档。
在 macOS 上,launchd 用于启动 Oracle VM VirtualBox Web 服务。示例配置文件位于 $HOME/Library/LaunchAgents/org.virtualbox.vboxwebsrv.plist
。可以通过将 Disabled
键从 true
更改为 false
来启用它。要手动启动服务,请使用以下命令
launchctl load ~/Library/LaunchAgents/org.virtualbox.vboxwebsrv.plist
有关如何配置launchd服务的更多信息,请参见
内存气球服务(以前称为VBoxBalloonCtrl)已更名为 VBoxWatchdog。此服务现在包含以下旨在在服务器环境中运行的主机服务
内存气球控制。此服务自动处理虚拟机的配置内存气球。参见第 4.10.1 节,“内存气球”。此服务对于虚拟机在运行时可能动态需要更多或更少内存的服务器环境非常有用。
该服务定期检查虚拟机的当前内存气球及其空闲客户机 RAM,并相应地自动膨胀或收缩当前内存气球。此处理仅适用于安装了最新增强功能的正在运行的虚拟机。
主机隔离检测。此服务提供了一种检测主机是否无法再访问特定 Oracle VM 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 VM 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
关机事件,以温和的方式关闭虚拟机。操作系统随后有机会执行干净关机。
在 Linux 上,可以通过向 /etc/default/virtualbox
文件添加适当的参数,在主机启动期间自动启动看门狗服务。有一个强制参数 VBOXWATCHDOG_USER
,必须将其设置为以后将启动虚拟机的用户。为了向后兼容,您还可以指定 VBOXBALLOONCTRL_USER
。
下表中的所有参数都以 VBOXWATCHDOG_
前缀字符串开头。例如:VBOXWATCHDOG_BALLOON_INTERVAL
和 VBOXWATCHDOG_LOGSIZE
。仍然可以使用诸如 VBOXBALLOONCTRL_INTERVAL
之类的旧参数。
表 9.3. Oracle VM VirtualBox 看门狗配置参数
参数 | 描述 | 默认 |
---|---|---|
| 看门狗服务运行的用户 | |
| 日志文件数量,0表示禁用日志轮转 | 10 |
| 触发轮转的最大日志文件大小(字节) | 1MB |
| 触发日志轮转的最大时间间隔(秒) | 1天 |
| 检查气球大小的间隔(毫秒) | 30000 |
| 气球大小增量(兆字节) | 256 |
| 气球大小减量(兆字节) | 128 |
| 气球大小下限(兆字节) | 64 |
| 减小气球大小所需的空闲内存(兆字节) | 1024 |
在 Oracle Solaris 主机上,Oracle VM 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
表 9.3,“Oracle VM VirtualBox 看门狗配置参数”也适用于 Oracle Solaris。参数名称必须更改为小写,并添加 config/
前缀。例如:config/user
或 config/balloon_safetymargin
。如果您进行了任何更改,请不要忘记运行以下命令以立即生效
svcadm refresh svc:/application/virtualbox/balloonctrl:default
如果您忘记了上述命令,则在启用服务时将使用之前的设置。使用以下命令检查当前属性设置
svcprop -p config svc:/application/virtualbox/balloonctrl:default
当一切配置正确后,您可以使用以下命令启动 Oracle VM VirtualBox 看门狗服务
svcadm enable svc:/application/virtualbox/balloonctrl:default
有关SMF的更多信息,请参阅Oracle Solaris文档。
另一个名为 VNC 的扩展包可用。此扩展包是开源的,并取代了以前的 VNC 远程访问协议集成。这是实验性代码,最初仅在 Oracle VM VirtualBox 源代码包中提供。它在很大程度上是用户贡献的代码,并且不受 Oracle 的任何支持。
键盘处理受到严重限制,并且只有美国键盘布局可用。其他键盘布局至少会产生一些错误的按键结果,通常会带来令人惊讶的效果,对于与美国键盘布局存在显著差异的布局,它很可能无法使用。
可以同时安装 Oracle VM VirtualBox 扩展包和 VNC,但任何时候只能有一个 VRDE 模块处于活动状态。以下命令将切换到 VNC 中的 VNC VRDE 模块
VBoxManage setproperty vrdeextpack VNC
配置远程访问与 VRDP 非常相似,参见第 7.1 节,“远程显示 (VRDP 支持)”,但有一些限制。VNC 不支持指定多个端口号,并且身份验证方式不同。VNC 只能处理密码身份验证,并且没有使用密码哈希的选项。这意味着只能在虚拟机配置中使用明文密码,可以通过以下命令进行设置
VBoxManage modifyvm VM-name
--vrde-property VNCPassword=secret
用户有责任对此密码保密,并且在出于任何目的将虚拟机配置传递给其他人时应将其删除。一些 VNC 服务器声称配置中包含加密密码。这不是真正的加密,它只是隐藏密码,其安全性与使用明文密码相同。
以下命令切换回VRDP(如果已安装)
VBoxManage setproperty vrdeextpack "Oracle VM 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 VM VirtualBox 自动启动守护程序已集成到 SMF 框架中。要启用它,您必须将服务指向一个现有配置文件,该文件的格式与 Linux 上的相同,参见第 9.21.1 节,“Linux:使用 init 启动自动启动服务”。例如
# svccfg -s svc:/application/virtualbox/autostart:default setprop \ config/config=/etc/vbox/autostart.cfg
当一切配置正确后,您可以使用以下命令启动 Oracle VM VirtualBox 自动启动服务
# svcadm enable svc:/application/virtualbox/autostart:default
有关SMF的更多信息,请参阅Oracle Solaris文档。
在 macOS 上,launchd 用于启动 Oracle VM VirtualBox 自动启动服务。示例配置文件位于 /Applications/VirtualBox.app/Contents/MacOS/org.virtualbox.vboxautostart.plist
。要启用此服务,请将文件复制到 /Library/LaunchDaemons
并将 Disabled
键从 true
更改为 false
。此外,将第二个参数替换为与 Linux 格式相同的现有配置文件,参见第 9.21.1 节,“Linux:使用 init 启动自动启动服务”。
要手动启动服务,请使用以下命令
# launchctl load /Library/LaunchDaemons/org.virtualbox.vboxautostart.plist
有关如何配置launchd服务的其他信息,请参见
在 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 在同一会话中启动。有关更多信息,请参见第 9.35 节,“VBoxSVC 在 Windows Session 0 中运行”。
Oracle VM VirtualBox 允许您透明地加密存储在配置文件、保存状态和客户机 EFI 启动数据中的虚拟机数据。
Oracle VM VirtualBox 在各种模式下使用 AES 算法。所选模式取决于虚拟机的加密组件。Oracle VM VirtualBox 支持 128 位或 256 位数据加密密钥 (DEK)。DEK 以加密形式存储在虚拟机配置文件中,并在虚拟机启动期间解密。
由于 DEK 作为虚拟机配置文件的一部分存储,因此确保文件安全至关重要。丢失 DEK 意味着存储在虚拟机中的数据将无法恢复地丢失。用户有责任对与虚拟机相关的所有数据进行完整和最新的备份。
虚拟机,即使已加密,也可能包含使用不同密码加密的媒体。为此,虚拟机的密码具有一个密码标识符,与媒体密码的方式相同。密码 ID 是一个任意字符串,用于唯一标识虚拟机及其媒体中的密码。您可以为虚拟机及其媒体使用相同的密码和 ID。
使用此功能时,用户需要注意一些限制
导出包含加密虚拟机的设备是不可能的,因为OVF规范不支持此功能。因此,虚拟机在导出期间会被解密。
DEK在虚拟机运行时保持在内存中,以便能够加密和解密虚拟机数据。虽然这应该很明显,但用户需要注意这一点,因为攻击者可能能够从受感染的主机中提取密钥并解密数据。
在加密或解密虚拟机时,密码通过 Oracle VM VirtualBox API 以明文形式传递。这需要牢记,尤其是在使用利用 Web 服务的第三方 API 客户端时,密码可能会通过网络传输。在这种情况下,强制使用 HTTPS。
可以使用 VirtualBox 管理器或VBoxManage来加密虚拟机。要使用VBoxManage加密未加密的虚拟机,请使用
VBoxManage encryptvmuuid
|vmname
setencryption --new-passwordfilename
|- \ --ciphercipher-ID
--new-password-idID
要提供加密密码,请将VBoxManage指向存储密码的文件,或指定 -
让VBoxManage在命令行上提示输入密码。
密码参数指定用于加密的密码,可以是 AES-128
或 AES-256
。适当的操作模式(例如 GCM、CTR 或 XTS)将由虚拟机根据加密组件选择。指定的密码标识符可以由用户自由选择,并用于在为虚拟机提供多个密码时进行正确识别。
当 Oracle VM VirtualBox 刚启动时,加密的虚拟机无法打开并保持不可访问。此外,如果加密的虚拟机是刚注册但没有密码或密码不正确,则它也会保持不可访问。用户需要使用 VirtualBox 管理器或以下VBoxManage命令提供密码
VBoxManage encryptvmuuid
|vmname
addpassword --passwordfilename
|- --password-idID
要提供加密密码,请将VBoxManage指向存储密码的文件,或指定 -
让VBoxManage在命令行上提示输入密码。
如果 ID
与加密虚拟机时提供的密码标识符相同,它将更新可访问性状态。
要从虚拟机内存中删除输入的密码,请按如下方式使用VBoxManage
VBoxManage encryptvmuuid
|vmname
removepasswordID
如果 ID
与加密虚拟机时提供的密码标识符相同,它将更新可访问性状态。
如果机器变得不可访问,所有密码都将被清除。您必须使用VBoxManage encryptvm vmname
addpassword命令再次添加所需的密码。参见第 9.22.3 节,“打开加密的虚拟机”。
如果 Oracle VM VirtualBox 的快照模型不足,可以启用一种特殊模式,该模式允许在虚拟机暂停时重新配置存储附件。用户必须确保磁盘数据与客户机保持一致,因为与热插拔不同,客户机不会收到有关分离或新连接媒体的通知。
可以通过执行以下命令在每个虚拟机上启用专家存储管理模式
$ VBoxManage setextradata VM-name
"VBoxInternal2/SilentReconfigureWhilePaused" 1
您可以在虚拟机暂停后使用VBoxManage storageattach命令重新配置存储附件。
某些主机电源管理事件由 Oracle VM VirtualBox 处理。实际行为取决于平台
主机挂起。当主机即将挂起时(即主机将状态保存到某个非易失性存储并断电时)生成此事件。
此事件目前仅在 Windows 主机和 Mac OS X 主机上处理。生成此事件时,Oracle VM VirtualBox 将暂停所有正在运行的虚拟机。
主机恢复。当主机从挂起状态唤醒时生成此事件。
此事件目前仅在 Windows 主机和 Mac OS X 主机上处理。生成此事件时,Oracle VM VirtualBox 将恢复所有之前暂停的虚拟机。
电池电量低。电池电量达到临界水平,通常低于 5% 电量。
此事件目前仅在 Windows 主机和 Mac OS X 主机上处理。生成此事件时,Oracle VM 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 setextradataVM-name
\ VBoxInternal/CPUM/IsaExts/SSE4.1 0 $ VBoxManage setextradataVM-name
\ VBoxInternal/CPUM/IsaExts/SSE4.2 0
这些是按虚拟机设置,默认情况下已启用。
当机器窗口处于活动状态时,此功能使主机键盘指示灯(LED)与虚拟机模拟键盘的指示灯匹配。目前已为 macOS 和 Windows 主机实现此功能。在受支持的主机操作系统上,此功能默认启用。您可以通过运行以下命令禁用此功能
$ VBoxManage setextradata VM-name
GUI/HidLedsSync 0
这是一个按虚拟机设置,默认启用。
您可以捕获单个 USB 设备或根集线器级别的 USB 流量,后者会捕获连接到根集线器的所有 USB 设备的流量。Oracle VM VirtualBox 以与 Wireshark 兼容的格式存储流量。要捕获特定 USB 设备的流量,必须使用以下命令通过VBoxManage将其连接到虚拟机
VBoxManage controlvmVM-name
usbattachdevice uuid
|address
--capturefilefilename
要在虚拟机未运行时在根集线器上启用捕获,请使用以下命令
VBoxManage setextradataVM-name
\ VBoxInternal/Devices/usb-ehci/0/LUN#0/Config/CaptureFilenamefilename
上述命令在连接到 EHCI 控制器的根集线器上启用捕获。要为 OHCI 或 XHCI 控制器启用它,请分别将 usb-ehci
替换为 usb-ohci
或 usb-xhci
。
Oracle VM VirtualBox 附带一个简单的心跳服务。一旦增强功能激活,客户机就会向主机发送频繁的心跳包。如果客户机在未正确终止服务的情况下停止发送心跳包,虚拟机进程将把此事件记录到 VBox.log 文件中。将来可能会配置专用操作,但目前日志文件中只有一个警告。
有两个参数需要配置。心跳间隔 定义了两个心跳包之间的时间。默认值为 2 秒,即 Oracle VM VirtualBox 增强功能的心跳服务每两秒发送一次心跳包。纳秒值可以像这样配置
VBoxManage setextradata VM-name
\
VBoxInternal/Devices/VMMDev/0/Config/HeartbeatInterval 2000000000
心跳超时 定义了主机从上次心跳包开始等待的时间,在此时间之后它将客户机定义为无响应。默认值是心跳间隔的 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.。如果在此警告之后又收到心跳包,将出现一条日志消息,例如 VMMDev: GuestHeartBeat: Guest is alive.
Oracle VM VirtualBox 允许您透明地加密存储在客户机硬盘映像中的数据。它不依赖于特定的映像格式。具有加密数据的映像在 Oracle VM VirtualBox 和其他虚拟化软件之间不可移植。
Oracle VM VirtualBox 使用 AES 算法的 XTS 模式,并支持 128 位或 256 位数据加密密钥 (DEK)。DEK 以加密形式存储在介质属性中,并在虚拟机启动期间通过输入映像加密时选择的密码来解密。
由于 DEK 作为虚拟机配置文件的一部分存储,因此确保其安全至关重要。丢失 DEK 意味着存储在磁盘映像中的数据将无法恢复地丢失。用户有责任对与虚拟机相关的所有数据进行完整和最新的备份。
使用此功能时,用户需要注意一些限制
此功能是 Oracle VM VirtualBox 扩展包的一部分,需要安装。否则磁盘加密将不可用。
由于加密仅对存储的用户数据有效,因此目前无法检查磁盘映像的元数据完整性。攻击者可能会通过删除或更改映像中的数据块或更改元数据项(例如磁盘大小)来破坏数据。
导出包含加密磁盘映像的设备是不可能的,因为OVF规范不支持此功能。因此,所有映像在导出期间都会被解密。
DEK 在虚拟机运行时保留在内存中,以便能够解密读取的数据和加密客户机写入的数据。尽管这应该很明显,但用户需要意识到这一点,因为攻击者可能能够在受感染的主机上提取密钥并解密数据。
在加密或解密映像时,密码通过 Oracle VM VirtualBox API 以明文形式传递。这需要牢记,尤其是在使用利用 Web 服务的第三方 API 客户端时,密码可能会通过网络传输。在这种情况下,强制使用 HTTPS。
仅当没有快照或线性快照链时,才能加密包含差异映像的映像。此限制可能会在未来的 Oracle VM VirtualBox 版本中解决。
磁盘加密功能只能保护为虚拟机配置的磁盘内容。它不涵盖与虚拟机相关的任何其他数据,包括保存状态或配置文件本身。
可以使用 VirtualBox 管理器或VBoxManage来加密磁盘映像。尽管 VirtualBox 管理器更易于使用,但它按虚拟机工作,并加密连接到特定虚拟机的所有磁盘映像。使用VBoxManage可以加密单个映像,包括所有差异映像。要使用VBoxManage加密未加密的介质,请使用
VBoxManage encryptmediumuuid
|filename
\ --newpasswordfilename
|- --ciphercipher-ID
--newpasswordid "ID
要提供加密密码,请将VBoxManage指向存储密码的文件,或指定 -
让 VBoxManage 在命令行上提示您输入密码。
密码参数指定用于加密的密码,可以是 AES-XTS128-PLAIN64
或 AES-XTS256-PLAIN64
。指定的密码标识符可以由用户自由选择,并用于在虚拟机启动期间提供多个密码时进行正确识别。
如果用户在加密多个映像时使用相同的密码,并且使用相同的密码标识符,则用户在虚拟机启动期间只需提供一次密码。
当使用 VirtualBox 管理器启动虚拟机时,将打开一个对话框,用户需要在其中输入连接到虚拟机的所有加密映像的所有密码。如果使用另一个前端(如 VBoxHeadless),一旦客户机尝试访问加密磁盘,虚拟机将立即暂停。用户需要通过VBoxManage使用以下命令提供密码
VBoxManage controlvmuuid
|vmname
addencpasswordID
password
[--removeonsuspend yes|no]
ID
必须与加密映像时提供的密码标识符相同。password
是加密映像时使用的密码。(可选)您可以指定 --removeonsuspend yes|no
来指定在虚拟机挂起时是否从虚拟机内存中删除密码。在虚拟机可以恢复之前,用户需要再次提供密码。当虚拟机因主机挂起事件而挂起,并且用户不希望密码保留在内存中时,这很有用。
本节介绍如何使用准虚拟化提供程序支持的接口调试客户机操作系统。
准虚拟化调试会显著改变客户机操作系统的行为,应仅供专家用户用于调试和诊断。
这些调试选项以逗号分隔的键值对字符串形式指定。空字符串会禁用准虚拟化调试。
下面列出的所有选项都是可选的,因此当未指定相应的键值对时,将使用指定的默认值。
键: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 及更高版本上受支持)进行调试具有显著优势。它由于直接的主机到客户机传输而提供了出色的性能,易于设置,并且对 hypervisor 的支持要求极低。它可以与在虚拟机同一主机上运行的调试器一起使用,也可以与通过网络连接在不同机器上的调试器和虚拟机一起使用。
先决条件
配置为 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"
有关完整的选项集,请参见第 9.30.1 节,“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
请注意,当使用 Hyper-V 调试传输时,bootdebug选项仅在 Windows 8 或更新版本上有效。有关bcdedit选项的详细说明,请参阅 Microsoft Windows 文档。
在您的主机或远程主机上启动Microsoft WinDbg。
在文件菜单中,选择内核调试。在网络选项卡上,指定您在 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 VM VirtualBox 支持将 PC 扬声器直通到主机。PC 扬声器(有时称为系统扬声器)是一种无需常规音频和声卡支持即可产生可听反馈(例如蜂鸣声)的方式。
Oracle VM VirtualBox 中的 PC 扬声器直通功能仅处理蜂鸣声。虚拟机对 PC 扬声器的高级使用(例如 PCM 音频)将无法工作,导致主机行为未定义。
在 Linux 上产生蜂鸣声是一个非常复杂的话题。Oracle VM VirtualBox 提供了一系列选项,旨在使其在尽可能多的 Linux 发行版和系统配置上确定性且可靠地工作。这些总结在下表中。
表 9.4. PC 扬声器配置选项
代码 | 设备 | 备注 |
---|---|---|
1 |
| 直接使用主机PC扬声器。 |
2 | /dev/tty | 使用虚拟机进程的终端关联。虚拟机需要在虚拟控制台上启动。 |
3 |
| 只能由 |
9 | 用户指定的控制台或evdev设备路径。 | 与代码1到3相同,但使用自定义设备路径。 |
70 |
| 仅标准蜂鸣声。丢失频率和长度。参见代码2。 |
79 | 用户指定的终端设备路径。 | 与代码70相同,但使用自定义设备路径。 |
100 | 以上所有。 | 尝试所有可用代码。 |
要启用PC扬声器直通,请使用以下命令
VBoxManage setextradataVM-name
"VBoxInternal/Devices/i8254/0/Config/PassthroughSpeaker"N
将 N
替换为您要使用的用例代码。更改此设置将在您下次启动虚拟机时生效。在所有主机操作系统上启用 PC 扬声器直通是安全的。它仅在 Linux 上生效。
虚拟机日志文件 VBox.log
包含带有前缀 PIT: speaker:
的行,显示 PC 扬声器直通设置活动。它提供了有关它选择了哪个设备或为什么失败的提示。
为虚拟机启用 PC 扬声器直通通常是简单的一部分。真正的困难在于确保 Oracle VM VirtualBox 可以访问必要的设备,因为在典型的 Linux 安装中,大多数设备只能由 root
用户访问。您应该遵循推荐的方式来持久更改此设置,例如参考您的发行版文档。由于 Linux 发行版变体无数,我们只能给出一般性提示,即通常有一种方法可以授予 X11 会话用户访问附加设备的权限,或者您需要使用 udev 配置文件找到一个可行的解决方案。如果一切都失败了,您可以尝试使用在主机系统启动中运行足够晚的脚本来设置权限。
有时内核会应用额外的规则来限制访问。例如,虚拟机进程必须与配置用于蜂鸣的设备具有相同的控制终端,这对于 Oracle VM VirtualBox 等 GUI 应用程序来说通常非常难以实现。上表包含一些提示,但通常请参阅 Linux 文档。
如果即使设备权限已设置并且 VBox.log 确认它使用 evdev 或控制台进行 PC 扬声器控制,您仍然无法听到任何蜂鸣声,请检查您的系统是否具有 PC 扬声器。某些系统没有。其他复杂情况可能源于 Linux 将 PC 扬声器输出重定向到声卡。如果您将扬声器连接到声卡,请检查蜂鸣声是否可听见。如今几乎所有系统都拥有一个。最后,检查音频混音器控制是否有一个名为“beep”的通道(可能隐藏在混音器设置中),并且它未被静音。
Oracle VM VirtualBox 支持通过 USB over IP 协议将通过网络公开的 USB 设备直通,而无需配置由内核和 usbip 工具提供的客户端。此外,此功能适用于在任何受支持的主机上运行的 Oracle VM VirtualBox,而不仅仅是单独的 Linux,就像官方客户端一样。
要启用对USB/IP设备直通的支持,请使用以下命令添加导出设备的设备服务器
VBoxManage usbdevsource addunique-name
--backendUSBIP
--addressdevice-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
Oracle VM VirtualBox 可以在运行 Hyper-V 的 Windows 主机上使用。这是实验性功能。
无需配置。Oracle VM VirtualBox 会自动检测 Hyper-V,并使用 Hyper-V 作为主机系统的虚拟化引擎。虚拟机窗口状态栏中的 CPU 图标表示正在使用 Hyper-V。
使用此功能时,某些主机系统可能会遇到 Oracle VM VirtualBox 性能显著下降的情况。
Oracle VM VirtualBox 支持嵌套虚拟化。此功能支持将硬件虚拟化功能直通到客户虚拟机。这意味着您可以在 Oracle VM VirtualBox 客户机上安装一个 hypervisor,例如 Oracle VM VirtualBox、Oracle VM Server 或 KVM。然后您可以在客户虚拟机中创建并运行虚拟机。
主机CPU上不存在的硬件虚拟化功能将不会暴露给客户机。此外,某些功能(如嵌套分页)尚未支持直通到客户机。
您可以通过以下方式之一启用嵌套虚拟化功能
在 VirtualBox 管理器中,在处理器选项卡上选中启用嵌套 VT-x/AMD-V复选框。要禁用此功能,请取消选中该复选框。
使用VBoxManage modifyvm命令的 --nested-hw-virt
选项来启用或禁用嵌套虚拟化。参见第 8.10 节,“VBoxManage modifyvm”。
Oracle VM VirtualBox 支持在 Windows 会话 0 中执行 VBoxSVC。这使得 VBoxSVC 可以像常规 Windows 服务一样运行,从而使无头虚拟机即使在用户注销后也能继续运行。
这目前是一项实验性功能。
此功能默认禁用,可以通过在 Windows 注册表的 HKEY_LOCAL_MACHINE\Software\Oracle\VirtualBox\VBoxSDS
键中创建 REG_DWORD 值 ServerSession0
来启用。将该值的数据指定为 1
以启用此功能,或指定 0
以禁用此功能。需要重新启动主机才能使更改生效。
ISO 映像创建工具。
构造虚拟ISO 9660 / Joliet / UDF / HFS混合镜像,并将其写入文件 (RTIsoMaker) 或作为虚拟镜像 (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'
在所有启用的命名空间中作为 '/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 内容的命名空间。
--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+x
、a+r
或 a+rx
。(对更复杂模式规范的支持可能会在以后实现。)
请注意,只有当前 --name-setup 中的命名空间会受到影响。
--chown=owner-id
:on-iso-file
显式设置已添加到 ISO 的文件/目录/任何内容的 rock ridge、UDF 和 HFS 文件所有者 ID(数字)。
请注意,只有当前 --name-setup 中的命名空间会受到影响。
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 必须是以下之一:x86
、PPC
、Mac
、efi
-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
出现之间使用 --name-setup
选项更改活动命名空间,为主要 ISO 9660、Joliet、UDF 和 HFS 设置不同的标签。)
--volset=text
卷集 ID 字符串。
--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 参数引用和转义样式进行格式化。