用户提供的内核 - Amazon Elastic Compute Cloud
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

用户提供的内核

如果您的 Amazon EC2 实例上需要自定义内核,您可以从接近于您想要的内核的 AMI 开始,在您的实例上编译自定义内核,并更新引导加载程序以指向新内核。该过程根据您的AMI所使用的虚拟化类型而异。有关更多信息,请参阅Linux AMI 虚拟化类型

HVM AMIs (GRUB)

HVM 实例卷就像是物理磁盘。引导过程类似于带分区磁盘和引导加载程序的裸机操作系统,使它能够在当前支持的所有 Linux 发行版中工作。最常见的引导加载程序是 GRUB 或 GRUB2。

默认情况下,GRUB 不会将其输出发送到实例控制台,因为它会造成额外启动延迟。有关更多信息,请参阅实例控制台输出。如果要安装自定义内核,则应考虑启用 GRUB 输出。

无需指定后备内核,但是我们建议您在测试新内核时准备好后备内核。如果新内核发生故障时,GRUB 可以退回到另一个内核。如果有后备内核,实例即使没有找到新内核也能进行引导。

旧版 GRUB for Amazon Linux 使用 /boot/grub/menu.lst。GRUB2 for Amazon Linux 2 使用 /etc/default/grub。有关更新引导加载程序中的默认内核的更多信息,请参阅 Linux 发行版的文档。

半虚拟化 AMIs (PV-GRUB)

使用半虚拟化 (PV) 的亚马逊机器映像会在启动过程中使用名为 PV-GRUB 的系统。PV-GRUB 是半虚拟化引导加载程序,运行经过修补的 GNU GRUB 0.97 版本。当您启动实例时,PV-GRUB 会启动引导过程,然后链式加载由映像的 menu.lst 文件指定的内核。

PV-GRUB 理解标准 grub.confmenu.lst 命令,可与当前支持的所有 Linux 发行版配合使用。较旧发行版(如 Ubuntu 10.04 LTS、Oracle Enterprise Linux 或 CentOS 5.x)需要特殊的“ec2”或“xen”内核软件包,而较新发行版在默认内核软件包中包含所需驱动程序。

大多数新半虚拟化 AMI 在默认情况下使用 PV-GRUB AKI (包括 Amazon EC2 Launch Wizard Quick Start 菜单中提供的所有半虚拟化 Linux AMI),无需执行额外步骤即可在实例上使用不同的内核,前提是要使用的内核与您的发行版兼容。在实例上运行自定义内核的最佳方式是从接近于您想要的内核的 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、EXT3、EXT4、JFS、XFS 和 ReiserFS。其他文件系统格式可能不适用。

  • PV-GRUB 可以引导使用 gzip、bzip2、lzo 和 xz 压缩格式压缩的内核。

  • 集群 AMI 不支持也不需要 PV-GRUB,因为它们使用完全硬件虚拟化 (HVM)。当半虚拟化实例使用 PV-GRUB 来启动时,HVM 实例卷用作实际磁盘,并且启动过程与带已分区磁盘和引导加载程序的裸机操作系统的类似。

  • PV-GRUB 版本 1.03 及更低版本不支持 GPT 分区;它们仅支持 MBR 分区。

  • 如果您计划通过 Amazon Elastic Block Store (Amazon EBS) 卷使用逻辑卷管理 (LVM),则需要在 LVM 外有一个独立的引导分区。然后,您可以通过 LVM 创建逻辑卷。

为半虚拟化 AMIs 配置 GRUB

要引导 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/ 的较新 Vanilla Linux 内核版本)。Vanilla 条目是从此 AMI 的原始条目复制的,kernelinitrd 路径已更新为新位置。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 及更低版本仅检查此列表中的前两个位置。

Amazon PV-GRUB Kernel Image ID

PV-GRUB AKI 在所有 Amazon EC2 区域(不包括亚太地区(大阪))中都可用。同时存在适用于 32 位和 64 位架构类型的 AKI。大多数新 AMI 在默认情况下使用 PV-GRUB AKI。

