Centos系統云主機中nvme盤不可用解決方法
本文分享自天翼云開發者社區《Centos系統云主機中nvme盤不可用解決方法》,作者:P****n
問題描述
Linux系統的云主機使用NVMe盤后,出現非預期的慢IO讀寫,導致系統或者應用程序對于NVMe磁盤的IO操作失敗。系統將nvme盤踢出,在系統中通過lsblk查看不到nvme盤,后續的讀寫操作均失敗,從而導致系統和應用程序異?;蛘邩I務中斷。
問題原因
NVMe驅動中的 io_timeout參數控制了最大能夠容忍的IO超時時間,在大部分Linux發行版本中默認配置為30秒。如果IO讀寫操作的延遲過高,超過了該參數的配置值,則NVMe驅動會返回IO失敗。在特定情況下,系統或者應用程序可以對IO操作進行重試。但在某些情況下,可能導致系統或者應用程序對于NVMe磁盤的IO操作失敗。系統將nvme盤踢出,在系統中通過lsblk查看不到nvme盤,后續的讀寫操作均失敗,從而導致系統和應用程序異?;蛘邩I務中斷。
為了減少NVMe磁盤的IO操作超時出現的異常情況,通常會將 io_timeout參數設置為可能的最大值,提高對于IO延遲的容忍度。在新版本的內核中,io_timeout參數的最大值為4,294,967,295,較早版本中為255。不同的版本的內核中,NVMe驅動的內核模塊也有所不同,部分內核模塊為nvme.ko ,或者部分內核模塊為nvme_core.ko,從而完整的參數名稱也存在nvme.io_timeout和nvme_core.io_timeout兩種可能。
解決方案
1、遠程連接CentOS云主機。
2、執行以下命令,查看系統內核是否已經加載了NVMe驅動。
cat /boot/config-`uname -r` | grep -i nvme | grep -v "^#"
系統顯示類似如下,如果存在CONFIG_BLK_DEV_NVME=y,則表示該鏡像已經加載NVMe驅動。
CONFIG_NVME_CORE=m
CONFIG_BLK_DEV_NVME=y
CONFIG_BLK_DEV_NVME_SCSI=y
CONFIG_NVME_FABRICS=m
CONFIG_NVME_RDMA=m
CONFIG_NVME_FC=m
CONFIG_NVME_TARGET=m
CONFIG_NVME_TARGET_LOOP=m
CONFIG_NVME_TARGET_RDMA=m
CONFIG_NVME_TARGET_FC=m
CONFIG_NVME_TARGET_FCLOOP=m
CONFIG_NVMEM=y
3、在GRUB中添加NVMe相關的nvme timeout參數。
1)執行以下命令,打開grub文件。
vi /etc/default/grub
2)按i鍵進入編輯模式,確認io_timeout參數的完整參數名稱和所能接受的最大值。例如,完整參數名稱為nvme_core.io_timeout,所能接受的最大值為 4,294,967,295。則請在GRUB_CMDLINE_LINUX=一行中,添加nvme_core.io_timeout=4294967295 nvme_core.admin_timeout=4294967295參數信息。 添加參數后,文件內容如下圖所示:
3)按Esc鍵退出編輯模式,輸入:wq并按Enter鍵,保存退出文件。
4)根據操作系統的啟動方式不同,執行以下適用于您的操作系統的命令,使配置的GRUB生效:
Legacy啟動方式
grub2-mkconfig -o /boot/grub2/grub.cfg
UEFI啟動方式
grub2-mkconfig -o /boot/efi/EFI/centos/grub.cfg
5)執行以下命令,重啟實例,使配置生效。
reboot
6)執行以下命令,確認相關配置已正確傳遞給內核。
cat /proc/cmdline
系統顯示類似如下。
... nvme_core.io_timeout=4294967295 nvme_core.admin_timeout=4294967295
7)執行以下命令,確認NVMe驅動參數已正確配置IO超時參數。
cat /sys/module/nvme_core/parameters/io_timeout
系統顯示類似如下。
4294967295
*博客內容為網友個人發布,僅代表博主個人觀點,如有侵權請聯系工作人員刪除。