部分实例规格族支持基于NVMe协议挂载云盘(例如ecs.g7se、ecs.c7se、ecs.r7se等),如果您需要在该类实例规格族上使用自定义镜像启动ECS实例,且需要保证实例稳定运行,则您在创建自定义镜像前,需要在对应的操作系统中进行NVMe相关的配置操作。

背景信息

支持基于NVMe协议挂载云盘的实例规格族信息,请参见实例规格族

在您完成NVMe相关配置并创建自定义镜像前,建议您先为操作系统所在实例的系统盘以及数据盘创建快照,备份数据。更多信息,请参见快照概述

本文提供了如何在以下操作系统中进行NVMe相关的配置操作:

此外,阿里云云助手提供了自动化插件,如果您的操作系统符合云助手插件的支持范围,则您也可以使用云助手插件自动进行NVMe相关的配置操作。具体操作,请参见使用云助手插件自动化配置

CentOS

  1. 远程连接待创建自定义镜像的CentOS实例。
    具体操作,请参见连接方式概述
  2. 根据您的操作系统的配置信息,完成NVMe相关的配置。
    1. 运行以下命令,查看系统内核是否已经加载了NVMe驱动。
      cat /boot/config-`uname -r` | grep -i nvme | grep -v "^#"
      返回结果如下所示,如果CONFIG_BLK_DEV_NVME=y则表示该操作系统可以直接在支持NVMe协议的实例规格族上启动,您需要跳过后续的步骤2、步骤3,直接进行步骤4的参数配置。否则,您需要依次完成以下操作步骤。centos1
    2. 运行以下命令,查看initramfs中是否包含NVMe驱动。
      lsinitrd /boot/initramfs-`uname -r`.img | grep -i nvme | awk '{print $NF}'
      如果有类似于如下图所示的返回结果,则表示该操作系统可以直接在支持NVMe协议的实例规格族上启动,您需要跳过后续的步骤3,直接进行步骤4的参数配置。否则,您需要依次完成以下操作步骤。centos2
    3. 依次运行以下命令,使initramfs支持NVMe驱动。
      mkdir -p /etc/dracut.conf.d
      echo 'add_drivers+=" nvme nvme-core nvme-fabrics nvme-fc nvme-rdma nvme-loop nvmet nvmet-fc nvme-tcp "' >/etc/dracut.conf.d/nvme.conf
      dracut -v -f
      说明 如果您的操作系统没有安装dracut工具,您需要先运行yum -y install dracut安装dracut工具。
    4. 在GRUB中添加NVMe相关的nvme timeout参数。
      1. 运行以下命令,打开grub文件。
        vi /etc/default/grub
      2. i键进入编辑模式,在GRUB_CMDLINE_LINUX=一行中,添加nvme_core.io_timeout=4294967295 nvme_core.admin_timeout=4294967295参数信息。
        添加参数后,文件内容如下图所示:centos3
        说明 如果配置文件中默认已存在相同的参数信息,则无需再次添加。
      3. Esc键退出编辑模式,输入:wq并按Enter键,保存退出文件。
    5. 运行以下命令,使配置的GRUB生效。
      根据操作系统的启动方式不同,选择以下适用于您的操作系统的命令:
      • Legacy启动方式
        grub2-mkconfig -o /boot/grub2/grub.cfg
      • UEFI启动方式
        grub2-mkconfig -o /boot/efi/EFI/centos/grub.cfg
    6. 重新运行以下命令,查看是否有NVMe相关的返回信息。
      lsinitrd /boot/initramfs-`uname -r`.img | grep -i nvme | awk '{print $NF}'
      如果有类似于如下图所示的返回结果,则表示该操作系统可以直接在支持NVMe协议的实例规格族上启动。centos2
  3. 为实例创建自定义镜像。
    当您在操作系统中完成了NVMe相关的配置后,即可为对应的实例创建自定义镜像。具体操作以及操作前的注意事项,请参见使用实例创建自定义镜像
    说明 如果您是在本地环境中自行创建的自定义镜像,可以通过导入镜像功能将自定义镜像导入云上。具体操作,请参见Linux镜像导入流程
    创建自定义镜像需要一定的时间,您需要等待自定义镜像成功创建并处于可用状态后,再执行下一步。
  4. 通过自定义镜像创建新的ECS实例。
    通过自定义镜像创建ECS实例的具体操作,请参见使用自定义镜像创建实例。在创建过程中,实例规格请设置为您需要的支持基于NVMe协议挂载云盘的实例规格。
  5. 远程连接新建的ECS实例。
    具体操作,请参见连接方式概述
  6. 在新建的ECS实例内,依次运行以下命令,查看NVMe相关配置是否正常。
    1. 运行以下命令,查看支持NVMe协议的云盘信息。
      lsblk
    2. 运行以下命令,查看/proc/cmdline文件中是否存在nvme timeout参数的相关信息。
      cat /proc/cmdline
      操作示例的返回结果如下,表示自定义镜像已成功适配NVMe系统盘。centos-g7se

