Centos系統(tǒng)云主機(jī)中nvme盤不可用解決方法
本文分享自天翼云開發(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)系工作人員刪除。