我应该对VirtualBox,VDI,VMDK,VHD或HDD使用哪个磁盘映像?


296

最新版本的VirtualBox支持多种虚拟磁盘格式,但是它们忘记提供它们之间的比较。

  • VDI
  • 虚拟机
  • 超高清
  • 硬碟

现在,我对考虑以下内容的建议或比较感兴趣:

  • 能够使用动态尺寸
  • 能够有快照
  • 能够将我的虚拟机转移到另一个OS甚至另一个免费的虚拟化解决方案,而只需花费很少的精力(可能在Ubuntu上可以很好地运行)。
  • 性能

11
运行虚拟框,然后单击帮助图标>目录,在“虚拟存储”下有一个合理的解释
Moab

1
关于向“另一种免费的虚拟化解决方案……可以在Ubuntu上很好地运行”的迁移,我很确定VirtualBox可用于Linux。
Iszi 2011年

在性能方面,我认为最好是在有空间的情况下创建固定磁盘。否则,在使用虚拟机时(而不是在创建时一次),这会给OS带来很大压力。
亚历克西斯·威尔克2014年

3
要考虑的另一件事是,当您可能需要调整图像大小时-VBoxManage无法调整VMDK的大小,因此您必须先克隆到VDI,然后再调整大小,然后再回到VMDK +弄乱UUID。仅出于这个原因,VDI对我来说似乎是更好的选择。
Mike Demenok,2015年

Answers:


214

VirtualBox有

  • 全面支持
    • VDI
    • 虚拟机
    • 超高清
  • 部分支持
    • 硬盘(仅限Parallels 2版)
  • 无证支持
    • QCOW
    • 优质教育

来源:《Oracle®VMVirtualBox®用户手册》 » 第5章。虚拟存储 » 5.2。磁盘映像文件(VDI,VMDK,VHD,HDD)

创建虚拟硬盘的屏幕截图


回答您的考虑

  • 能够使用动态尺寸

VDIVMDKVHD均支持动态分配的存储。VMDK具有将存储文件拆分为每个文件小于2 GB的附加功能,如果您的文件系统文件大小限制较小,则该功能很有用。

如果在VirtualBox中创建HDDQCOWQED,则必须动态分配它们。

  • 能够有快照

VirtualBox支持所有六种格式的快照。

  • 能够将我的虚拟机转移到另一个OS甚至另一个免费的虚拟化解决方案,而只需花费很少的精力(可能在Ubuntu上可以很好地运行)。

VDI是VirtualBox的本机格式。其他虚拟化软件通常不支持VDI,但是将VDI转换为另一种格式非常容易,尤其是使用qemu-img convert

VMDK由VMWare开发并为VMWare开发,但VirtualBox和QEMU(另一种常见的虚拟化软件)也支持它。 该格式可能是您的最佳选择,因为您希望与其他虚拟化软件具有广泛的兼容性。

VHD是Microsoft Virtual PC的本机格式。Windows Server 2012引入了VHDX作为VHD的后继产品,但VirtualBox不支持VHDX。

HDDParallels的一种格式。Parallels专门针对macOS进行虚拟化。 这可能不适合您,特别是考虑到VirtualBox仅支持旧版本的HDD格式。

QCOW是qcow格式的旧原始版本。它已被VirtualBox不支持的qcow2取代。

QED是qcow2的放弃增强。 QEMU建议不要使用QED。

  • 性能

每种格式由于块存储如何通过格式抽象而可能具有细微的性能特征,但是我还没有找到任何基准来比较VirtualBox支持的格式。

