全部產品
Search
文件中心

Elastic Compute Service:如何為已有自訂鏡像安裝NVMe驅動?

更新時間:Jul 27, 2024

當您的ECS執行個體需要通過已有的但未安裝NVMe(Non-Volatile Memory Express)驅動的自訂鏡像部署業務,並計劃通過NVMe協議來增強儲存效能時,您可以按照本文操作為已有的自訂鏡像安裝NVMe驅動,才能確保ECS執行個體正常啟動、業務穩定運行。

非易失性儲存空間標準介面NVMe是一種專為固態儲存(如基於快閃記憶體的SSD)設計的高速介面協議,相比SCSI、virtio-blk等傳統驅動協議,它具有速度更快、傳輸頻寬更高的特點。關於NVMe的更多介紹,請參見NVMe概述

操作環境

您可能在以下情境中會涉及已有自訂鏡像未安裝NVMe驅動的情況,需要按照本文操作:

  • 您是本地製作的自訂鏡像,在匯入阿里雲時通過鏡像檢測功能發現鏡像未安裝NVMe驅動。

  • 在購買支援NVMe協議的ECS執行個體規格時,無法選到自訂鏡像,可能因為鏡像與執行個體規格的NVMe屬性不匹配。

    說明

操作步驟

  1. 通過已有自訂鏡像建立一台ECS執行個體,用於中轉自訂鏡像的資料。

    具體操作,請參見使用自訂鏡像建立執行個體

    重要

    建立的中轉執行個體會產生費用,待新的自訂鏡像建立完成後,建議您及時釋放執行個體,避免持續產生費用。

  2. 遠端連線建立ECS執行個體。

    具體操作,請參見串連方式概述

  3. 查看建立ECS執行個體是否包含NVMe驅動,並安裝NVMe驅動。

    雲助手自動設定

    雲助手提供了ecs_nvme_config外掛程式,可以協助您快速完成NVMe驅動配置,但是有作業系統限制。

    ecs_nvme_config外掛程式支援的作業系統情況

    • ecs_nvme_config外掛程式支援的作業系統:

      • Alibaba Cloud Linux

      • Anolis OS

      • CentOS/CentOS Stream

      • Debian

      • Ubuntu

      • OpenSUSE

      • SUSE Linux Enterprise Server

      • Red Hat Enterprise Linux

      • Fedora

      • Rocky Linux

      • AlmaLinux

    • 不支援ecs_nvme_config外掛程式的作業系統版本資訊:

      • CentOS/Red Hat Enterprise Linux:低於6.6的作業系統版本

      • Debian:低於9的作業系統版本

      • Ubuntu:低於16的作業系統版本

      • OpenSUSE:42作業系統版本

      • SUSE Linux Enterprise Server:低於11.4的作業系統版本

    1. 運行以下命令,檢查執行個體內是否已安裝雲助手Agent,並檢查用戶端內是否提供了ecs_nvme_config外掛程式。

      acs-plugin-manager --list

      image

      • 如果您運行命令後沒有返回雲助手相關資訊,則需要先在執行個體內安裝雲助手Agent。具體操作,請參見安裝雲助手Agent

      • 如果返回了雲助手外掛程式列表且存在ecs_nvme_config外掛程式,請繼續下一步操作。

    2. 使用ecs_nvme_config外掛程式,完成NVMe相關的配置。

      1. 運行以下命令,使用ecs_nvme_config外掛程式檢查當前執行個體內是否有NVMe模組,以及是否可以配置NVMe模組。

        sudo acs-plugin-manager --exec --plugin ecs_nvme_config --params --check
        • 如果返回結果中存在如下提示資訊,則表示執行個體中已安裝NVMe驅動,您無需進行NVMe相關的配置,可直接建立自訂鏡像。

          [SUCCESS]  Summary: Your image can Runnig on nvme instance
        • 如果返回結果中存在類似如下[ERROR]提示資訊,則需要繼續執行下一步操作。

          [ERROR]  1.initrd/initramfs not has nvme module, Please run acs-plugin-manager --exec --plugin ecs_nvme_config --params -f/--fix to enable nvme;
      2. 根據檢查結果中的提示資訊,配置NVMe驅動以及相關參數資訊。

        sudo acs-plugin-manager --exec --plugin ecs_nvme_config --params --fix
      3. 完成配置後,運行以下命令,重啟執行個體。

        sudo reboot
      4. 重啟執行個體後,重新檢查NVMe模組是否配置成功。

        sudo acs-plugin-manager --exec --plugin ecs_nvme_config --params --check

        配置成功的返回樣本如下:

        [OK]  1.initrd/initramfs already contain nvme module;
        
        [OK]  2.fstab file looks fine and does not contain any device names;
        
        [OK]  3.The nvme parameters already included.
        
        [SUCCESS]  Summary: Your image can Runnig on nvme instance

    手動設定(CentOS/Alibaba Cloud Linux系列

    1. 運行以下命令,查看系統核心是否已經載入了NVMe驅動。

      cat /boot/config-`uname -r` | grep -i nvme | grep -v "^#"

      image

      • 如果返回結果CONFIG_BLK_DEV_NVME=y,則表示該作業系統可以直接在支援NVMe協議的執行個體規格類型系列上啟動,可以直接執行步驟ⅳ

      • 如果返回結果CONFIG_BLK_DEV_NVME=m,需要依次完成以下操作。

    2. 運行以下命令,查看initramfs中是否包含NVMe驅動。

      sudo lsinitrd /boot/initramfs-`uname -r`.img | grep -i nvme | awk '{print $NF}'

      image

      • 如果返回如圖所示的結果,則表示該作業系統可以直接在支援NVMe協議的執行個體規格類型系列上啟動,可以直接執行步驟ⅳ

      • 如果沒有返回如圖所示的結果,需要依次完成以下操作。

    3. 依次運行以下命令,使initramfs支援NVMe驅動。

      mkdir -p /etc/dracut.conf.d
      echo 'add_drivers+=" nvme nvme-core "' | sudo tee /etc/dracut.conf.d/nvme.conf > /dev/null
      sudo dracut -v -f
      說明

      如果您的作業系統沒有安裝dracut工具,您需要先運行sudo yum -y install dracut安裝dracut工具。

    4. 在GRUB中添加NVMe相關的io_timeout參數。

      說明
      • 在GRUB中添加NVMe相關的io_timeout參數主要是為了應對Linux系統中與NVMe裝置相關的逾時錯誤問題。將逾時值設為最大,系統在處理NVMe裝置的I/O請求時不會因逾時問題而導致故障。

      • 大部分Linux發行版本中io_timeout參數預設配置為30秒。在新版本的核心中,需要將io_timeout參數設定為最大值4,294,967,295秒,低核心版本中需要設定為255秒。

      1. 運行以下命令,開啟grub檔案。

        sudo vi /etc/default/grub
      2. i鍵進入編輯模式,在GRUB_CMDLINE_LINUX=一行中,添加nvme_core.io_timeout=4294967295 nvme_core.admin_timeout=4294967295參數資訊。

        添加參數後,檔案內容如下圖所示:

        image

        說明

        如果設定檔中預設已存在相同的參數資訊,則無需再次添加。

      3. Esc鍵退出編輯模式,輸入:wq並按Enter鍵,儲存退出檔案。

    5. 運行以下命令,使配置的GRUB生效。

      根據ECS執行個體的啟動模式不同,選擇以下適用於您的命令:

      • BIOS(Legacy)啟動模式

        sudo grub2-mkconfig -o /boot/grub2/grub.cfg
      • UEFI啟動模式

        sudo grub2-mkconfig -o /boot/efi/EFI/centos/grub.cfg
        說明

        關於ECS執行個體啟動模式的更多說明,請參見ECS執行個體啟動模式最佳實務

    6. 重新運行以下命令,查看是否有NVMe相關的返回資訊。

      sudo lsinitrd /boot/initramfs-`uname -r`.img | grep -i nvme | awk '{print $NF}'

      如果有類似於如下圖所示的返回結果,則表示已配置完成,該作業系統可以直接在支援NVMe協議的執行個體規格類型系列上啟動。

      image

    手動設定(Ubuntu/Debian系列)

    1. (可選)運行以下命令,查看initrd中包含的NVMe驅動。

      lsinitramfs /boot/initrd.img-`uname -r` | grep -i nvme

      返回結果如下所示,Ubuntu系列作業系統的initrd中預設已經載入了NVMe驅動。image

    2. 在GRUB中添加NVMe相關的io_timeout參數。

      說明
      • 在GRUB中添加NVMe相關的io_timeout參數主要是為了應對Linux系統中與NVMe裝置相關的逾時錯誤問題。將逾時值設為最大,系統在處理NVMe裝置的I/O請求時不會因逾時問題而導致故障。

      • 大部分Linux發行版本中io_timeout參數預設配置為30秒。在新版本的核心中,需要將io_timeout參數設定為最大值4,294,967,295秒,低核心版本中需要設定為255秒。

      1. 運行以下命令,開啟/etc/default/grub檔案。

        sudo vi /etc/default/grub
      2. i鍵進入編輯模式,在GRUB_CMDLINE_LINUX=一行中,添加nvme_core.multipath=n nvme_core.io_timeout=4294967295 nvme_core.admin_timeout=4294967295參數資訊。

        添加參數後,檔案內容如下圖所示:image

        說明

        如果設定檔中預設已存在相同的參數資訊,則無需再次添加。

      3. Esc鍵退出編輯模式,輸入:wq並按Enter鍵,儲存退出檔案。

    3. 運行以下命令,使配置的GRUB生效。

      根據ECS執行個體的啟動模式不同,選擇以下適用於您的命令:

      • 不區分啟動模式(該命令僅適用於Ubuntu系統)

        sudo update-grub2
      • BIOS(Legacy)啟動模式

        sudo grub-mkconfig -o /boot/grub/grub.cfg
      • UEFI啟動模式

        sudo grub-mkconfig -o /boot/efi/EFI/debian/grub.cfg
      說明

      關於ECS執行個體啟動模式的更多說明,請參見ECS執行個體啟動模式最佳實務

  4. 通過ECS執行個體建立新的自訂鏡像,建立的自訂鏡像已包含NVMe驅動。

    具體操作,請參見使用執行個體建立自訂鏡像

  5. 修改新自訂鏡像的NVMe驅動屬性為支援

    具體操作,請參見修改鏡像的屬性和標籤

  6. (可選)通過建立已支援NVMe的自訂鏡像重新部署業務,例如建立ECS執行個體。

    具體操作,請參見使用自訂鏡像建立執行個體。在建立過程中,ECS執行個體規格請選擇支援NVMe協議的執行個體規格。

    說明

    業務部署完成後,建議您及時刪除舊自訂鏡像,避免資源浪費。具體操作,請參見刪除自訂鏡像

相關文檔