排查 Amazon EC2 Windows 实例问题 - Amazon Elastic Compute Cloud

排查 Amazon EC2 Windows 实例问题

以下问题排查技巧有助于解决与 Amazon EC2 Windows 实例相关的问题。

EBS 卷在 Windows Server 2016 和 2019 上不初始化

从 Windows Server 2016 和 2019 的 Amazon 系统映像(AMI)创建的实例使用 EC2Launch v1 代理来执行各种启动任务,包括初始化 EBS 卷。默认情况下,EC2Launch v1 不初始化辅助卷。不过,您可以将 EC2Launch v1 配置为自动初始化这些磁盘,如下所示。

将盘符映射到卷
  1. 连接到要配置的实例并在文本编辑器中打开 C:\ProgramData\Amazon\EC2-Windows\Launch\Config\DriveLetterMappingConfig.json 文件。

  2. 指定卷设置如下:

    { "driveLetterMapping": [ { "volumeName": "sample volume", "driveLetter": "H" }] }
  3. 保存更改并关闭文件。

  4. 打开 Windows PowerShell 并使用以下命令来运行初始化磁盘的 EC2Launch v1 脚本:

    PS C:\> C:\ProgramData\Amazon\EC2-Windows\Launch\Scripts\InitializeDisks.ps1

    要在每次实例启动时初始化磁盘,请添加 -Schedule 标记,如下所示:

    PS C:\> C:\ProgramData\Amazon\EC2-Windows\Launch\Scripts\InitializeDisks.ps1 -Schedule

    EC2Launch v1 代理可以运行实例初始化脚本,例如 initializeDisks.ps1 与 InitializeInstance.ps1 脚本并行使用。如果 InitializeInstance.ps1 脚本重启实例,它可能会中断实例启动时运行的其他计划任务。为避免任何潜在的冲突,建议向 initializeDisks.ps1 脚本添加逻辑,以确保首先完成实例初始化。

    注意

    如果 EC2Launch 脚本未初始化卷,请确保卷处于联机状态。如果卷处于脱机状态,请运行以下命令,使所有磁盘联机。

    PS C:\> Get-Disk | Where-Object IsOffline -Eq $True | Set-Disk -IsOffline $False

将 EC2 Windows 实例启动至目录服务还原模式 (DSRM)

如果运行 Microsoft Active Directory 的实例遇到系统故障或其他关键问题,您可以通过启动至特殊版本的安全模式(称为目录服务还原模式 (DSRM))对该实例进行故障排除。在 DSRM 中,您可以修复或恢复 Active Directory。

DSRM 的驱动程序支持

您启用 DSRM 和启动至实例的方式取决于实例正在运行的驱动程序。在 EC2 控制台中,您可以从系统日志查看实例的驱动程序版本详细信息。下表显示了 DSRM 支持的驱动程序。

驱动程序版本 DSRM 是否支持? 后续步骤
Citrix PV 驱动程序 5.9 从备份还原实例。您无法启用 DSRM。
AWS PV 7.2.0 尽管该驱动程序不支持 DSRM,但您仍可以将根卷从实例分离并为其创建快照或 AMI,然后将其作为辅助卷附加到同一个可用区中的其他实例。然后,您可以按照本部分的说明启用 DSRM。
AWS PV 7.2.2 和更高版本 分离根卷,将其附加到其他实例,然后启用 DSRM (如本节中所述)。
增强联网 分离根卷,将其附加到其他实例,然后启用 DSRM (如本节中所述)。

有关如何启用增强联网的信息,请参阅 在 EC2 实例上使用 ENA 启用增强联网功能。有关升级 AWS PV 驱动程序的信息,请参阅在 Windows 实例上升级半虚拟化驱动程序

将实例配置为启动至 DSRM

在操作系统运行前,EC2 Windows 实例没有网络连接。因此,您无法通过按键盘上的 F8 键来选择启动选项。您必须使用以下过程之一将 EC2 Windows Server 实例启动至 DSRM。

如果您怀疑 Active Directory 已损坏,但该实例仍在运行,则可以使用 System Configuration 对话框或命令提示符将该实例配置为启动至 DSRM。

使用 System Configuration 对话框将在线实例启动至 DSRM
  1. Run 对话框中,键入 msconfig 并按下 Enter。

  2. 选择 Boot 选项卡。

  3. Boot options 下,选择 Safe boot

  4. 选择 Active Directory repair,然后选择 OK。系统将提示您重新启动服务器。

使用命令行将在线实例启动至 DSRM

从命令提示符窗口运行以下命令:

bcdedit /set safeboot dsrepair

如果某个实例处于离线状态并且无法访问,您必须先分离根卷并将其附加到其他实例才能启用 DSRM 模式。

将离线实例启动至 DSRM
  1. 通过以下网址打开 Amazon EC2 控制台:https://console.aws.amazon.com/ec2/

  2. 在导航窗格中,选择实例

  3. 找到并选择受影响的实例。依次选择实例状态停止实例

  4. 选择启动实例并在受影响实例所在的同一可用区中创建一个临时实例。选择使用其他 Windows 版本的实例类型。例如,如果实例是 Windows Server 2016,请选择 Windows Server 2019 实例。

    重要

    如果您未在与受影响实例相同的可用区中创建该实例,则无法将受影响的实例的根卷附加到新实例。

  5. 在导航窗格中,选择 Volumes

  6. 找到受影响的实例的根卷。分离该卷并将其附加到早先创建的临时实例。使用默认设备名称 (xvdf) 附加该卷。

  7. 使用远程桌面连接临时实例,然后通过磁盘管理实用工具使该卷可供使用

  8. 打开命令提示符窗口并运行以下命令。将 D 替换为您刚刚附加的辅助卷的实际驱动器号:

    bcdedit /store D:\Boot\BCD /set {default} safeboot dsrepair
  9. 在磁盘管理实用工具中,选择您之前附加的驱动器,打开上下文(右键单击)菜单,然后选择脱机

  10. 在 EC2 控制台中,将受影响的卷从临时实例分离,然后将其重新附加到设备名称为 /dev/sda1 的原始实例。您必须指定此设备名称才能将卷指派为根卷。

  11. 启动实例。

  12. 在实例将健康检查传入 EC2 控制台后,使用远程桌面连接到实例,然后验证实例是否启动至 DSRM 模式。

  13. (可选) 删除或停止您在本过程中创建的临时实例。