有一些较大的因素会影响性能,例如:

  • 您的物理设备限制(在硬盘驱动器上比固态驱动器更引人注目…… 为什么?
  • 扩展动态分配的虚拟磁盘驱动器(随着虚拟磁盘扩展,写入操作会变慢,但是一旦其足够大,扩展发生的次数就会减少)
  • 虚拟化技术(硬件与软件;硬件虚拟化可帮助VirtualBox并提高虚拟操作系统的速度)
  • 您正在运行虚拟操作系统的事实。由于存在虚拟化开销,因此性能总是比在主机上运行操作系统要慢。

18
+1我要补充一点,VMDK似乎提供了我一直在寻找的关于增量备份的灵丹妙药:我不再需要为来宾的一点点更改而备份巨大的Monolithinc VDI。
msanford

我认为原始主机硬盘缺少一些考虑因素,即从主机上看到的虚拟客户机使用“物理”硬盘(或RAID设备)。与在文件系统上使用模拟驱动器相比,这将提供更好的性能。
EnzoR

1
@Enzo:我现在在原始块设备上使用VMDK。最大的收获是VirtualBox需要以root身份运行。另外,原始磁盘上不支持快照,但是我有一个第三方快照系统(ZFS)。原始磁盘上的VMDK的可移植性也大大降低。至于性能,我没有任何可靠的基准,但是我也没有任何抱怨。
Deltik

6
VHD可以作为驱动器安装在Windows磁盘管理中,这对于VDI来说似乎并不那么简单:superuser.com/q/342334/13889
endolith

5
@msanford您能否详细说明VMDK如何避免备份巨大的文件-rsync是否能够更好地找出差异?VMDK文件似乎在每次调整后都会发生变化。
Ben Creasy

39

我一直使用VDI,因为它是VirtualBox的本机格式。但是,使用VMDK(VMWare格式)将增加与其他虚拟机软件的兼容性。

VirtualBox可以在Ubuntu上正常运行,因此,如果目标是Windows / Ubuntu互操作性,那么VDI将是一个完美的选择。

两种格式都可以满足您的要求。

至于其他两个,VHD是Microsoft开发的格式,而HDD是Apple开发的格式。这些都经过专有许可,因此限制了跨平台支持;我不推荐他们。


18

Mpack在这里解释了VHD和VDI之间的关键性能差异:

最近研究了VHD格式后,我希望VDI的偏好至少存在一个小差异,当您进行类似比较时,这是最明显的,即优化的VDI与优化的VHD。原因是动态VHD格式具有分散在整个磁盘中的这些“位图”扇区。每次修改块内的扇区时,这些位图块也可能需要更新和写入,这涉及额外的查找,读取和写入。从驱动器映像读取连续的簇时,也必须跳过这些位图扇区-进行更多查找。VDI格式没有这些开销,尤其是如果VDI已经过优化(虚拟磁盘上的块按LBA顺序排序)时,尤其如此。

我所有的评论都适用于动态VHD格式与动态VDI。在固定大小的虚拟磁盘上进行性能测试是没有意义的,因为这两种格式都是相同的(只是磁盘的普通映像),只是它们的头不同。

https://forums.virtualbox.org/viewtopic.php?f=1&t=22688


5

我不知道使用vmdk是否可以使您透明地运行在VMware的VirtualBox中创建的虚拟机。它可能。但是,更通用的选择是使用VirtualBox File / Export函数创建“ Open Virtualization Appliance” .ova文件,然后将其导入VMware。使用这种方法,您可以移植到任何支持.ova的虚拟化系统,而无需关心在VirtualBox中使用哪种磁盘映像格式。

如果您需要定期(例如每天)从同一VM导出,可能会很麻烦。但是,如果您偶尔仅使用另一种技术,那应该没问题。

如果您已经有一个.vdi文件,则可以测试此文件是否有效,而无需创建新的虚拟机。将其导出到.ova,然后尝试使用vmware导入。


5

这也取决于您计划如何使用虚拟磁盘。并非每个VM都希望在单个磁盘上有一个分区。

VDI似乎有更多选择(当与VirtualBox一起使用时),但是一旦您将VirtualBox淘汰了,对VDI的支持就会有些不稳定(截至2014年底)。

例如,我的解决方案需要最大程度的跨平台支持。在Linux或Windows 7上安装VDI(例如回送设备)比您预期的要困难和麻烦。几乎像VDI一样,它具有太多的功能,因此很难制作可以在其上运行的完全一致的实用程序。

当您希望将VMDK与任何工作站上的任何VM一起使用,将其同时克隆3次到网络上的其他系统以及想要将其撬开而不启动VM时,VMDK都变得轻松自如实例。

即使我90%的时间都使用VirtualBox,但是在某些工作流程中磁盘无法访问的那几次,使我偏向于将VMDK用于可插拔/共享文件系统。


5

磁盘映像文件驻留在主机系统上,并被来宾系统视为具有特定几何形状的硬盘。当来宾操作系统从硬盘读取或写入硬盘时,VirtualBox会将请求重定向到映像文件。

与物理磁盘一样,虚拟磁盘具有大小(容量),在创建映像文件时必须指定该大小。与物理磁盘相反,VirtualBox允许您在创建后扩展映像文件,即使该文件已经有数据也是如此。VirtualBox支持磁盘映像文件的四个变体:

VDI:通常,VirtualBox对来宾硬盘使用其自己的容器格式-虚拟磁盘映像(VDI)文件。特别是,当您使用新磁盘创建新的虚拟机时,将使用此格式。

VMDK:VirtualBox还完全支持许多其他虚拟化产品,尤其是VMware使用的流行且开放的VMDK容器格式。[25]

VHD:VirtualBox还完全支持Microsoft使用的VHD格式。

还支持Parallels版本2(HDD格式)的图像文件。[26] 由于缺少格式文件,因此不支持较新的格式(3和4)。但是,您可以使用Parallels提供的工具将此类图像文件转换为版本2格式。


3
答案来自VirtualBox手册的第5章。链接
JerryOL

4

对于我来说,使用vmdk的一个很好的理由是,尽管内部虚拟磁盘的使用量仍然要少得多,但使用VDI格式的Virtualbox(至少在v4.1之前)会随着时间的流逝而充满完整分配的磁盘空间。对于使用vmdk磁盘的Virtualbox,这似乎不是一个问题。

但是我说的是正常运行时间。这可能不是很多人遇到的问题。


3
它与来宾文件系统的碎片关系更大,而不是与格式本身有关。
EnzoR

2

看起来使用VDI可以将磁盘文件修整为实际大小 VirtualBox和SSD的TRIM命令支持


尽管准确无误,但对于这些格式之间的一般差异却有些疑问,您不觉得吗?
赛斯

3
@Seth一般概述由以前的答案提供,我没有足够的代表表示意见,但提及这一事实仍然很重要
OwnageIsMagic

1
就像建议一样,添加它可以提供更多背景信息。例如:“虽然答案提供了很好的概述,但您还应该考虑...的优点”。因此,即使独自阅读,您的答案与更一般的答案也有关系。
赛斯

@塞思(Seth)edit在我的问题下有一个按钮供您参考:D
OwnageIsMagic '16

1
我可以保证,我会审查您的编辑,因此您的工作不会浪费。同样,您会被提及为问题的编辑,因此您将获得适当的署名。有什么问题?
OwnageIsMagic

2

如果VM太大,则VDI易于压缩。


1

很久以前,我做了一个测试,将动态vdi转换为动态vhd只是为了测试速度和文件大小。

请记住,这是一个安装有某些应用程序的不变的Windows guest虚拟机操作系统,请记住,在我的测试中,我将一种格式转换为另一种格式,因此两种格式都必须具有完全相同的映像,例如进行克隆。

对于64GiB的磁盘,VDI文件大小为18GiB,而VHD的文件大小为22GiB。

我记得我曾经看过泰斯两件事:

  1. 引导时间明显不同,如果我不记得不好的话,vhd比VDI快1.6倍
  2. VHD的大小比VDI大得多,大约比18GiB大4GiB千兆字节,因此大1.2倍。

那是很久以前的事,并且测试是在HDD上完成的,但是我确保两个文件都进行了碎片整理,并且在磁盘的快速部分上彼此相邻。

希望有人可以进行真正的SSD测试,但我的感觉是VHD比VDI更快(更大)。

提示:使用DiskPart命令行工具可以在任何Windows 7和更高版本上直接压缩VHD / VHDX,对于VDI,需要外部工具CloneVDI。

抱歉,我没有测试VMDK,我不知道如何在不更改其UUID(磁盘UUID)的情况下对其进行压缩,请记住,无论您使用哪种格式,VBOX命令工具都会在每个克隆上对其进行更改。


1

我刚刚迁移了原始VMDK,该VMDK已映射到Transcend SSD370 128 GB的分区到Samsung Pro 850 512GB。

显然,VMDK比VDI快得多。我不明白为什么,也许我在某个地方犯了一个错误。

我通过虚拟媒体管理器将VMDK复制到850。一次作为VDI,一次作为VMDK。

然后我hdparm -tT --direct /dev/sda在图像上跑了。对于每个“运行”,我都切换了“机器->设置->存储->控制器SATA-> ImageFile.xxx”。SSD370上的原始分区是由VMDK文件定义的,因此它实际上不是映像。

结果如下:

################################################################################################

Welcome to Ubuntu 16.04.3 LTS (GNU/Linux 4.4.0-96-generic x86_64)

  System information as of Thu Sep 21 17:02:51 CEST 2017

  System load:  1.96               Processes:              201
  Usage of /:   83.2% of 43.88GB   Users logged in:        0
  Memory usage: 4%                 IP address for eth0:    
  Swap usage:   0%                 IP address for docker0: 172.17.0.1

################################################################################################

======================================================================================
      V M D K --- R A W !!! --- on Transcend SSD370 128 GB
======================================================================================

 Timing O_DIRECT cached reads:   1024 MB in  2.00 seconds = 511.61 MB/sec <---
 Timing O_DIRECT disk reads: 1134 MB in  3.00 seconds = 377.88 MB/sec <---

 Timing O_DIRECT cached reads:   1042 MB in  2.00 seconds = 520.82 MB/sec <---
 Timing O_DIRECT disk reads: 1162 MB in  3.00 seconds = 387.27 MB/sec <---

---

 Timing O_DIRECT cached reads:   816 MB in  2.00 seconds = 407.55 MB/sec
 Timing O_DIRECT disk reads: 1020 MB in  3.01 seconds = 339.43 MB/sec <---

======================================================================================
      V M D K --- on Samsung Pro 850 515GB
======================================================================================

 Timing O_DIRECT cached reads:   836 MB in  2.00 seconds = 417.21 MB/sec <---
 Timing O_DIRECT disk reads: 782 MB in  3.01 seconds = 260.21 MB/sec

 Timing O_DIRECT cached reads:   834 MB in  2.00 seconds = 416.08 MB/sec
 Timing O_DIRECT disk reads: 786 MB in  3.00 seconds = 261.71 MB/sec

---

 Timing O_DIRECT cached reads:   826 MB in  2.00 seconds = 412.75 MB/sec <---
 Timing O_DIRECT disk reads: 774 MB in  3.00 seconds = 257.79 MB/sec

 Timing O_DIRECT cached reads:   828 MB in  2.00 seconds = 413.88 MB/sec <---
 Timing O_DIRECT disk reads: 774 MB in  3.00 seconds = 257.83 MB/sec

---

 Timing O_DIRECT cached reads:   842 MB in  2.00 seconds = 420.76 MB/sec <---
 Timing O_DIRECT disk reads: 770 MB in  3.00 seconds = 256.56 MB/sec

======================================================================================
      V D I --- on Samsung Pro 850 515GB
======================================================================================

 Timing O_DIRECT cached reads:   470 MB in  2.01 seconds = 234.21 MB/sec <---
 Timing O_DIRECT disk reads: 766 MB in  3.00 seconds = 254.94 MB/sec

 Timing O_DIRECT cached reads:   494 MB in  2.00 seconds = 246.45 MB/sec <---
 Timing O_DIRECT disk reads: 754 MB in  3.00 seconds = 250.92 MB/sec

 Timing O_DIRECT cached reads:   490 MB in  2.00 seconds = 244.46 MB/sec <---
 Timing O_DIRECT disk reads: 764 MB in  3.01 seconds = 254.03 MB/sec

################################################################################################
# Data above comes from here
################################################################################################

======================================================================================
      V M D K --- on Samsung Pro 850 515GB
======================================================================================

  System information as of Thu Sep 21 17:02:51 CEST 2017

user@xeon:~$ sudo hdparm -tT --direct /dev/sda
/dev/sda:
 Timing O_DIRECT cached reads:   836 MB in  2.00 seconds = 417.21 MB/sec <======
 Timing O_DIRECT disk reads: 782 MB in  3.01 seconds = 260.21 MB/sec <======

user@xeon:~$ sudo hdparm -tT /dev/sda
/dev/sda:
 Timing cached reads:   21080 MB in  2.00 seconds = 10554.40 MB/sec
 Timing buffered disk reads: 784 MB in  3.00 seconds = 260.92 MB/sec

user@xeon:~$ sudo hdparm -tT --direct /dev/sda
/dev/sda:
 Timing O_DIRECT cached reads:   834 MB in  2.00 seconds = 416.08 MB/sec <======
 Timing O_DIRECT disk reads: 786 MB in  3.00 seconds = 261.71 MB/sec <======

======================================================================================
      V M D K --- R A W !!! --- on Transcend SSD370 128 GB
======================================================================================

  System information as of Thu Sep 21 17:00:47 CEST 2017

user@xeon:~$ sudo hdparm -tT --direct /dev/sda
/dev/sda:
 Timing O_DIRECT cached reads:   1024 MB in  2.00 seconds = 511.61 MB/sec <======
 Timing O_DIRECT disk reads: 1134 MB in  3.00 seconds = 377.88 MB/sec <======

user@xeon:~$ sudo hdparm -tT /dev/sda
/dev/sda:
 Timing cached reads:   21182 MB in  2.00 seconds = 10603.52 MB/sec
 Timing buffered disk reads: 1060 MB in  3.00 seconds = 352.91 MB/sec

user@xeon:~$ sudo hdparm -tT --direct /dev/sda
/dev/sda:
 Timing O_DIRECT cached reads:   1042 MB in  2.00 seconds = 520.82 MB/sec <======
 Timing O_DIRECT disk reads: 1162 MB in  3.00 seconds = 387.27 MB/sec <======

======================================================================================
      V M D K --- on Samsung Pro 850 515GB
======================================================================================

  System information as of Thu Sep 21 16:58:12 CEST 2017

user@xeon:~$ sudo hdparm -tT --direct /dev/sda
/dev/sda:
 Timing O_DIRECT cached reads:   826 MB in  2.00 seconds = 412.75 MB/sec <======
 Timing O_DIRECT disk reads: 774 MB in  3.00 seconds = 257.79 MB/sec <======

user@xeon:~$ sudo hdparm -tT /dev/sda
/dev/sda:
 Timing cached reads:   22082 MB in  2.00 seconds = 11055.78 MB/sec
 Timing buffered disk reads: 788 MB in  3.01 seconds = 262.11 MB/sec

user@xeon:~$ sudo hdparm -tT --direct /dev/sda
/dev/sda:
 Timing O_DIRECT cached reads:   828 MB in  2.00 seconds = 413.88 MB/sec <======
 Timing O_DIRECT disk reads: 774 MB in  3.00 seconds = 257.83 MB/sec <======

======================================================================================
      V D I --- on Samsung Pro 850 515GB
======================================================================================

  System information as of Thu Sep 21 16:55:24 CEST 2017

user@xeon:~$ sudo hdparm -tT /dev/sda
/dev/sda:
 Timing cached reads:   21468 MB in  2.00 seconds = 10747.37 MB/sec
 Timing buffered disk reads: 662 MB in  3.01 seconds = 220.12 MB/sec

user@xeon:~$ sudo hdparm -tT --direct /dev/sda
/dev/sda:
 Timing O_DIRECT cached reads:   470 MB in  2.01 seconds = 234.21 MB/sec <======
 Timing O_DIRECT disk reads: 766 MB in  3.00 seconds = 254.94 MB/sec <======

user@xeon:~$ sudo hdparm -tT --direct /dev/sda
/dev/sda:
 Timing O_DIRECT cached reads:   494 MB in  2.00 seconds = 246.45 MB/sec <======
 Timing O_DIRECT disk reads: 754 MB in  3.00 seconds = 250.92 MB/sec <======

user@xeon:~$ sudo hdparm -tT /dev/sda
/dev/sda:
 Timing cached reads:   20872 MB in  2.00 seconds = 10448.98 MB/sec
 Timing buffered disk reads: 694 MB in  3.01 seconds = 230.78 MB/sec

user@xeon:~$ sudo hdparm -tT --direct /dev/sda
/dev/sda:
 Timing O_DIRECT cached reads:   490 MB in  2.00 seconds = 244.46 MB/sec <======
 Timing O_DIRECT disk reads: 764 MB in  3.01 seconds = 254.03 MB/sec <======

======================================================================================
      V M D K --- on Samsung Pro 850 515GB
======================================================================================

  System information as of Thu Sep 21 16:52:32 CEST 2017

user@xeon:~$ sudo hdparm -tT /dev/sda
/dev/sda:
 Timing cached reads:   20872 MB in  2.00 seconds = 10448.90 MB/sec
 Timing buffered disk reads: 764 MB in  3.01 seconds = 254.11 MB/sec

user@xeon:~$ sudo hdparm -tT --direct /dev/sda
/dev/sda:
 Timing O_DIRECT cached reads:   842 MB in  2.00 seconds = 420.76 MB/sec <======
 Timing O_DIRECT disk reads: 770 MB in  3.00 seconds = 256.56 MB/sec <======

======================================================================================
      V M D K --- R A W !!! --- on Transcend SSD370 128 GB
======================================================================================

  System information as of Thu Sep 21 16:29:55 CEST 2017

user@xeon:~$ sudo hdparm -tT /dev/sda
/dev/sda:
 Timing cached reads:   22034 MB in  2.00 seconds = 11029.82 MB/sec
 Timing buffered disk reads: 990 MB in  3.00 seconds = 329.68 MB/sec

user@xeon:~$ sudo hdparm -tT --direct /dev/sda
/dev/sda:
 Timing O_DIRECT cached reads:   816 MB in  2.00 seconds = 407.55 MB/sec <======
 Timing O_DIRECT disk reads: 1020 MB in  3.01 seconds = 339.43 MB/sec <======

我真的不知道该怎么解释,也许有人想对此发表评论。我选择了VMDK。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.