将专用 VM 从本地移动到 Azure Stack Hub

可以从本地环境添加虚拟机 (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 中加载。

  1. 你将使用 Hyper-V 提供的 PowerShell 模块。 激活 Hyper-V 会安装支持 PowerShell 模块。 你可以通过使用提升的提示符打开 PowerShell 并运行以下 cmdlet 来检查是否具有该模块:

    Get-Command -Module hyper-v
    

    如果你没有 Hyper-V 命令,请参阅使用 Hyper-V 和 Windows PowerShell

  2. 获取计算机上的 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                  :
    
  3. 对于 VHD 对象,检查是否满足 Azure Stack Hub 的要求。

    此外,Azure Stack Hub 仅支持来自第一 (1) 代 VM 的映像。

  4. 如果 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 的门户

  1. 登录到 Azure Stack Hub 用户门户。

  2. 选择“存储帐户”,并选择现有存储帐户,或创建新存储帐户。

  3. 在存储帐户的存储帐户边栏选项卡中选择“Blob”。 选择“容器”来新建容器。

  4. 键入容器的名称,然后选择“Blob (仅匿名读取访问 blob)”。

  5. 如果要使用 AzCopy 上传映像而不是门户,请创建 SAS 令牌。 在存储帐户中选择“共享访问签名”,然后选择“生成 SAS 和连接字符串” 。 复制并记下“Blob 服务 SAS URL”。 使用 AzCopy 上传 VHD 时,将使用此 URL。

  6. 选择容器,然后选择“上传”。 上传 VHD。

AzCopy VHD

使用 Azure 存储资源管理器或 AzCopy 可减少 VHD 在上传过程中损坏的可能性,并且上传速度会更快。 以下步骤在 Windows 10 计算机上使用 AzCopy。 AzCopy 是一个命令行实用工具,可用于向/从存储帐户复制 Blob 或文件。

  1. 如果尚未安装 AzCopy,请安装 AzCopy。 AzCopy 入门一文中提供了用于下载和开始使用 AzCopy 的说明。 记下二进制文件的存储位置。 可以将 AzCopy 添加到路径,以便从 PowerShell 命令行使用它。

  2. 打开 PowerShell,以便从 shell 使用 AzCopy。

  3. 使用 AzCopy 将 VHD 上传到存储帐户中的容器中。

    set 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 中创建磁盘

  1. 登录到 Azure Stack Hub 用户门户。

    如果你是创建平台磁盘的云操作员,请按照添加平台映像中的说明操作,通过管理员门户或管理员终结点添加 VHD。

  2. 在用户门户中,依次选择“所有服务”>“磁盘”>“添加”。

  3. 在“创建托管磁盘”中:

    1. 键入映像的“名称”。

    2. 选择订阅

    3. 创建映像,或将映像添加到资源组。

    4. 选择 ASDK 的“位置”(也称为区域)。

    5. 选择“帐户类型”。

      • 高级磁盘 (SSD) 基于固态硬盘,提供一致的低延迟性能。 高级磁盘可在价格与性能之间实现最佳平衡,非常适合用于 I/O 密集型应用程序和生产工作负荷。
      • 标准磁盘 (HDD) 基于磁驱动器,适用于不经常访问数据的应用程序。 区域冗余磁盘由区域冗余存储 (ZRS) 提供支持,该存储跨多个区域复制数据,即使单个区域关闭也可用。
    6. 对“源类型”选择“存储 blob” 。 会通过存储帐户中的 blob 创建磁盘。

    7. 对于 VHD 源,请选择:

      1. 存储帐户所在的源订阅。
      2. 选择“浏览”,然后导航到存储帐户、容器和 VHD。 选择“选择” 。
      3. 选择与 VHD 匹配的“OS 类型”。
    8. 选择等于或大于 VHD 的磁盘“大小(GiB)”。

    9. 选择“创建” 。

  4. 创建磁盘后,便可以使用磁盘创建新 VM。

后续步骤

将 VM 移动到 Azure Stack Hub 概述