如何在升级驱动程序后对不可访问或无法到达 DNS 的 EC2 Windows 实例进行故障排除?

上次更新日期:2022 年 10 月 4 日

在我的 Amazon Elastic Compute Cloud (Amazon EC2) Windows 实例上更新了半虚拟化 (PV)、非易失性存储器 (NVMe) 或 Elastic Network Adapter (ENA) 驱动程序后,我的实例无法访问。或者,我升级了驱动程序并将我的实例类型更改为基于 Nitrot 的实例,现在该实例无法到达域名系统 (DNS)。如何解决此问题?

简短描述

EC2 Windows 实例上使用了三种类型的 AWS 驱动程序:

实例使用的 AWS 驱动程序的类型取决于实例类型。基于 Nitron 的实例系列中的大多数实例都使用 ENA 驱动程序进行联网,而使用 AWS NVMe 驱动程序进行存储。基于 Xen 的实例系列 (非 Nitro) 中的大多数实例都使用 AWS PV 驱动程序进行联网和存储。有些实例结合使用多个驱动程序进行存储和联网。有关实例本身及其使用哪些驱动程序进行联网和存储的更多信息,请参阅联网和储存功能摘要。在联网和存储功能摘要表中,仅限弹性块存储 (EBS) 表示该卷使用 AWS PV 驱动程序。NVME EBS 表示实例使用 NVMe 驱动程序。

注意:Windows Server 2008 R2 及更高版本支持 AWS PV 驱动程序。Windows Server 2003 使用 Citrix PV 驱动程序。Windows Server 2008 R2 支持 AWS PV 版本 8.3.4 及更早版本以及 AWS ENA 2.2.3 及更早版本。有关更多信息,请参阅适用于 Windows 实例的半虚拟化驱动程序

在升级 Windows 实例上的驱动程序或更改实例类型时,请参阅迁移到最新一代实例类型 (Nitro/Xen)。

注意:您可以运行以下 PowerShell 命令来列出在 Windows 实例上运行的 AWS 驱动程序和驱动程序版本:

Get-WmiObject Win32_PnpSignedDriver | Select-Object DeviceName, DriverVersion, InfName | Where-Object {$_.DeviceName -like "*AWS*" -OR $_.DeviceName -like "*Amazon*"}

解决方案

注意:对实例的更改可能会导致实例无法启动。最佳实践是在修改实例之前创建根 EBS 卷的快照。有关更多信息,请参阅创建快照

要在升级 Windows 驱动程序后对无法访问的实例进行故障排查,请执行以下操作:

查看实例屏幕截图

查看实例屏幕截图或使用 EC2Rescue for Windows 来查看系统日志。

  • 检查实例屏幕截图以确定实例的状态。然后,查看对无法访问的实例进行故障排查中的步骤。
  • 如果屏幕截图显示登录屏幕,但实例状态检查失败,则问题可能是驱动程序损坏或无法检测。

使用 EC2Rescue for Windows 查看系统日志

如果实例类型已更改,请先尝试恢复实例类型或恢复为 T2 实例类型,然后查看下面列出的日志。如果此方法不起作用,则使用 EC2Rescue 工具检索无法访问实例的操作系统 (OS) 日志。这些日志可以是事件查看器日志、EC2Config 日志、启动日志等。

  • 查看位于 %SystemRoot%\infsetupapi.dev 日志,了解有关纯文本设备安装的信息。您可以使用此信息验证具有时间戳的设备的安装情况,并对设备安装问题进行故障排除。
  • 检查位于 C:\Program Files\Amazon\XenToolsAWSPVDriverMSI 日志文件。此日志特定于 AWS PV 驱动程序安装并会报告任何错误。

如果日志显示驱动程序已损坏或安装不正确,则将驱动程序离线注入实例。您可以使用 AWSSupport-UpgradeWindowsAWSDrivers 自动化文档升级或修复实例上的存储和网络 AWS 驱动程序。有关更多信息,请参阅使用 AWS Systems Manager 升级 AWS PV、ENA 和 NVMe 驱动程序

注意:最佳实践是在升级驱动程序或更改实例类型之前通过拍摄快照备份实例

使用 EC2Rescue for Windows 还原实例

使用 EC2Rescue 工具将实例还原到上次已知的正确配置状态。有关更多信息,请参阅视频逐步解说

使用最新的可用快照替换根卷

有关更多信息,请参阅使用之前的快照替换卷

使用适用于 Windows 的 EC2 串行控制台进行故障排查

如果您已开启适用于 Windows 的 EC2 串行控制台,则可以使用它来排查受支持的基于 Nitro 的实例类型问题。串行控制台可帮助您排查启动问题、网络配置和安全外壳协议 (SSH) 配置问题。串行控制台无需网络连接即可连接到您的实例。您可以使用 Amazon EC2 控制台或 AWS 命令行界面 (AWS CLI) 访问串行控制台。

在使用串行控制台之前,在账户层面授予对该控制台的访问权限。然后,创建 AWS Identity and Access Management (IAM) 策略,授予对 IAM 用户的访问权限。此外,每个使用串行控制台的实例都必须至少包含一个基于密码的用户。如果您的实例无法访问,并且您尚未配置对串行控制台的访问权限,请使用上述方法之一对实例进行故障排除。有关配置适用于 Windows 的 EC2 串行控制台的更多信息,请参阅配置对 EC2 串行控制台的访问权限

注意:如果您在运行 AWS CLI 命令时收到错误,请确认您正在运行最新版本的 AWS CLI

要对升级 Windows 驱动程序后可到达但无法访问 DNS 的实例进行故障排查,请执行以下操作:

重新配置 Elastic Network Interface 设置

将实例迁移到最新一代实例类型时,现有弹性网络接口上的静态互联网协议 (IP) 可能会丢失。在此迁移过程中,自定义 DNS 网络设置也可能会丢失。这是因为实例默认为新的 ENA 设备。要解决此问题,请重新配置弹性网络接口设置。您需要本地凭证才能重新配置这些设置。有关更多信息,请参阅如何为我的 Amazon EC2 Windows 实例分配静态私有 IP 地址?