如果由于 Amazon EC2 实例的内部问题而无法连接到实例,此时如何在实例中检索数据?

上次更新时间:2020 年 3 月 3 日

我想从无法访问的 Amazon Elastic Compute Cloud (Amazon EC2) 实例中检索数据。该如何操作?

简短描述

如果您无法连接到 EC2 实例,但是需要检索实例中存储的数据,此时您可以停止该实例并分离根卷,然后将该卷附加到救援实例。

如果您的 EC2 实例属于实例存储支持的实例,或者拥有包含数据的实例存储卷,请不要执行此程序。此恢复方法需要首先停止然后再重启实例,这意味着实例存储卷上的数据都将丢失。有关更多信息,请参阅确定实例的根设备类型

如果您的实例是 Amazon EC2 Auto Scaling 组的一部分,或者您的实例由使用 AWS Auto Scaling 的服务(例如 Amazon EMR、AWS CloudFormation、AWS Elastic Beanstalk 等)启动,则停止实例可能会导致实例终止。在这种情况下,是否会发生实例终止取决于您的 Auto Scaling 组的实例缩减保护设置。如果您的实例是 Auto Scaling 组的一部分,请在开始执行解决步骤之前,暂时从 Auto Scaling 组中删除该实例

解决方法

1.    打开 Amazon EC2 控制台

2.    从导航窗格中选择实例,然后选择受损实例。

3.    依次选择操作实例状态停止

4.    在描述选项卡中,选择根设备,然后选择 EBS ID

5.    依次选择操作断开卷,然后选择是,请分离

6.    确认是否显示卷状态

7.    在受损实例所在的可用区中启动新的 EC2 实例。新实例将成为您的“救援”实例。

或者,如果某个您可以访问的现有实例使用了与受损实例相同的 Amazon 系统映像 (AMI),并且二者位于相同的可用区中,那么您可以使用该现有实例。

8.    启动救援实例后,从导航窗格中选择,然后选择受损实例已分离的根卷。

9.    选择操作,然后选择连接卷

10.    选择救援实例 ID (i-xxxxx),然后输入设备名称。设备名称必须指定为 /dev/sd[f-p]

11.    选择连接

12.    使用 SSH 连接到救援实例。

13.    运行 lsblk 命令以验证附加卷的设备名称。

$ lsblk

以下是该输出的示例:

NAME    MAJ:MIN   RM  SIZE RO TYPE MOUNTPOINT
xvda    202:0     0   15G  0 disk
└─xvda1 202:1     0   15G  0 part /
xvdf    202:80    0  15G  0 disk
    └─xvdf1 202:0 0  15G  0 part

如果您在第 10 步中指定了 /dev/sdf,则设备名称可能是 /dev/xvdf

14.    创建挂载目录,然后使用根权限进行挂载。

$ sudo mount -o nouuid /dev/xvdf1 /mnt

15.    检查挂载目录中的日志。如有必要,请使用 AWS 命令行界面 (AWS CLI) 将日志上传到 Amazon Simple Storage Service (Amazon S3),或使用 scp 命令将日志复制到本地 PC。

$ sudo cp /mnt/var/log/messages .
$ sudo chmod 644 messages
$ exit

16.    查看日志后,运行 unmount /mnt 分离附加卷。

$ sudo umount /mnt

17.    将卷附加到原始实例。设备名称为 /dev/xvda


这篇文章对您有帮助吗?

我们可以改进什么?


需要更多帮助?