我将我的 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/标签挂载文件系统。有关更多信息,请参阅 Amazon EBS 和 NVMe on Linux 实例。
要解决这些问题,请确认 ENA 处于开启状态,并且您的 Linux 实例符合基于 Nitro 的实例模块和文件系统挂载的要求。
或者,您也可以运行 AWSSupport-MigrateXenToNitroLinux Systems Manager Automation 操作手册。本操作手册无需手动配置即可迁移 Amazon EC2 Linux Xen。有关更多信息,请参阅 AWSSupport-MigrateXenToNitroLinux。
解决方法
确保 ENA 已开启
1. 要确认 ENA 已开启,请参阅测试是否开启了增强联网,然后按照实例属性 (enaSupport) 下的说明进行操作。
2. 若未开启 ENA,执行 modify-instance-attribute 操作。有关更多信息,请参阅在 Amazon Linux AMI 上开启增强联网。
运行 NitroInstanceChecks 脚本
NitroInstanceChecks 脚本会检查您的实例,并会根据下列要求给出合格/不合格状态:
- 验证您的实例是否已安装 NVMe 模块。如果已安装,则脚本会验证模块是否已负载到 initramfs 镜像中。
- 验证您的实例是否已安装 ENA 模块。
- 分析 /etc/fstab 并查找使用设备名称挂载的块储存设备。
以下操作系统版本支持此脚本:
- Red Hat 衍生产品:Red Hat Linux、Red Hat Enterprise Linux、CentOS
- Amazon Linux、Amazon Linux 2
- Debian 衍生产品:Debian、Ubuntu
注意:有关 Red Hat 上的 ENA 驱动程序的更多信息,请参阅如何在运行 Red Hat 6/7 的 Amazon EC2 实例上安装和激活最新的 ENA 驱动程序以增强网络支持?
要运行 NitroInstanceChecks 脚本:
1. 在进行任何更改之前为您的卷生成快照或创建实例 Amazon 系统映像 (AMI),以留存备份。
2. 将您的实例类型更改为其原始类型。
3. 将脚本下载到您的实例上并使其处于可执行状态:
# chmod +x nitro_check_script.sh
4. 以 root 用户或 sudo 身份运行脚本:
# sudo ./nitro_check_script.sh
5. 在提示符处,输入 y 或 n(或 No):输入 y 让脚本重新生成和修改 /etc/fstab 文件,然后将每个分区的设备名称替换为其 UUID。原始的 fstab 文件已保存为 /etc/fstab.backup.$(date +%F-%H:%M:%S)。例如,/etc/fstab.backup.2019-09-01-22:06:05。输入 n 或 No,在输出结果中打印正确的 /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 的实例类型。