执行 Windows Server 2008 R2 就地升级

如果有虚拟机 (VM) 实例在 Windows Server 2008 R2 上运行,您可以将它们升级到 Windows Server 2012 R2。

对于运行 Windows Server 2008 R2 的虚拟机实例,唯一可用的升级途径是升级到 Windows Server 2012 R2。如需了解详情,请参阅从 Windows Server 2008 R2 或 Windows Server 2008 升级

如果您计划将 Windows Server 2008 R2 升级到高于 Windows Server 2012 R2 的版本,则必须执行以下操作:

  1. 执行到 Windows Server 2012 R2 的初始升级。
  2. 执行到 Windows Server 2016 或 Windows Server 2019 的二次升级。

目标

本指南介绍如何通过以下方式执行从 Windows Server 2008 Datecenter Edition 或 Windows Server 2008 R2 Datacenter Edition 到 Windows Server 2012 R2 Datacenter Edition 的就地升级:

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

费用

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

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

准备工作

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

计划就地升级

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

需考虑的备选方案

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

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

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

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

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

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

服务器版本和许可转换

Google 将 Windows Server 2008 R2 Datacenter Edition 作为公共操作系统映像提供。您可以免费将基于此映像的虚拟机实例升级到 Windows Server 2012 R2 Datacenter Edition。

如果虚拟机实例使用现有许可 (BYOL),请查看 Microsoft 文档,确定您可以升级到哪个版本以及是否符合许可转换条件。

产品密钥

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

  • 您要升级基于 Google 提供的 Windows Server 2008 R2 映像的虚拟机实例:在这种情况下,请务必对 Windows Server 2012 R2 Datacenter 使用预定义的 KMS 客户端设置密钥,因为 Google 的批量许可会根据这些虚拟机实例处理映像激活。

  • 您要升级自带现有许可的虚拟机实例:在 BYOL 中,您需要从许可供应商处获取自定义产品密钥才能执行升级。

安装介质

要升级使用 Google 提供的 Windows Server 2008 R2 映像创建的虚拟机实例,您必须使用 Windows Server 2012 批量许可介质。您可以基于 windows-install-media 映像系列中的公共映像创建一个永久性磁盘,从而访问 Windows Server 2012 批量许可介质。然后,在开始升级之前,请先将此磁盘挂接到一个或多个虚拟机实例上,然后再执行升级。如需了解详情,请参阅挂接安装介质

如果自带现有许可并且虚拟机实例使用导入的磁盘或映像,则使用与您在导入的磁盘或映像上安装 Windows Server 2008 R2 时所用介质类型相匹配的安装介质。

其他前提条件

在开始升级之前,请查看 Microsoft 文档,了解前提条件和可能的限制:

执行就地升级

下文将指导您完成将虚拟机实例升级到 Windows Server 2012 R2 的过程。

创建快照

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

在升级过程中阻止入站流量

自 Windows Server 2012 R2 的 GA 版发布以来,Microsoft 已发布了许多安全更新。升级到 Windows Server 2012 R2 时,这些安全更新可能不会自动安装。升级完成后,请务必使用 Windows 更新下载并安装缺少的安全更新。

下载和安装安全更新可能耗时较长;在此期间,Windows Server 实例可能容易受到安全漏洞攻击。为降低风险,请考虑阻止所有非必要的入站流量流向虚拟机实例。为此,请执行以下操作:

  1. 暂时停用所有授予外部服务(如互联网信息服务 (IIS) 或远程桌面协议 (RDP))访问权限的防火墙规则

  2. 使用混合连接Cloud IAP TCP 隧道访问 RDP,这样您就无需在外部公开 3389 端口。

  3. 创建防火墙规则,以暂时阻止从 Virtual Private Cloud (VPC) 访问不必要的端口。

准备 Windows Server 配置

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

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

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

  3. 停用或卸载防病毒软件、反间谍软件和其他会干扰升级或与 Windows Server 2012 R2 不兼容的代理。

挂接安装介质

在执行升级之前,请将 Windows Server 2012 R2 安装介质挂接到虚拟机实例。Google Cloud Platform (GCP) 不支持直接装载 CD 或 ISO 文件,因此您可以使用 Google 提供的映像:

  1. 在 Google Cloud Platform Console 中,点击激活 Cloud Shell 激活 Cloud Shell。 按钮,打开 Cloud Shell

    转到 Google Cloud Platform 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) 模式将磁盘挂接到虚拟机实例,这样您便可根据需要将磁盘挂接到多个虚拟机实例。将 [INSTANCE_NAME] 替换为要升级的虚拟机实例的名称,并将 [ZONE] 替换为虚拟机实例所在地区的名称:

    gcloud compute instances attach-disk [INSTANCE_NAME] --disk=win-installers --mode=ro --zone=[ZONE]
    

