全部产品
Search
文档中心

云服务器 ECS:Linux自定义镜像如何适配NVMe系统盘?

更新时间:Sep 08, 2023

部分实例规格族支持基于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协议的实例规格族上启动,您需要跳过后续的步骤ⅱ、步骤ⅲ,直接进行步骤ⅳ的参数配置。否则,您需要依次完成以下操作步骤。centos1

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

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

      如果有类似于如下图所示的返回结果,则表示该操作系统可以直接在支持NVMe协议的实例规格族上启动,您需要跳过后续的步骤ⅲ,直接进行步骤ⅳ的参数配置。否则,您需要依次完成以下操作步骤。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协议的实例规格族上启动,您需要跳过后续的步骤ⅱ、步骤ⅲ,直接进行步骤ⅳ的参数配置。否则,您需要依次完成以下操作步骤。suselinux1

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

      lsinitrd /boot/initrd-`uname -r` | grep -i nvme | awk '{print $NF}'

      如果有类似于如下图所示的返回结果,则表示该操作系统可以直接在支持NVMe协议的实例规格族上启动,您需要跳过后续的步骤ⅲ,直接进行步骤ⅳ的参数配置。否则,您需要依次完成以下操作步骤。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. 运行以下命令,检查实例内是否已安装云助手Agent,并检查客户端内是否提供了ecs_nvme_config插件。

    acs-plugin-manager --list

    如果已安装云助手Agent,则会返回如下图所示的信息。如果您运行命令后没有返回云助手相关信息,则需要先在实例内安装云助手Agent。具体操作,请参见安装云助手Agent云助手插件

    如果您可以查看到返回的云助手插件列表,但插件列表中没有ecs_nvme_config插件,则表示该插件在当前的地域和可用区下没有发布。您需要根据不同的操作系统,选择适用的手动配置方式,进行NVMe相关的配置操作。

    如果您的实例内已安装云助手Agent,且存在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