可以从本地环境添加虚拟机 (VM) 映像。 可以创建映像作为虚拟硬盘 (VHD),并将映像上传到 Azure Stack Hub 实例中的存储帐户。 然后可以从 VHD 创建 VM。
专用磁盘映像是包含原始 VM 中的用户帐户、应用程序和其他状态数据的现有 VM 中虚拟硬盘 (VHD) 的副本。 将 VM 迁移到 Azure Stack Hub 时通常采用此格式。 需要将 VM 从本地迁移到 Azure Stack Hub 时,专用 VHD 非常适合此操作。
如何移动映像
在准备 VHD 时查找特定于你需求的部分。
- 按照准备好要上传到 Azure 的 Windows VHD 或 VHDX 中的步骤,正确准备 VHD。 必须对 Azure Stack Hub 使用 VHD。
注意 不要使用 Sysprep 通用化 VM。 
- 删除 VM 上安装的所有来宾虚拟化工具和代理(例如 VMware 工具)。
- 确保 VM 配置为从 DHCP 获取 IP 地址和 DNS 设置。 这可以确保服务器在启动时获得虚拟网络中的 IP 地址。
- 确保 RDP/SSH 已启用并且防火墙允许通信。
- 若要部署 VM 扩展,请确保 VM 代理 .msi可用。 有关指导,请参阅 Azure 虚拟机代理概述。 如果 VHD 中不存在 VM 代理,扩展部署将失败。 预配时无需设置 OS 配置文件或设置$vm.OSProfile.AllowExtensionOperations = $true。
验证 VHD
上传 VHD 之前,必须验证 VHD 是否满足要求。 不符合要求的 VHD 将无法在 Azure Stack Hub 中加载。
- 你将使用 Hyper-V 提供的 PowerShell 模块。 激活 Hyper-V 会安装支持 PowerShell 模块。 你可以通过使用提升的提示符打开 PowerShell 并运行以下 cmdlet 来检查是否具有该模块: - Get-Command -Module hyper-v- 如果你没有 Hyper-V 命令,请参阅使用 Hyper-V 和 Windows PowerShell。 
- 获取计算机上的 VHD 路径。 运行以下 cmdlet: - get-vhd <path-to-your-VHD>- 该 cmdlet 会返回 VHD 对象并显示属性,例如: - ComputerName : YOURMACHINENAME Path : <path-to-your-VHD> VhdFormat : VHD VhdType : Fixed FileSize : 68719477248 Size : 68719476736 MinimumSize : 32212254720 LogicalSectorSize : 512 PhysicalSectorSize : 512 BlockSize : 0 ParentPath : DiskIdentifier : 3C084D21-652A-4C0E-B2D1-63A8E8E64C0C FragmentationPercentage : 0 Alignment : 1 Attached : False DiskNumber : IsPMEMCompatible : False AddressAbstractionType : None Number :
- 对于 VHD 对象,检查是否满足 Azure Stack Hub 的要求。 - 此外,Azure Stack Hub 仅支持来自第一 (1) 代 VM 的映像。 
- 如果 VHD 与 Azure Stack Hub 不兼容,则需要返回到源映像和 Hyper-V,创建满足要求的 VHD 并上传。 若要在上传过程中最大程度减少可能发生的损坏,请使用 AzCopy。 
如何修复 VHD
若要使 VHD 与 Azure Stack Hub 兼容,必须满足以下要求。
VHD 属于固定类型
识别:使用 get-vhd cmdlet 获取 VHD 对象。
修复:可以将 VHDX 文件转换为 VHD,将动态扩展磁盘转换为固定大小的磁盘,但无法更改 VM 的代次。
使用 Hyper-V 管理器或 PowerShell 转换磁盘。
VHD 的最小虚拟大小至少为 20 MB
识别:使用 get-vhd cmdlet 获取 VHD 对象。
修复:使用 Hyper-V 管理器或 PowerShell 调整磁盘大小。
VHD 已调整
识别:使用 get-vhd cmdlet 获取 VHD 对象。
修复:虚拟大小必须是 1 MB 的倍数。
磁盘必须已将虚拟大小调整为 1 MiB。 如果 VHD 的大小不是 1 MiB 的整数倍,需要将磁盘大小调整为 1 MiB 的倍数。 基于上传的 VHD 创建映像时,不到 1 MiB 的磁盘将导致错误。 若要验证该大小,可以使用 PowerShell Get-VHD comdlet 来显示“大小”(在 Azure 中必须是 1 MiB 的倍数),以及“文件大小”(等于“大小”加上 VHD 页脚的 512 字节)。
使用 Hyper-V 管理器或 PowerShell 调整磁盘大小。
VHD blob 长度
识别:使用 get-vhd cmdlet 显示 Size
修复:VHD blob 长度 = 虚拟大小 + vhd 页脚长度 (512)。 在 Blob 末尾有一小段脚注,描述了 VHD 的属性。 Size 在 Azure 中必须是 1 MiB 的倍数,FileSize 等于 Size + VHD 页脚的 512 字节。
使用 Hyper-V 管理器或 PowerShell 调整磁盘大小。
第一代 VM
识别:若要确认虚拟机是否为第 1 代虚拟机,请使用 cmdlet Get-VM | Format-Table Name, Generation。
修复:需要在虚拟机监控程序 (Hyper-V) 中重新创建 VM。
上传到存储帐户
可以使用门户上传 VHD,或是对于在门户中创建的容器使用 AzCopy。
用于生成 SAS URL 并上传 VHD 的门户
- 登录到 Azure Stack Hub 用户门户。 
- 选择“存储帐户”,并选择现有存储帐户,或创建新存储帐户。 
- 在存储帐户的存储帐户边栏选项卡中选择“Blob”。 选择“容器”来新建容器。 
- 键入容器的名称,然后选择“Blob (仅匿名读取访问 blob)”。 
- 如果要使用 AzCopy 上传映像而不是门户,请创建 SAS 令牌。 在存储帐户中选择“共享访问签名”,然后选择“生成 SAS 和连接字符串” 。 复制并记下“Blob 服务 SAS URL”。 使用 AzCopy 上传 VHD 时,将使用此 URL。 
- 选择容器,然后选择“上传”。 上传 VHD。 
AzCopy VHD
使用 Azure 存储资源管理器或 AzCopy 可减少 VHD 在上传过程中损坏的可能性,并且上传速度会更快。 以下步骤在 Windows 10 计算机上使用 AzCopy。 AzCopy 是一个命令行实用工具,可用于向/从存储帐户复制 Blob 或文件。
- 如果尚未安装 AzCopy,请安装 AzCopy。 AzCopy 入门一文中提供了用于下载和开始使用 AzCopy 的说明。 记下二进制文件的存储位置。 可以将 AzCopy 添加到路径,以便从 PowerShell 命令行使用它。 
- 打开 PowerShell,以便从 shell 使用 AzCopy。 
- 使用 AzCopy 将 VHD 上传到存储帐户中的容器中。 - $env:AZCOPY_DEFAULT_SERVICE_API_VERSION = "2017-11-09" azcopy cp "/path/to/file.vhd" "https://[account].blob.core.chinacloudapi.cn/[container]/[path/to/blob]?[SAS] --blob-type=PageBlob
注意
使用类似于将单个文件上传到虚拟目录的语法上传 VHD。 添加 --blob-type=PageBlob 以确保 VHD 作为“页 Blob”上传,而不是默认情况下的“块” 。
有关使用 AzCopy 和其他存储工具的详细信息,请参阅在 Azure Stack Hub 存储中使用数据传输工具。
在 Azure Stack Hub 中创建磁盘
- 登录到 Azure Stack Hub 用户门户。 - 如果你是创建平台磁盘的云操作员,请按照添加平台映像中的说明操作,通过管理员门户或管理员终结点添加 VHD。 
- 在用户门户中,依次选择“所有服务”>“磁盘”>“添加”。 
- 在“创建托管磁盘”中: - 键入映像的“名称”。 
- 选择订阅。 
- 创建映像,或将映像添加到资源组。 
- 选择 ASDK 的“位置”(也称为区域)。 
- 选择“帐户类型”。 - 高级磁盘 (SSD) 基于固态硬盘,提供一致的低延迟性能。 高级磁盘可在价格与性能之间实现最佳平衡,非常适合用于 I/O 密集型应用程序和生产工作负荷。
- 标准磁盘 (HDD) 基于磁驱动器,适用于不经常访问数据的应用程序。 区域冗余磁盘由区域冗余存储 (ZRS) 提供支持,该存储跨多个区域复制数据,即使单个区域关闭也可用。
 
- 对“源类型”选择“存储 blob” 。 会通过存储帐户中的 blob 创建磁盘。 
- 对于 VHD 源,请选择: - 存储帐户所在的源订阅。
- 选择“浏览”,然后导航到存储帐户、容器和 VHD。 选择“选择” 。
- 选择与 VHD 匹配的“OS 类型”。
 
- 选择等于或大于 VHD 的磁盘“大小(GiB)”。 
- 选择“创建” 。 
 
- 创建磁盘后,便可以使用磁盘创建新 VM。