执行 Windows Server 的就地升级


如果您的虚拟机 (VM) 实例运行早期版本的 Windows Server,则可以将其升级到更高版本的 Windows Server:

原版本 升级到
Windows Server 2008 R2(桌面体验) Windows Server 2012 R2(桌面体验)
Windows Server 2012 R2(核心) Windows Server 2016 (Core)
Windows Server 2019 (Core)
Windows Server 2012 R2(桌面体验) Windows Server 2016 (Desktop Experience)
Windows Server 2019 (Desktop Experience)
Windows Server 2016(核心) Windows Server 2019 (Core)
Windows Server 2022 (Core)
Windows Server 2016(桌面体验) Windows Server 2019 (Desktop Experience)
Windows Server 2022 (Desktop Experience)
Windows Server 2019 (Core) Windows Server 2022 (Core)
Windows Server 2019 (Desktop Experience) Windows Server 2022 (Desktop Experience)

本指南介绍如何执行 Windows Server 的手动就地升级。如果是从 Windows Server 2008 R2 升级到 Windows Server 2012 R2,您还可以使用 Google Cloud CLI 执行自动就地升级

升级存在以下限制:

  • Microsoft 已终止对 Windows Server 2012 R2Windows Server 2008 R2 的支持。如果您执行上述版本的就地升级,并遇到与 Windows 设置进程 (setup.exe) 相关的问题,Google 可能只能提供有限的帮助。

  • 如果您计划将 Windows Server 2008 R2 升级到高于 Windows Server 2012 R2 的版本,则必须先升级到 Windows Server 2012 R2,然后再升级到 Windows Server 2016 或更高版本。

目标

本指南介绍了如何按照以下步骤执行 Windows Server 的就地升级:

  1. 计划就地升级
  2. 执行就地升级
  3. 排查就地升级问题
  4. 完成就地升级后进行清理

费用

可免费执行 Windows Server 就地升级。您只需为升级过程中使用的资源付费,包括:

您可以使用价格计算器根据您的预计用量来估算费用。

准备工作

本指南假定您掌握了以下基础知识:

计划就地升级

通过对运行早期版本的 Windows Server 的虚拟机 (VM) 实例执行就地升级,可切实有效地实现基础架构现代化并缓解 Windows Server 版本支持生命周期终止临近所带来的风险。

需考虑的替代方案

在决定使用就地升级迁移到较新版本的 Windows Server 之前,请注意以下限制:

  • 停机时间:根据配置和安装的软件,升级过程可能需要一小时或更长时间。在升级过程中,对虚拟机实例的访问会受到限制,原因如下:

    • 用户无法使用在虚拟机实例上运行的工作负载
    • 远程桌面协议 (RDP) 不可用
    • 检查升级进度和升级剩余时间的方法有限
  • 风险:根据现有实例的配置和安装的软件而定:

    • 升级可能会失败
    • 部分配置选项可能被替换
    • 不兼容会导致工作负载在升级后的实例上出现故障

根据 Windows Server 实例上运行的工作负载,您可以采用不同的方法来减少停机时间和风险。

工作负载 方法
您的虚拟机实例运行的是支持副本的工作负载,例如:
  • Active Directory 网域服务
  • DNS
  • SQL Server
请考虑设置运行较新版 Windows Server 的新虚拟机实例,然后使用副本将工作负载从现有虚拟机实例迁移到新的虚拟机实例。
您有一个运行多种工作负载的虚拟机实例 请考虑将这些工作负载迁移到单独的虚拟机实例,让每个虚拟机实例仅运行一个工作负载。即使您无法迁移所有工作负载,减少单个虚拟机实例上运行的工作负载数也有助于降低就地升级过程中的风险。

产品密钥

Windows Server 产品密钥仅对特定版本有效;当升级到最新版本的 Windows Server 时,您必须提供一个新的产品密钥。主要有以下两种情况:

  • 您要升级基于 Google 提供的公共操作系统映像的虚拟机实例:在这种情况下,您必须对要升级到的 Windows Server 版本使用预定义的 KMS 客户端设置密钥。升级不会产生额外费用。

  • 您要升级为其自带现有许可的虚拟机实例:在自带许可 (BYOL) 中,您需要从许可供应商处获取自定义产品密钥才能执行升级。请查看 Microsoft 文档,确定您可以升级到哪个版本以及是否符合许可转换条件。

