我的 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 通常需要执行的步骤。
其他问题排查方法
- 有关恢复 Linux 实例的一般说明,请参阅主机发生故障时的实例恢复。有关 Windows 实例,请参阅对无法访问的实例进行故障排除。
- 如果实例的根设备是 Amazon EBS 支持的卷,请尝试停止并启动实例。有关更多信息,请参阅停止并启动实例。
- 对于实例存储支持的实例,如果为实例创建了自定义 AMI,则或许可以使用 AMI 作为备份来还原实例。有关从您自己的 AMI 创建新实例的说明,请参阅从 AMI 启动实例。
- 在某些情况下,您的 EBS 卷可能禁用了 I/O 访问,这会使您的实例无法访问。有关如何确定并排查此问题的说明,请参阅使用自动启用的 IO 卷属性。
- 如果您丢失了 SSH 密钥对,可以使用 Systems Manager Automation 和 AWSSupport-ResetAccess 文档重置。