Debian

  1. 远程连接待创建自定义镜像的Debian实例。
    具体操作,请参见连接方式概述
  2. 完成NVMe相关的配置。
    1. 运行以下命令,查看initrd中包含的NVMe驱动。
      Debian操作系统的initrd中默认已经加载了NVMe驱动。
      lsinitramfs /boot/initrd.img-`uname -r` | grep -i nvme
      返回结果如下所示:
    2. 在GRUB中添加NVMe相关的nvme timeout参数。
      1. 运行以下命令,打开/etc/default/grub文件。
        vi /etc/default/grub
      2. i键进入编辑模式,在GRUB_CMDLINE_LINUX=一行中,添加nvme_core.multipath=n nvme_core.io_timeout=4294967295 nvme_core.admin_timeout=4294967295参数信息。
        添加参数后,文件内容如下图所示:debian2
        说明 如果配置文件中默认已存在相同的参数信息,则无需再次添加。
      3. Esc键退出编辑模式,输入:wq并按Enter键,保存退出文件。
    3. 运行以下命令,使配置的GRUB生效。
      根据操作系统的启动方式不同,选择以下适用于您的操作系统的命令:
      • Legacy启动方式
        grub-mkconfig -o /boot/grub/grub.cfg
      • UEFI启动方式
        grub-mkconfig -o /boot/efi/EFI/debian/grub.cfg
      说明 除以上方式外,您还可以选择Debian系统提供的脚本使配置的GRUB生效,运行脚本的命令如下所示。该脚本不区分操作系统的启动方式,适用于Legacy或UEFI启动方式。
      update-grub2
  3. 为实例创建自定义镜像。
    当您在操作系统中完成了NVMe相关的配置后,即可为对应的实例创建自定义镜像。具体操作以及操作前的注意事项,请参见使用实例创建自定义镜像
    说明 如果您是在本地环境中自行创建的自定义镜像,可以通过导入镜像功能将自定义镜像导入云上。具体操作,请参见Linux镜像导入流程
    创建自定义镜像需要一定的时间,您需要等待自定义镜像成功创建并处于可用状态后,再执行下一步。
  4. 通过自定义镜像创建新的ECS实例。
    通过自定义镜像创建ECS实例的具体操作,请参见使用自定义镜像创建实例。在创建过程中,实例规格请设置为您需要的支持基于NVMe协议挂载云盘的实例规格。
  5. 远程连接新建的ECS实例。
    具体操作,请参见连接方式概述
  6. 在新建的ECS实例内,依次运行以下命令,查看NVMe相关配置是否正常。
    1. 运行以下命令,查看支持NVMe协议的云盘信息。
      lsblk
    2. 运行以下命令,查看/proc/cmdline文件中是否存在nvme timeout参数的相关信息。
      cat /proc/cmdline
      操作示例的返回结果如下,表示自定义镜像已成功适配NVMe系统盘。debian3