安装介质

如需执行升级,您需要使用安装介质。主要有以下两种情况:

  • 您要升级基于 Google 提供的公共操作系统映像的虚拟机实例:在这种情况下,您可以使用 Google 提供的批量许可安装介质。下面提供了访问此安装介质的步骤。

  • 您要升级基于导入的磁盘或映像的虚拟机实例:在这种情况下,您不能使用 Google 提供的安装介质,而必须使用与用于在导入的磁盘或映像上安装 Windows Server 的介质类型相匹配的安装介质。

其他前提条件

在开始升级之前,请先查看 Microsoft 文档,了解您计划升级到的 Windows Server 版本的前提条件和可能的限制:

2012 R2

2016

2019

2022

执行就地升级

以下部分将引导您完成虚拟机实例的升级过程。

创建快照

在开始升级之前,建议您创建虚拟机实例的快照,以便可在发生任何错误时还原到安全状态:

准备 Windows Server 配置

验证 Windows Server 虚拟机实例的配置:

  1. 使用 RDP 客户端连接到虚拟机实例

  2. 使用 Windows 更新验证 Windows Server 是否为最新版本。

  3. 停用或卸载防病毒软件、反间谍软件以及其他可能会干扰升级或与要升级到的 Windows Server 版本不兼容的代理。

挂接安装介质

在执行升级之前,请先将所需的安装介质挂接到虚拟机实例。要使用的适当介质取决于具体情况:

  • 您要升级基于 Google 提供的公共操作系统映像的虚拟机实例:在这种情况下,您只需要挂接 Google 提供的批量许可安装介质。此介质包含运行升级所需的脚本以及新版 Windows Server 的文件。
  • 您要升级基于导入的磁盘或映像的虚拟机实例:在这种情况下,您也需要挂接 Google 提供的批量许可安装介质,以便能够访问必要的脚本。

    此外,您还必须挂接一个自定义安装介质,该介质与您用于在导入的磁盘或映像上安装 Windows Server 的介质类型相匹配。

如需挂接 Google 提供的批量许可安装介质,请按以下步骤操作:

  1. 在 Google Cloud 控制台中,点击激活 Cloud Shell 激活 Cloud Shell。 按钮,以打开 Cloud Shell

    转到 Google Cloud Console

  2. 设置默认项目 ID。将 PROJECT_ID 替换为您的 Compute Engine 项目的名称:

    gcloud config set project PROJECT_ID
    
  3. 根据安装介质创建磁盘。将 ZONE 替换为虚拟机所在的可用区的名称:

    gcloud compute disks create win-installers --image-family=windows-install-media --image-project=compute-image-tools --zone=ZONE
    

    此命令将名为 win-installers 的磁盘添加到您的项目中。此磁盘未挂接到任何虚拟机实例。

  4. 使用只读 (ro) 模式将磁盘挂接到虚拟机,以便您能够根据需要将磁盘挂接到多个虚拟机。

    gcloud compute instances attach-disk VM_NAME --disk=win-installers --mode=ro --zone=ZONE
    

    替换以下内容:

    • VM_NAME:要升级的虚拟机实例的名称
    • ZONE:虚拟机所在可用区的名称

    您可以将同一磁盘用于同一可用区内的多个并行虚拟机升级,但如果要升级其他可用区中的虚拟机,则必须在该可用区另外创建一个磁盘。

如果您要升级基于导入的磁盘或映像的虚拟机,请挂接自定义安装介质作为附加磁盘:

  1. 按照通过 ISO 文件创建映像中的步骤操作,通过要用作自定义安装介质的 ISO 映像创建磁盘。

  2. 使用只读 (ro) 模式将磁盘挂接到虚拟机,以便您能够根据需要将磁盘挂接到多个虚拟机。

    gcloud compute instances attach-disk VM_NAME --disk=CUSTOM_MEDIA_DISK --mode=ro --zone=ZONE
    

    替换以下内容:

    • VM_NAME:要升级的虚拟机的名称。
    • CUSTOM_MEDIA_DISK:包含自定义安装介质的磁盘的名称
    • ZONE:虚拟机所在可用区的名称

