博客專欄

EEPW首頁 > 博客 > Centos系統(tǒng)云主機(jī)中nvme盤不可用解決方法

Centos系統(tǒng)云主機(jī)中nvme盤不可用解決方法

發(fā)布人:天翼云開發(fā)者 時(shí)間:2025-04-03 來源:工程師 發(fā)布文章

本文分享自天翼云開發(fā)者社區(qū)《Centos系統(tǒng)云主機(jī)中nvme盤不可用解決方法》,作者:P****n

 

問題描述

Linux系統(tǒng)的云主機(jī)使用NVMe盤后,出現(xiàn)非預(yù)期的慢IO讀寫,導(dǎo)致系統(tǒng)或者應(yīng)用程序?qū)τ贜VMe磁盤的IO操作失敗。系統(tǒng)將nvme盤踢出,在系統(tǒng)中通過lsblk查看不到nvme盤,后續(xù)的讀寫操作均失敗,從而導(dǎo)致系統(tǒng)和應(yīng)用程序異?;蛘邩I(yè)務(wù)中斷。

問題原因

NVMe驅(qū)動(dòng)中的 io_timeout參數(shù)控制了最大能夠容忍的IO超時(shí)時(shí)間,在大部分Linux發(fā)行版本中默認(rèn)配置為30秒。如果IO讀寫操作的延遲過高,超過了該參數(shù)的配置值,則NVMe驅(qū)動(dòng)會(huì)返回IO失敗。在特定情況下,系統(tǒng)或者應(yīng)用程序可以對(duì)IO操作進(jìn)行重試。但在某些情況下,可能導(dǎo)致系統(tǒng)或者應(yīng)用程序?qū)τ贜VMe磁盤的IO操作失敗。系統(tǒng)將nvme盤踢出,在系統(tǒng)中通過lsblk查看不到nvme盤,后續(xù)的讀寫操作均失敗,從而導(dǎo)致系統(tǒng)和應(yīng)用程序異常或者業(yè)務(wù)中斷。

為了減少NVMe磁盤的IO操作超時(shí)出現(xiàn)的異常情況,通常會(huì)將 io_timeout參數(shù)設(shè)置為可能的最大值,提高對(duì)于IO延遲的容忍度。在新版本的內(nèi)核中,io_timeout參數(shù)的最大值為4,294,967,295,較早版本中為255。不同的版本的內(nèi)核中,NVMe驅(qū)動(dòng)的內(nèi)核模塊也有所不同,部分內(nèi)核模塊為nvme.ko ,或者部分內(nèi)核模塊為nvme_core.ko,從而完整的參數(shù)名稱也存在nvme.io_timeout和nvme_core.io_timeout兩種可能。

解決方案

1、遠(yuǎn)程連接CentOS云主機(jī)。

2、執(zhí)行以下命令,查看系統(tǒng)內(nèi)核是否已經(jīng)加載了NVMe驅(qū)動(dòng)。

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

系統(tǒng)顯示類似如下,如果存在CONFIG_BLK_DEV_NVME=y,則表示該鏡像已經(jīng)加載NVMe驅(qū)動(dòng)。

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相關(guān)的nvme timeout參數(shù)。

1)執(zhí)行以下命令,打開grub文件。

vi /etc/default/grub

2)按i鍵進(jìn)入編輯模式,確認(rèn)io_timeout參數(shù)的完整參數(shù)名稱和所能接受的最大值。例如,完整參數(shù)名稱為nvme_core.io_timeout,所能接受的最大值為 4,294,967,295。則請(qǐng)?jiān)贕RUB_CMDLINE_LINUX=一行中,添加nvme_core.io_timeout=4294967295 nvme_core.admin_timeout=4294967295參數(shù)信息。 添加參數(shù)后,文件內(nèi)容如下圖所示:

   

3)按Esc鍵退出編輯模式,輸入:wq并按Enter鍵,保存退出文件。

4)根據(jù)操作系統(tǒng)的啟動(dòng)方式不同,執(zhí)行以下適用于您的操作系統(tǒng)的命令,使配置的GRUB生效:

Legacy啟動(dòng)方式

grub2-mkconfig -o /boot/grub2/grub.cfg

UEFI啟動(dòng)方式

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

5)執(zhí)行以下命令,重啟實(shí)例,使配置生效。

reboot

6)執(zhí)行以下命令,確認(rèn)相關(guān)配置已正確傳遞給內(nèi)核。

cat /proc/cmdline

系統(tǒng)顯示類似如下。

... nvme_core.io_timeout=4294967295 nvme_core.admin_timeout=4294967295

7)執(zhí)行以下命令,確認(rèn)NVMe驅(qū)動(dòng)參數(shù)已正確配置IO超時(shí)參數(shù)。

cat /sys/module/nvme_core/parameters/io_timeout

系統(tǒng)顯示類似如下。

4294967295

 


*博客內(nèi)容為網(wǎng)友個(gè)人發(fā)布,僅代表博主個(gè)人觀點(diǎn),如有侵權(quán)請(qǐng)聯(lián)系工作人員刪除。



關(guān)鍵詞: 云主機(jī)

技術(shù)專區(qū)

關(guān)閉