使用sersi镜像检测工具检测并修复镜像

导入自定义镜像前,错误的配置(如缺少驱动、网络设置不当)可能导致实例启动失败或网络异常。使用阿里云官方镜像检测工具 sersi,可在导入前扫描、评估并自动修复镜像,确保其云上兼容性,提升部署成功率。

重要

sersi工具的修复脚本无法回滚,对系统的修改无法撤销。

适用范围

该工具支持主流 RedHat、Debian、SUSE系列的操作系统,例如

  • Red Hat 系列:Alibaba Cloud Linux, Anolis, RedHat, CentOS, CentOS Stream, Fedora, AlmaLinux, Rocky Linux, openEuler, OpenCloudOS。

  • Debian 系列:Debian, Ubuntu, Kylin, UOS。

  • SUSE 系列:SUSE, openSUSE。

不支持FreeBSD、Fedora CoreOS以及Windows Server系统。

操作流程

步骤一:下载并解压工具

  1. 下载 sersi 工具包。

    wget https://ecs-image-tools.oss-cn-hangzhou.aliyuncs.com/imagecheck/sersi.tar.gz
  2. 解压工具包。

    tar -xf sersi.tar.gz

步骤二:检测镜像

运行检测命令,获取镜像的健康状况报告。

  1. 对镜像执行所有检测项的扫描。

    ./main.sh --target=image --diagnostic
  2. 分析检测结果。命令会输出格式化的报告。

    • OK:该项符合阿里云镜像规范。

    • FAILED(必须修复):该项存在严重问题,可能导致实例无法启动或核心功能(如网络)异常。

    • WARNING(建议修复):该项存在配置问题,虽不影响实例启动,但可能导致部分高级功能(如云助手、监控)不可用或存在安全隐患。

    检测结果示例如下,报告中检测项的详细说明见检测与修复项总览

    ------------------------------------------------------------
    
                OS: Alibaba Cloud Linux 3   Kernel: 5.10.134-16.1.al8.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]
    
             Total case Count                18
                Successes:                   18
                Failures:                    0
                Warnings:                    0
            
    ------------------------------------------------------------

步骤三:修复镜像

自动修复

sersi工具的修复脚本无法回滚,对系统的修改无法撤销。建议采用“先审查,后执行”的安全流程进行修复。

sersi工具不支持对检测项(Diskusage、Inodeusage、Criticaluser、LibDirectorySupportMocinstanceTypes)进行自动修复,请参照指引进行手动修复
  1. 执行审查:

    使用--dry-run参数生成修复脚本并进行审查,此操作不会执行任何修改

    通过参见单个检测项修复方案,可对单个检测项进行修复。
    # 修复所有问题
    ./main.sh --target=image --run all --dry-run 
  2. 执行修复:

    在确认脚本安全无误后,移除 --dry-run 参数来实际执行修复。

    # 交互式修复:执行每个修复步骤前会请求确认
    ./main.sh --target=image --run all
  3. 分析修复结果:

    • OK:表示该项修复成功。

    • NO_FOUND_RISK:表示检测镜像中未找到该项的异常。

    • OK_Need_Reboot:表示该项修复完成需重启系统才能生效。

    • DRY_RUN:表示找到该项的异常并通过dry-run模式运行仅打印修复脚本,但未执行修复。

    • FAILED:表示该项修复失败,需要进行手动修复

手动修复

对于不支持自动修复,或自动修复失败的检测项,请根据以下指引进行手动操作。

步骤四:验证修复结果

  1. (可选)重启系统。部分修复项(NvmeDhcpSelinux)需要重启系统才能生效。

  2. 重新运行检测命令,确保所有问题项状态变为 OK

    ./main.sh --target=image --diagnostic

检测与修复项总览

检测项 (Case Name)

修复项

影响

说明

Virtio

virtio

ECS启动异常。

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

Nvme

nvme

无法使用NVMe协议云盘的实例规格,例如ecs.g7se。

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

Fstab

fstab

系统启动异常。

检测/etc/fstab配置是否正常。错误的配置会导致系统启动异常,例如配置的挂载设备信息不存在、设备UUID错误等。

Grub

grub

系统启动异常。

