使用EC2Rescue提取启动失败的Windows日志

一、背景

当EC2 Windows EC2启动失败时候,因为无法通过RDP远程连接,排错会感到措手无策。这时候,可以通过EC2控制台,选中有问题的实例,点击操作,然后点击查看系统日志和查看实例截图这两个按钮来获取错误信息。

如下截图。

根据以上信息,可以判断是管理员密码错误,或者是网络防火墙不慎屏蔽了3389远程登录,还是Windows驱动失败导致无法启动等原因。

如果问题更加复杂化,例如Windows系统崩溃,发生 BDOS(Blue Screen of Death,俗称蓝屏),或者其他故障,完全无法启动,那么可以使用EC2Rescue工具提取日志,以供后续故障分析。

二、使用EC2Rescue工具

1、工具下载

准备一个正常的EC2 Windows节点,注意此Windows节点必须与出现问题的EC2位于同一个AZ可用区。这是因为EBS只在本AZ内可以访问,EBS磁盘不能跨AZ。

使用浏览器或者从AWS官网地址下载EC2Rescue工具。

此外,也可以使用Powershell直接下载,而无需调整Windows Server默认的IE安全设置。Powershell下载命令如下。

Invoke-WebRequest https://s3.amazonaws.com/ec2rescue/windows/EC2Rescue_latest.zip -OutFile $env:USERPROFILE\Desktop\EC2Rescue_latest.zip

如果下载从海外官网下载的网速过慢,可以从本文的镜像这里下载。命令如下。

Invoke-WebRequest https://s3.cn-north-1.amazonaws.com.cn/lxy-sa-software/EC2Rescue_latest.zip -OutFile $env:USERPROFILE\Desktop\EC2Rescue_latest.zip

2、卸载故障EC2磁盘

首先将无法启动的EC2停止。并且复制下这个EC2的实例ID。如下截图。

进入到EC2的EBS卷管理界面,在磁盘清单中,输入刚才的实例ID,并按回车键搜索,此时界面将过滤出来这个EC2的磁盘。如果有多个磁盘,则只需要系统盘即可。如下截图。

选中系统盘,点击操作,点击取消挂载(Detach)。如下截图。

卸载磁盘完成。

3、挂载磁盘

重新挂载此磁盘。如下截图。

如前文所属,执行EC2Rescue故障分析的Windows必须与故障EC2位于同一个AZ。因为EBS磁盘不可以跨AZ。

在要挂载的EC2的下拉框内,选择已经有EC2Rescue工具的虚拟机。其中Device名称这里,我们使用系统默认的xvdf即可。然后点击挂载。如下截图。

挂载完毕后,进入Windows,点击开始菜单,点击Windows管理工具。如下截图。

在打开的Windows管理工具界面中,选择“计算机管理”。如下截图。

在弹出的计算机管理界面中,点击磁盘管理,可以看到页面下方已经出现了新挂载的要修复的虚拟机的系统盘,并自动分配了盘符D。如下截图。

至此挂载磁盘完成。

4、采集日志

解压缩本文一开始下载的EC2Rescue.zip,获得一个文件夹,执行其中的可执行文件 EC2Rescue,如下截图。

在弹出的许可协议位置选择同意,然后进入EC2Rescue主界面,点击下一步继续。如下截图。

点击分析Offline实例按钮。如下截图。

选中挂载上的D盘,也就是无法启动的EC2的系统盘,然后点击下一步继续。如下截图。

点击下一步继续,提示是否确认,点击确认,随后EC2Rescue提示加载完成。如下截图。

在下一步界面中,选择是执行修复,还是只提取日志。

执行修复功能可以解决如下问题:

  • 系统时间
    • RealTimeisUniversal ‐ 检测是否已启用使用UTC时间的注册表项。
  • Windows 防火墙
    • 域网络 ‐ 检测是否已启用或禁用此 Windows 防火墙配置文件。
    • 私有网络 ‐ 检测是否已启用或禁用此 Windows 防火墙配置文件。
    • 访客或公有网络 ‐ 检测是否已启用或禁用此 Windows 防火墙配置文件。
  • 远程桌面
    • 服务启动 ‐ 检测是否已启用远程桌面服务。
    • 远程桌面连接 ‐ 检测是否已启用。
    • TCP 端口 ‐ 检测远程桌面服务正在侦听的端口。
  • EC2Config(Windows Server 2012 R2 及更早版本)
    • 安装 ‐ 检测所安装的 EC2Config 版本。
    • 服务启动 ‐ 检测是否已启用 EC2Config 服务。
    • Ec2SetPassword ‐ 生成新的管理员密码。
    • Ec2HandleUserData ‐ 在实例下一次启动时允许您执行用户数据脚本。
  • EC2Launch(Windows Server 2016 及更高版本)
    • 安装 ‐ 检测安装的 EC2Launch 版本。
    • Ec2SetPassword ‐ 生成新的管理员密码。
  • 网络接口
    • DHCP 服务启动 ‐ 检测是否已启用 DHCP 服务。
    • 以太网详细信息 ‐ 显示检测到的网络驱动器的版本信息。
    • 以太网上的 DHCP ‐ 检测是否已启用 DHCP。

由此可以看出,一些典型的系统配置错误,都可以使用EC2Rescue进行自动修复。修复之后,重新将硬盘挂载回原来的EC2,即可启用。

如果是遇到了蓝屏(BSOD)等问题,那么需要采集完整日志,包括内核崩溃后的kernel dump文件(内核转储),并使用debug工具跟踪分析。这时候就需要选择EC2Rescue的第三个按钮,采集日志。如下截图。

在收集日志界面上,选中所有项目,采集所有日志。然后点击采集按钮。如下截图。

在弹出的确认对话框中,点击Yes确认。如下截图。

随后选择日志提取出来的保存路径。

然后系统开始采集。如下截图。

采集完成。系统提示可查看采集过程的信息。

退出EC2Rescue工具时候,系统提示是否要自动umount卸载这个磁盘。这里取消选中,不要让工具自动卸载,稍后在磁盘管理中手动卸载。如下截图。

至此日志采集完成。

5、取消磁盘挂载

进入磁盘管理器,用右键点击挂载上的磁盘。选择修改驱动器盘符和路径。如下截图。

点击Remove按钮,删除这个驱动的挂载盘符。如下截图。

在卸载盘符成功的情况下,再次对磁盘点击右键,选择离线(Offline)。如下截图。

至此卸载操作完成。

6、复原

当调查完毕时候,需要将EBS挂载回原来的EC2。这里需要注意调整挂载点。当用于排错时候,EBS磁盘是作为D盘挂载到EC2,这时候挂载点是/dev/xvdf。当恢复原状时候,EBS磁盘需要挂载会原来EC2的系统盘,此时挂载点需要人为设置为 /dev/sda1 。如果还填写为/dev/xvdf,则这个虚拟机没有系统盘会无法启动。如下截图。

至此磁盘复原完成。

7、发送日志给AWS Support团队

现在可以将刚才提取出来的日志发送给AWS Support团队调查错误了。

四、小结

参考资料:

https://docs.aws.amazon.com/zh_cn/AWSEC2/latest/WindowsGuide/ec2rw-gui.html