如何使用 EC2Rescue for Linux 排查操作系统级问题?
我无法连接到我的 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+
**注意:**如果您为 Linux 启用了 EC2 串行控制台,则可以使用它来排查受支持的基于 Nitro 的实例类型问题。串行控制台可帮助您排查启动问题、网络配置和 SSH 配置问题。串行控制台无需网络连接即可连接到您的实例。您可以使用 Amazon EC2 控制台或 AWS 命令行界面 (AWS CLI) 访问串行控制台。
在使用串行控制台之前,在账户层面授予对该控制台的访问权限。然后,创建 AWS Identity and Access Management (IAM) 策略,授予对 IAM 用户的访问权限。此外,每个使用串行控制台的实例都必须至少包含一个基于密码的用户。如果您的实例无法访问,并且尚未配置对串行控制台的访问权限,请按照解决方法部分中的说明进行操作。有关为 Linux 配置 EC2 串行控制台的信息,请参阅配置对 EC2 串行控制台的访问权限。
**注意:**如果在运行 AWS CLI 命令时收到错误,请确保您使用的是最新的 AWS CLI 版本。
解决方法
要使用 EC2Rescue for Linux 对无法访问的 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. 成为根用户,使用 lsblk 标识正确的设备名称,然后将其保存以在整个过程中使用:
$ sudo -i # lsblk # rescuedev=/dev/xvdf1
**注意:**设备(/dev/xvdf1)可能会以不同的设备名称附加到救援实例。使用 lsblk 命令查看可用磁盘设备及其挂载点,以确定正确的设备名称。
6. 选择要使用的适当临时挂载点,并确保它存在,请使用 /mnt,除非该挂载点已在使用中:。
# rescuemnt=/mnt # mkdir -p $rescuemnt
7. 从附加的卷挂载根文件系统:
# mount $rescuedev $rescuemnt
**注意:**如果卷挂载失败,请检查 dmesg | tail。如果日志显示 UUID 冲突,请使用选项 -o nouuid。
8. 挂载特殊文件系统并将根目录(chroot)更改为新挂载的文件系统:
# for i in proc sys dev run; do mount --bind /$i $rescuemnt/$i ; done # chroot $rescuemnt
9. 下载 EC2Rescue for Linux 工具并安装到脱机 Linux 根卷:
# curl -O https://s3.amazonaws.com/ec2rescuelinux/ec2rl.tgz # tar -xf ec2rl.tgz
10. 通过列出帮助文件来验证安装:
# cd ec2rl-<version_number> # ./ec2rl help
11. 运行不含任何选项的 EC2Rescue for Linux,以运行所有模块:
# ./ec2rl run
12. 在 /var/tmp/ec2rl 中查看结果:
# cat /var/tmp/ec2rl/*/Main.log | more
13. 根据结果对支持的模块进行修复:
# ./ec2rl run --remediate
14. 修复完成后,退出 chroot 并卸载辅助设备:
# exit # umount $rescuemnt/{proc,sys,dev,run,}
注意:如果卸载操作不成功,您可能需要停止或重启救援实例,以实现干净卸载。
15. 将辅助卷(/dev/sdf)与救援 EC2 实例分离,然后以 /dev/xvda 或 /dev/sda1(根卷)的形式将其附加到原始实例。确保这与步骤 2 中看到的相同。
16. 启动 EC2 实例,然后验证实例是否响应。
**注意:**您也可以使用 AWS Systems Manager Automation 文档排查连接问题。有关更多信息,请参阅演练:在无法访问的实例上运行 EC2Rescue 工具。AWSSupport-ExecuteEC2Rescue 文档旨在自动执行使用 EC2Rescue for Linux 正常所需的步骤。这些步骤是 Systems Manager 操作、AWS CloudFormation 操作和 AWS Lambda 函数的组合。
其他问题排查方法
- 有关恢复 Linux 实例的一般说明,请参阅主机发生故障时的实例恢复。有关 Windows 实例,请参阅对无法访问的实例进行故障排除。
- 如果实例的根设备是 Amazon EBS 支持的卷,请尝试停止然后启动实例。有关更多信息,请参阅停止并启动实例。
- 对于实例存储支持的实例,如果为实例创建了自定义 AMI,则或许可以使用 AMI 作为备份来还原实例。有关从您拥有的 AMI 创建新实例的说明,请参阅使用旧的启动实例向导启动实例。
- 在某些情况下,您的 EBS 卷可能禁用了 I/O 访问,这会使您的实例无法访问。有关如何确定并排查此问题的说明,请参阅使用自动启用的 IO 卷属性。
- 如果您丢失了 SSH 密钥对,可以使用 Systems Manager Automation 和 AWSSupport-ResetAccess 文档重置。
相关信息
使用 EC2Rescue 和 Amazon EC2 Systems Manager Automation 恢复您的受损实例
相关内容
- AWS 官方已更新 9 个月前
- AWS 官方已更新 9 个月前
- AWS 官方已更新 2 年前