目录
由于虚拟机很可能需要其虚拟计算机内置一个硬盘,Oracle VM VirtualBox 必须能够将真实存储作为虚拟硬盘呈现给访客机。目前有三种方法可以实现这一点:
Oracle VM VirtualBox 可以使用真实硬盘上的大型镜像文件,并将其作为虚拟硬盘呈现给访客机。这是最常用的方法,在第 5.2 节“磁盘镜像文件 (VDI, VMDK, VHD, HDD)”中进行了描述。
iSCSI 存储服务器可以连接到 Oracle VM VirtualBox。这在第 5.10 节“iSCSI 服务器”中进行了描述。
您可以允许虚拟机直接访问您的一个主机磁盘。这是一项高级功能,在第 9.7.1 节“从访客机使用原始主机硬盘”中进行了描述。
每个此类虚拟存储设备,例如镜像文件、iSCSI 目标或物理硬盘,都需要连接到 Oracle VM VirtualBox 呈现给虚拟机的虚拟硬盘控制器。这将在下一节中解释。
在计算设备中,硬盘和 CD/DVD 驱动器连接到一个称为硬盘控制器的设备,该设备驱动硬盘操作和数据传输。Oracle VM VirtualBox 可以模拟计算设备中常见的硬盘控制器类型:IDE、SATA (AHCI)、SCSI、SAS、基于 USB 的、NVMe 和 virtio-scsi 大容量存储设备。
IDE (ATA) 控制器是 IBM PC/AT (1984) 磁盘控制器的向后兼容但非常先进的扩展。最初,此接口仅适用于硬盘,但后来扩展到支持 CD-ROM 驱动器和其他类型的可移动介质。在物理 PC 中,此标准使用 40 或 80 线的扁平带状并行电缆。每条此类电缆可以将两个设备(称为设备 0 和设备 1)连接到一个控制器。典型的 PC 有两个用于此类电缆的连接器。因此,最常见的是支持多达四个 IDE 设备:主设备 0、主设备 1、次设备 0 和次设备 1。
在 Oracle VM VirtualBox 中,每个虚拟机都可以启用一个 IDE 控制器,这为您提供了最多四个可以连接到机器的虚拟存储设备。默认情况下,其中一个虚拟存储设备(次要通道上的设备 0)预配置为虚拟机的虚拟 CD/DVD 驱动器。但是,您可以更改默认设置。
即使您的访客操作系统不支持 SCSI 或 SATA 设备,它也应该始终能够识别 IDE 控制器。
您还可以选择 Oracle VM VirtualBox 应向虚拟机呈现哪种确切类型的 IDE 控制器硬件:PIIX3、PIIX4 或 ICH6。这在性能方面没有区别,但如果您从其他虚拟化产品导入虚拟机,该机器中的操作系统可能期望特定的控制器类型,如果未找到则可能崩溃。
在 VirtualBox 管理器中使用新建虚拟机向导创建新虚拟机后,您通常会在机器的存储设置中看到一个 IDE 控制器。虚拟 CD/DVD 驱动器将连接到此控制器的四个端口之一。
串行 ATA (SATA) 是比 IDE 更新的标准。与 IDE 相比,它支持更高的速度和每个控制器更多的设备。此外,对于物理硬件,可以在系统运行时添加和移除设备。SATA 控制器的标准接口称为高级主机控制器接口 (AHCI)。
像真实的 SATA 控制器一样,Oracle VM VirtualBox 的虚拟 SATA 控制器运行速度更快,并且比虚拟 IDE 控制器消耗更少的 CPU 资源。此外,与连接了 DVD 驱动器的 Oracle VM VirtualBox IDE 控制器相比,这使您能够将多达 30 个虚拟硬盘连接到一台机器,而不仅仅是三个。
因此,根据所选的访客操作系统,Oracle VM VirtualBox 默认对新创建的虚拟机使用 SATA。默认创建一个虚拟 SATA 控制器,并且随新虚拟机创建的默认磁盘将连接到此控制器。
整个 SATA 控制器及其连接的虚拟磁盘(包括 IDE 兼容模式下的磁盘)将无法被没有 AHCI 设备支持的操作系统识别。特别是,在 Windows Vista 之前的 Windows 版本中,不支持 AHCI。即使安装了 SP3,Windows XP 等旧版 Windows 也无法识别此类磁盘,除非您安装额外的驱动程序。可以通过安装 SATA 驱动程序并在虚拟机设置窗口中更改控制器类型,在安装后从 IDE 切换到 SATA。
Oracle VM VirtualBox 推荐 Intel Matrix Storage 驱动程序,可从http://downloadcenter.intel.com/Product_Filter.aspx?ProductID=2101下载。
要为默认未启用 SATA 控制器的机器添加 SATA 控制器(无论是由于它是早期版本的 Oracle VM VirtualBox 创建的,还是因为所选的访客操作系统默认不支持 SATA),请执行以下操作。转到机器设置窗口的存储页面,在“存储树”框下点击添加控制器,然后选择添加 SATA 控制器。新控制器将作为独立的 PCI 设备出现在虚拟机中,您可以向其添加虚拟磁盘。
要更改 SATA 控制器的 IDE 兼容模式设置,请参见第 8.27 节“VBoxManage storagectl”。
SCSI 是另一个已建立的行业标准,代表小型计算机系统接口。SCSI 作为一种通用的接口,用于所有类型的设备(包括存储设备)之间的数据传输。SCSI 仍用于连接某些硬盘和磁带设备,但在商用硬件中已大部分被取代。它仍在高性能工作站和服务器中普遍使用。
主要为了与其他虚拟化软件兼容,Oracle VM VirtualBox 可选支持 LSI Logic 和 BusLogic SCSI 控制器,每个控制器最多可以连接 15 个虚拟硬盘。
要启用 SCSI 控制器,在虚拟机的设置窗口的存储页面上,点击“存储树”框下的添加控制器,然后选择添加 SCSI 控制器。新控制器将作为独立的 PCI 设备出现在虚拟机中。
与F其他控制器类型一样,SCSI 控制器只能被具有其设备支持的操作系统识别。Windows 2003 及更高版本附带 LSI Logic 控制器的驱动程序,而 Windows NT 4.0 和 Windows 2000 附带 BusLogic 控制器的驱动程序。Windows XP 不附带任何驱动程序。
串行连接 SCSI (SAS) 是另一种使用 SCSI 命令集的总线标准。与 SCSI 物理设备不同,SAS 使用串行电缆而不是并行电缆。这简化了物理设备连接。因此,在某些方面,SAS 之于 SCSI 就像 SATA 之于 IDE:它支持更可靠、更快的连接。
为了支持需要 SAS 控制器的高端访客机,Oracle VM VirtualBox 模拟了一个 LSI Logic SAS 控制器,其启用方式与 SCSI 控制器大致相同。目前,SAS 控制器最多可以连接 255 个设备。
与 SATA 一样,SAS 控制器只能被具有其设备支持的操作系统识别。特别是,在 Windows Vista 之前的 Windows 版本中,不支持 SAS。因此,Windows XP(即使是 SP3)也无法识别此类磁盘,除非您安装额外的驱动程序。
USB 大容量存储设备类是用于通过 USB 将硬盘或闪存驱动器等外部存储设备连接到主机的标准。所有主流操作系统都支持这些设备并附带通用驱动程序,这使得第三方驱动程序变得多余。特别是,不支持 SATA 控制器的旧版操作系统可能会受益于 USB 大容量存储设备。
Oracle VM VirtualBox 提供的虚拟 USB 存储控制器与其他存储控制器类型的工作方式不同。虽然大多数存储控制器对访客机显示为连接了多个磁盘的单个 PCI 设备,但基于 USB 的存储控制器不显示为虚拟存储控制器。连接到控制器的每个磁盘都对访客机显示为专用的 USB 设备。
仅在使用 EFI 时才支持从通过 USB 连接的驱动器引导,因为 BIOS 缺乏 USB 支持。
非易失性内存高速 (NVMe) 是一种直接通过 PCI Express 连接非易失性内存 (NVM) 的标准,旨在解除之前用于固态设备的 SATA 协议的带宽限制。与其他标准不同,其命令集非常简单,以实现最大吞吐量,并且与 ATA 或 SCSI 不兼容。操作系统需要支持 NVMe 设备才能使用它们。例如,Windows 8.1 添加了原生 NVMe 支持。对于 Windows 7,通过更新添加了原生支持。
NVMe 控制器是扩展包的一部分。
仅在使用 EFI 时才支持从通过 NVMe 连接的驱动器引导,因为 BIOS 缺乏相应的驱动程序。
虚拟 I/O 设备 SCSI 是将硬盘或光驱等虚拟存储设备连接到虚拟机的标准。最近的 Linux 和 Windows 版本支持这些设备,但 Windows 需要额外的驱动程序。目前 virtio-scsi 控制器支持仍处于实验阶段。
virtio-scsi 控制器只能被具有其设备支持的操作系统识别。特别是,Windows 中没有内置支持。因此,Windows 无法识别此类磁盘,除非您安装额外的驱动程序。
总之,Oracle VM VirtualBox 为您提供以下类别的虚拟存储插槽:
连接到传统 IDE 控制器的四个插槽,这些插槽始终存在。其中一个通常是虚拟 CD/DVD 驱动器。
连接到 SATA 控制器的 30 个插槽,如果访客操作系统已启用并支持。
连接到 SCSI 控制器的 15 个插槽,如果访客操作系统已启用并支持。
连接到 SAS 控制器最多 255 个插槽,如果访客操作系统已启用并支持。
连接到虚拟 USB 控制器的八个插槽,如果访客操作系统已启用并支持。
连接到 NVMe 控制器最多 255 个插槽,如果访客操作系统已启用并支持。
连接到 virtio-scsi 控制器最多 256 个插槽,如果访客操作系统已启用并支持。
面对如此多的存储控制器选择,您可能不知道该选择哪一个。一般来说,您应该避免使用 IDE,除非它是您的访客机唯一支持的控制器。无论您使用 SATA、SCSI 还是 SAS,都没有真正的区别。Oracle VM VirtualBox 提供多种控制器仅是为了与现有硬件和其他虚拟机管理程序兼容。
磁盘镜像文件驻留在主机系统上,并被访客系统视为具有特定几何形状的硬盘。当访客操作系统从硬盘读取或写入数据时,Oracle VM VirtualBox 会将请求重定向到镜像文件。
像物理磁盘一样,虚拟磁盘也有大小或容量,必须在创建镜像文件时指定。然而,与物理磁盘不同的是,Oracle VM VirtualBox 允许您在创建后扩展镜像文件,即使它已经包含数据。请参见第 8.31 节“VBoxManage modifymedium”。
Oracle VM VirtualBox 支持以下类型的磁盘镜像文件:
VDI. 通常,Oracle VM VirtualBox 为访客机硬盘使用自己的容器格式。这称为虚拟磁盘镜像 (VDI) 文件。当您创建带新磁盘的新虚拟机时,会使用此格式。
VMDK. Oracle VM VirtualBox 还完全支持由许多其他虚拟化产品(如 VMware)使用的流行开放 VMDK 容器格式。
VHD. Oracle VM VirtualBox 也完全支持 Microsoft 使用的 VHD 格式。
HDD. Parallels 版本 2 的镜像文件(HDD 格式)也受支持。
由于缺乏格式文档,不支持版本 3 和 4 等较新版本。但是,您可以使用 Parallels 提供的工具将此类镜像文件转换为版本 2 格式。
无论磁盘容量和格式如何,如第 1.8 节“创建您的第一个虚拟机”中所述,创建磁盘镜像有两种选择:固定大小或动态分配。
固定大小. 如果您创建固定大小的镜像,则会在您的主机系统上创建一个镜像文件,其大小大致与虚拟磁盘的容量相同。因此,对于一个 10 GB 的磁盘,您将有一个 10 GB 的文件。请注意,创建固定大小的镜像可能需要很长时间,具体取决于镜像的大小和硬盘的写入性能。
动态分配. 为了更灵活的存储管理,请使用动态分配的镜像。它最初会非常小,并且不会占用未使用的虚拟磁盘扇区的任何空间,但每次首次写入磁盘扇区时都会增长,直到驱动器达到创建驱动器时选择的最大容量。虽然这种格式最初占用的空间较少,但 Oracle VM VirtualBox 需要扩展镜像文件会消耗额外的计算资源,因此在磁盘文件大小稳定之前,写入操作可能比固定大小磁盘慢。然而,一段时间后,增长速度会减慢,并且写入操作的平均惩罚将可以忽略不计。
Oracle VM VirtualBox 会跟踪所有虚拟机正在使用的硬盘、CD/DVD-ROM 和软盘镜像。这些通常被称为已知介质,并来自两个来源:
当前连接到虚拟机的所有介质。
已注册的介质,用于与旧版 Oracle VM VirtualBox 兼容。
可以使用虚拟介质管理器工具查看和更改已知介质,您可以通过点击 VirtualBox 管理器中全局工具菜单上的介质来访问它。
已知介质方便地按支持的格式分组在单独的选项卡中。这些格式包括:
硬盘镜像,可以是 Oracle VM VirtualBox 自己的虚拟磁盘镜像 (VDI) 格式,也可以是第 5.2 节“磁盘镜像文件 (VDI, VMDK, VHD, HDD)”中列出的第三方格式。
标准 ISO 格式的 CD/DVD 镜像。
标准 RAW 格式的软盘镜像。
对于每个镜像,虚拟介质管理器会显示镜像文件的完整路径以及其他信息,例如当前连接到该镜像的虚拟机。
虚拟介质管理器使您能够执行以下操作:
添加镜像到已知介质。
创建新磁盘镜像。
对于硬盘,会显示创建虚拟硬盘向导。请参见第 5.3.1 节“创建虚拟硬盘镜像”。
对于光盘,会显示VISO 创建器工具。请参见第 5.3.2 节“创建虚拟光盘镜像”。
对于软盘,会显示软盘创建器工具。请参见第 5.3.3 节“创建虚拟软盘镜像”。
复制镜像以创建另一个。
对于虚拟硬盘,您可以指定以下目标类型之一:VDI、VHD 或 VMDK。
移动镜像到另一个位置。
文件对话框会提示您输入新的镜像文件位置。
当您使用虚拟介质管理器移动磁盘镜像时,Oracle VM VirtualBox 会自动更新所有相关的配置文件。
始终使用虚拟介质管理器或VBoxManage modifymedium命令来移动磁盘镜像。
如果您使用主机操作系统的文件管理功能将磁盘镜像移动到新位置,请运行VBoxManage modifymedium --setlocation
命令以配置磁盘镜像在主机文件系统上的新路径。此命令会自动更新 Oracle VM VirtualBox 配置。
移除已知介质中的镜像。移除镜像时,您可以选择删除镜像文件。
释放镜像以将其从虚拟机分离。此操作仅在镜像当前作为虚拟硬盘连接到虚拟机时适用。
清除列表中所有不可访问的磁盘镜像。磁盘镜像将从它们所连接的虚拟机中释放,并从已知介质中移除。
此选项仅适用于光盘和软盘。
搜索按名称或 UUID 查找镜像。
查看和编辑磁盘镜像的属性。
可用属性包括:
类型: 指定磁盘的快照行为。请参见第 5.4 节“特殊镜像写入模式”。
位置: 指定磁盘镜像文件在主机系统上的位置。您可以使用文件对话框浏览磁盘镜像位置。
描述: 指定磁盘镜像的简短描述。
大小: 指定磁盘镜像的大小。您可以使用滑块增加或减小磁盘镜像大小。
信息: 指定磁盘镜像的详细信息。
刷新所选磁盘镜像的属性值。
要执行这些操作,请在虚拟介质管理器中突出显示介质,然后执行以下任一操作:
点击虚拟介质管理器工具栏中的图标。
右键点击介质并选择一个选项。
使用虚拟机设置窗口中的存储页面创建新的磁盘镜像。默认情况下,磁盘镜像存储在虚拟机的文件夹中。
您可以将硬盘镜像文件复制到其他主机系统,然后从主机系统导入到虚拟机中。但是,某些 Windows 访客操作系统可能要求您以与旧虚拟机类似的方式配置新虚拟机。
不要简单地复制虚拟磁盘镜像。如果您将此类副本导入虚拟机,Oracle VM VirtualBox 将发出错误,因为 Oracle VM VirtualBox 为每个磁盘镜像分配了一个通用唯一标识符 (UUID),以确保它只被使用一次。请参见第 5.6 节“克隆磁盘镜像”。此外,如果您想将虚拟机复制到另一个系统,请使用 Oracle VM VirtualBox 的导入和导出功能。请参见第 1.15 节“导入和导出虚拟机”。
使用创建虚拟硬盘向导创建硬盘镜像。
使用VISO 创建器工具创建虚拟光盘镜像。这使您可以从主机上的选定文件创建虚拟 ISO。
在虚拟介质管理器中显示光盘选项卡,然后点击创建。
显示VISO 创建器工具。
创建虚拟 ISO 文件。
配置 ISO 文件的名称。
点击配置并在Viso 名称字段中输入名称。
将文件添加到您的虚拟 ISO。
在主机文件系统窗格中,选择要从主机系统复制到虚拟 ISO 的文件。
点击添加项目到 VISO。文件将显示在VISO 内容窗格中。
还可以进行以下文件操作:
要在虚拟 ISO 上创建文件夹,点击创建新目录。
要从虚拟 ISO 中移除文件,在VISO 内容窗格中选择文件并点击从 VISO 中移除项目。
要从虚拟 ISO 中移除所有文件,点击重置 VISO 内容。
创建虚拟 ISO 镜像。
点击创建。
将创建具有指定名称和内容的虚拟 ISO 文件。
对于 Oracle VM VirtualBox 支持的每个虚拟磁盘镜像,您可以分别确定它应如何受虚拟机写入操作和快照操作的影响。这适用于所有上述镜像格式(VDI、VMDK、VHD 或 HDD),并且无论镜像是否是固定大小或动态分配。
默认情况下,镜像处于普通模式。要使用下面列出的非标准模式之一标记现有镜像,请使用VBoxManage modifymedium。请参见第 8.31 节“VBoxManage modifymedium”。或者,使用VBoxManage storageattach将镜像附加到虚拟机并指定--mtype
参数。请参见第 8.26 节“VBoxManage storageattach”。
可用的虚拟磁盘镜像模式如下:
普通镜像对访客机如何读写磁盘没有限制。这是默认的镜像模式。
当您按照第 1.11 节“快照”中的描述为虚拟机拍摄快照时,普通硬盘的状态会与快照一起记录,并在恢复快照时,其状态将被完全重置。
镜像文件本身不会被重置。相反,当拍摄快照时,Oracle VM VirtualBox 会冻结镜像文件,不再对其进行写入。对于来自虚拟机的写入操作,会创建第二个差分镜像文件,该文件只接收对原始镜像的更改。请参见第 5.5 节“差分镜像”。
虽然您可以将同一个普通镜像连接到多个虚拟机,但连接到同一个镜像文件的这些虚拟机中,一次只能运行一个,否则如果多台机器写入同一个镜像文件,就会发生冲突。
直写式硬盘完全不受快照影响。当拍摄快照时,它们的状态不会被保存;当恢复快照时,它们的状态也不会被恢复。
可共享硬盘是直写式硬盘的一种变体。原则上,它们的行为完全相同。当拍摄快照时,它们的状态不会被保存;当恢复快照时,它们的状态也不会被恢复。不同之处仅在于您将此类磁盘连接到多个虚拟机时。可共享磁盘可以连接到多个虚拟机,并且这些虚拟机可以并发运行。这使得它们适用于虚拟机之间的集群文件系统和类似明确准备并发访问磁盘的应用程序。只有固定大小的镜像才能以这种方式使用,动态分配的镜像将被拒绝。
这是一个专家功能,误用可能导致数据丢失,因为常规文件系统不具备处理多方同时更改的能力。
不可变镜像只在虚拟机运行时暂时记住写入访问。虚拟机下次开机时,所有更改都将丢失。因此,与普通镜像不同,同一个不可变镜像可以无限制地用于多个虚拟机。
创建一个不可变镜像没有多大意义,因为它最初是空的,并且每次机器重新启动都会丢失其内容。您将拥有一个每次机器启动时都未格式化的磁盘。相反,您可以首先创建一个普通镜像,然后在您认为内容有用时再将其标记为不可变。
如果您对带有不可变镜像的机器进行快照,那么在每次机器启动时,这些镜像都会重置为上一个(当前)快照的状态,而不是原始不可变镜像的状态。
作为一个特殊例外,如果不可变镜像连接到处于保存状态的机器,或者其最后一次快照是在机器运行时拍摄的,则不可变镜像不会被重置。这称为在线快照。因此,如果机器的当前快照是在线快照,则其不可变镜像的行为与普通镜像完全相同。要重新启用此类镜像的自动重置,请删除机器的当前快照。
Oracle VM VirtualBox 从不直接写入不可变镜像。所有来自机器的写入操作都定向到差分镜像。下次虚拟机开机时,差分镜像会被重置,因此每次虚拟机启动时,其不可变镜像都具有完全相同的内容。
差分镜像只在从 Oracle VM VirtualBox 内部开机时重置,而不是在您从机器内部请求重启时重置。这也是为什么当也存在使用差分镜像的快照时,不可变镜像的行为如上所述。
如果虚拟机启动时自动丢弃差分镜像不符合您的需求,您可以使用autoreset
参数将其关闭。请参见第 8.31 节“VBoxManage modifymedium”。
多重附加模式镜像可以同时连接到多个虚拟机,即使这些机器同时运行。对于每个连接了此类镜像的虚拟机,都会创建一个差分镜像。因此,一台机器写入此类虚拟磁盘的数据不会被连接该镜像的其他机器看到。每台机器都会创建自己的多重附加镜像写入历史记录。
从技术上讲,多重连接镜像的行为与不可变镜像相同,只是差异镜像不会在每次机器启动时重置。
此模式对于共享几乎从不写入的文件(例如图片库)非常有用,在这种情况下,每个访客机只更改少量数据,而大部分磁盘内容保持不变。修改后的块存储在相对较小的差分镜像中,共享内容仅在主机上存储一次。
只读镜像自动用于 CD/DVD 镜像,因为 CD/DVD 无法写入。
以下场景说明了各种镜像模式在快照方面的区别。
假设您已在虚拟机中安装了访客操作系统,并且已拍摄了快照。后来,您的虚拟机感染了病毒,您想恢复到快照。对于普通硬盘镜像,您只需恢复快照,硬盘镜像的先前状态也会恢复,您的病毒感染将被撤销。对于不可变硬盘,只需关闭并重新启动虚拟机,病毒感染就会被清除。然而,对于直写式镜像,您无法通过虚拟化轻松撤销病毒感染,而必须像真实计算机一样对虚拟机进行消毒。
如果您想独立于快照保留关键数据,直通式镜像可能会很有用。由于您可以将多个镜像连接到虚拟机,您可能希望有一个用于操作系统的不可变镜像,以及一个用于数据文件的直通式镜像。
前面一节提到了差异镜像以及它们如何与快照、不可变镜像和多个磁盘连接一起使用。本节将更详细地描述差异镜像的工作原理。
差分镜像是一种特殊的磁盘镜像,它只保存与另一个镜像的差异。差分镜像本身是无用的,它必须始终引用另一个镜像。差分镜像通常被称为子镜像,它保存着与其父镜像的差异。
当差分镜像处于活动状态时,它会接收来自虚拟机的所有写入操作,而不是其父镜像。差分镜像只包含自创建以来发生更改的虚拟硬盘扇区。当机器从此类虚拟硬盘读取扇区时,它会首先查看差分镜像。如果扇区存在,则从那里返回。如果不存在,Oracle VM VirtualBox 会查看父镜像。换句话说,父镜像变为只读。它不再被写入,但如果扇区未更改,则会从中读取。
差分镜像可以链式连接。如果为已存在差分镜像的虚拟磁盘创建另一个差分镜像,则它将成为原始父镜像的孙镜像。第一个差分镜像也变为只读,写入操作只进入第二级差分镜像。从虚拟磁盘读取时,Oracle VM VirtualBox 需要首先查看第二个差分镜像,如果未找到扇区,则查看第一个,然后查看原始镜像。
差分镜像的数量可以无限,并且每个镜像可以有多个子镜像。因此,差分镜像可以形成一个复杂的树,包含父镜像、兄弟镜像和子镜像,具体取决于您的机器配置的复杂程度。写入操作始终指向连接到机器的唯一活动差分镜像,对于读取操作,Oracle VM VirtualBox 可能需要查找链中的所有父镜像,直到找到相关扇区。您可以在虚拟介质管理器中查看这样的树。
在所有这些情况下,从虚拟机的角度来看,虚拟硬盘的行为与其他任何磁盘一样。当虚拟机运行时,会有一点运行时 I/O 开销,因为 Oracle VM VirtualBox 可能需要多次查找扇区。然而,由于扇区信息表始终保存在内存中并且可以快速查找,因此这并不明显。
差异镜像用于以下情况:
快照. 当您创建快照时,如前一节所述,Oracle VM VirtualBox 会冻结连接到虚拟机的镜像,并为每个未处于直写模式的镜像创建差分镜像。从虚拟机的角度来看,虚拟磁盘继续像以前一样运行,但所有写入操作都进入差分镜像。每次您创建另一个快照时,对于每个硬盘附件,都会创建并附加另一个差分镜像,形成一个链或树。
在上面的截图中,您可以看到原始磁盘镜像现在连接到一个快照,代表快照创建时磁盘的状态。
如果您恢复快照,并希望回到快照中存储的确切机器状态,则会发生以下情况:
Oracle VM VirtualBox 将复制到快照中的虚拟机设置复制回虚拟机。因此,如果您自拍摄快照以来对机器配置进行了更改,这些更改将被撤销。
如果快照是在机器运行时拍摄的,它将包含一个已保存的机器状态,并且该状态也会被恢复。恢复快照后,机器将处于“已保存”状态,并在下次启动时从该状态恢复执行。否则,机器将处于“已关机”状态并进行完全引导。
对于连接到机器的每个磁盘镜像,包含自当前快照拍摄以来的所有写入操作的差分镜像将被丢弃,原始父镜像将再次激活。如果您恢复的是根快照,那么这将是每个附件的根磁盘镜像。否则,将是其派生出的其他差分镜像。这有效地恢复了旧的机器状态。
如果您稍后删除快照以释放磁盘空间,对于每个磁盘附件,其中一个差分镜像将变得过时。在这种情况下,不能简单地删除磁盘附件的差分镜像。相反,Oracle VM VirtualBox 需要查看差分镜像的每个扇区,并将其复制回其父镜像。这称为“合并”镜像,可能是一个耗时的过程,具体取决于差分镜像的大小。在合并操作废弃的差分镜像被删除之前,它还可能暂时需要大量的额外磁盘空间。
不可变镜像. 当镜像切换到不可变模式时,也会创建一个差分镜像。与快照一样,父镜像变为只读,差分镜像接收所有写入操作。每次虚拟机启动时,所有连接到它的不可变镜像都会丢弃其各自的差分镜像,从而有效地在每次重新启动时重置虚拟机的虚拟磁盘。
您可以在同一个主机上复制硬盘镜像文件,以快速生成一个具有相同操作系统设置的第二个虚拟机。但是,您应该只使用 Oracle VM VirtualBox 提供的实用程序来复制虚拟磁盘镜像。请参见第 8.32 节“VBoxManage clonemedium”。这是因为 Oracle VM VirtualBox 为每个磁盘镜像分配一个 UUID,该 UUID 也存储在镜像内部,如果两个镜像使用相同的编号,Oracle VM VirtualBox 将拒绝工作。如果您不小心尝试重新导入正常复制的磁盘镜像,您可以使用VBoxManage clonevm命令创建第二个副本并导入它。
请注意,Linux 发行版根据驱动器的 ID 识别启动硬盘。Oracle VM VirtualBox 报告的驱动器 ID 是根据虚拟磁盘镜像的 UUID 确定的。因此,如果您克隆一个磁盘镜像并尝试启动复制的镜像,访客机可能无法确定自己的启动磁盘,因为 UUID 已更改。在这种情况下,您必须在引导加载程序脚本中修改磁盘 ID,例如/boot/grub/menu.lst
。磁盘 ID 看起来像这样:
scsi-SATA_VBOX_HARDDISK_VB5cfdb1e2-c251e503
复制镜像的 ID 可以通过以下方式确定:
hdparm -i /dev/sda
Oracle VM VirtualBox 可以选择禁用主机操作系统本会针对磁盘镜像文件执行的 I/O 缓存。
传统上,Oracle VM VirtualBox 将磁盘镜像文件作为普通文件打开,这导致它们像其他任何文件一样被主机操作系统缓存。这主要优点是速度:当访客操作系统写入磁盘并且主机操作系统缓存使用延迟写入时,写入操作可以快速报告给访客操作系统已完成,而主机操作系统可以异步执行该操作。此外,当您第二次启动虚拟机并且有足够的内存供操作系统用于缓存时,虚拟磁盘的大部分可能位于系统内存中,并且虚拟机可以更快地访问数据。
请注意,这仅适用于镜像文件。对于位于远程 iSCSI 存储上的虚拟磁盘,不会发生缓冲,这在企业级设置中是更常见的场景。请参见第 5.10 节“iSCSI 服务器”。
虽然缓冲对于在台式计算机上虚拟化少量机器是一个有用的默认设置,但这种方法也存在一些缺点:
通过主机操作系统缓存进行的延迟写入安全性较低。当访客操作系统写入数据时,即使数据尚未到达物理磁盘,它也认为数据已写入。如果由于某种原因写入未发生,例如断电或主机崩溃,则数据丢失的可能性会增加。
磁盘镜像文件往往非常大。因此,缓存它们会很快耗尽整个主机操作系统缓存。根据主机操作系统缓存的效率,这可能会极大地减慢主机的速度,特别是当多台虚拟机同时运行时。例如,在 Linux 主机上,主机缓存可能导致 Linux 延迟所有写入,直到主机缓存几乎已满,然后一次性写出所有这些更改,这可能会使虚拟机执行停滞数分钟。这可能导致访客机中出现 I/O 错误,因为 I/O 请求在那里超时。
物理内存经常被浪费,因为访客操作系统通常有自己的 I/O 缓存,这可能导致数据在访客机和主机缓存中都被缓存两次,效果甚微。
如果您决定出于上述原因禁用主机 I/O 缓存,Oracle VM VirtualBox 将使用自己的小型缓存来缓冲写入,但没有读取缓存,因为这通常已由访客操作系统执行。此外,Oracle VM VirtualBox 通过多个 I/O 线程完全支持其虚拟 SATA、SCSI 和 SAS 控制器的异步 I/O。
由于 IDE 控制器不支持异步 I/O,出于性能原因,您可能希望为虚拟机的虚拟 IDE 控制器保持主机缓存启用状态。
因此,Oracle VM VirtualBox 允许您分别为每个 I/O 控制器配置是否使用主机 I/O 缓存。可以在给定虚拟存储控制器的存储设置中选择使用主机 I/O 缓存复选框,或者使用以下VBoxManage命令禁用虚拟存储控制器的主机 I/O 缓存:
VBoxManage storagectl "VM name" --name <controllername> --hostiocache off
请参见第 8.27 节“VBoxManage storagectl”。
出于上述原因,Oracle VM VirtualBox 默认对新虚拟机使用 SATA 控制器。
Oracle VM VirtualBox 支持限制异步 I/O 的最大带宽。此外,它还支持通过带宽组在多个镜像之间共享限制。可以设置不止一个这样的限制。
限制使用VBoxManage配置。以下示例创建了一个名为 Limit 的带宽组,将限制设置为每秒 20 MB,并将该组分配给虚拟机的附加磁盘:
VBoxManage bandwidthctl "VM name" add Limit --type disk --limit 20M VBoxManage storageattach "VM name" --storagectl "SATA" --port 0 --device 0 --type hdd --medium disk1.vdi --bandwidthgroup Limit VBoxManage storageattach "VM name" --storagectl "SATA" --port 1 --device 0 --type hdd --medium disk2.vdi --bandwidthgroup Limit
组中的所有磁盘共享带宽限制,这意味着在上述示例中,两个镜像的总带宽永远不能超过 20 MBps。但是,如果一个磁盘不需要带宽,另一个磁盘可以使用其组的剩余带宽。
每个组的限制可以在虚拟机运行时更改,并且更改会立即生效。以下示例将上述示例中创建的组的限制更改为 10 MBps:
VBoxManage bandwidthctl "VM name" set Limit --limit 10M
虚拟 CD/DVD 驱动器默认只支持读取。介质配置可以在运行时更改。您可以选择以下选项来提供介质数据:
主机驱动器定义访客机可以从主机驱动器中的介质读取。
镜像文件允许访客机对镜像中的数据进行只读访问。这通常是一个 ISO 文件。
空意味着一个没有插入介质的驱动器。
在上述选项之间切换,或更改机器访问的主机驱动器中的介质,或更改镜像文件,都将向访客操作系统发出介质更改信号。访客操作系统随后可以对更改做出反应,例如通过启动安装程序。
介质更改可以被访客机阻止,如果合适,Oracle VM VirtualBox 会通过锁定主机驱动器来反映这一点。在这种情况下,您可以使用 VirtualBox 管理器或VBoxManage命令行工具强制移除介质。这实际上等同于许多 CD/DVD 驱动器提供的紧急弹出功能,并伴随所有相关副作用。访客操作系统可能会发出错误消息,就像在真实硬件上一样,访客应用程序也可能出现异常行为。请谨慎使用此功能。
提供给访客机的驱动器标识字符串(由 Windows 设备管理器等配置工具显示)始终是 VBOX CD-ROM,与虚拟驱动器的当前配置无关。这是为了防止每次更改配置时在访客操作系统中触发硬件检测。
标准 CD/DVD 模拟仅支持读取标准数据 CD 和 DVD 格式。作为一项实验性功能,为了获得额外功能,可以通过启用直通模式,使访客机直接访问 CD/DVD 主机驱动器。根据主机硬件,这可能允许以下功能正常工作:
如果主机 DVD 驱动器是 CD/DVD 刻录机,则从访客机内部进行 CD/DVD 写入
播放音频 CD
播放加密 DVD
要启用主机驱动器直通,您可以使用VBoxManage storageattach命令的--passthrough
选项。请参见第 8.26 节“VBoxManage storageattach”。
即使启用了直通,不安全的命令(例如更新驱动器固件)仍将被阻止。不支持视频 CD 格式,即使在直通模式下也不支持,并且无法从虚拟机播放。
在 Oracle Solaris 主机上,由于主机实施的安全措施,直通功能需要以真实 root 权限运行 Oracle VM VirtualBox。
iSCSI 代表Internet SCSI,是一个支持通过互联网 (TCP/IP) 连接使用 SCSI 协议的标准。特别是随着千兆以太网的出现,将 iSCSI 存储服务器简单地作为远程硬盘连接到计算机网络已变得经济实惠。在 iSCSI 术语中,提供存储资源的服务器称为iSCSI 目标,而连接到服务器并访问其资源的客户端称为iSCSI 启动器。
Oracle VM VirtualBox 可以透明地将 iSCSI 远程存储作为虚拟硬盘呈现给虚拟机。访客操作系统将看不到虚拟磁盘镜像 (VDI 文件) 与 iSCSI 目标之间的任何区别。为了实现这一点,Oracle VM VirtualBox 内置了 iSCSI 启动器。
Oracle VM VirtualBox 的 iSCSI 支持是按照 iSCSI 标准开发的,应该与所有符合标准的 iSCSI 目标兼容。要在 Oracle VM VirtualBox 中使用 iSCSI 目标,您必须使用命令行。请参见第 8.26 节“VBoxManage storageattach”。
vboximg-mount 是一个适用于 Mac OS 和 Linux 主机的命令行实用程序,它为主机系统上的 Oracle VM VirtualBox 虚拟磁盘镜像提供原始访问。使用此实用程序可以挂载、查看并(可选地)修改磁盘镜像内容。
该实用程序基于用户空间文件系统 (FUSE) 技术,并使用 VirtualBox 运行时引擎。请确保 Oracle VM VirtualBox 在主机系统上运行。
使用vboximg-mount时,请确保满足以下条件:
磁盘镜像未被任何其他系统(例如访客虚拟机)使用。
主机系统上没有虚拟机正在运行。
使用 FUSE 进行原始访问优于直接循环挂载虚拟磁盘镜像,因为它支持快照感知。它可以在暴露的虚拟硬盘中选择性地合并磁盘差分镜像,提供虚拟磁盘内容的过去或最新表示。
vboximg-mount使您能够查看已注册虚拟机、其连接的磁盘介质以及任何快照的信息。此外,您还可以查看磁盘镜像的分区信息。
vboximg-mount命令包含对虚拟机磁盘镜像内部文件系统的实验性只读访问。此功能使您无需启动虚拟机即可从磁盘镜像中提取某些文件,并且无需在主机系统上安装第三方文件系统驱动程序。支持 FAT、NTFS、ext2、ext3 和 ext4 文件系统。
使用--help
选项查看vboximg-mount命令的使用信息。完整的命令参考在第 8.55 节“vboximg-mount”中描述。
当vboximg-mount挂载 Oracle VM VirtualBox 磁盘镜像时,它会在您指定的挂载点创建一个深度为一级的文件系统。该文件系统包含一个设备节点,该节点将合成的磁盘镜像表示为可读或可读写字节流。此字节流可以通过使用主机操作系统或使用其他基于 FUSE 的文件系统进行挂载。
以下示例展示了如何使用vboximg-mount命令查看虚拟磁盘镜像的信息。
以下命令输出所有已注册虚拟机及其关联快照的详细信息:
$ vboximg-mount --list --verbose ------------------------------------------------------ VM Name: "macOS High Sierra 10.13" UUID: 3887d96d-831c-4187-a55a-567c504ff0e1 Location: /Volumes/work/vm_guests/macOS High Sierra 10.13/macOS High Sierra 10.13.vbox ----------------------- HDD base: "macOS High Sierra 10.13.vdi" UUID: f9ea7173-6869-4aa9-b487-68023a655980 Location: /Volumes/work/vm_guests/macOS High Sierra 10.13/macOS High Sierra 10.13.vdi Diff 1: UUID: 98c2bac9-cf37-443d-a935-4e879b70166d Location: /Volumes/work/vm_guests/macOS High Sierra 10.13/ Snapshots/{98c2bac9-cf37-443d-a935-4e879b70166d}.vdi Diff 2: UUID: f401f381-7377-40b3-948e-3c61241b1a42 Location: /Volumes/work/vm_guests/macOS High Sierra 10.13/ Snapshots/{f401f381-7377-40b3-948e-3c61241b1a42}.vdi ----------------------- HDD base: "simple_fixed_disk.vdi" UUID: ffba4d7e-1277-489d-8173-22ca7660773d Location: /Volumes/work/vm_guests/macOS High Sierra 10.13/simple_fixed_disk.vdi Diff 1: UUID: aecab681-0d2d-468b-8682-93f79dc97a48 Location: /Volumes/work/vm_guests/macOS High Sierra 10.13/ Snapshots/{aecab681-0d2d-468b-8682-93f79dc97a48}.vdi Diff 2: UUID: 70d6b34d-8422-47fa-8521-3b6929a1971c Location: /Volumes/work/vm_guests/macOS High Sierra 10.13/ Snapshots/{70d6b34d-8422-47fa-8521-3b6929a1971c}.vdi ------------------------------------------------------ VM Name: "debian" UUID: 5365ab5f-470d-44c0-9863-dad532ee5905 Location: /Volumes/work/vm_guests/debian/debian.vbox ----------------------- HDD base: "debian.vdi" UUID: 96d2e92e-0d4e-46ab-a0f1-008fdbf997e7 Location: /Volumes/work/vm_guests/debian/ol7.vdi Diff 1: UUID: f9cc866a-9166-42e9-a503-bbfe9b7312e8 Location: /Volumes/work/vm_guests/debian/Snapshots/ {f9cc866a-9166-42e9-a503-bbfe9b7312e8}.vdi
以下命令输出指定磁盘镜像的分区信息:
$ vboximg-mount --image=f9ea7173-6869-4aa9-b487-68023a655980 --list Virtual disk image: Path: /Volumes/work/vm_guests/macOS High Sierra 10.13/macOS High Sierra 10.13.vdi UUID: f9ea7173-6869-4aa9-b487-68023a655980 # Start Sectors Size Offset Type 1 40 409599 199.9M 20480 EFI System 2 409640 67453071 32.1G 209735680 Hierarchical File System Plus (HFS+) 3 67862712 1269535 107.8M 34745708544 Apple Boot (Recovery HD)
以下步骤展示了如何使用vboximg-mount命令在主机操作系统上挂载虚拟磁盘镜像的一个分区。
在主机操作系统上创建挂载点。例如:
$ mkdir macos_sysdisk
显示虚拟磁盘镜像的分区信息。
$ vboximg-mount --image=uuid
--list
其中uuid
是磁盘镜像的 UUID。
使用vboximg-mount对虚拟磁盘镜像上的分区执行 FUSE 挂载。例如:
$ vboximg-mount --image=uuid
-p 2 macos_sysdisk
其中uuid
是磁盘镜像的 UUID。
在此示例中,分区 2 挂载在macos_sysdisk
挂载点。该挂载包括磁盘镜像的所有快照。
使用主机操作系统挂载vhdd
设备节点。FUSE 挂载的设备节点代表虚拟磁盘镜像。
$ ls macos_sysdisk macOS High Sierra 10.13.vdi vhdd $ sudo mount macos_sysdisk/vhdd /mnt