如何为已有自定义镜像安装NVMe驱动?

当您的ECS实例需要通过已有的但未安装NVMe(Non-Volatile Memory Express)驱动的自定义镜像部署业务,并计划通过NVMe协议来增强存储性能时,您可以按照本文操作为已有的自定义镜像安装NVMe驱动,才能确保ECS实例正常启动、业务稳定运行。

非易失性存储器标准接口NVMe是一种专为固态存储(如基于闪存的SSD)设计的高速接口协议,相比SCSI、virtio-blk等传统驱动协议,它具有速度更快、传输带宽更高的特点。关于NVMe的更多介绍,请参见NVMe协议介绍

操作场景

您可能在以下场景中会涉及已有自定义镜像未安装NVMe驱动的情况,需要按照本文操作:

  • 您是本地制作的自定义镜像,在导入阿里云时通过镜像检测功能发现镜像未安装NVMe驱动。

  • 在购买支持NVMe协议的ECS实例规格时,无法选到自定义镜像,可能因为镜像与实例规格的NVMe属性不匹配。

    说明

操作步骤

  1. 通过已有自定义镜像创建一台ECS实例,用于中转自定义镜像的数据。

    具体操作,请参见使用自定义镜像创建实例

    重要

    创建的中转实例会产生费用,待新的自定义镜像创建完成后,建议您及时释放实例,避免持续产生费用。

  2. 远程连接新建ECS实例。

    具体操作,请参见连接方式概述

  3. 查看新建ECS实例是否包含NVMe驱动,并安装NVMe驱动。

    云助手自动配置

    云助手提供了ecs_nvme_config插件,可以帮助您快速完成NVMe驱动配置,但是有操作系统限制。

    ecs_nvme_config插件支持的操作系统情况

    • 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的操作系统版本

    1. 运行以下命令,检查实例内是否已安装云助手Agent,并检查客户端内是否提供了ecs_nvme_config插件。

      acs-plugin-manager --list

      image

      • 如果您运行命令后没有返回云助手相关信息,则需要先在实例内安装云助手Agent。具体操作,请参见安装云助手Agent

      • 如果返回了云助手插件列表且存在ecs_nvme_config插件,请继续下一步操作。

    2. 使用ecs_nvme_config插件,完成NVMe相关的配置。

      1. 运行以下命令,使用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;
      2. 根据检查结果中的提示信息,配置NVMe驱动以及相关参数信息。

        sudo acs-plugin-manager --exec --plugin ecs_nvme_config --params --fix
      3. 完成配置后,运行以下命令,重启实例。

        sudo reboot
      4. 重启实例后,重新检查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系列

    1. 运行以下命令,查看系统内核是否已经加载了NVMe驱动。

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

      image

      • 如果返回结果CONFIG_BLK_DEV_NVME=y,则表示该操作系统可以直接在支持NVMe协议的实例规格族上启动,可以直接执行步骤ⅳ

      • 如果返回结果CONFIG_BLK_DEV_NVME=m,需要依次完成以下操作。

    2. 运行以下命令,查看initramfs中是否包含NVMe驱动。

      sudo lsinitrd /boot/initramfs-`uname -r`.img | grep -i nvme | awk '{print $NF}'

      image

      • 如果返回如图所示的结果,则表示该操作系统可以直接在支持NVMe协议的实例规格族上启动,可以直接执行步骤ⅳ

      • 如果没有返回如图所示的结果,需要依次完成以下操作。

    3. 依次运行以下命令,使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工具。

    4. 在GRUB中添加NVMe相关的io_timeout参数。

      说明
      • 在GRUB中添加NVMe相关的io_timeout参数主要是为了应对Linux系统中与NVMe设备相关的超时错误问题。将超时值设为最大,系统在处理NVMe设备的I/O请求时不会因超时问题而导致故障。

      • 大部分Linux发行版本中io_timeout参数默认配置为30秒。在新版本的内核中,需要将io_timeout参数设置为最大值4,294,967,295秒,低内核版本中需要设置为255秒。

      1. 运行以下命令,打开grub文件。

        sudo vi /etc/default/grub
      2. i键进入编辑模式,在GRUB_CMDLINE_LINUX=一行中,添加nvme_core.io_timeout=4294967295 nvme_core.admin_timeout=4294967295参数信息。

        添加参数后,文件内容如下图所示:

        image

        说明

        如果配置文件中默认已存在相同的参数信息,则无需再次添加。

      3. Esc键退出编辑模式,输入:wq并按Enter键,保存退出文件。

    5. 运行以下命令,使配置的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实例启动模式最佳实践

    6. 重新运行以下命令,查看是否有NVMe相关的返回信息。

      sudo lsinitrd /boot/initramfs-`uname -r`.img | grep -i nvme | awk '{print $NF}'

      如果有类似于如下图所示的返回结果,则表示已配置完成,该操作系统可以直接在支持NVMe协议的实例规格族上启动。

      image

    手动配置(Ubuntu/Debian系列)

    1. (可选)运行以下命令,查看initrd中包含的NVMe驱动。

      lsinitramfs /boot/initrd.img-`uname -r` | grep -i nvme

      返回结果如下所示,Ubuntu系列操作系统的initrd中默认已经加载了NVMe驱动。image

    2. 在GRUB中添加NVMe相关的io_timeout参数。

      说明
      • 在GRUB中添加NVMe相关的io_timeout参数主要是为了应对Linux系统中与NVMe设备相关的超时错误问题。将超时值设为最大,系统在处理NVMe设备的I/O请求时不会因超时问题而导致故障。

      • 大部分Linux发行版本中io_timeout参数默认配置为30秒。在新版本的内核中,需要将io_timeout参数设置为最大值4,294,967,295秒,低内核版本中需要设置为255秒。

      1. 运行以下命令,打开/etc/default/grub文件。

        sudo vi /etc/default/grub
      2. i键进入编辑模式,在GRUB_CMDLINE_LINUX=一行中,添加nvme_core.multipath=n nvme_core.io_timeout=4294967295 nvme_core.admin_timeout=4294967295参数信息。

        添加参数后,文件内容如下图所示:image

        说明

        如果配置文件中默认已存在相同的参数信息,则无需再次添加。

      3. Esc键退出编辑模式,输入:wq并按Enter键,保存退出文件。

    3. 运行以下命令,使配置的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实例启动模式最佳实践

  4. 通过ECS实例创建新的自定义镜像,新建的自定义镜像已包含NVMe驱动。

    具体操作,请参见使用实例创建自定义镜像

  5. 修改新自定义镜像的NVMe驱动属性为支持

    具体操作,请参见修改镜像的属性和标签

  6. (可选)通过新建已支持NVMe的自定义镜像重新部署业务,例如创建ECS实例。

    具体操作,请参见使用自定义镜像创建实例。在创建过程中,ECS实例规格请选择支持NVMe协议的实例规格。

    说明

    业务部署完成后,建议您及时删除旧自定义镜像,避免资源浪费。具体操作,请参见删除自定义镜像

相关文档