Ubuntu

  1. 远程连接待创建自定义镜像的Ubuntu实例。
    具体操作,请参见连接方式概述
  2. 完成NVMe相关的配置。
    1. 运行以下命令,查看initrd中包含的NVMe驱动。
      Ubuntu操作系统的initrd中默认已经加载了NVMe驱动。
      lsinitramfs /boot/initrd.img-`uname -r` | grep -i nvme
      返回结果如下所示:ubuntu1
    2. 在GRUB中添加NVMe相关的nvme timeout参数。
      1. 运行以下命令,打开/etc/default/grub文件。
        vi /etc/default/grub
      2. i键进入编辑模式,在GRUB_CMDLINE_LINUX=一行中,添加nvme_core.multipath=n nvme_core.io_timeout=4294967295 nvme_core.admin_timeout=4294967295参数信息。
        添加参数后,文件内容如下图所示:ubuntu2
        说明 如果配置文件中默认已存在相同的参数信息,则无需再次添加。
      3. Esc键退出编辑模式,输入:wq并按Enter键,保存退出文件。
    3. 运行以下命令,使配置的GRUB生效。
      根据操作系统的启动方式不同,选择以下适用于您的操作系统的命令:
      • Legacy启动方式
        grub-mkconfig -o /boot/grub/grub.cfg
      • UEFI启动方式
        grub-mkconfig -o /boot/efi/EFI/ubuntu/grub.cfg
      说明 除以上方式外,您还可以选择Ubuntu系统提供的脚本使配置的GRUB生效,运行脚本的命令如下所示。该脚本不区分操作系统的启动方式,适用于Legacy或UEFI启动方式。
      update-grub2
  3. 为实例创建自定义镜像。
    当您在操作系统中完成了NVMe相关的配置后,即可为对应的实例创建自定义镜像。具体操作以及操作前的注意事项,请参见使用实例创建自定义镜像
    说明 如果您是在本地环境中自行创建的自定义镜像,可以通过导入镜像功能将自定义镜像导入云上。具体操作,请参见Linux镜像导入流程
    创建自定义镜像需要一定的时间,您需要等待自定义镜像成功创建并处于可用状态后,再执行下一步。
  4. 通过自定义镜像创建新的ECS实例。
    通过自定义镜像创建ECS实例的具体操作,请参见使用自定义镜像创建实例。在创建过程中,实例规格请设置为您需要的支持基于NVMe协议挂载云盘的实例规格。
  5. 远程连接新建的ECS实例。
    具体操作,请参见连接方式概述
  6. 在新建的ECS实例内,依次运行以下命令,查看NVMe相关配置是否正常。
    1. 运行以下命令,查看支持NVMe协议的云盘信息。
      lsblk
    2. 运行以下命令,查看/proc/cmdline文件中是否存在nvme timeout参数的相关信息。
      cat /proc/cmdline
      操作示例的返回结果如下,表示自定义镜像已成功适配NVMe系统盘。ubuntu3

SUSE Linux Enterprise Server(SLES)

  1. 远程连接待创建自定义镜像的SLES实例。
    具体操作,请参见连接方式概述
  2. 根据您的操作系统的配置信息,完成NVMe相关的配置。
    1. 运行以下命令,查看系统内核是否已经加载了内核驱动。
      cat /boot/config-`uname -r` | grep -i nvme | grep -v "^#"
      返回结果如下所示,如果CONFIG_BLK_DEV_NVME=y则表示该操作系统可以直接在支持NVMe协议的实例规格族上启动,您需要跳过后续的步骤2、步骤3,直接进行步骤4的参数配置。否则,您需要依次完成以下操作步骤。suselinux1
    2. 运行以下命令,查看initrd中是否包含NVMe驱动。
      lsinitrd /boot/initrd-`uname -r` | grep -i nvme | awk '{print $NF}'
      如果有类似于如下图所示的返回结果,则表示该操作系统可以直接在支持NVMe协议的实例规格族上启动,您需要跳过后续的步骤3,直接进行步骤4的参数配置。否则,您需要依次完成以下操作步骤。suselinux2
    3. 依次运行以下命令,使initrd支持NVMe驱动。
      mkdir -p /etc/dracut.conf.d
      echo 'add_drivers+=" nvme nvme-core nvme-fabrics nvme-fc nvme-rdma nvme-loop nvmet nvmet-fc nvme-tcp "' >/etc/dracut.conf.d/nvme.conf
      dracut -v -f
      说明 如果您的操作系统没有安装dracut工具,您需要运行zypper install -y dracut安装dracut工具。
    4. 在GRUB中添加NVMe相关的nvme timeout参数。
      1. 运行以下命令,打开grub文件。
        vi /etc/default/grub
      2. i键进入编辑模式,在GRUB_CMDLINE_LINUX=一行中,添加nvme_core.io_timeout=4294967295 nvme_core.admin_timeout=4294967295参数信息。
        添加参数后,文件内容如下图所示:suselinux3
        说明 如果配置文件中默认已存在相同的参数信息,则无需再次添加。
      3. Esc键退出编辑模式,输入:wq并按Enter键,保存退出文件。
    5. 运行以下命令,使配置的GRUB生效。
      根据操作系统的启动方式不同,选择以下适用于您的操作系统的命令:
      • Legacy启动方式
        grub2-mkconfig -o /boot/grub2/grub.cfg
      • UEFI启动方式
        grub2-mkconfig -o /boot/efi/EFI/sles/grub.cfg
    6. 重新运行以下命令,查看是否有NVMe相关的返回信息。
      lsinitrd /boot/initrd-`uname -r` | grep -i nvme | awk '{print $NF}'
      如果有类似于如下图所示的返回结果,则表示该操作系统可以直接在支持NVMe协议的实例规格族上启动。suselinux2
  3. 为实例创建自定义镜像。
    当您在操作系统中完成了NVMe相关的配置后,即可为对应的实例创建自定义镜像。具体操作以及操作前的注意事项,请参见使用实例创建自定义镜像
    说明 如果您是在本地环境中自行创建的自定义镜像,可以通过导入镜像功能将自定义镜像导入云上。具体操作,请参见Linux镜像导入流程
    创建自定义镜像需要一定的时间,您需要等待自定义镜像成功创建并处于可用状态后,再执行下一步。
  4. 通过自定义镜像创建新的ECS实例。
    通过自定义镜像创建ECS实例的具体操作,请参见使用自定义镜像创建实例。在创建过程中,实例规格请设置为您需要的支持基于NVMe协议挂载云盘的实例规格。
  5. 远程连接新建的ECS实例。
    具体操作,请参见连接方式概述
  6. 在新建的ECS实例内,依次运行以下命令,查看NVMe相关配置是否正常。
    1. 运行以下命令,查看支持NVMe协议的云盘信息。
      lsblk
    2. 运行以下命令,查看/proc/cmdline文件中是否存在nvme timeout参数的相关信息。
      cat /proc/cmdline
      操作示例的返回结果如下,表示自定义镜像已成功适配NVMe系统盘。suselinux4