开始升级

默认情况下,Windows 安装程序会在升级期间的各个点提示您输入。由于您无法在升级过程中使用 RDP 连接到虚拟机,因此无法提供任何输入,请在无人参与模式下运行升级。

  1. 使用 RDP 客户端连接到虚拟机。如需了解详情,请参阅连接到实例

  2. 打开提升权限的命令提示符:

    • 如果您使用 Server Core,则提升权限的命令提示符应会在登录后自动打开。
    • 如果您使用具有完整桌面体验的 Windows Server,请右键点击开始按钮,然后选择命令提示符(管理员)
  3. 将工作目录更改为安装介质。正确的工作目录取决于您要升级到的 Windows Server 版本:

    2012 R2

    cd /d d:\*2012*
    

    2016

    cd /d d:\*2016*
    

    2019

    cd /d d:\*2019*
    

    2022

    cd /d d:\*2022*
    
  4. 开始 Windows 升级。开始升级所需的步骤取决于您要升级到的 Windows Server 版本,以及您的虚拟机是基于公共操作系统映像,还是基于导入的磁盘或映像:

    2012 R2

    运行 upgrade.ps1 可开始 Windows 升级。该脚本会完成以下步骤:

    • 安装最新的 Google 驱动程序软件包,这对 Windows Server 成功升级至关重要。
    • 应用 Compute Engine 所需的 Windows 设置。
    • 在升级期间启用对紧急管理服务 (EMS) 控制台的访问权限。
    • 从安装介质启动 Windows 安装程序 (setup.exe) 以在无人参与模式下执行升级。
    • 选择正确版本的 Windows Server 2012 R2 进行安装。
    • 提供新版 Windows Server 的通用批量许可密钥 (GVLK)。
    powershell -ExecutionPolicy Bypass -File upgrade.ps1
    

    2012 R2 (BYOL)

    运行 upgrade.ps1 可开始 Windows 升级。该脚本会完成以下步骤:

    • 安装最新的 Google 驱动程序软件包,这对 Windows Server 成功升级至关重要。
    • 应用 Compute Engine 所需的 Windows 设置。
    • 在升级期间启用对紧急管理服务 (EMS) 控制台的访问权限。
    • 从安装介质启动 Windows 安装程序 (setup.exe) 以在无人参与模式下执行升级。
    • 选择正确版本的 Windows Server 2012 R2 进行安装。
    • 为用户提供新版 Windows Server 的许可密钥。
    powershell -ExecutionPolicy Bypass -File upgrade.ps1 -SetupExePath SETUP_PATH -ProductKey PRODUCT_KEY
    

    替换以下内容:

    • SETUP_PATH:自定义安装介质上的 setup.exe 的路径
    • PRODUCT_KEY:Windows Server 2016 的有效产品密钥。

    只有在您要升级为其自带现有许可 (BYOL) 的虚拟机实例时,才需要 -ProductKey 参数

    2016 或更高版本

    运行 upgrade.ps1 可开始 Windows 升级。该脚本会完成以下步骤:

    powershell -ExecutionPolicy Bypass -File upgrade.ps1
    

    在某些情况下,Windows 安装程序可能会显示选择映像屏幕。如果您看到此屏幕,请选择与您的当前配置匹配的配置:

    • 如果您目前使用的是 Server Core,请选择 Datacenter
    • 如果您目前使用的是提供完整桌面体验的 Windows Server,请选择 Datacenter (Desktop Experience)

    • 点击下一步开始升级。

    设置可能需要几分钟的时间才能初始化。

    2016 或更高版本(已导入)

    运行 upgrade.ps1 可开始 Windows 升级。该脚本会完成以下步骤:

    powershell -ExecutionPolicy Bypass -File upgrade.ps1 -SetupExePath SETUP-PATH -ProductKey PRODUCT-KEY
    

    替换以下内容:

    • SETUP_PATH:自定义安装介质上的 setup.exe 的路径
    • PRODUCT_KEY:要升级到的 Windows Server 版本的有效产品密钥。例如,如果要从 Windows Server 2016 Datacenter 升级到 Windows Server 2019 Datacenter,请提供有效的 Windows Server 2019 Datacenter 密钥。

    只有在您要升级为其自带现有许可 (BYOL) 的虚拟机实例时,才需要 -ProductKey 参数

    在某些情况下,Windows 安装程序可能会显示选择映像屏幕。如果您看到此屏幕,请选择与您的当前配置匹配的配置:

    • 如果您目前在使用 Server Core,请选择 Windows Server Datacenter
    • 如果您目前在使用具有完整桌面体验的 Windows Server,请选择 Windows Server Datacenter (Desktop Experience)

    • 点击下一步开始升级。

    设置可能需要几分钟的时间才能初始化。

    升级过程可能会发出以下警告。若是如此,您可以将其忽略:

    [package name] or a newer version is already installed on the system
    

    系统可能会在安装 netkvm 驱动程序时暂时失去响应。如果发生这种情况,请勿关闭 RDP 连接或停止虚拟机实例,除非系统超过 5 分钟未响应。如果 RDP 连接断开,请等待大约 5 分钟再重新连接到虚拟机实例。

    设置向导可能会要求您先重启系统。在这种情况下,请使用同一命令重启虚拟机实例并再次运行 Windows 安装程序。

    大约 5 分钟后,机器重新启动,然后 RDP 断开连接。

