

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 用户提供的内核
<a name="UserProvidedKernels"></a>

如果您的 Amazon EC2 实例上需要自定义内核，您可以从接近于您想要的内核的 AMI 开始，在您的实例上编译自定义内核，并更新引导加载程序以指向新内核。该过程根据您的AMI所使用的虚拟化类型而异。有关更多信息，请参阅 *Amazon EC2 用户指南*中的 [Linux AMI 虚拟化类型](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/virtualization_types.html)。

**Topics**
+ [HVM AMIs (GRUB)](#HVM_instances)
+ [半虚拟化 AMIs (PV-GRUB)](#Paravirtual_instances)

## HVM AMIs (GRUB)
<a name="HVM_instances"></a>

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

默认情况下，GRUB 不会将其输出发送到实例控制台，因为它会造成额外启动延迟。有关更多信息，请参阅《Amazon EC2 用户指南》**中的[实例控制台输出](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/troubleshoot-unreachable-instance.html#instance-console-console-output)。如果要安装自定义内核，则应考虑启用 GRUB 输出。

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

适用于亚马逊 Linux 的传统 GRUB 使用`/boot/grub/menu.lst`。 GRUB2 供 AL2 使用`/etc/default/grub`。有关更新引导加载程序中的默认内核的更多信息，请参阅 Linux 发行版的文档。

## 半虚拟化 AMIs (PV-GRUB)
<a name="Paravirtual_instances"></a>

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”内核软件包，而较新发行版在默认内核软件包中包含所需驱动程序。

大多数新半虚拟化 AMI 在默认情况下使用 PV-GRUB AKI (包括 Amazon EC2 Launch Wizard Quick Start 菜单中提供的所有半虚拟化 Linux AMI)，无需执行额外步骤即可在实例上使用不同的内核，前提是要使用的内核与您的发行版兼容。在实例上运行自定义内核的最佳方式是从接近于您想要的内核的 AMI 开始，然后在实例上编译自定义内核并修改 `menu.lst` 文件以使用该内核进行引导。

您可以验证 AMI 的内核映像是否为 PV-GRUB AKI。运行以下 [describe-images](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-images.html) 命令（替换为您的内核映像 ID），并检查 `Name` 字段是否以 `pv-grub` 开头：

```
aws ec2 describe-images --filters Name=image-id,Values=aki-880531cd
```

**Topics**
+ [PV-GRUB 的限制](#pv-grub-limitations)
+ [Configuring GRUB](#configuringGRUB)
+ [亚马逊 PV-GRUB 内核镜像 IDs](#AmazonKernelImageIDs)
+ [更新 PV-GRUB](#UpdatingPV-GRUB)

### PV-GRUB 的限制
<a name="pv-grub-limitations"></a>

PV-GRUB 具有以下限制：
+ 您不能使用 64 位版本的 PV-GRUB 来启动 32 位的内核，反之亦然。
+ 当您使用 PV-GRUB AKI 时，不能指定 Amazon Ramdisk Image (ARI)。
+ AWS 已测试并验证 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
<a name="configuringGRUB"></a>

要引导 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/](https://www.kernel.org/) 的较新 Vanilla Linux 内核版本）。Vanilla 条目是从此 AMI 的原始条目复制的，`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
<a name="AmazonKernelImageIDs"></a>

PV-GRUB AKI 在所有 Amazon EC2 区域（不包括亚太地区（大阪））中都可用。有 32 AKIs 位和 64 位架构类型。大多数现代用户默认 AMIs 使用 PV-GRUB AKI。

我们建议您始终使用最新版本的 PV-GRUB AKI，因为并不是所有的 PV-GRUB AKI 版本都能与全部实例类型兼容。使用以下 d [escribe-images](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-images.html) 命令获取当前区域的 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 以便在以前可用的地区向后兼容。


**ap-northeast-1，亚太区域（东京）**  

| 映像 ID | 映像名称 | 
| --- | --- | 
|  aki-f975a998  |  pv-grub-hd0\$11.05-i386.gz  | 
|  aki-7077ab11  |  pv-grub-hd0\$11.05-x86\$164.gz  | 


**ap-southeast-1、亚太区域（新加坡）**  

| 映像 ID | 映像名称 | 
| --- | --- | 
|  aki-17a40074  |  pv-grub-hd0\$11.05-i386.gz  | 
|  aki-73a50110  |  pv-grub-hd0\$11.05-x86\$164.gz  | 


**ap-southeast-2、亚太区域（悉尼）**  

| 映像 ID | 映像名称 | 
| --- | --- | 
|  aki-ba5665d9  |  pv-grub-hd0\$11.05-i386.gz  | 
|  aki-66506305  |  pv-grub-hd0\$11.05-x86\$164.gz  | 


**eu-central-1、欧洲（法兰克福）**  

| 映像 ID | 映像名称 | 
| --- | --- | 
|  aki-1419e57b  |  pv-grub-hd0\$11.05-i386.gz  | 
|  aki-931fe3fc  |  pv-grub-hd0\$11.05-x86\$164.gz  | 


**eu-west-1、欧洲（爱尔兰）**  

| 映像 ID | 映像名称 | 
| --- | --- | 
|  aki-1c9fd86f  |  pv-grub-hd0\$11.05-i386.gz  | 
|  aki-dc9ed9af  |  pv-grub-hd0\$11.05-x86\$164.gz  | 


**sa-east-1、南美洲（圣保罗）**  

| 映像 ID | 映像名称 | 
| --- | --- | 
|  aki-7cd34110  |  pv-grub-hd0\$11.05-i386.gz  | 
|  aki-912fbcfd  |  pv-grub-hd0\$11.05-x86\$164.gz  | 


**us-east-1、US East (N. Virginia)**  

| 映像 ID | 映像名称 | 
| --- | --- | 
|  aki-04206613  |  pv-grub-hd0\$11.05-i386.gz  | 
|  aki-5c21674b  |  pv-grub-hd0\$11.05-x86\$164.gz  | 


**us-gov-west-1， AWS GovCloud （美国西部）**  

| 映像 ID | 映像名称 | 
| --- | --- | 
|  aki-5ee9573f  |  pv-grub-hd0\$11.05-i386.gz  | 
|  aki-9ee55bff  |  pv-grub-hd0\$11.05-x86\$164.gz  | 


**us-west-1、美国西部（加利福尼亚北部）**  

| 映像 ID | 映像名称 | 
| --- | --- | 
|  aki-43cf8123  |  pv-grub-hd0\$11.05-i386.gz  | 
|  aki-59cc8239  |  pv-grub-hd0\$11.05-x86\$164.gz  | 


**us-west-2、美国西部（俄勒冈）**  

| 映像 ID | 映像名称 | 
| --- | --- | 
|  aki-7a69931a  |  pv-grub-hd0\$11.05-i386.gz  | 
|  aki-70cb0e10  |  pv-grub-hd0\$11.05-x86\$164.gz  | 

### 更新 PV-GRUB
<a name="UpdatingPV-GRUB"></a>

我们建议您始终使用最新版本的 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`。

1. 查看该内核 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 版本不是最新版本（如 [亚马逊 PV-GRUB 内核镜像 IDs](#AmazonKernelImageIDs) 所示），则应使用以下过程更新它。

**更新您的 PV-GRUB 版本**

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

1. 通过 [亚马逊 PV-GRUB 内核镜像 IDs](#AmazonKernelImageIDs) 确定您的区域和处理器架构的最新 PV-GRUB AKI。

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

   ```
   aws ec2 stop-instances --instance-ids instance_id --region region
   ```

1. 修改用于您的实例的内核映像。

   ```
   aws ec2 modify-instance-attribute --instance-id instance_id --kernel kernel_id --region region
   ```

1. 重新启动您的实例。

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