在第一个步骤时,虚拟机此时开机完毕后并没有特别显明的程序消耗内存。 依照该虚拟机设定的起始内存配置相对应大小的内存。此时在 Hyper-V 与 Linux 客户端操作系统内也可以看到相同数量的内存,但要注意 Linux 内已经预留 32MB 的内存大小给 BIOS 作为其他的用途使用。
在第二个步骤时,虚拟机内开始有显著的内存需求出现,这时 Hyper-V 会开始通过 Hot-add 技术将更多的内存配置给虚拟机,可以看到在 Assigned Memory 的字段显示的大小增加,而在 Linux 客户端操作系统中也会跟着提升(依然保留 32MB 给 BIOS 使用)。
在第三个步骤时,先前耗费内存的程序完成运算,对内存使用量下降,这时 Hyper-V 会通过 LIS 使用 Ballooning 技术开始回收这些内存,而在 Hyper-V 内的 Assigned memory 此时会开始下降。 但是在 Linux 客户端操作系统内查看内存状态时,并不会作任何改变,仍然保持刚刚在高内存使用量额外加上的内存大小。尽管 Linux 客户端操作系统可使用的内存看起来没有任何改变,但其实在亮绿色的区块中,是有 LIS 拿取并宣称是 LIS 使用的,借此让 Linux 客户端操作系统认为是拿去作为 Buffer 用途。 如果这些亮绿色的区块皆被 Linux 拿去使用且 Linux 客户端操作系统对内存需求量又开始增长,这时会回到步骤一的情况,使用 Hot-add 配置更多内存到该虚拟机中。
Linux 及时备份
接着,我们来谈谈另外一项功能,及时备份。 及时备份允许您在不停止或者关闭虚拟机的情况下,能够建立一个 Linux 虚拟机的完整备份,包括其中的虚拟磁盘驱动器。这个功能主要是确保您在生产阶段所使用的环境能够保持其最大的上线时间。
文件系统的备份必须要维持一致性,当一个备份动作被执行时,Linux 客户端操作系统上的文件系统将会把位于内存 Buffer 内的数据回写入虚拟磁盘中。 这个动作是为了确保操作系统有把所有的数据回写入磁盘,否则当您通过备份文件恢复虚拟机时可能会遇到数据不一致的问题。
让我们通过上图示例,看看及时备份是如何工作的吧!
◆通过微软或者第三方厂商所提供的备份软件,要求 Hyper-V 备份一个或多个虚拟机。
◆通过在 LIS 内的 VSS 驱动程序,Hyper-V 与 Linux 虚拟机沟通并开始备份程序。 而这个称作 VSS 的驱动程序其实是因为部分功能类似于 Windows 中 ”Volume Shadow Copy Service” 而命名。 但不尽相同,因此别把这两个名称视为同一种技术。
◆而 VSS 驱动程序与 Linux User space 内的 VSS 服务沟通,而 VSS 服务将会向 Linux 发出暂停文件系统与回写内存回虚拟磁盘请求。
◆Hyper-V 将会建立一个备份的检查点(Check point ),并告诉 LIS 可以将系统状态解除暂停。 而 Linux 文件系统仅会在第三与第四步骤时暂停操作,而这足够将内存内的数据回写并且建立虚拟机检查点,通常这个动作会小于 2 秒。
◆在 Hyper-V 内的 Windows VSS 将会对该虚拟磁盘建立一个快照磁盘卷(VHD/VHDX)。
◆而备份软件再将此 VHD/VHDX 复制到其他的储存空间上。
小结
动态内存配置以及及时备份是您在 Hyper-V 上运行 Linux 时相当重要的功能。这两项功能需要 Hyper-V 主机与客户端操作系统间密切的协同处理方能达成的功能。而现在微软已经将这两项功能带至 Hyper-V 与 Linux 之中。