使用云助手插件自动化配置

云助手提供了ecs_nvme_config插件,帮助您快速完成操作系统内NVMe相关的配置。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. 远程连接待创建自定义镜像的实例。
    具体操作,请参见连接方式概述
  2. 运行以下命令,检查实例内是否已安装云助手客户端,并检查客户端内是否提供了ecs_nvme_config插件。
    acs-plugin-manager --list
    如果已安装云助手客户端,则会返回如下图所示的信息。如果您运行命令后没有返回云助手相关信息,则需要先在实例内安装云助手客户端。具体操作,请参见安装云助手客户端云助手插件
    如果您可以查看到返回的云助手插件列表,但插件列表中没有ecs_nvme_config插件,则表示该插件在当前的地域和可用区下没有发布。您需要根据不同的操作系统,选择适用的手动配置方式,进行NVMe相关的配置操作。

    如果您的实例内已安装云助手客户端,且存在ecs_nvme_config插件,请继续下一步。

  3. 使用ecs_nvme_config插件,完成NVMe相关的配置。
    1. 运行以下命令,使用ecs_nvme_config插件检查当前实例内是否有NVMe模块,以及是否可以配置NVMe模块。
      acs-plugin-manager --exec --plugin ecs_nvme_config --params --check
      返回结果说明:
      • 如果返回结果中存在如下提示,则表示您无需进行NVMe相关的配置,可直接创建自定义镜像。
        [SUCCESS]  Summary: Your image can Runnig on nvme instance
      • 如果返回结果中存在[ERROR]相关提示,则您需要继续执行下一步操作。
    2. 根据检查结果中的提示信息,配置NVMe驱动以及相关参数信息。
      例如,检查结果中提示如下信息:
      [ERROR]  1.initrd/initramfs not has nvme module, Please run acs-plugin-manager --exec --plugin ecs_nvme_config --params -f/--fix to enable nvme;
      则您需要根据提示内容,运行以下命令,完成NVMe相关的配置。
      acs-plugin-manager --exec --plugin ecs_nvme_config --params --fix
    3. 完成配置后,运行以下命令,重启实例。
      reboot
    4. 重启实例后,重新检查NVMe模块是否配置成功。
      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
  4. 为实例创建自定义镜像。
    当您在操作系统中完成了NVMe相关的配置后,即可为对应的实例创建自定义镜像。具体操作以及操作前的注意事项,请参见使用实例创建自定义镜像
    说明 如果您是在本地环境中自行创建的自定义镜像,可以通过导入镜像功能将自定义镜像导入云上。具体操作,请参见Linux镜像导入流程
    创建自定义镜像需要一定的时间,您需要等待自定义镜像成功创建并处于可用状态后,再执行下一步。
  5. 通过自定义镜像创建新的ECS实例。
    通过自定义镜像创建ECS实例的具体操作,请参见使用自定义镜像创建实例。在创建过程中,实例规格请设置为您需要的支持基于NVMe协议挂载云盘的实例规格。
  6. 远程连接新建的ECS实例。
    具体操作,请参见连接方式概述
  7. 在新建的ECS实例内,依次运行以下命令,查看NVMe相关配置是否正常。
    1. 运行以下命令,查看支持NVMe协议的云盘信息。
      lsblk
    2. 运行以下命令,查看/proc/cmdline文件中是否存在nvme timeout参数的相关信息。
      cat /proc/cmdline
      操作示例的返回结果如下,表示自定义镜像已成功适配NVMe系统盘。centos-g7se