在创建映像之前,通过取消预配或通用化 VM 来删除计算机特定的信息

注意

本文引用了 CentOS,这是一个接近生命周期结束 (EOL) 状态的 Linux 发行版。 请相应地考虑你的使用和规划。 有关详细信息,请参阅 CentOS 生命周期结束指南

Azure Compute Gallery 中创建映像不需要通用化或取消预配 VM,除非你想要专门创建没有计算机特定信息的映像,例如用户帐户。 在库外创建托管映像时仍需进行通用化。

进行通用化可删除计算机特定的信息,以便可以使用该映像创建多个 VM。 VM 通用化或取消预配后,需要让平台知道这一点,以便能够正确设置启动顺序。

重要

在 Azure 中将 VM 标记为 generalized 后,无法重启 VM。

Linux

此处提供了为 Azure 准备 Linux 映像的发行版特定说明:

以下说明仅介绍如何将 VM 设置为通用化。 建议按照生产工作负载的发行版特定说明进行操作。

首先,使用 Azure VM 代理取消预配 VM 以删除计算机特定文件和数据。 在源 Linux VM 上,使用带 -deprovision+user 参数的 waagent 命令。 有关详细信息,请参阅 Azure Linux 代理用户指南。 此过程不可逆。

  1. 使用 SSH 客户端连接到 Linux VM。

  2. 在 SSH 窗口中,输入以下命令:

     sudo waagent -deprovision+user
    

    注意

    仅在将捕获为映像的 VM 上运行此命令。 此命令无法保证映像中的所有敏感信息均已清除,或该映像适合再分发。 +user 参数还会删除上次预配的用户帐户。 要保留 VM 中的用户帐户凭据,请仅使用 -deprovision

  3. y 继续。 添加 -force 参数即可免除此确认步骤。

  4. 该命令完成后,请输入“退出”以关闭 SSH 客户端。 VM 在此时仍会运行。

使用 az vm deallocate 来解除分配你已经预配的 VM,以使其通用化。

az vm deallocate \
   --resource-group myResourceGroup \
   --name myVM

然后,需要在平台上将 VM 标记为已通用化。

az vm generalize \
   --resource-group myResourceGroup \
   --name myVM

Windows

Sysprep 将删除所有个人帐户和安全信息,并准备好要用作映像的计算机。 有关 Sysprep 的信息,请参阅 Sysprep 概述

确保 Sysprep 支持计算机上运行的服务器角色。 有关详细信息,请参阅 Sysprep 对服务器角色的支持不支持的方案

重要

在 VM 上运行 Sysprep 后,该 VM 将被视为已通用化而无法重启。 通用化 VM 的过程是不可逆的。 如果需要保持原始虚拟机正常运行,应创建操作系统磁盘的快照,从快照创建虚拟机,然后通用化该虚拟机的副本。

Sysprep 要求对驱动器进行完全解密。 如果在 VM 上启用了加密,请在运行 Sysprep 之前将其禁用。

如果计划在首次将虚拟硬盘 (VHD) 上传到 Azure 之前运行 Sysprep,请确保先准备好 VM

我们不支持 sysprep 步骤中的自定义应答文件,因此你不应将 “/unattend:answerfile”开关与 sysprep 命令一起使用。

使用通用化映像创建 Windows VM 时,Azure 平台会将 ISO 文件装载到 DVD-ROM。 出于这个原因,必须在通用化映像的 OS 中启用 DVD-ROM。 如果禁用了它,Windows VM 会停滞在“全新安装体验”(OOBE)。

若要将 Windows VM 通用化,请执行以下步骤:

  1. 登录到 Windows VM。

  2. 以管理员身份打开“命令提示符”窗口。

  3. 删除 panther 目录 (C:\Windows\Panther)。

  4. 验证是否启用了 CD/DVD-ROM。如果禁用了它,Windows VM 会停滞在“全新安装体验”(OOBE)。

   Registry key Computer\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\cdrom\start (Value 4 = disabled, expected value 1 = automatic) Make sure it is set to 1.

注意

验证是否应用了任何策略来限制可移动存储访问(示例:计算机配置\管理模板\系统\可移动存储访问\所有可移动存储类:拒绝所有访问)

  1. 然后将目录切换到 %windir%\system32\sysprep,然后运行:
    sysprep.exe /generalize /shutdown
    
  2. Sysprep 完成通用化 VM 后,VM 将关闭。 不要重新启动 VM。

Sysprep 完成运行后,将虚拟机的状态设置为“通用化”。

Set-AzVm -ResourceGroupName $rgName -Name $vmName -Generalized

后续步骤