准备应答文件

默认情况下,Windows 安装程序会在升级期间的各个点提示您输入。由于在升级期间无法使用 RDP 连接虚拟机实例,因此无法提供请求的输入,这会导致升级停滞。要阻止显示这些提示,请提供应答文件,以便在无人参与模式下执行升级。

应答文件会指示 Windows 安装程序执行以下操作:

  • 阻止显示所有用户输入提示
  • 选择正确版本的 Windows Server 2012 R2
  • 提供适用于 Windows Server 2012 R2 的产品密钥

准备应答文件,如下所示:

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

  2. 打开 Windows 资源管理器。

  3. C: 驱动器的根目录中,创建一个 Windows.setup 文件夹。

  4. 将 Windows 资源管理器配置为显示文件扩展名

  5. C:\Windows.setup 文件夹中,使用记事本或其他文本编辑器创建名为 unattend.xml 且包含以下内容的文件:

    <?xml version="1.0" encoding="utf-8"?>
      <unattend xmlns="urn:schemas-microsoft-com:unattend">
        <settings pass="windowsPE">
          <component name="Microsoft-Windows-Setup" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State">
            <UpgradeData>
              <Upgrade>true</Upgrade>
                <WillShowUI>Never</WillShowUI>
            </UpgradeData>
            <ImageInstall>
              <OSImage>
                <WillShowUI>OnError</WillShowUI>
                <InstallTo>
                  <DiskID>0</DiskID>
                  <PartitionID>1</PartitionID>
                </InstallTo>
                <InstallFrom>
                  <Path>install.wim</Path>
                  <MetaData>
                    <Key>/IMAGE/NAME</Key>
                    <Value>Windows Server 2012 R2 SERVERDATACENTER</Value>
                  </MetaData>
                </InstallFrom>
              </OSImage>
          </ImageInstall>
          <ComplianceCheck>
            <DisplayReport>OnError</DisplayReport>
          </ComplianceCheck>
          <UserData>
            <AcceptEula>true</AcceptEula>
            <ProductKey>
              <!-- See https://docs.microsoft.com/en-us/windows-server/get-started/kmsclientkeys -->
              <Key>W3GGN-FT8W3-Y4M27-J84CP-Q3VJ9</Key>
            </ProductKey>
          </UserData>
        </component>
      </settings>
    </unattend>
    
  6. C:\Windows.setup 文件夹中,使用记事本或其他文本编辑器创建名为 setup-prep.ps1 且包含以下内容的文件:

    $ErrorActionPreference = "Stop"
    Write-Host "== Enabling EMS access ===================================" `
         -ForegroundColor Black -BackgroundColor Yellow
    
    $SvchostPath = 'HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Svchost'
    $SvchostServices = (Get-ItemProperty -Path $SvchostPath).netsvcs
    $SvchostServices += 'sacsvr'
    Set-ItemProperty -Path $SvchostPath -name netsvcs `
        -value $SvchostServices -type MultiString
    
    & bcdedit /emssettings EMSPORT:2 EMSBAUDRATE:115200 | Out-Default
    & bcdedit /ems on  | Out-Default
    
    Write-Host "== Updating Google drivers and packages ==================" `
         -ForegroundColor Black -BackgroundColor Yellow
    
    & googet -noconfirm install google-compute-engine-auto-updater  | Out-Default
    & googet -noconfirm install google-compute-engine-driver-gga    | Out-Default
    & googet -noconfirm install google-compute-engine-driver-gvnic  | Out-Default
    & googet -noconfirm install google-compute-engine-driver-netkvm | Out-Default
    & googet -noconfirm install google-compute-engine-driver-pvpanic| Out-Default
    & googet -noconfirm install google-compute-engine-driver-vioscsi| Out-Default
    & googet -noconfirm install google-compute-engine-sysprep       | Out-Default
    & googet -noconfirm install google-compute-engine-vss           | Out-Default
    
    Write-Host "== Synchronizing time ====================================" `
         -ForegroundColor Black -BackgroundColor Yellow
    
    Start-Service W32time
    & w32tm /resync | Out-Default
    
    Write-Host "== Restoring TCP timeout and route to metadata server ====" `
         -ForegroundColor Black -BackgroundColor Yellow
    
    $TcpParams = 'HKLM:\System\CurrentControlSet\Services\Tcpip\Parameters'
    New-ItemProperty -Force -Path $TcpParams -Name 'KeepAliveTime' `
       -Value 300000 -PropertyType DWord
    
    & route add 169.254.169.254 mask 255.255.255.255 0.0.0.0 -p | Out-Default
    
    Write-Host "== Refreshing Windows license ============================" `
         -ForegroundColor Black -BackgroundColor Yellow
    & 'C:\Program Files\Google\Compute Engine\sysprep\activate_instance.ps1' | Out-Default
    
    Write-Host "== Completed =============================================" `
         -ForegroundColor Black -BackgroundColor Yellow
    

