

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

# 在 AL2023 上更新 Linux 核心
<a name="kernel-update"></a>

**Topics**
+ [AL2023 上的 Linux 核心版本](#al2023-kernels)
+ [將 AL2023 更新至較新的核心版本](#kernelup)
+ [AL2023 核心 - 常見問答集](#al2023-kernel-faq)

## AL2023 上的 Linux 核心版本
<a name="al2023-kernels"></a>

AL2023 定期包含以 Linux 核心長期支援 (LTS) 版本為基礎的新核心版本。

AL2023 最初於 2023 年 3 月發行，採用核心 6.1。

2025 年 4 月，AL2023 新增對 Linux 核心 6.12 的支援。此核心新增了新功能，包括 EEVDF 排程、FUSE 傳遞 I/O 支援、新的 Futex API，以及 eBPF 的改善。核心 6.12 也允許使用者空間程式在執行階段使用使用者空間陰影堆疊和記憶體密封來保護自己。

2026 年 3 月，AL2023 新增對 Linux 核心 6.18 的支援。更新的核心 6.18 可進一步改善處理器支援、虛擬化、安全性和效能。值得注意的功能包括改善跨架構的 IOMMU 功能，以及用於管理 CPU 漏洞緩解的攻擊向量控制。效能增強是透過更快速的 FSCRYPT 操作、記憶體管理改進，以及將 Sheaves 作為新的選擇加入、每個 CPU 陣列型快取層進行加密最佳化。

## 將 AL2023 更新至較新的核心版本
<a name="kernelup"></a>

從 2026 年 6 月開始，AL2023 將每年更新預設核心。[`al2023-ami-kernel-default`](ec2.md#launch-via-aws-cli) 一組 AMIs將更新為最新的 LTS 核心，因此新啟動的執行個體會自動產生新的核心版本，這是隨時掌握最新安全性修正和效能改善的最簡單方法。

如果您想要選擇特定的核心版本，您可以選取預先安裝所需核心的 AMI 或升級現有的 AL2023 EC2 執行個體，以核心 6.12 或 6.18 執行 AL2023。

### 使用特定核心版本執行 AL2023 AMI
<a name="kernelup-ami"></a>

您可以選擇使用透過 AWS 主控台或查詢 SSM 以取得特定參數預先安裝的特定核心來執行 AL2023 AMI。要查詢的 SSM 金鑰以 開頭，`/aws/service/ami-amazon-linux-latest/`後面接著其中一個

#### 對於核心 6.12
<a name="kernel6.12-ami"></a>
+ `al2023-ami-kernel-6.12-arm64` 適用於 arm64 架構
+ `al2023-ami-minimal-kernel-6.12-arm64` 適用於 arm64 架構 (最小 AMI)
+ `al2023-ami-kernel-6.12-x86_64` 適用於 x86\$164 架構
+ `al2023-ami-minimal-kernel-6.12-x86_64` 適用於 x86\$164 架構 (最小 AMI)

#### 對於核心 6.18
<a name="kernel6.18-ami"></a>
+ `al2023-ami-kernel-6.18-arm64` 適用於 arm64 架構
+ `al2023-ami-minimal-kernel-6.18-arm64` 適用於 arm64 架構 (最小 AMI)
+ `al2023-ami-kernel-6.18-x86_64` 適用於 x86\$164 架構
+ `al2023-ami-minimal-kernel-6.18-x86_64` 適用於 x86\$164 架構 (最小 AMI)

如需選取 AL2023 AMIs的詳細資訊[使用 SSM 參數和 啟動 AL2023 AWS CLI](ec2.md#launch-via-aws-cli)，請參閱 。

### 將 AL2023 執行個體更新為較新的核心
<a name="kernel-ipu"></a>

您可以使用下列步驟，將執行中的 AL2023 執行個體就地升級至核心 6.12 或 6.18：

1. 偵測目前的核心並設定目標版本：

   ```
   # Automatically detect current kernel version BEFORE upgrade
   $ CURRENT_KERNEL=$(uname -r)
   $ SOURCE_VERSION=""
   
   $ if [[ $CURRENT_KERNEL == *"6.12"* ]]; then
       SOURCE_VERSION="6.12"
   else
       SOURCE_VERSION=""
   fi
   
   # Save the source version to a persistent location for use after reboot
   $ echo "${SOURCE_VERSION}" | sudo tee /var/lib/source_kernel_version > /dev/null
   ```

   ```
   # Set your target version (change this to your desired kernel: 6.12 or 6.18)
   $ TARGET_VERSION="6.12"
   ```

   ```
   $ echo "Current kernel: ${SOURCE_VERSION:-6.1}"
   $ echo "Upgrading to kernel ${TARGET_VERSION}"
   ```

1. 安裝目標核心套件：

   ```
   $ sudo dnf install -y kernel${TARGET_VERSION}
   ```

1. 取得目標核心套件的最新版本：

   ```
   $ version=$(rpm -q --qf '%{version}-%{release}.%{arch}\n' kernel${TARGET_VERSION} | sort -V | tail -1) 
   ```

1. 將新核心設為預設核心：

   ```
   $ sudo grubby --set-default "/boot/vmlinuz-$version" 
   ```

1. 重新啟動您的系統：

   ```
   $ sudo reboot 
   ```

1. 解除安裝先前的核心：

   ```
   # Read the source kernel version from the saved file
   $ SOURCE_VERSION=$(sudo cat /var/lib/source_kernel_version)
   
   # Uninstall the source kernel
   $ sudo dnf remove -y kernel${SOURCE_VERSION}
   ```

1. 將額外的核心套件取代為其目標核心對等項目：

   ```
   # Set your target version (change this to your desired kernel: 6.12 or 6.18)
   $ TARGET_VERSION="6.12"
   ```

   ```
   $ declare -A pkgs
   $ pkgs=(
   [bpftool${SOURCE_VERSION}]=bpftool${TARGET_VERSION}
   [kernel${SOURCE_VERSION}-debuginfo]=kernel${TARGET_VERSION}-debuginfo
   [kernel${SOURCE_VERSION}-debuginfo-common]=kernel${TARGET_VERSION}-debuginfo-common
   [kernel${SOURCE_VERSION}-headers]=kernel${TARGET_VERSION}-headers
   [kernel${SOURCE_VERSION}-libbpf]=kernel${TARGET_VERSION}-libbpf
   [kernel${SOURCE_VERSION}-libbpf-devel]=kernel${TARGET_VERSION}-libbpf-devel
   [kernel${SOURCE_VERSION}-libbpf-static]=kernel${TARGET_VERSION}-libbpf-static
   [kernel${SOURCE_VERSION}-modules-extra-common]=kernel${TARGET_VERSION}-modules-extra-common
   [kernel${SOURCE_VERSION}-tools]=kernel${TARGET_VERSION}-tools
   [kernel${SOURCE_VERSION}-tools-devel]=kernel${TARGET_VERSION}-tools-devel
   [perf${SOURCE_VERSION}]=perf${TARGET_VERSION}
   [python3-perf${SOURCE_VERSION}]=python3-perf${TARGET_VERSION}
   )
   $ for pkg in "${!pkgs[@]}"; do 
     rpm -q $pkg && sudo dnf -y swap $pkg "${pkgs["$pkg"]}" ;
   done
   ```

1. （選用） 解除安裝先前核心版本的 kernel-devel：

   ```
   $ rpm -q kernel${SOURCE_VERSION}-devel && sudo dnf remove -y kernel${SOURCE_VERSION}-devel 
   ```

### 降級至較舊的核心版本
<a name="kernel-downgrade"></a>

如果您在任何時候需要降級至較早的核心版本，請使用下列步驟：

1. 偵測目前的核心並設定目標版本：

   ```
   # Automatically detect current kernel version BEFORE downgrade
   $ CURRENT_KERNEL=$(uname -r)
   $ SOURCE_VERSION=""
   
   $ if [[ $CURRENT_KERNEL == *"6.12"* ]]; then
       SOURCE_VERSION="6.12"
   elif [[ $CURRENT_KERNEL == *"6.18"* ]]; then
       SOURCE_VERSION="6.18"
   fi
   
   # Save the source version to a persistent location for use after reboot
   $ echo "${SOURCE_VERSION}" | sudo tee /var/lib/source_kernel_version > /dev/null
   ```

   ```
   # Set your target version (change this to your desired kernel)
   # Use "" for kernel 6.1, "6.12" for kernel 6.12
   $ TARGET_VERSION=""
   ```

   ```
   $ echo "Downgrading from kernel ${SOURCE_VERSION:-6.1} to kernel ${TARGET_VERSION:-6.1}"
   ```

1. 將額外的核心套件取代為其目標核心對等項目：

   ```
   $ declare -A pkgs
   $ pkgs=(
   [bpftool${TARGET_VERSION}]=bpftool${SOURCE_VERSION}
   [kernel${TARGET_VERSION}-debuginfo]=kernel${SOURCE_VERSION}-debuginfo
   [kernel${TARGET_VERSION}-debuginfo-common]=kernel${SOURCE_VERSION}-debuginfo-common
   [kernel${TARGET_VERSION}-headers]=kernel${SOURCE_VERSION}-headers
   [kernel${TARGET_VERSION}-libbpf]=kernel${SOURCE_VERSION}-libbpf
   [kernel${TARGET_VERSION}-libbpf-devel]=kernel${SOURCE_VERSION}-libbpf-devel
   [kernel${TARGET_VERSION}-libbpf-static]=kernel${SOURCE_VERSION}-libbpf-static
   [kernel${TARGET_VERSION}-modules-extra-common]=kernel${SOURCE_VERSION}-modules-extra-common
   [kernel${TARGET_VERSION}-tools]=kernel${SOURCE_VERSION}-tools
   [kernel${TARGET_VERSION}-tools-devel]=kernel${SOURCE_VERSION}-tools-devel
   [perf${TARGET_VERSION}]=perf${SOURCE_VERSION}
   [python3-perf${TARGET_VERSION}]=python3-perf${SOURCE_VERSION}
   )
   $ for pkg in "${!pkgs[@]}"; do 
     rpm -q "${pkgs["$pkg"]}" && sudo dnf -y swap "${pkgs["$pkg"]}" $pkg ;
   done
   ```

1. 安裝目標核心套件：

   ```
   $ sudo dnf install -y kernel${TARGET_VERSION}
   ```

1. 取得目標核心套件的最新版本：

   ```
   $ version=$(rpm -q --qf '%{version}-%{release}.%{arch}\n' kernel${TARGET_VERSION} | sort -V | tail -1) 
   ```

1. 將目標核心設為預設核心：

   ```
   $ sudo grubby --set-default "/boot/vmlinuz-$version" 
   ```

1. 重新啟動您的系統：

   ```
   $ sudo reboot 
   ```

1. 解除安裝來源核心：

   ```
   # Read the source kernel version from the saved file
   $ SOURCE_VERSION=$(sudo cat /var/lib/source_kernel_version)
   
   # Uninstall the source kernel
   $ sudo dnf remove -y kernel${SOURCE_VERSION}
   ```

## AL2023 核心 - 常見問答集
<a name="al2023-kernel-faq"></a>

### 1. 核心更新後是否需要重新啟動？
<a name="w2aac37c19b9b3"></a>

每個對執行中核心的變更都需要重新啟動。

### 2. 如何讓多個執行個體的核心up-to-date？
<a name="w2aac37c19b9b5"></a>

Amazon Linux 不提供管理執行個體機群的設施。我們建議您使用 [AWS Systems Manager](https://aws.amazon.com/systems-manager/) 等工具來修補大型機群。

### 3. 如何檢查目前執行的核心版本？
<a name="w2aac37c19b9b7"></a>

在 AL2023 執行個體上執行此命令：

```
$ uname -r 
```

### 4. AL2023 建議我使用哪個核心？
<a name="w2aac37c19b9b9"></a>

建議升級至最新的 AL2023 核心 6.18，而所有其他 AL2023 核心仍受支援。建議客戶在升級之前測試工作負載。

### 5. 我現有的應用程式是否適用於任何 AL2023 核心？
<a name="w2aac37c19b9c11"></a>

AL2023 支援較新的核心 (6.12 或 6.18)，方式與核心 6.1 相同。應用程式將正常運作，並且正在幕後進行改善。無論如何，客戶都應該先測試其特定工作負載，再切換到較新的核心。

### 6. 如何為核心 6.12 或 6.18 安裝核心標頭、開發套件和額外模組？
<a name="w2aac37c19b9c13"></a>

請執行：

```
$ version=$(uname -r | grep -oP '^\d+\.\d+')
$ sudo dnf install -y kernel${version}-modules-extra-$(uname -r) kernel${version}-headers-$(uname -r) kernel${version}-devel-$(uname -r)
```

### 7. 支援核心 6.12 和 6.18 多久？
<a name="w2aac37c19b9c15"></a>

支援 Kernel 6.12 和 6.18，直到 Amazon Linux 2023 的計劃生命週期結束，即 2029-06-30。