观察升级过程

根据虚拟机实例的机器类型和 Windows Server 配置,升级过程可能需要 10 到 60 分钟才能完成。在此期间,您可以通过串行端口输出来查看状态:

  1. 在 Cloud Shell 中,通过运行以下命令来查看启动过程:

    gcloud compute instances tail-serial-port-output VM_NAME --zone=ZONE
    

    替换以下内容:

    • VM_NAME:虚拟机实例的名称
    • ZONE:虚拟机实例所在区域的名称
  2. 等待机器重新启动四次。根据虚拟机实例的配置,重新启动可能需要 30 分钟或更长时间。您可通过如下所示的输出来确定重新启动:

    SeaBIOS (version 1.8.2-20190620_103534-google)
    Total RAM Size = 0x00000001e0000000 = 7680 MiB
    CPUs found: 2     Max CPUs supported: 2
    
  3. 第四次重新启动后,等待显示输出 GCEMetadataScripts: Finished running startup scriptsNo startup scripts to run

执行升级后步骤

现在,您可以连接到虚拟机实例,验证升级过程是否已成功完成。

  1. 使用 RDP 客户端连接到虚拟机实例。如需了解详情,请参阅连接到实例

  2. 使用拥有本地管理员权限的用户账号登录。

  3. 打开提升权限的命令提示符:

    • 如果您使用 Server Core,则提升权限的命令提示符应会在登录后自动打开。
    • 如果您使用具有完整桌面体验的 Windows Server,请右键点击开始按钮,然后选择命令提示符(管理员)
  4. 运行以下命令以查询 Windows Server 的版本:

    Windows Server Core

    ver
    

    Windows Server with Desktop Experience

    winver
    

    验证版本是否与预期的 Windows Server 版本匹配。

  5. 将工作目录更改为安装介质。正确的工作目录取决于您要升级到的 Windows Server 版本:

    2012 R2

    cd /d d:\*2012*
    

    2016

    cd /d d:\*2016*
    

    2019

    cd /d d:\*2019*
    

    2022

    cd /d d:\*2022*
    
  6. 再次运行 upgrade.ps1 以重新应用可能在升级过程中丢失的特定 Compute Engine 设置:

    powershell -ExecutionPolicy Bypass -File upgrade.ps1
    
  7. 重启虚拟机实例,以确保所有更改生效。重新启动可能需要 1 到 2 分钟才能完成,然后您才可再次连接到虚拟机实例。

分离安装磁盘

