导入镜像文件前,建议您使用镜像规范检测工具(本文简称检测工具),自动检测Linux操作系统设置是否符合导入条件。工具主要检测导入的镜像文件是否为有效镜像、是否可以创建出功能齐全的ECS实例等。本文以CentOS 7.9 64位操作系统为例,为您介绍检测工具的使用方法。

背景信息

ECS支持使用自定义镜像创建实例,该自定义镜像可以是基于您的线下服务器、虚拟机或者其他云平台的云主机创建的镜像文件,您需要先将镜像文件导入ECS生成自定义镜像,才可使用其创建实例。同时导入阿里云的镜像文件需满足一定要求。更多信息,请参见导入镜像必读

为提高镜像制作的效率,我们推荐您使用ECS镜像规范检测工具。检测工具能基于Linux服务器环境自动检测各项配置指标、快速定位不合规配置并给出解决意见,省去您逐项检查系统的时间,方便您快速修复系统配置并制作出符合规范的镜像。
说明 目前检测工具仅支持检测除FreeBSD、Fedora CoreOS以外的Linux系统,不支持检测Windows系统。

使用检测工具

  1. 登录您制作镜像文件的源服务器、虚拟机或者其他云平台的云主机。
  2. 依次运行以下命令,下载并解压检测工具。
    wget https://ecs-image-tools.oss-cn-hangzhou.aliyuncs.com/imagecheck/ecsgo-helper.tar.gz
    tar -xf ecsgo-helper.tar.gz

    您也可以单击此处下载检测工具。

  3. 依次运行以下命令,运行检测工具。
    cd ecsgo-helper
    ./ecsgo-helper.sh  image-online-diagnostic

    等待检测工具检测系统配置,回显类似如下信息。

    ------------------------------------------------------------
    
                OS: CentOS 7.9.2009   Kernel: 3.10.0-1160.76.1.el7.x86_64
                Arch: x86_64       RTC-Mode: utc       Boot-Mode: Legacy
    
    ------------------------------------------------------------
    Image Check Result
    Virtio                                                                                 [OK]
    Nvme                                                                                   [OK]
    Fstab                                                                                  [OK]
    Grub                                                                                   [OK]
    Dhcp                                                                                   [OK]
    Selinux                                                                                [OK]
    OnlineResizeFS                                                                         [OK]
    CloudAssistant                                                                         [OK]
    CloudInit                                                                              [OK]
    SecurityCenterAgent                                                                    [OK]
    SupportMocInstanceTypes                                                                [OK]
    DiskUsage                                                                              [OK]
    InodeUsage                                                                             [OK]
    SystemFileAttribute                                                                    [OK]
    CriticalUser                                                                           [OK]
    QemuGuestAgent                                                                         [OK]
    SshConfig                                                                              [OK]
    Firewall                                                                               [OK]
    LibDirectory                                                                           [OK]
    
             Total case Count                19
                Successes:                   19
                Failures:                    0
                Warnings:                    0
    
    ------------------------------------------------------------
    检测工具的检测项说明,请参见检测项。检测工具会根据检测项的等级给出OKFAILED或者WARNING检测结果。
    • OK:检测项均符合要求。
    • FAILED:检测项不符合要求,使用该自定义镜像创建的ECS实例会出现无法正常启动、网络异常等严重问题,建议您立即修复报错项后再导入镜像。
    • WARNING:检测项不符合要求,使用该自定义镜像创建的ECS实例缺少云安全中心保护、无法使用云助手自动化运维等问题,建议您修复报错项后再导入镜像,以提高您云上运维的效率。

检测项

检测工具主要检查源服务器中以下配置项:

检测项 等级 检测项说明 不合规后果 合规建议
Virtio 检测镜像中是否安装virtio驱动。

阿里云ECS通常为基于KVM的虚拟机,因此依赖镜像中安装虚拟磁盘的virtio驱动。

ECS启动异常 安装virtio驱动
Nvme 检测镜像中是否安装NVMe驱动。

ECS部分规格使用NVMe协议云盘,例如ecs.g7se,要求镜像包含NVMe协议的相关驱动。NVMe相比SCSI、virtio-blk等传统驱动协议速度更快、传输带宽更高,因此建议您在镜像中安装NVMe驱动,以支持相关实例规格。更多信息,请参见NVMe协议介绍

无法使用NVMe协议云盘的实例规格,例如ecs.g7se Linux自定义镜像如何适配NVMe系统盘?
Fstab 检测/etc/fstab配置是否正常。

错误的配置会导致系统启动异常,例如配置的挂载设备信息不存在、设备UUID错误等。

系统启动异常 如何配置正确的/etc/fstab,请参见如何在fstab文件中配置文件磁盘标识方式为UUID
Grub 检测grub配置文件是否正常。

grub引导内核的加载和启动,是系统的重要配置。错误的配置将导致系统启动异常,建议您检查系统中的配置文件是否正确,例如grub文件中不要使用设备名来指定启动分区,如root=/dev/sda1,在不同的环境中设备名称可能发生变化,建议您使用UUID来指定启动分区。

