动态磁盘映像如何工作?

动态磁盘映像如何工作?

我对虚拟化计算的内部工作原理很好奇。

大多数虚拟机管理程序(包括 VirtualBox 和 Hyper-V,仅举几例)都有为磁盘驱动器创建动态映像的选项。这些映像从 0 字节大小开始逐渐增加大小以适应放入硬盘驱动器的数据,直到填满为止。

因此我可以预期新安装的 Windows XP 映像在我的主机磁盘上占用的空间不会超过 600MB。

我不知道如何以及在哪里搜索有关此功能的技术文档。

理论上,如果您(虚拟机管理程序系统)可以跟踪从(虚拟)磁盘写入和删除的文件,那么您可以在主机驱动器上物理分配仅存储数据所需的部分。

但在实践中:虚拟机管理程序必须与文件系统无关,提供低级 API(虚拟磁盘控制器)以允许虚拟化操作系统寻址physically驱动virtual器;现代文件系统仅通过从分区表中删除元数据来删除文件,而不是擦除其物理空间。

第二种情况很有趣,因为如果我要编写虚拟 ATA 控制器,我可以应用快速压缩算法,例如将大块零视为可用空间,并在虚拟化操作系统释放空间时从物理映像文件中释放它们。我没有编写这种低级代码的知识,但我参加了一些关于虚拟化的高级课程。

问题是

考虑到虚拟机管理程序的文件系统不可知性以及硬件磁盘访问是基于物理映射到虚拟扇区执行的事实,动态扩展磁盘如何工作?

具体来说,当虚拟化操作系统删除文件时,虚拟机管理程序如何表现?

答案1

文件系统是将文件映射到磁盘块上的 512 字节或 4k。对于动态磁盘,虚拟机管理程序会创建自己的“真实”磁盘块到磁盘数据的映射。对于动态磁盘,虚拟机数据到磁盘块的虚拟化映射看起来就像虚拟机上的 FS -> 虚拟机管理程序映射 -> 裸机上的文件 -> 物理磁盘上的块。

每次写入未映射的块时,虚拟机管理程序都会将该块附加到某个文件(动态磁盘),然后将该附加操作注释为将“真实”磁盘块映射到虚拟化磁盘块。

删除时,虚拟机会更新代表该文件的元数据,然后完成其任务。不会发生实际删除,动态磁盘的大小与删除操作之前的大小相同。

虚拟机如何释放数据:SSD 引入了 TRIM 支持的概念,这是一种通知磁盘驱动器哪些块已被删除且不再需要的方式。虚拟机管理程序可以提供虚拟化 TRIM 支持以释放块,就像 SSD 释放其虚拟化块到闪存的映射一样。当然,您的操作系统需要支持 TRIM,等等。而且...即使虚拟机管理程序支持这一点,从文件中删除一大块数据也不是一件容易的事。

哞!

相关内容