实例失去网络连接或计划的任务不按预期方式运行

如果您重新启动实例而该实例失去网络连接,则可能该实例的时间不正确。

默认情况下,Windows 实例使用协调世界时 (UTC)。如果将实例的时间设置为不同的时区,然后再重新启动实例,则时间会发生偏移,该实例暂时失去其 IP 地址。实例最终会重新获取网络连接,但这可能要用数小时的时间。实例重新获取网络连接所用的时间取决于 UTC 与其他时区之间的差异。

这种时间问题也可能导致计划的任务不如期运行。在这种情况下,计划的任务会因实例的时间不正确而不如期运行。

要持久使用 UTC 以外的时区,您必须设置 RealTimeIsUniversal 注册表项。若不设置此项,则实例会在重新启动后使用 UTC。

解决造成网络连接丢失的时间问题
  1. 确保所运行的是建议的半虚拟化驱动程序。有关更多信息,请参阅 在 EC2 Windows 实例上升级半虚拟化驱动程序

  2. 验证以下注册表项存在并且已设置为 1HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\TimeZoneInformation\RealTimeIsUniversal

无法获取控制台输出

对于 Windows 实例,实例控制台显示在 Windows 引导过程中执行的任务的输出。如果 Windows 成功启动,则最后记录的消息是 Windows is Ready to use。您也可以在控制台中显示事件日志消息,但根据您的 Windows 版本,此功能可能默认未启用。有关更多信息,请参阅 Amazon EC2 Windows 实例上的 Windows 启动代理

要使用 Amazon EC2 控制台获取您的实例的控制台输出,请选择实例,然后依次选择 Actions (操作)Monitor and troubleshoot (显示屏和问题排查)Get System Log (获取系统日志)。要使用命令行获取控制台输出,请使用以下命令之一:get-console-output (AWS CLI) 或 Get-EC2ConsoleOutput (AWS Tools for Windows PowerShell)。

对于运行 Windows Server 2012 R2 和更早版本的实例,如果控制台输出为空,则可能表示 EC2Config 服务出现问题(如未正确配置的配置文件),或者 Windows 无法正确引导。要修复该问题,请下载并安装最新版本的 EC2Config。有关更多信息,请参阅 安装最新版的 EC2Config

网络上不可用的 Windows Server 2012 R2

有关对网络上不可用的 Windows Server 2012 R2 实例进行故障排除的信息,请参阅 Windows Server 2012 R2 在实例重启后丢失网络和存储连接

磁盘签名冲突

您可以使用 EC2Rescue for Windows Server 检查和解决磁盘签名冲突。或者,您可以通过执行以下步骤手动解决磁盘签名问题。

警告

以下过程介绍了如何使用注册表编辑器编辑 Windows 注册表。如果您不熟悉 Windows 注册表或如何安全地使用注册表编辑器进行更改,请参阅配置注册表

  1. 打开命令提示符,键入 regedit.exe,然后按 Enter。

  2. Registry Editor (注册表编辑器) 中,从上下文菜单(右键单击)中选择 HKEY_LOCAL_MACHINE,然后选择 Find (查找)

  3. 键入 Windows Boot Manager,然后选择 Find Next (查找下一个)

  4. 选择名为 11000001 的密钥。此密钥是您在上一步中找到的密钥的同级。

  5. 在右侧窗格中,选择 Element,然后从上下文菜单(右键单击)中选择 Modify (修改)

  6. 找到数据中偏移 0x38 处的四字节磁盘签名。这是启动配置数据库签名 (BCD)。反转字节以创建磁盘签名,然后将其记录下来。例如,由以下数据表示的磁盘签名是 E9EB3AA5

    ... 0030 00 00 00 00 01 00 00 00 0038 A5 3A EB E9 00 00 00 00 0040 00 00 00 00 00 00 00 00 ...
  7. 在命令提示符窗口运行以下命令以启动 Microsoft DiskPart。

    diskpart
  8. 运行 select disk DiskPart 命令,并为存在磁盘签名冲突的卷指定磁盘号。

    提示

    要检查存在磁盘签名冲突的卷的磁盘号,请使用磁盘管理实用程序。打开命令提示符,键入 compmgmt.msc,然后按 Enter 键。在左侧导航面板中,双击磁盘管理。在磁盘管理实用程序中,检查存在磁盘签名冲突的脱机卷的磁盘号。

    DISKPART> select disk 1 Disk 1 is now the selected disk.
  9. 运行以下 DiskPart 命令以获取磁盘签名。

    DISKPART> uniqueid disk Disk ID: 0C764FA8
  10. 如果上一步中显示的磁盘签名与之前写下的磁盘签名不匹配,请使用以下 DiskPart 命令更改磁盘签名,使其匹配:

    DISKPART> uniqueid disk id=E9EB3AA5