Azure 中运行 Windows Server 的 VM 的就地升级

借助就地升级,可从较低版本的操作系统升级到较高版本的操作系统,同时使设置、服务器角色和数据保持不变。 本文介绍如何使用就地升级将 Azure VM 迁移到更高版本的 Windows Server。 目前,支持升级到 Windows Server 2012、Windows Server 2016、Windows Server 2019 和 Windows Server 2022。

开始就地升级前的准备工作:

  • 查看目标操作系统的升级要求:

    • 从 Windows Server 2008(64 位)或 Windows Server 2008 R2 升级到 Windows Server 2012 的选项

    • 从 Windows Server 2012 或 Windows Server 2012 R2 升级到 Windows Server 2016 的选项

    • 从 Windows Server 2012 R2 或 Windows Server 2016 升级到 Windows Server 2019 的升级选项

    • 从 Windows Server 2016 或 Windows Server 2019 升级到 Windows Server 2022 的升级选项

  • 验证操作系统磁盘是否有足够的执行就地升级的可用空间。 如果需要更多空间,请执行这些步骤来扩展附加到 VM 的操作系统磁盘。

  • 禁用防病毒和反间谍软件以及防火墙。 这些类型的软件可能会与升级过程发生冲突。 升级完成后,重新启用防病毒和反间谍软件以及防火墙。

注意

在 Azure Windows VM 上执行就地升级时,Azure 门户中的 VM 属性不会更新;更改仅反映在 OS 中。 这意味着 VM 属性中的源映像信息(包括发布者、套餐和计划)保持不变。 用于部署 VM 的映像保持不变,并且仅会升级 OS。

将 VM 升级为批量许可证(KMS 服务器激活)

Azure 提供的升级介质要求将 VM 配置为 Windows Server 批量许可。 对于任何从 Azure 中的通用化映像安装的 Windows Server VM,这是默认行为。 如果已将 VM 导入到 Azure,则可能需要将其转换为批量许可才能使用 Azure 提供的升级介质。 若要确认 VM 是否已配置为批量许可证激活,请按照以下步骤配置相应的 KMS 客户端设置密钥。 如果激活配置已更改,请按照以下步骤验证与 Azure KMS 服务的连接

升级到托管磁盘

就地升级过程要求在要升级的 VM 上使用托管磁盘。 Azure 中的大多数 VM 都在使用托管磁盘,2022 年 11 月宣布停止对非托管磁盘的支持。 如果 VM 当前在使用非托管磁盘,请按照以下步骤迁移到托管磁盘

创建操作系统磁盘的快照

建议在开始就地升级过程之前创建操作系统磁盘和所有数据磁盘的快照。 借助它,如果就地升级过程中出现任何故障,可以还原到 VM 的先前状态。 若要对每个磁盘创建一个快照,请按照以下步骤创建磁盘快照

创建升级介质磁盘

若要启动就地升级,必须将升级介质作为托管磁盘附加到 VM。 若要创建升级介质,请在 Windows Server 2022 的以下 PowerShell 脚本中修改变量。 升级介质磁盘可用于升级多个 VM,但一次只能用于升级一个 VM。 若要同时升级多个 VM,则对于同时进行的每次升级,必须创建多个升级磁盘。

参数 定义
resourceGroup 要在其中创建升级介质托管磁盘的资源组的名称。 如果没有已命名的资源组,会创建一个。
location 在其中创建升级介质托管磁盘的 Azure 区域。 这必须与要升级的 VM 在同一区域。
区域 将在其中创建升级介质托管磁盘的所选地区中的 Azure 区域。 这必须与要升级的 VM 在同一地区。 对于区域 VM(非地区性),地区参数应为 ""。
diskName 将包含升级介质的托管磁盘的名称
sku Windows Server 升级介质版本。 它必须为以下之一:server2016Upgradeserver2019Upgradeserver2022Upgradeserver2012Upgrade

如果有多个订阅,则应运行 Set-AzContext -Subscription '<subscription name or id> 来指定要使用的订阅。

PowerShell 脚本

#
# Customer specific parameters


# Resource group of the source VM
$resourceGroup = "WindowsServerUpgrades"

# Location of the source VM
$location = "ChinaNorth2"

# Zone of the source VM, if any
$zone = "" 

# Disk name for the that will be created
$diskName = "WindowsServer2022UpgradeDisk"

# Target version for the upgrade - must be either server2022Upgrade, server2019Upgrade, server2016Upgrade or server2012Upgrade
$sku = "server2022Upgrade"


# Common parameters

$publisher = "MicrosoftWindowsServer"
$offer = "WindowsServerUpgrade"
$managedDiskSKU = "Standard_LRS"

#
# Get the latest version of the special (hidden) VM Image from the Azure Marketplace

$versions = Get-AzVMImage -PublisherName $publisher -Location $location -Offer $offer -Skus $sku | sort-object -Descending {[version] $_.Version	}
$latestString = $versions[0].Version


# Get the special (hidden) VM Image from the Azure Marketplace by version - the image is used to create a disk to upgrade to the new version


$image = Get-AzVMImage -Location $location `
                       -PublisherName $publisher `
                       -Offer $offer `
                       -Skus $sku `
                       -Version $latestString

#
# Create Resource Group if it doesn't exist
#