我们建议您始终使用最新版本的 PV-GRUB AKI,因为并不是所有的 PV-GRUB AKI 版本都能与全部实例类型兼容。使用以下 describe-images 命令可获取当前区域的 PV-GRUB AKI 列表:

aws ec2 describe-images --owners amazon --filters Name=name,Values=pv-grub-*.gz

PV-GRUB 是 ap-southeast-2 区域中唯一可用的 AKI。您应验证要复制到此区域的任何 AMI 是否使用此区域中可用的 PV-GRUB 版本。

以下是每个区域的当前 AKI ID。使用 hd0 AKI 注册新 AMI。

注意

在之前提供 hd00 AKI 的区域,我们将继续提供 hd00 AKI,以实现向后兼容性。

ap-northeast-1,亚太区域(东京)
映像 ID 映像名称
aki-f975a998 pv-grub-hd0_1.05-i386.gz
aki-7077ab11 pv-grub-hd0_1.05-x86_64.gz
ap-southeast-1、亚太区域(新加坡)
映像 ID 映像名称
aki-17a40074 pv-grub-hd0_1.05-i386.gz
aki-73a50110 pv-grub-hd0_1.05-x86_64.gz
ap-southeast-2、亚太区域(悉尼)
映像 ID 映像名称
aki-ba5665d9 pv-grub-hd0_1.05-i386.gz
aki-66506305 pv-grub-hd0_1.05-x86_64.gz
eu-central-1、欧洲(法兰克福)
映像 ID 映像名称
aki-1419e57b pv-grub-hd0_1.05-i386.gz
aki-931fe3fc pv-grub-hd0_1.05-x86_64.gz
eu-west-1、欧洲(爱尔兰)
映像 ID 映像名称
aki-1c9fd86f pv-grub-hd0_1.05-i386.gz
aki-dc9ed9af pv-grub-hd0_1.05-x86_64.gz
sa-east-1、南美洲(圣保罗)
映像 ID 映像名称
aki-7cd34110 pv-grub-hd0_1.05-i386.gz
aki-912fbcfd pv-grub-hd0_1.05-x86_64.gz
us-east-1、US East (N. Virginia)
映像 ID 映像名称
aki-04206613 pv-grub-hd0_1.05-i386.gz
aki-5c21674b pv-grub-hd0_1.05-x86_64.gz
us-gov-west-1、Amazon GovCloud(美国西部)
映像 ID 映像名称
aki-5ee9573f pv-grub-hd0_1.05-i386.gz
aki-9ee55bff pv-grub-hd0_1.05-x86_64.gz
us-west-1、美国西部(加利福尼亚北部)
映像 ID 映像名称
aki-43cf8123 pv-grub-hd0_1.05-i386.gz
aki-59cc8239 pv-grub-hd0_1.05-x86_64.gz
us-west-2、美国西部(俄勒冈)
映像 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 版本
  1. 查找您的实例的内核 ID。

    aws ec2 describe-instance-attribute --instance-id instance_id --attribute kernel --region region { "InstanceId": "instance_id", "KernelId": "aki-70cb0e10" }

    此实例的内核 ID 是 aki-70cb0e10

  2. 查看该内核 ID 的版本信息。

    aws ec2 describe-images --image-ids aki-70cb0e10 --region region { "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 版本不是最新版本(如 Amazon PV-GRUB Kernel Image ID 所示),则应使用以下过程更新它。

更新您的 PV-GRUB 版本

如果您的实例使用较旧版本的 PV-GRUB,则您应将它更新为最新版本。

  1. 通过 Amazon PV-GRUB Kernel Image ID 确定您的区域和处理器架构的最新 PV-GRUB AKI。

  2. 停止您的实例。您的实例必须停止才能修改所使用的内核映像。

    aws ec2 stop-instances --instance-ids instance_id --region region
  3. 修改用于您的实例的内核映像。

    aws ec2 modify-instance-attribute --instance-id instance_id --kernel kernel_id --region region
  4. 重新启动您的实例。

    aws ec2 start-instances --instance-ids instance_id --region region