如何使用 power shell 捕获具有 "Specialized" VM 创建类型的 Azure VM 映像?或如何创建 RM VM 的专用映像?

How to capture Azure VM Image with "Specialized" VM creation type using power shell? or How to create a Specialized image of a RM VM?

我知道有两种类型的虚拟机镜像,Generalized 和 Specialized。

  1. 如果 OS 已被 通用化/取消配置,则必须关闭虚拟机才能将其捕获为 VM图片。一旦 VM 被捕获为 VM 映像,虚拟机将自动删除。

  2. 如果 OS 是 specialized,则可以在 运行 或关闭时捕获虚拟机。捕获的虚拟机保持不变。如果需要应用程序一致或跨磁盘捕获,我们建议在捕获 VM 映像之前关闭虚拟机。

这里我试图在不关闭 VM 的情况下捕获图像 (Specialised)。 我有以下代码使用 PowerShell 捕获图像。

Save-AzureRmVMImage -ResourceGroupName $rgame -VMName $vmname  -DestinationContainerName $container -VHDNamePrefix $vhdname

但是上面的代码抛出如下错误

Save-AzureRmVMImage : Capture operation cannot be completed because the VM is not generalized.
    ErrorCode: OperationNotAllowed
    ErrorMessage: Capture operation cannot be completed because the VM is not generalized.
    StatusCode: 409

我发现我可以使用 Set-AzureRmVM

将 VM 设置为 Generalized
Set-AzureRmVM -ResourceGroupName 'CaptureVmImageRG' -Name 'CaptureVmImage' -Generalized 

有没有这样我可以将 VM 设置为 Specialized 并捕获图像。有人可以提供一个有效的 Powershell 命令来创建 运行 VM 的专门捕获以用于备份 'point in time' 目的,或任何其他机制,例如资源浏览器。

提前致谢。

命令 Save-AzureRmVMimage 和 Set-AzureRmVM 用于捕获广义图像。在 运行 这两个 cmdlet 之前,您应该登录到 VM 并使用 Sysprep 准备硬盘。

在ARM模式下,对于Specialized image,我认为你不需要使用cmdlet来捕获图像。 您可以将您的 VHD 复制到另一个存储帐户。复制的 VHD 是专用映像。您可以使用 VHD 重新创建一个包含您的数据的新 VM。 据我所知,您最好在 VM 停止时复制 VHD。更多信息请参考article

我认为使用 Azure 恢复服务保管库是更好的解决方案。 Azure 支持自动备份您的 VM,无需停止您的 VM。您可以轻松恢复 VM。更多信息请参考article.

使用经典 Azure,您可以捕获专门的 VM,将生成的映像用作快速备份。对于 ARM azure,捕获命令期望 VM 为 sysprep'ed/generalized 并且实际上会使原始 VM 不再正常启动。在 ARM 中使用 'capture' 时,我们有过一些可怕的时刻,认为它就像经典。

通过恢复服务调用手动备份是一种选择,但时间太长了!你可能会说,一旦快照阶段完成,进程进入到 vault 阶段,你可以继续使用原来的 VM。但是,如果备份失败(这可能要到几个小时后才会发生),则没有快照或新备份可从中恢复。

复制 VM 的最快和最可靠的方法是关闭 VM,然后复制 vhds。