

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 使用者提供的核心
<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 可備援其他核心。擁有備用核心，即使找不到新核心，執行個體也能開機。

舊版 GRUB for Amazon Linux 會使用 `/boot/grub/menu.lst`。適用於 AL2 的 GRUB2 使用 `/etc/default/grub`。 AL2 如需更新開機載入程式中預設核心的詳細資訊，請參閱 Linux 發行版的說明文件。

## 全虛擬化 AMIs (PV-GRUB)
<a name="Paravirtual_instances"></a>

使用全虛擬化 (PV) 虛擬化AMIs 在開機過程中使用稱為 *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)
+ [Amazon PV-GRUB 核心影像 ID](#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, 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 建立邏輯磁碟區。

### 設定虛擬虛擬的 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 (新版的 Vanilla Linux 核心，來自 [https://www.kernel.org/](https://www.kernel.org/))。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 及舊版只檢查本清單前兩個位置的其中之一。

### Amazon PV-GRUB 核心影像 ID
<a name="AmazonKernelImageIDs"></a>

所有 Amazon EC2 區域皆提供 PV-GRUB AKI，亞太區域 (大阪) 除外。32 位元和 64 位元架構類型都有 AKI。大部分的現代 AMI 都預設使用 PV-GRUB AKI。

建議您一律使用最新版的 PV-GRUB AKI，因為不是所有的 PV-GRUB AKI 版本都與所有執行個體類型相容。使用下列 [describe-images](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-images.html) 命令取得目前區域的 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 的區域仍繼續提供此 AKI 以保證回溯相容性。


**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 版本不是最新版 (如 [Amazon PV-GRUB 核心影像 ID](#AmazonKernelImageIDs) 中所示)，您應該使用下列程序更新它。

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

如果您的執行個體使用較舊的 PV-GRUB 版本，您應該將它更新至最新版本。

1. 從 [Amazon PV-GRUB 核心影像 ID](#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 
   ```