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


VDI
VMDK
VHD
HDD

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


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


评论

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

关于迁移到“另一个免费的虚拟化解决方案...,它将在Ubuntu上运行良好”,我确定VirtualBox可用于Linux。

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

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

#1 楼

VirtualBox具有


全面支持


VDI
VMDK
VHD


/>对HDD的部分支持


(仅限Parallels版本2) /> QCOW
QED



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




回答您的注意事项




/>可以使用动态大小调整




VDI,VMDK和VHD都支持动态分配的存储。 VMDK具有将存储文件拆分为每个小于2 GB的文件的附加功能,如果文件系统的文件大小限制较小,则此功能非常有用。

HDD,QCOW和QED必须动态如果在VirtualBox中创建,则分配。



具有快照



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



能够以最小的工作量(可能在Ubuntu上可以很好地运行)将我的虚拟机移动到另一个OS或另一个免费的虚拟化解决方案。 >


VDI是VirtualBox的本机格式。其他虚拟化软件通常不支持VDI,但是将VDI转换为另一种格式非常容易,尤其是使用qemu-img convert。软件)也支持它。此格式可能是您的最佳选择,因为您希望与其他虚拟化软件具有广泛的兼容性。

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

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

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

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



性能



由于以下原因,每种格式可能都有细微的性能差异如何通过格式提取块存储,但是我还没有找到任何基准来比较VirtualBox支持的格式。

还有更大的因素会影响性能,例如:


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


评论


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

–麦桑福德
13年8月14日在1:10

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

– EnzoR
16年3月3日在15:17

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

– Deltik
16年6月3日在15:59

可以在Windows磁盘管理中将VHD挂载为驱动器,对于VDI来说,它看起来并不简单:superuser.com/q/342334/13889

– Endolith
16 Sep 27 '16:57



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

– Ben Creasy
17年6月18日在18:46



#2 楼

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

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

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

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

#3 楼

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

最近研究了VHD格式,我希望VDI的偏好至少存在很小的差异,在进行比较时最明显例如,优化的VDI与优化的VHD。原因是动态VHD格式具有分散在整个磁盘中的这些“位图”扇区。每次您修改块内的扇区时,这些位图块也可能需要更新和写入,这涉及额外的查找,读取和写入。从驱动器映像读取连续的簇时,也必须跳过这些位图扇区-进行更多查找。 VDI格式没有这些开销,尤其是如果VDI已经过优化(虚拟磁盘上的块按LBA顺序分类)的话。在固定大小的虚拟磁盘上进行性能测试是没有意义的,因为这两种格式都是相同的(只是磁盘的普通映像),它们上只有不同的标头。
org / viewtopic.php?f = 1&t = 22688

#4 楼

我不知道使用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一起使用时,IMDK都会轻松得多。当您想同时将其克隆到网络上的其他系统3次,并且想要撬开它而不启动VM实例时。

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

#6 楼

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

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

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

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

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

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

评论


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

– JerryOL
18年4月3日在22:08

#7 楼

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

评论


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

–赛斯
16-11-21在11:02

@Seth一般概述是由以前的答案提供的,我没有足够的代表发表评论,但是提及这一事实仍然很重要

–OwnageIsMagic
16-11-21在13:32

就像建议一样,尽管添加它以提供更多上下文。例如。 “尽管此答案提供了很好的概述,但您还应该考虑...的优点”。因此,即使独自阅读,您的答案与更一般的答案也有关系。

–赛斯
16-11-22在7:06

@Seth在我的问题下为您提供了编辑按钮:D

–OwnageIsMagic
16年11月23日在1:16

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

–OwnageIsMagic
16年11月24日,0:04

#8 楼

我使用vmdk的一个很好的理由是,使用VDI格式的Virtualbox(至少到v4.1为止)会随着时间的推移趋向于填充完整分配的磁盘空间,即使内部虚拟磁盘的使用量仍然要少得多。对于使用vmdk磁盘的Virtualbox,这似乎不是一个问题。

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

评论


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

– EnzoR
16年3月3日在15:19

#9 楼

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

#10 楼

我只是将原始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。

#11 楼

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

请记住,这是一个不可变的Windows guest clean os操作系统,安装了一些应用程序,请记住我的测试将一种格式转换为另一种格式,因此都希望它们具有完全相同的映像,就像进行克隆一样。

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

我还记得我看到的两件事:


启动时间明显不同,如果我不记得不好的话,vhd快1.6倍比VDI
VHD的大小要大得多,比18GiB大4GiB千兆字节,因此是1.2倍。

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

希望有人可以进行真正的SSD测试,但我的感觉是VHD比VDI更快(并​​且更大)。 br />
提示:VHD / VHD可以使用DiskPart命令行工具在任何Windows 7和更高版本上直接压缩X,对于VDI,需要外部工具CloneVDI。

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