检测grub配置文件是否正常。配置错误(如使用设备名而非 UUID 指定启动分区)将导致系统无法启动。

Dhcp

dhcp

系统网络异常。

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

Selinux

selinux

无法正常启动ECS实例。

检测是否禁用SELinux,建议关闭SELinux。

OnlineResizeFS

growpart

实例根分区无法扩容。

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

Cloudinit

cloudinit

系统初始化配置缺失。

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

SshConfig

sshd

实例SSH连接失败。

检测sshd服务的配置文件(通常是/etc/ssh/sshd_config)是否正常。

sshd配置文件异常会导致sshd服务启动失败,进而导致SSH连接ECS失败,因此检查sshd配置文件的正确性和有效性非常重要。通常可执行以下命令:

  • 执行sudo sshd -T命令可展示所有的sshd配置选项。

  • 执行sudo sshd -t 命令验证sshd配置文件的合法性;若合法,则没有信息输出。

Firewall

firewall

系统防火墙应用可能导致实例访问失败。

检测防火墙服务是否开启。建议关闭系统中的防火墙服务,使用ECS安全组统一管理云上实例的出入流量。

CloudAssistant

assist

云上运维不便。

检测镜像是否安装云助手。云助手是专为云服务器ECS打造的原生自动化运维工具,建议为镜像安装云助手服务,实现云上ECS高效运维。

SecurityCenterAgent

aegis

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

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

QemuGuestAgent

qemuguestagent

实例功能异常。

检测系统中是否安装qemu-guest-agent。该软件是运行在虚拟机上,和宿主机交互通信,会导致部分ECS服务不可用,实例功能不全。

Diskusage

不支持

系统启动异常。

检测磁盘空间使用率是否正常。可执行df -h命令检查磁盘空间的使用率,确保有充足空间。

Inodeusage

不支持

系统启动异常。

检测磁盘inode使用率是否正常。可执行df -i命令来检查磁盘inode的使用率。

SystemFileAttribute

fileattribute

实例启动异常、功能异常。

检测系统中关键配置文件的文件属性是否正常。

Criticaluser

不支持

实例启动异常、功能异常。

检测系统中关键用户(例如root)是否存在。关键用户的缺失会导致系统启动异常,实例功能使用异常,例如无法使用用户名和密码远程连接ECS实例。

LibDirectory

不支持

系统功能异常。

RedHat系列Linux系统中,/lib/lib64通常为一个链接文件,指向/usr/lib/usr/lib64,请不要随意修改该链接文件,否则可能导致系统异常。

SupportMocinstanceTypes

不支持

不能使用ecs.g6、ecs.g7等神龙规格族。

检测镜像是否支持阿里云ECS神龙规格。

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

修复命令详细说明

自动修复镜像的命令如下:

./main.sh --target=image --run <case> [--debug] [--dry-run] [-y]

参数

是否必选

说明

run <case>

修复项,表示运行需要修复的检测项。

  • 当前支持的修复项:

    cloudinitvirtionvmefstabgrubdhcpselinuxgrowpartaegisassistfirewallsshdfileattributeqemuguestagent。检测项与修复项的对应关系见检测与修复项总览

  • 使用all修复所有支持的项,多个项之间用空格分隔。

[--dry-run]

建议首次修复时使用。仅打印修复脚本,不实际执行。

[--debug]

启用详细日志输出,用于问题排查。

[-y]

自动确认所有修复步骤,跳过交互式提示。

相关文档

通过工具检测镜像符合规范后,可获取Linux镜像文件,并导入自定义镜像到阿里云平台。

常见问题

为什么修复 nvmeselinuxdhcp后问题依然存在?

这三个检测项的修复涉及内核参数或系统运行模式的根本性改变,必须重启操作系统才能应用新的配置。修复后需重启虚拟机,再运行检测进行验证。

对于单个检测项,应该如何修复?

SshConfig检测项为例。

  1. 检测与修复项总览表中,找到检测项SshConfig对应的修复项sshd

  2. 执行审查。

    如要修复其他检测项,将sshd参数改为对应修复项。
    ./main.sh --target=image --run sshd --dry-run 
  3. 执行修复。

    ./main.sh --target=image --run sshd