我的 EC2 Linux 实例不再响应或存在启动问题。如何使用 EC2Rescue for Linux 排查操作系统级问题?

上次更新时间:2020 年 4 月 15 日

我无法连接到我的 Amazon Elastic Compute Cloud (Amazon EC2) Linux 实例或者我遇到启动问题。要更正这些问题,我需要修复 OpenSSH 文件权限等常见问题或收集系统 (OS) 日志进行分析和问题排查。我该如何使用 EC2Rescue for Linux 解决此问题?

简短描述

EC2Rescue for Linux 是一种工具,可帮助诊断并排查有关 Amazon EC2 Linux 实例的问题。EC2Rescue for Linux 在 Amazon EC2 Linux 实例上运行,用于解决操作系统级问题。EC2Rescue for Linux 还会收集高级日志、系统利用率报告和配置文件,以供进一步分析。

EC2Rescue for Linux 的常见应用场景包括:

  • 收集系统利用率报告,如 vmstat、iostat、mpstat 等。
  • 收集日志和详细信息,如 syslog、dmesg、应用程序错误日志和 SSM 日志。
  • 检测系统问题,如非对称路由或重复的根设备标签。
  • 自动修复系统问题,如更正 OpenSSH 文件权限或禁用已知存在问题的内核参数。

系统要求

EC2Rescue for Linux 要求 Amazon EC2 Linux 实例满足以下先决条件

支持的操作系统

  • Amazon Linux 2
  • Amazon Linux 2016.09+
  • SLES 12+
  • RHEL 7+
  • Ubuntu 16.04+

软件要求

  • Python 2.7.9+ 或 3.2+

解决方法

在救援实例的帮助下对无法访问的 Amazon EC2 Linux 实例进行问题排查:

1.    在 Virtual Private Cloud (VPC) 中启动新的 Amazon EC2 实例,且使用与受损实例相同的 Amazon 系统映像 (AMI) 并与其位于同一可用区中。新实例将成为您的“救援”实例。

或者,也可以使用您可以访问的现有实例,但前提是该实例使用与受损实例相同的 AMI,并且二者位于同一可用区中。

2.    从受损实例中分离 Amazon Elastic Block Store (Amazon EBS) 根卷/dev/xvda/dev/sda1)。

3.    将 EBS 卷作为辅助设备 (/dev/sdf) 附加到救援实例。

4.    使用 SSH 连接到您的救援实例

5.    为在第 3 步中附加到救援实例的新卷创建挂载点目录 (/rescue)。

$ sudo mkdir /rescue

6.    在第 5 步中创建的目录中挂载卷。

$ sudo mount /dev/xvdf1 /rescue

注意:设备 (/dev/xvdf1) 可能会以不同的设备名称附加到救援实例。使用 lsblk 命令查看可用磁盘设备及其挂载点,以确定正确的设备名称。

注意:如果卷挂载失败,请检查 dmesg | tail。如果日志显示 UUID 冲突,请使用选项 -o nouuid

7.    将根目录 (chroot) 更改为新挂载的卷。

  $ sudo -i
  # for i in proc sys dev run; do mount --bind /$i /rescue/$i ; done
  # chroot /rescue

8.    下载 EC2Rescue for Linux 工具并安装到脱机 Linux 根卷。

$ curl -O https://s3.amazonaws.com/ec2rescuelinux/ec2rl.tgz
$ tar -xvf ec2rl.tgz

9.    通过列出帮助文件来验证安装。

$ cd ec2rl-<version_number>
$ ./ec2rl help

10.    运行不含任何选项的 EC2Rescue for Linux,以便以 sudo 的形式运行所有模块。

$ sudo ./ec2rl run

11.    在 /var/temp/ec2rl 中查看结果。

cat /var/tmp/ec2rl/<logfile_location>/Main.log

12.    根据结果对支持的模块进行修复。

$ ./ec2rl run --remediate 

13.    修复完成后,退出 chroot 并卸载辅助设备。

$ exit
$ sudo umount /rescue

注意:如果卸载操作不成功,您可能需要停止或重启救援实例,以实现干净卸载。

14.    将辅助卷 (/dev/sdf) 与救援 EC2 实例分离,然后以 /dev/xvda(根卷)的形式将其附加到原始实例。

15.    启动 EC2 实例,然后验证实例是否响应。

注意:您也可以使用 AWS Systems Manager Automation 文档排查连接问题。有关更多信息,请参阅演练:在无法访问的实例上运行 EC2Rescue 工具。AWSSupport-ExecuteEC2Rescue 文档旨在执行 Systems Manager 操作、AWS CloudFormation 操作和 AWS Lambda 函数的组合,从而自动执行使用 EC2Rescue for Linux 通常需要执行的步骤。

其他问题排查方法


这篇文章对您有帮助吗?

我们可以改进什么?


需要更多帮助?