在 Hyper-V 驱动中添加差异 vhdx 调整大小的支持

https://blueprints.launchpad.net/nova/+spec/add-differencing-vhdx-resize-support

与差异 VHD 镜像不同,差异 VHDX 镜像可以调整大小。即便如此,Nova Hyper-V 驱动当前不支持此功能。

此功能对于调整使用 CoW VHDX 镜像的现有实例的大小以及在启动新实例时调整根磁盘镜像的大小至关重要。

问题描述

当前,在使用 Hyper-V Nova 驱动和实例的差异 (CoW) VHDX 镜像时,差异镜像不会根据 flavor 大小进行调整。相反,VM 根镜像将始终保持与启动新实例时使用的基础镜像相同的大小。

此外,尝试调整此类实例的大小不仅不会调整磁盘镜像的大小,还会引发异常,因为当前获取 vhd/vhdx 内部最大大小的方法不支持差异镜像。

提议的变更

解决方案是在创建新的差异 vhdx 镜像时传递所需的大小。不传递它将导致新磁盘与基础镜像具有相同的大小。

此外,需要使获取 vhdx 内部最大大小的方法查找父磁盘并返回相应的大小,而不是引发异常。

备选方案

数据模型影响

REST API 影响

安全影响

通知影响

其他最终用户影响

性能影响

其他部署者影响

开发人员影响

实现

负责人

主要负责人

<lpetrut@cloudbasesolutions.com>

工作项

在 create_differencing_vhd 方法中添加一个“size”参数。

调整 vmops 模块,以便仅在启动使用 CoW vhdx 镜像的新实例时需要调整大小时才指定新的大小。

在获取 vhdx 的最大内部大小时,查找父镜像并获取相应的大小。

调整 vhdutils 中的相应方法,以保持相同的方法签名并保持一致性。

依赖项

测试

此功能的测试将由 Hyper-V CI 涵盖。

文档影响

参考资料

官方 VHDX 格式规范:http://www.microsoft.com/en-us/download/details.aspx?id=34750