现在,您可以将安装磁盘与虚拟机实例分离:

  • 在 Cloud Shell 中,将安装磁盘与虚拟机实例分离,并将 VM_NAME 替换为虚拟机实例的名称:

    gcloud compute instances detach-disk VM_NAME --disk=win-installers
    

安装更新并恢复访问权限

升级完成后,运行 Windows 更新以下载并安装所有安全更新。如需安装安全更新,请按以下步骤操作:

  1. 使用 RDP 客户端连接到机器。如需了解详情,请参阅连接到实例

  2. 使用 Windows 更新来安装最新的 Windows 更新。在此过程中,您可能需要多次重启虚拟机实例。

  3. 重新启用您在升级之前停用的所有代理、防病毒软件或反恶意软件。

就地升级问题排查

在运行 Windows 安装程序时,无法使用 RDP 连接到虚拟机实例。如果您怀疑升级失败或没有进展,请按顺序使用以下方法诊断具体情况:

查看串行端口输出

如需检查升级过程的进度,请查看虚拟机实例的串行端口输出

  • 串行端口 1 会捕获启动状态
  • 串行端口 3 会捕获 Windows 安装程序的日志输出

在升级过程中,您应该会观察到四次重新启动。如果在第一次重新启动后超过 30 分钟没有看到任何进展,则可能升级失败。

查看 CPU 和 I/O 指标

运行 Windows Server 升级是一项占用大量 CPU 和磁盘 I/O 的操作。通过查看 CPU 和 I/O 指标,您可以了解安装程序是否正常进行。

在 Google Cloud Console 中查看 CPU 和 I/O 指标:

  1. 在 Google Cloud Console 中,转到虚拟机实例页面。

    转到虚拟机实例

  2. 点击您要升级的实例。

  3. 点击监控标签。

连接到紧急管理服务控制台

在运行 Windows 安装程序期间和之后,您都可以连接到紧急管理服务 (EMS) 控制台。在 EMS 控制台查看 Windows 安装程序日志文件事件日志,了解升级过程是否仍在正常进行,或了解可能发生的错误的相关信息。

使用 WinRM 进行远程连接

如果未能使用 RDP 或 EMS 建立连接,您可以尝试使用 WinRM 建立远程 PowerShell 会话:

  1. 连接到同一 VPC 中的其他 Windows Server 实例。

  2. 打开 PowerShell。

  3. 建立远程 PowerShell 会话,将 VM_NAME 替换为要升级的实例的名称:

    Enter-PSSession -ComputerName VM_NAME -UseSSL -SessionOption (New-PsSessionOption -SkipCACheck) -Credential (Get-Credential)
    
  4. 当系统提示输入凭据时,请输入管理用户账号的用户名和密码。

  5. 使用远程 PowerShell 会话查看 Windows 安装程序日志文件事件日志

离线分析日志文件

如果您无法使用 Windows 远程管理 (WinRM) 连接到实例,则可以取消升级并分析来自其他虚拟机实例的日志文件。请按以下步骤进行此操作:

  1. 停止虚拟机实例

    如果 Windows Server 没有响应,则此过程可能需要几分钟时间。

  2. 从实例中分离启动磁盘

  3. 创建一个新的临时 Windows Server 实例,并挂接原始实例的启动磁盘,将其用作附加磁盘。

  4. 使用临时 Windows Server 实例来分析您尝试升级的实例的安装程序日志文件和事件日志文件

  5. 完成分析后,将磁盘与临时实例分离,并将其作为启动磁盘重新挂接至原始虚拟机实例。

RDP 问题排查

有关 RDP 问题排查的信息,请参阅 RDP 问题排查

Windows Server 实例问题排查

有关 Windows Server 实例问题排查的信息,请参阅 Windows 实例提示和问题排查

清除数据

完成该过程后,请删除安装磁盘,以免产生额外的费用。

删除安装磁盘

您可以随时根据 Google 提供的映像创建安装磁盘。如果您不打算在同一区域升级其他虚拟机实例,请删除安装磁盘:

  • 在 Cloud Shell 中,删除您之前创建的 win-installers 磁盘:

    gcloud compute disks delete win-installers
    

后续步骤