最新版本的VirtualBox支持几种格式的虚拟磁盘,但他们忘了提供它们之间的比较。
现在,我对考虑以下因素的建议或比较感兴趣。
虚拟盒有
来源。Oracle® VM VirtualBox® 用户手册 » 第5章.虚拟存储 » 5.2.磁盘镜像文件(VDI, VMDK, VHD, HDD)
-能够使用动态尺寸
VDI、VMDK和VHD都支持动态分配存储。 VMDK有一个额外的功能,即把存储文件分割成每个小于2GB的文件,如果你的文件系统有一个小文件大小的限制,这很有用。
如果在VirtualBox中创建,HDD、QCOW和QED必须是动态分配的。
-能够有快照
VirtualBox支持**所有六种格式的快照。
-能够以最小的代价将我的虚拟机移动到另一个操作系统,甚至另一个免费的虚拟化解决方案(可能在Ubuntu上运行良好的东西)。
VDI是VirtualBox的本地格式。 其他虚拟化软件一般不支持VDI,但从VDI转换为其他格式是很容易的,特别是用qemu-img convert
。
VMDK是由VMWare开发的,但VirtualBox和QEMU(另一个常见的虚拟化软件)也支持它。 *这种格式可能是你的最佳选择,因为你想与其他虚拟化软件广泛兼容。
VHD是微软虚拟PC的本地格式。 Windows Server 2012引入了VHDX作为VHD的继承者,但VirtualBox不支持VHDX。
HDD是Parallels的一种格式。 Parallels专门从事macOS的虚拟化。 *这可能不适合你,特别是考虑到VirtualBox只支持HDD格式的旧版本。
QCOW是旧的qcow格式的原始版本。 它已经被qcow2所取代,VirtualBox不支持。
QED是qcow2的一个被放弃的增强版本。 QEMU建议不要使用QED。
- 性能
由于块存储是如何被格式抽象出来的,每一种格式可能都有细微的性能特征,但我没有找到任何比较VirtualBox支持的格式的基准测试。
有更大的因素会影响性能,例如:。
Mpack,在这里解释了VHD和VDI之间的一个关键性能差异。
最近我研究了VHD格式, 我希望至少在VDI上会有一个小的区别, 当你比较同类产品的时候最明显, 即. 一个优化的VDI与优化的VHD。 原因是动态VHD格式有这些"位图" 扇区散布在整个磁盘上。 每当你修改一个块内的扇区时,这些位图块可能也需要被更新和写入,涉及到额外的查找、读取和写入。 当从驱动器映像中读取连续的簇时,这些位图扇区也必须跳过 - 更多的搜索。 VDI格式没有这些开销,特别是如果VDI已经被优化(虚拟磁盘上的块按LBA顺序排序)。
我所有的评论都适用于动态VHD格式与动态VDI。 在固定大小的虚拟磁盘上进行性能测试是没有意义的,因为这两种格式都是一样的(只是一个普通的磁盘映像),只是它们的磁头不同而已。
磁盘映像文件驻留在主机系统上,客体系统将其视为特定几何形状的硬盘。 当客体操作系统从硬盘读取或写入硬盘时,VirtualBox会将请求重定向到镜像文件。
与物理磁盘一样,虚拟磁盘也有一个大小(容量),必须在创建映像文件时指定。 然而,与物理磁盘不同,VirtualBox 允许您在创建后扩展映像文件,即使它已经有数据。 VirtualBox支持四种磁盘镜像文件的变体。
VDI。 通常情况下,VirtualBox会使用自己的客座硬盘容器格式--虚拟磁盘镜像(VDI)文件。 特别是当你用新磁盘创建一个新的虚拟机时,将使用这种格式。
VMDK:VirtualBox也完全支持流行的开放的VMDK容器格式,许多其他虚拟化产品,特别是VMware使用的容器格式[25]。
VHD:VirtualBox也完全支持微软使用的VHD格式。
也支持 Parallels 版本 2 (HDD 格式) 的映像文件。[26] 由于缺乏格式文档,不支持较新的格式 (3 和 4)。 但是,您可以使用 Parallels 提供的工具将这些镜像文件转换为版本 2 格式。
我不知道使用vmdk是否能使你在VMware中透明地运行VirtualBox中创建的虚拟机。 它可能会。 然而,一个更普遍的选择可能是使用VirtualBox文件/导出功能来创建一个"Open Virtualization Appliance".ova文件,然后可以导入到VMware。 通过这种方法,你可以移植到任何支持.ova的虚拟化系统,而不必关心你在VirtualBox中使用什么磁盘镜像格式。
如果你需要定期从同一个虚拟机中导出,例如每天,这可能是一个痛苦。 但是,如果你只是偶尔转移到不同的技术,应该是没有问题的。
如果你已经有一个.vdi文件,你可以测试这是否有效,而不必创建一个新的虚拟机。 把它导出为.ova,然后尝试用vmware导入。
这也取决于你打算如何使用虚拟磁盘。 并不是每个虚拟机都希望在一个磁盘上有一个单独的分区。
VDI似乎有更多的选择(与VirtualBox一起使用时),但只要你把VirtualBox排除在外,对VDI的支持就会变得有些不稳定(截至2014年底)。
比如我的方案需要最大限度的跨平台支持。 在linux或Windows 7上安装VDI(比如环回设备)比你想象的要难,而且bug也多。 几乎就像VDI有太多的功能,使得很难做出完全符合的实用程序,可以在上面操作。
当你想让它与任何工作站上的任何虚拟机一起工作时,当你想同时将它克隆3次到网络上的其他系统时,当你想在不启动虚拟机实例的情况下撬开它时,VMDK就是不那么痛苦的IMHO。
尽管我90%的时间都在使用VirtualBox,但在某些工作流程中,我的磁盘变得无法访问的那几次,让我偏爱可插拔/共享文件系统的VMDK。
看来使用VDI可以将磁盘文件修剪到实际大小。 https://superuser.com/questions/646559/virtualbox-and-ssds-trim-command-support
我刚刚迁移了一个原始的VMDK,它被映射到Transcend SSD370 128 GB的分区上,到三星Pro 850 512GB。
显然,VMDK比VDI快很多。 我不明白为什么,也许是我哪里出错了。
我通过虚拟媒体管理器把VMDK复制到850上。 一次作为VDI,一次作为VMDK。
然后我在镜像上运行hdparm -tT --direct /dev/sda
。
对于每一次的"运行"。
我切换替换了"机器->。
Settings ->
存储->。
控制器SATA ->
ImageFile.xxx"。
SSD370上的原始分区是由VMDK文件定义的,所以它不是真正的镜像。
这些是结果:{{{54820235}}。
################################################################################################
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。
很久以前,我做过一个测试,把动态VDI转换成动态VDD,只是为了测试速度和文件大小。
记得这是一个不可改变的Windows客人干净的操作系统安装与一些应用程序,记得我的测试,我转换一个格式到另一个,所以两个都应该有完全相同的图像,就像做一个克隆。
对于64GiB的磁盘大小,VDI的文件大小约为18GiB,而VHD的文件大小约为22GiB。
我记得我看到了这两件事。
VHD的大小比VDI大得多,大约4GiB的Gigabytes比18GiB的大,所以大了1.2倍。
那是很久以前的事了,测试是在HDD上完成的,但我确保两个文件都在磁盘的快速部分进行了碎片整理,并且彼此相邻。
希望有人能做真正的SSD测试,但我的感觉是VHD比VDI更快(而且更大)。
只是一个小建议。 VHD/VHDX可以通过DiskPart命令行工具在任何Windows 7及以上版本中直接压缩,而VDI则需要一个外部工具CloneVDI。
对不起,我没有测试VMDK,我不知道如何在不改变UUID(磁盘UUID)的情况下压缩它,请记住VBOX命令工具总是在每次克隆时改变它,无论你使用什么格式。