系统启动异常 如何为镜像生成正确的配置grub文件,请参见如何修改Linux镜像Grub文件中的文件磁盘标识符为UUID
Dhcp 检测网络配置是否为DHCP。

建议您为网络设备配置DHCP的方式,static静态方式会导致失利网络配置失败,连接异常。我们还建议您在grub内核启动参数中增加配置选项net.ifnames=0来禁用内核网络接口重命名行为,使网卡名称为eth0。

系统网络异常 如何设置镜像网络配置模式为DHCP,请参见如何在Linux镜像中配置网络为DHCP
Selinux 检测是否禁用SELinux,阿里云建议您关闭SELinux。 无法正常启动ECS实例 如何关闭SELinux,请参见开启或关闭SELinux
OnlineResizeFS 检测镜像是否支持在线扩容文件系统。

例如您的镜像虚拟磁盘空间大小为10 GB,您购买ECS实例的系统盘为100 GB,如果您安装了cloud-init、growpart等组件,相关组件在实例初始化时会将根分区及文件系统扩容,扩容至您系统盘的大小100 GB。更多信息,请参见扩容分区和文件系统(Linux)

实例根分区无法扩容
CloudInit 检测是否安装cloud-init服务。

cloud-init能在ECS实例启动阶段完成系统初始化配置,包括NTP、软件源、主机名和SSH密钥对等,同时执行实例自定义数据(User data)脚本。

系统初始化配置缺失 安装cloud-init
DiskUsage 检测磁盘空间使用率是否正常。

您可以执行df -h命令来检查您磁盘空间的使用率,确保有充足空间。

系统启动异常 删除不必要文件
InodeUsage 检测磁盘inode使用率是否正常。

您可以执行df -i命令来检查磁盘inode的使用率。

系统启动异常 删除不必要文件
SystemFileAttribute 检测系统中关键配置文件的文件属性是否正常。 实例启动异常、功能异常 不要使用chattr命令锁定/etc/shadow等文件
CriticalUser 检测系统中关键用户(例如root)是否存在。

关键用户的缺失会导致系统启动异常,实例功能使用异常,例如无法使用用户名和密码远程连接ECS实例。

实例启动异常、功能异常 保留root账号
QemuGuestAgent 检测系统中是否安装qemu-guest-agent。

该软件是运行在虚拟机上,和宿主机交互通信,会导致ECS所需要的部分服务不可用,实例功能不全。

实例功能异常 卸载qemu-guestos-agent
SshConfig 检测sshd服务的配置文件(通常是/etc/ssh/sshd_config)是否正常。
sshd配置文件异常会导致sshd服务启动失败,进而导致SSH连接ECS失败,检查sshd配置文件的正确性和有效性很有必要。通常您可以执行以下命令:
  • 执行sshd -T命令展示您所有的sshd配置选项。
  • 执行sshd -t 命令验证sshd配置文件的合法性。
实例SSH连接失败 检查sshd配置文件
Firewall 检测防火墙服务是否开启。

阿里云建议您关闭系统中的防火墙服务,使用ECS安全组统一管理您云上实例的出入流量。更多信息,请参见安全组概述

系统防火墙应用可能导致您访问实例失败等 关闭系统防火墙服务
LibDirectory 在RedHat系列Linux系统中,/lib/lib64通常为一个链接文件,指向/usr/lib/usr/lib64中,请不要随意修改该链接文件,否则可能导致系统异常。 系统功能异常 链接文件/lib/lib64的指向位置不能为绝对路径,修改指向位置为相对路径
SupportMocInstanceTypes 检测镜像是否支持阿里云ECS神龙规格。

阿里云最新的ECS实例通常为神龙规格,例如ecs.g6、ecs.g7等,镜像的系统和内核版本如果过低,在相关规格上启动会有异常。具体的实例规格信息,请参见实例规格族

不能使用ecs.g6、ecs.g7等神龙规格族
  • 如果您使用的是CentOS 5系统,建议您升级到最新的CentOS 5.11。更多信息,请参见如何解决实例迁移后的宕机问题?
  • 不支持神龙规格的系统通常是已经EOL不再维护的低版本系统,阿里云建议您尽早更新升级,使用各发行厂商正在维护更新的操作系统版本
CloudAssistant 检测镜像是否安装云助手。

云助手是专为云服务器ECS打造的原生自动化运维工具,阿里云建议您为镜像安装云助手服务,实现云上ECS高效运维。更多信息,请参见云助手概述

云上运维不便 安装云助手客户端
SecurityCenterAgent 检测是否安装云安全中心Agent。

安装云安全中心的Agent插件后,您的服务器才能受到云安全中心的保护。

无法识别实例中的漏洞问题,缺少云安全中心的保护 安装Agent

后续步骤

通过工具检测镜像符合规范后,再获取镜像文件。具体操作,请参见获取Linux镜像文件