开始升级

要开始升级,请执行以下操作:

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

    • 开始菜单中,右键点击命令提示符,然后选择以管理员身份运行。
  2. 运行您之前创建的 setup-prep.ps1 脚本。脚本会安装最新的 Google 驱动程序软件包,这对 Windows Server 成功升级至关重要。此外,该脚本会应用特定的 Compute Engine 设置并启用紧急管理服务 (EMS) 控制台访问权限。

    powershell -ExecutionPolicy Bypass -file c:\Windows.setup\setup-prep.ps1
    

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

    [package name] or a newer version is already installed on the system
    
  3. 将工作目录更改为安装介质:

    cd /d d:\*2012*\sources
    
  4. 启动 Windows 安装程序,并将之前创建的 unattend.xml 文件传递给它:

    setup.exe /unattend:c:\Windows.setup\unattend.xml /EMSPort:COM2 /emsbaudrate:115200
    

    由于您要在无人参与模式下运行升级,因此设置向导会立即开始复制文件。

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

查看升级过程

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

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

    gcloud compute instances tail-serial-port-output [INSTANCE] --zone=[ZONE]
    

    [INSTANCE] 替换为您的虚拟机实例的 ID,将 [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 scripts.
    

执行升级后步骤

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

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

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

  3. 验证该机器当前是否正在运行 Windows Server 2012 R2:

    1. 右键点击开始按钮。
    2. 选择运行
    3. 输入 winver 并点击确定
  4. 验证关于 Windows 对话框是否指示虚拟机实例正在运行 Windows Server 2012 R2。

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

    1. 右键点击开始按钮。

    2. 选择命令提示符(管理员) (Command Prompt (Admin))。

  6. 运行 setup-prep.ps1 脚本以重新应用可能在升级过程中丢失的特定 Compute Engine 设置:

    powershell -ExecutionPolicy Bypass -file c:\Windows.setup\setup-prep.ps1
    

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

    [package name] or a newer version is already installed on the system
    
  7. 您不再需要 unattend.xml 文件或 setup-prep.ps1 脚本,因此可以根据情况删除 C:\Windows.setup 文件夹。

  8. 重启虚拟机实例,使所有更改生效。重新启动可能需要 1 到 2 分钟才能完成,然后您才可再次连接到虚拟机实例。

分离安装磁盘

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

  • 在 Cloud Shell 中,将安装磁盘与虚拟机实例分离:

    gcloud compute instances detach-disk [INSTANCE_NAME] --disk=win-installers
    

    [INSTANCE_NAME] 替换为虚拟机实例的名称。

安装更新并恢复访问权限

升级完成后,运行 Windows 更新以下载并安装所有安全更新。要安装这些更新,请执行以下操作:

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

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

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

  4. 如果您之前已阻止入站流量流向虚拟机实例,现在可以恢复原来的防火墙规则。

就地升级问题排查

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

查看串行端口输出

Windows 安装程序不会向串行端口发出任何日志,但您可以使用串行端口输出来查看虚拟机实例的重启次数和启动状态。

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

查看 CPU 和 I/O 指标

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

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

  1. 在 GCP Console 中,点击要升级的实例。

    转到 GCP Console

  2. 点击监控标签页。

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

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

使用 WinRM 进行远程连接

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

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

  2. 打开 PowerShell。

  3. 建立远程 PowerShell 会话:

    Enter-PSSession -ComputerName [INSTANCE-NAME] -UseSSL -SessionOption (New-PsSessionOption -SkipCACheck) -Credential (Get-Credential)
    

    [INSTANCE-NAME] 替换为您尝试升级的实例的名称。

  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
    

后续步骤

此页内容是否有用?请给出您的反馈和评价:

发送以下问题的反馈:

此网页
Compute Engine