if (-not (Get-AzResourceGroup -Name $resourceGroup -ErrorAction SilentlyContinue)) {
    New-AzResourceGroup -Name $resourceGroup -Location $location    
}

#
# Create Managed Disk from LUN 0
#

if ($zone){
    $diskConfig = New-AzDiskConfig -SkuName $managedDiskSKU `
                                   -CreateOption FromImage `
                                   -Zone $zone `
                                   -Location $location
} else {
    $diskConfig = New-AzDiskConfig -SkuName $managedDiskSKU `
                                   -CreateOption FromImage `
                                   -Location $location
} 

Set-AzDiskImageReference -Disk $diskConfig -Id $image.Id -Lun 0

New-AzDisk -ResourceGroupName $resourceGroup `
           -DiskName $diskName `
           -Disk $diskConfig  

将升级介质附加到 VM

将目标 Windows Server 版本的升级介质附加到要升级的 VM。 当 VM 处于运行或停止状态时,可以执行此操作。

门户说明

  1. 登录到 Azure 门户

  2. 搜索并选择“虚拟机”。

  3. 从列表中选择要执行就地升级的虚拟机。

  4. 在“虚拟机”页上选择“磁盘” 。

  5. 在“磁盘”页上,选择“附加现有磁盘”。

  6. 在“磁盘名称”下拉列表中,选择在上一步中创建的升级磁盘的名称。

  7. 选择“保存”,将升级磁盘附加到 VM。

执行就地升级到 Windows Server 2016、2019 或 2022

若要启动就地升级,VM 必须处于 Running 状态。 VM 处于运行状态后,请使用以下步骤执行升级。

  1. 使用 RDPRDP-Bastion 连接到 VM。

  2. 确定升级磁盘的驱动器号(如果没有其他数据磁盘,则通常为 E: 或 F:)。

  3. 启动 Windows PowerShell。

  4. 将目录更改为升级磁盘上的唯一目录。

  5. 执行以下命令以开始升级:

    .\setup.exe /auto upgrade /dynamicupdate disable 
    

    可以在 Windows Server 升级命令中使用 /eula accept 开关,以在升级过程中自动接受 Microsoft 软件许可条款(最终用户许可协议,简称 EULA)。 使用 /eula accept 开关可能有助于避免因未手动接受 EULA 而导致升级过程停滞的问题。 此开关可确保升级过程能够顺利进行,无需通过用户交互来接受许可条款。

    .\setup.exe /auto upgrade /dynamicupdate disable /eula accept
    
  6. 使用 Windows Server 升级矩阵根据 VM 的当前版本和配置选择正确的“升级到”的映像。

在升级过程中,VM 将自动断开与 RDP 会话的连接。 VM 与 RDP 会话断开连接后,可以通过 Azure 门户中提供的屏幕截图功能监视升级进度。

仅执行就地升级到 Windows Server 2012

若要启动就地升级,VM 必须处于 Running 状态。 VM 处于运行状态后,请使用以下步骤执行升级。

  1. 使用 RDPRDP-Bastion 连接到 VM。

  2. 确定升级磁盘的驱动器号(如果没有其他数据磁盘,则通常为 E: 或 F:)。

  3. 启动 Windows PowerShell。

  4. 将目录更改为升级磁盘上的唯一目录。

  5. 执行以下命令以开始升级:

    .\setup.exe 
    
  6. Windows 安装程序启动时,选择“立即安装”。

  7. 对于“获取 Windows 安装程的重要更新”,选择“否,谢谢”。

  8. 使用 Windows Server 升级矩阵,根据 VM 的当前版本和配置选择正确的 Windows Server 2012“升级到”的映像。

  9. 在“许可条款”页上,选择“我接受许可条款”,然后选择“下一步”。

  10. 对于“需要哪种类型的安装?”,选择“升级:安装 Windows 并保留文件、设置和应用程序”。

  11. 安装程序将生成“兼容性报告”,可以忽略任何警告并选择“下一步”。

  12. 完成后,计算机将重新启动,并且会自动断开与 RDP 会话的连接。 VM 与 RDP 会话断开连接后,可以通过 Azure 门户中提供的屏幕截图功能监视升级进度。

升级后的步骤

升级过程成功完成后,应执行以下步骤来清理升级过程中创建的任何项目:

  • 如果创建了 OS 磁盘和数据磁盘的快照,请将其删除。

  • 删除升级介质托管磁盘。

  • 启用在升级过程开始时可能已禁用的任何防病毒、反间谍软件或防火墙软件。

重要

升级过程后,映像计划信息不会更改。

故障恢复

如果就地升级过程未能成功完成,在创建了操作系统磁盘和数据磁盘快照的情况下,可以返回到 VM 的先前版本。 若要通过快照将 VM 还原到以前的状态,请完成以下步骤:

  1. 按照从快照创建磁盘中的步骤,根据 OS 磁盘快照和每个数据磁盘快照创建新的托管磁盘,从而确保在 VM 所在的同一可用性区域中(若 VM 位于区域中)创建磁盘。

  2. 停止 VM。

  3. 交换 VM 的 OS 磁盘

  4. 从 VM 拆离所有数据磁盘

  5. 附加根据步骤 1 中的快照创建的数据磁盘

  6. 重启 VM。

后续步骤