本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
用户提供的内核
如果您需要在 Amazon EC2 实例上使用自定义内核,则可以从接近所需的 AMI 开始,在您的实例上编译自定义内核,然后更新引导加载程序以指向新内核。该过程根据您的AMI所使用的虚拟化类型而异。有关更多信息,请参阅亚马逊 EC2 用户指南中的 Linux AMI 虚拟化类型。
HVM AMIs (GRUB)
HVM 实例卷就像是物理磁盘。引导过程类似于带分区磁盘和引导加载程序的裸机操作系统,使它能够在当前支持的所有 Linux 发行版中工作。最常见的引导加载程序是 GRUB 或。 GRUB2
默认情况下,GRUB 不会将其输出发送到实例控制台,因为它会造成额外启动延迟。有关更多信息,请参阅 Amazon EC2 用户指南中的实例控制台输出。如果要安装自定义内核,则应考虑启用 GRUB 输出。
无需指定后备内核,但是我们建议您在测试新内核时准备好后备内核。如果新内核发生故障时,GRUB 可以退回到另一个内核。如果有后备内核,实例即使没有找到新内核也能进行引导。
适用于亚马逊 Linux 的传统 GRUB 使用/boot/grub/menu.lst。 GRUB2 供 AL2 使用/etc/default/grub。有关更新引导加载程序中的默认内核的更多信息,请参阅 Linux 发行版的文档。
半虚拟化 AMIs (PV-GRUB)
AMIs 使用半虚拟化 (PV) 虚拟化的用户在启动过程中使用名为 PV-GRUB 的系统。PV-GRUB 是半虚拟化引导加载程序,运行经过修补的 GNU GRUB 0.97 版本。当您启动实例时,PV-GRUB 会启动引导过程,然后链式加载由映像的 menu.lst 文件指定的内核。
PV-GRUB 理解标准 grub.conf 或 menu.lst 命令,可与当前支持的所有 Linux 发行版配合使用。较旧发行版(如 Ubuntu 10.04 LTS、Oracle Enterprise Linux 或 CentOS 5.x)需要特殊的“ec2”或“xen”内核软件包,而较新发行版在默认内核软件包中包含所需驱动程序。
大多数现代半虚拟化默认 AMIs 使用 PV-GRUB AKI(包括 Amazon Launch Wizard 快速入门菜单 AMIs 中所有可用的半虚拟化 Linux),因此,只要您要使用的内核与您的 EC2 发行版兼容,您无需采取其他步骤即可在实例上使用不同的内核。在实例上运行自定义内核的最佳方式是从接近于您想要的内核的 AMI 开始,然后在实例上编译自定义内核并修改 menu.lst 文件以使用该内核进行引导。
您可以验证 AMI 的内核映像是否为 PV-GRUB AKI。运行以下 describe-images 命令(替换为您的内核映像 ID),并检查 Name 字段是否以 pv-grub 开头:
aws ec2 describe-images --filters Name=image-id,Values=aki-880531cd
PV-GRUB 的限制
PV-GRUB 具有以下限制:
-
您不能使用 64 位版本的 PV-GRUB 来启动 32 位的内核,反之亦然。
-
当您使用 PV-GRUB AKI 时,不能指定 Amazon Ramdisk Image (ARI)。
-
Amazon 已测试并验证 PV-GRUB 适用于以下文件系统格式: EXT2、、、JFS EXT3 EXT4、XFS 和 ReiserFS。其他文件系统格式可能不适用。
-
PV-GRUB 可以引导使用 gzip、bzip2、lzo 和 xz 压缩格式压缩的内核。
-
群集 AMIs 不支持也不需要 PV-GRUB,因为它们使用的是完整的硬件虚拟化 (HVM)。当半虚拟化实例使用 PV-GRUB 来启动时,HVM 实例卷用作实际磁盘,并且启动过程与带已分区磁盘和引导加载程序的裸机操作系统的类似。
-
PV-GRUB 版本 1.03 及更低版本不支持 GPT 分区;它们仅支持 MBR 分区。
-
如果您计划通过 Amazon Elastic Block Store (Amazon EBS) 卷使用逻辑卷管理 (LVM),则需要在 LVM 外有一个独立的引导分区。然后,您可以通过 LVM 创建逻辑卷。
为半虚拟化配置 GRUB AMIs
要引导 PV-GRUB,GRUB menu.lst 文件必须存在于映像中;此文件的最常见位置是 /boot/grub/menu.lst。
以下是用于启动带 PV-GRUB AKI 的 AMI 的 menu.lst 配置文件示例。在该示例中,可在两个内核条目中进行选择:Amazon Linux 2018.03(此 AMI 的原始内核),以及 Vanilla Linux 4.16.4(来自 https://www.kernel.org/kernel 和 initrd 路径已更新为新位置。default 0 参数将引导加载程序指向其发现的第一个条目 (在此例中为 Vanilla 条目),fallback 1 参数在引导第一个条目的过程中发生问题时,将引导加载程序指向下一个条目。
default 0 fallback 1 timeout 0 hiddenmenu title Vanilla Linux 4.16.4 root (hd0) kernel /boot/vmlinuz-4.16.4 root=LABEL=/ console=hvc0 initrd /boot/initrd.img-4.16.4 title Amazon Linux 2018.03 (4.14.26-46.32.amzn1.x86_64) root (hd0) kernel /boot/vmlinuz-4.14.26-46.32.amzn1.x86_64 root=LABEL=/ console=hvc0 initrd /boot/initramfs-4.14.26-46.32.amzn1.x86_64.img
无需在 menu.lst 文件中指定后备内核,但是我们建议您在测试新内核时准备好后备内核。如果新内核发生故障,PV-GRUB 可以回退到其他内核。如果有后备内核,实例即使没有找到新内核也能进行引导。
PV-GRUB 检查以下位置是否存在 menu.lst,使用找到的第一项:
-
(hd0)/boot/grub -
(hd0,0)/boot/grub -
(hd0,0)/grub -
(hd0,1)/boot/grub -
(hd0,1)/grub -
(hd0,2)/boot/grub -
(hd0,2)/grub -
(hd0,3)/boot/grub -
(hd0,3)/grub
请注意,PV-GRUB 1.03 及更低版本仅检查此列表中的前两个位置。
亚马逊 PV-GRUB 内核镜像 IDs
PV-GRUB AKIs 在除亚太 EC2 地区(大阪)之外的所有亚马逊地区均有售。有 32 AKIs 位和 64 位架构类型。大多数现代用户默认 AMIs 使用 PV-GRUB AKI。
我们建议您始终使用最新版本的 PV-GRUB AKI,因为并不是所有的 PV-GRUB AKI 版本都能与全部实例类型兼容。使用以下 d escribe-images 命令获取当前区域的 PV-GRUB AKIs 列表:
aws ec2 describe-images --owners amazon --filters Name=name,Values=pv-grub-*.gz
PV-GRUB 是 ap-southeast-2 区域中唯一可用的 AKI。您应验证要复制到此区域的任何 AMI 是否使用此区域中可用的 PV-GRUB 版本。
以下是每个区域的当前 IDs AKI。 AMIs 使用 hd0 AKI 进行新注册。
注意
我们继续提供 hd00, AKIs 以便在以前可用的地区向后兼容。
| 映像 ID | 映像名称 |
|---|---|
aki-f975a998
|
pv-grub-hd0_1.05-i386.gz
|
aki-7077ab11
|
pv-grub-hd0_1.05-x86_64.gz
|
| 映像 ID | 映像名称 |
|---|---|
aki-17a40074
|
pv-grub-hd0_1.05-i386.gz
|
aki-73a50110
|
pv-grub-hd0_1.05-x86_64.gz
|
| 映像 ID | 映像名称 |
|---|---|
aki-ba5665d9
|
pv-grub-hd0_1.05-i386.gz
|
aki-66506305
|
pv-grub-hd0_1.05-x86_64.gz
|
| 映像 ID | 映像名称 |
|---|---|
aki-1419e57b
|
pv-grub-hd0_1.05-i386.gz
|
aki-931fe3fc
|
pv-grub-hd0_1.05-x86_64.gz
|
| 映像 ID | 映像名称 |
|---|---|
aki-1c9fd86f
|
pv-grub-hd0_1.05-i386.gz
|
aki-dc9ed9af
|
pv-grub-hd0_1.05-x86_64.gz
|
| 映像 ID | 映像名称 |
|---|---|
aki-7cd34110
|
pv-grub-hd0_1.05-i386.gz
|
aki-912fbcfd
|
pv-grub-hd0_1.05-x86_64.gz
|
| 映像 ID | 映像名称 |
|---|---|
aki-04206613
|
pv-grub-hd0_1.05-i386.gz
|
aki-5c21674b
|
pv-grub-hd0_1.05-x86_64.gz
|
| 映像 ID | 映像名称 |
|---|---|
aki-5ee9573f
|
pv-grub-hd0_1.05-i386.gz
|
aki-9ee55bff
|
pv-grub-hd0_1.05-x86_64.gz
|
| 映像 ID | 映像名称 |
|---|---|
aki-43cf8123
|
pv-grub-hd0_1.05-i386.gz
|
aki-59cc8239
|
pv-grub-hd0_1.05-x86_64.gz
|
| 映像 ID | 映像名称 |
|---|---|
aki-7a69931a
|
pv-grub-hd0_1.05-i386.gz
|
aki-70cb0e10
|
pv-grub-hd0_1.05-x86_64.gz
|
更新 PV-GRUB
我们建议您始终使用最新版本的 PV-GRUB AKI,因为并不是所有的 PV-GRUB AKI 版本都能与全部实例类型兼容。较旧版本的 PV-GRUB 也并非在所有区域都可用,因此如果您将使用较旧版本的 AMI 复制到不支持该版本的区域,则无法引导从该 AMI 启动的实例,直至您更新内核映像。使用以下过程可检查您的实例的 PV-GRUB 版本并在必要时更新它。
检查您的 PV-GRUB 版本
-
查找您的实例的内核 ID。
aws ec2 describe-instance-attribute --instance-idinstance_id--attribute kernel --regionregion{ "InstanceId": "instance_id", "KernelId": "aki-70cb0e10" }此实例的内核 ID 是
aki-70cb0e10。 -
查看该内核 ID 的版本信息。
aws ec2 describe-images --image-idsaki-70cb0e10--regionregion{ "Images": [ { "VirtualizationType": "paravirtual", "Name": "pv-grub-hd0_1.05-x86_64.gz", ... "Description": "PV-GRUB release 1.05, 64-bit" } ] }此内核映像是 PV-GRUB 1.05。如果您的 PV-GRUB 版本不是最新版本(如 亚马逊 PV-GRUB 内核镜像 IDs 所示),则应使用以下过程更新它。
更新您的 PV-GRUB 版本
如果您的实例使用较旧版本的 PV-GRUB,则您应将它更新为最新版本。
-
通过 亚马逊 PV-GRUB 内核镜像 IDs 确定您的区域和处理器架构的最新 PV-GRUB AKI。
-
停止您的实例。您的实例必须停止才能修改所使用的内核映像。
aws ec2 stop-instances --instance-idsinstance_id--regionregion -
修改用于您的实例的内核映像。
aws ec2 modify-instance-attribute --instance-idinstance_id--kernelkernel_id--regionregion -
重新启动您的实例。
aws ec2 start-instances --instance-idsinstance_id--regionregion