为何我的 Linux 实例在我将其类型更改为基于 Nitro 的实例类型后未启动?

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

我将我的 Amazon Elastic Compute Cloud (Amazon EC2) Linux 实例更改为基于 Nitro 的实例类型,但它现在未启动。

简短描述

以下是 Linux 实例在被更改为基于 Nitro 的类型后可能未启动的部分常见原因:

  • 该实例的 Elastic Network Adapter (ENA) enaSupport 属性已禁用。
  • 未在该实例上安装 ENA 模块。
  • 该实例上未安装 NVMe 模块,或者 NVMe 模块未加载到实例的 initramfs 映像中(如果已安装)。
  • 您尝试在启动时使用设备名称在 "/etc/fstab" 文件中挂载文件系统。Amazon Elastic Block Store (Amazon EBS) 卷将作为 NVMe 设备公开给这些实例类型,并且设备名称也会发生变化。为避免这种情况,请使用 UUID/标签挂载文件系统。有关更多信息,见 Linux 实例上的 Amazon EBS 和 NVMe

要解决这些问题,请确认 ENA 处于启用状态,并且您的 Linux 实例符合基于 Nitro 的实例模块和文件系统挂载的要求。

解决方法

确保启用 ENA

1.    要确保启用 ENA,按照实例属性 (enaSupport) 的说明测试是否已启动增强联网功能

2.    若已禁用 ENA,执行 modify-instance-attribute 操作。有关更多信息,见在 Amazon Linux AMI 上启用增强联网

运行 NitroInstanceChecks 脚本

NitroInstanceChecks 脚本会检查您的实例,并会根据下列要求给出合格/不合格状态:

  • 验证您的实例是否已安装 NVMe 模块。如果已安装,该脚本会验证该模块是否已加载到 intiramfs 镜像中。
  • 验证您的实例是否已安装 ENA 模块。
  • 分析 /etc/fstab 并查找使用设备名称挂载的块储存设备。

以下操作系统版本支持此脚本:

  • Red Hat 衍生产品:Red Hat Linux、Red Hat Enterprise Linux、CentOS
  • Amazon Linux、Amazon Linux 2
  • Debian 衍生产品:Debian、Ubuntu

要运行 NitroInstanceChecks 脚本:

1.    在进行任何更改之前为您的卷生成快照创建实例 Amazon 系统映像 (AMI),以留存备份。

2.    将您的实例类型更改为其原始类型。

3.    将脚本下载到您的实例上并使其处于可执行状态:

# chmod +x nitro_check_script.sh

4.    以 root 用户或 sudo 身份运行脚本:

# sudo ./nitro_check_script.sh

5.    收到提示后,输入 yn(或 No):如果您希望脚本生成与修改 /etc/fstab 文件,并且使用每个分区的 UUID 替换其设备名称,输入 y。原始的 fstab 文件已保存为 /etc/fstab.backup.$(日期+%F-%H:%M:%S)。例如,/etc/fstab.backup.2019-09-01-22:06:05。输入 nNo,在输出结果中打印正确的 /etc/fstab 文件,但非替换它。

成功的输出如下所示:

------------------------------------------------
OK  NVMe Module is installed and available on your instance
OK  ENA Module is installed and available on your instance
OK  fstab file looks fine and does not contain any device names.
------------------------------------------------

6.    满足所有要求后,将实例更改为基于 Nitro 的实例类型。


这篇文章对您有帮助吗?

我们可以改进什么?


需要更多帮助?