當您的ECS實例需要通過已有的但未安裝NVMe(Non-Volatile Memory Express)驅動的自定義鏡像部署業務,并計劃通過NVMe協議來增強存儲性能時,您可以按照本文操作為已有的自定義鏡像安裝NVMe驅動,才能確保ECS實例正常啟動、業務穩定運行。
非易失性存儲器標準接口NVMe是一種專為固態存儲(如基于閃存的SSD)設計的高速接口協議,相比SCSI、virtio-blk等傳統驅動協議,它具有速度更快、傳輸帶寬更高的特點。關于NVMe的更多介紹,請參見NVMe協議介紹。
操作場景
您可能在以下場景中會涉及已有自定義鏡像未安裝NVMe驅動的情況,需要按照本文操作:
您是本地制作的自定義鏡像,在導入阿里云時通過鏡像檢測功能發現鏡像未安裝NVMe驅動。
在購買支持NVMe協議的ECS實例規格時,無法選到自定義鏡像,可能因為鏡像與實例規格的NVMe屬性不匹配。
說明支持基于NVMe協議掛載云盤的實例規格族信息,請參見實例規格族。您也可以通過API接口DescribeInstanceTypes中的
NvmeSupport
參數確認實例規格族是否支持NVMe。您可以通過API接口DescribeImages中的
NvmeSupport
參數確認鏡像是否支持NVMe。關于創建ECS實例時看不到某些鏡像的更多說明,請參見為什么創建ECS實例時看不到某些鏡像?。
操作步驟
通過已有自定義鏡像創建一臺ECS實例,用于中轉自定義鏡像的數據。
具體操作,請參見使用自定義鏡像創建實例。
重要創建的中轉實例會產生費用,待新的自定義鏡像創建完成后,建議您及時釋放實例,避免持續產生費用。
遠程連接新建ECS實例。
具體操作,請參見連接方式概述。
查看新建ECS實例是否包含NVMe驅動,并安裝NVMe驅動。
云助手自動配置
云助手提供了
ecs_nvme_config
插件,可以幫助您快速完成NVMe驅動配置,但是有操作系統限制。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的操作系統版本
運行以下命令,檢查實例內是否已安裝云助手Agent,并檢查客戶端內是否提供了
ecs_nvme_config
插件。acs-plugin-manager --list
如果您運行命令后沒有返回云助手相關信息,則需要先在實例內安裝云助手Agent。具體操作,請參見安裝云助手Agent。
如果返回了云助手插件列表且存在
ecs_nvme_config
插件,請繼續下一步操作。
使用
ecs_nvme_config
插件,完成NVMe相關的配置。運行以下命令,使用
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;
根據檢查結果中的提示信息,配置NVMe驅動以及相關參數信息。
sudo acs-plugin-manager --exec --plugin ecs_nvme_config --params --fix
完成配置后,運行以下命令,重啟實例。
sudo reboot
重啟實例后,重新檢查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系列)
運行以下命令,查看系統內核是否已經加載了NVMe驅動。
cat /boot/config-`uname -r` | grep -i nvme | grep -v "^#"
如果返回結果
CONFIG_BLK_DEV_NVME=y
,則表示該操作系統可以直接在支持NVMe協議的實例規格族上啟動,可以直接執行步驟ⅳ。如果返回結果
CONFIG_BLK_DEV_NVME=m
,需要依次完成以下操作。
運行以下命令,查看initramfs中是否包含NVMe驅動。
sudo lsinitrd /boot/initramfs-`uname -r`.img | grep -i nvme | awk '{print $NF}'
如果返回如圖所示的結果,則表示該操作系統可以直接在支持NVMe協議的實例規格族上啟動,可以直接執行步驟ⅳ。
如果沒有返回如圖所示的結果,需要依次完成以下操作。
依次運行以下命令,使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工具。
在GRUB中添加NVMe相關的
io_timeout
參數。說明在GRUB中添加NVMe相關的
io_timeout
參數主要是為了應對Linux系統中與NVMe設備相關的超時錯誤問題。將超時值設為最大,系統在處理NVMe設備的I/O請求時不會因超時問題而導致故障。大部分Linux發行版本中
io_timeout
參數默認配置為30秒。在新版本的內核中,需要將io_timeout
參數設置為最大值4,294,967,295秒,低內核版本中需要設置為255秒。
運行以下命令,打開grub文件。
sudo vi /etc/default/grub
按i鍵進入編輯模式,在
GRUB_CMDLINE_LINUX=
一行中,添加nvme_core.io_timeout=4294967295 nvme_core.admin_timeout=4294967295
參數信息。添加參數后,文件內容如下圖所示:
說明如果配置文件中默認已存在相同的參數信息,則無需再次添加。
按Esc鍵退出編輯模式,輸入
:wq
并按Enter鍵,保存退出文件。
運行以下命令,使配置的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實例啟動模式最佳實踐。
重新運行以下命令,查看是否有NVMe相關的返回信息。
sudo lsinitrd /boot/initramfs-`uname -r`.img | grep -i nvme | awk '{print $NF}'
如果有類似于如下圖所示的返回結果,則表示已配置完成,該操作系統可以直接在支持NVMe協議的實例規格族上啟動。
手動配置(Ubuntu/Debian系列)
(可選)運行以下命令,查看initrd中包含的NVMe驅動。
lsinitramfs /boot/initrd.img-`uname -r` | grep -i nvme
返回結果如下所示,Ubuntu系列操作系統的initrd中默認已經加載了NVMe驅動。
在GRUB中添加NVMe相關的
io_timeout
參數。說明在GRUB中添加NVMe相關的
io_timeout
參數主要是為了應對Linux系統中與NVMe設備相關的超時錯誤問題。將超時值設為最大,系統在處理NVMe設備的I/O請求時不會因超時問題而導致故障。大部分Linux發行版本中
io_timeout
參數默認配置為30秒。在新版本的內核中,需要將io_timeout
參數設置為最大值4,294,967,295秒,低內核版本中需要設置為255秒。
運行以下命令,打開/etc/default/grub文件。
sudo vi /etc/default/grub
按i鍵進入編輯模式,在
GRUB_CMDLINE_LINUX=
一行中,添加nvme_core.multipath=n nvme_core.io_timeout=4294967295 nvme_core.admin_timeout=4294967295
參數信息。添加參數后,文件內容如下圖所示:
說明如果配置文件中默認已存在相同的參數信息,則無需再次添加。
按Esc鍵退出編輯模式,輸入
:wq
并按Enter鍵,保存退出文件。
運行以下命令,使配置的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實例啟動模式最佳實踐。
通過ECS實例創建新的自定義鏡像,新建的自定義鏡像已包含NVMe驅動。
具體操作,請參見使用實例創建自定義鏡像。
修改新自定義鏡像的NVMe驅動屬性為支持。
具體操作,請參見修改鏡像的屬性和標簽。
(可選)通過新建已支持NVMe的自定義鏡像重新部署業務,例如創建ECS實例。
具體操作,請參見使用自定義鏡像創建實例。在創建過程中,ECS實例規格請選擇支持NVMe協議的實例規格。
說明業務部署完成后,建議您及時刪除舊自定義鏡像,避免資源浪費。具體操作,請參見刪除自定義鏡像。
相關文檔
基于NVMe協議的ECS實例規格僅支持掛載ESSD云盤和ESSD AutoPL云盤,ESSD云盤和ESSD AutoPL云盤可以開啟多重掛載功能,支持同時掛載到多臺ECS實例上以實現數據共享。更多信息,請參見開啟多重掛載功能。
如果ECS實例中NVMe云盤的
io_timeout
參數配置不當, 導致NVMe云盤不可用問題,您可以參考Linux系統的ECS實例中NVMe磁盤IO超時參數配置不當,導致NVMe磁盤不可用如何處理?處理。