Chinaunix首页 | 论坛 | 博客
  • 博客访问: 480058
  • 博文数量: 746
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 6290
  • 用 户 组: 普通用户
  • 注册时间: 2022-03-07 15:28
个人简介

天翼云是中国电信倾力打造的云服务品牌,致力于成为领先的云计算服务提供商。提供云主机、CDN、云电脑、大数据及AI等全线产品和场景化解决方案。

文章分类

全部博文(746)

文章存档

2025年(53)

2024年(244)

2023年(247)

2022年(202)

我的朋友

分类: 云计算

2025-04-03 19:05:04

本文分享自天翼云开发者社区《Centos系统云主机中nvme盘不可用解决方法》,作者:P****n

 

问题描述

Linux系统的云主机使用NVMe盘后,出现非预期的慢IO读写,导致系统或者应用程序对于NVMe磁盘的IO操作失败。系统将nvme盘踢出,在系统中通过lsblk查看不到nvme盘,后续的读写操作均失败,从而导致系统和应用程序异常或者业务中断。

问题原因

NVMe驱动中的 io_timeout参数控制了{BANNED}最佳大能够容忍的IO超时时间,在大部分Linux发行版本中默认配置为30秒。如果IO读写操作的延迟过高,超过了该参数的配置值,则NVMe驱动会返回IO失败。在特定情况下,系统或者应用程序可以对IO操作进行重试。但在某些情况下,可能导致系统或者应用程序对于NVMe磁盘的IO操作失败。系统将nvme盘踢出,在系统中通过lsblk查看不到nvme盘,后续的读写操作均失败,从而导致系统和应用程序异常或者业务中断。

为了减少NVMe磁盘的IO操作超时出现的异常情况,通常会将 io_timeout参数设置为可能的{BANNED}最佳大值,提高对于IO延迟的容忍度。在新版本的内核中,io_timeout参数的{BANNED}最佳大值为4,294,967,295,较早版本中为255。不同的版本的内核中,NVMe驱动的内核模块也有所不同,部分内核模块为nvme.ko ,或者部分内核模块为nvme_core.ko,从而完整的参数名称也存在nvme.io_timeoutnvme_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参数的完整参数名称和所能接受的{BANNED}最佳大值。例如,完整参数名称为nvme_core.io_timeout,所能接受的{BANNED}最佳大值为 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

 

阅读(6) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~