全部產品
Search
文件中心

Elastic Compute Service:使用鏡像偵查工具檢測並修複鏡像

更新時間:Sep 25, 2024

將自訂鏡像匯入阿里雲平台前,建議您使用鏡像偵查工具sersi檢測鏡像是否符合匯入條件,並針對異常鏡像進行修複,確保自訂鏡像的品質,以便在阿里雲平台上順利部署功能齊全、相容性良好的ECS執行個體。本文為您介紹如何使用sersi工具檢測並修複鏡像。

sersi工具介紹

sersi工具是阿里雲平台推出的鏡像檢測修複工具。sersi工具在檢測並修複鏡像過程中,自動完成以下任務:

  • 掃描鏡像中的系統及服務配置並輸出檢測報告,檢測報告中會詳細描述鏡像系統資訊以及檢測出的異常資訊。

  • 結合異常資訊自動產生相應的修複指令碼,執行修複命令修複鏡像。

使用限制

不支援FreeBSD、Fedora CoreOS以及Windows Server系統。

操作步驟

步驟1:檢測鏡像

  1. 使用root使用者登入製作鏡像的虛擬機器。

  2. 依次運行以下命令,下載並解壓sersi工具。

    wget https://ecs-image-tools.oss-cn-hangzhou.aliyuncs.com/imagecheck/sersi.tar.gz
    tar -xf sersi.tar.gz

    如果您的虛擬機器可以訪問公網,您也可以通過瀏覽器下載sersi工具

  3. 執行以下命令,運行偵查工具。

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

    偵查工具主要檢查以下配置項:

    檢測項說明

    檢測項

    等級

    檢測項說明

    不合規影響

    Virtio

    檢測鏡像中是否安裝virtio驅動。

    阿里雲ECS通常為基於KVM的虛擬機器,因此依賴鏡像中安裝虛擬磁碟的virtio驅動。

    ECS啟動異常。

    Nvme

    檢測鏡像中是否安裝NVMe驅動。

    ECS部分規格使用NVMe協議雲端硬碟,例如ecs.g7se,要求鏡像包含NVMe驅動。NVMe相比SCSI、virtio-blk等傳統驅動協議速度更快、傳輸頻寬更高,因此建議您在鏡像中安裝NVMe驅動,以支援相關執行個體規格。更多資訊,請參見NVMe協議概述

    無法使用NVMe協議雲端硬碟的執行個體規格,例如ecs.g7se。

    Fstab

    檢測/etc/fstab配置是否正常。

    錯誤的配置會導致系統啟動異常,例如配置的掛載裝置資訊不存在、裝置UUID錯誤等。

    系統啟動異常。

    Grub

    檢測grub設定檔是否正常。

    grub引導核心的載入和啟動,是系統的重要配置。錯誤的配置將導致系統啟動異常,建議您檢查系統中的設定檔是否正確,例如grub檔案中不要使用裝置名稱來指定開機磁碟分割,如root=/dev/sda1,在不同的環境中裝置名稱可能發生變化,建議您使用UUID來指定開機磁碟分割。

    系統啟動異常。

    Dhcp

    檢測網路設定是否為DHCP。

    建議您為網路裝置配置DHCP的方式,static靜態方式會導致網路設定失敗,串連異常。我們還建議您在grub核心啟動參數中增加配置選項net.ifnames=0來禁用核心網路介面重新命名行為,使網卡名稱為eth0。

    系統網路異常。

    Selinux

    檢測是否禁用SELinux,阿里雲建議您關閉SELinux。

    無法正常啟動ECS執行個體。

    OnlineResizeFS

    檢測鏡像是否支援線上擴容檔案系統。

    例如您的鏡像虛擬磁碟空間大小為10 GB,您購買ECS執行個體的系統硬碟為100 GB,如果您安裝了cloud-init、growpart等組件,相關組件在執行個體初始化時會將根分區及檔案系統擴容,擴容至您系統硬碟的大小100 GB。更多資訊,請參見擴容分區和檔案系統(Linux)

    執行個體根分區無法擴容。

    CloudInit

    檢測是否安裝cloud-init服務。

    cloud-init能在ECS執行個體啟動階段完成系統初始化配置,包括NTP、軟體源、主機名稱和SSH金鑰組等,同時執行執行個體自訂資料(User data)指令碼。

    系統初始化配置缺失。

    DiskUsage

    檢測磁碟空間使用率是否正常。

    您可以執行df -h命令來檢查您磁碟空間的使用率,確保有充足空間。

    系統啟動異常。

    InodeUsage

    檢測磁碟inode使用率是否正常。

    您可以執行df -i命令來檢查磁碟inode的使用率。

    系統啟動異常。

    SystemFileAttribute

    檢測系統中關鍵設定檔的檔案屬性是否正常。

    執行個體啟動異常、功能異常。

    CriticalUser

    檢測系統中關鍵使用者(例如root)是否存在。

    關鍵使用者的缺失會導致系統啟動異常,執行個體功能使用異常,例如無法使用使用者名稱和密碼遠端連線ECS執行個體。

    執行個體啟動異常、功能異常。

    QemuGuestAgent

    檢測系統中是否安裝qemu-guest-agent。

    該軟體是運行在虛擬機器上,和宿主機互動通訊,會導致ECS所需要的部分服務不可用,執行個體功能不全。

    執行個體功能異常。

    SshConfig

    檢測sshd服務的設定檔(通常是/etc/ssh/sshd_config)是否正常。

    sshd設定檔異常會導致sshd服務啟動失敗,進而導致SSH串連ECS失敗,因此檢查sshd設定檔的正確性和有效性非常重要。通常您可以執行以下命令:

    • 執行sudo sshd -T命令展示您所有的sshd配置選項。

    • 執行sudo sshd -t 命令驗證sshd設定檔的合法性;若合法,則沒有資訊輸出。

    執行個體SSH串連失敗。

    Firewall

    檢測防火牆服務是否開啟。

    阿里雲建議您關閉系統中的防火牆服務,使用ECS安全性群組統一管理您雲上執行個體的出入流量。更多資訊,請參見安全性群組概述

    系統防火牆應用可能導致您訪問執行個體失敗。

    LibDirectory

    在RedHat系列Linux系統中,/lib/lib64通常為一個連結檔案,指向/usr/lib/usr/lib64,請不要隨意修改該連結檔案,否則可能導致系統異常。

    系統功能異常。

    SupportMocInstanceTypes

    檢測鏡像是否支援阿里雲ECS神龍規格。

    阿里雲最新的ECS執行個體通常為神龍規格,例如ecs.g6、ecs.g7等,如果鏡像的系統和核心版本過低,在相關規格上啟動會有異常。具體的執行個體規格資訊,請參見執行個體規格類型系列

    不能使用ecs.g6、ecs.g7等神龍規格類型系列。

    CloudAssistant

    檢測鏡像是否安裝雲助手。

    雲助手是專為Elastic Compute Service打造的原生自動化營運工具,阿里雲建議您為鏡像安裝雲助手服務,實現雲上ECS高效營運。更多資訊,請參見雲助手概述

    雲上營運不便。

    SecurityCenterAgent

    檢測是否安裝Security CenterAgent。

    安裝Security Center的Agent外掛程式後,您的伺服器才能受到Security Center的保護。

    無法識別執行個體中的漏洞問題,缺少Security Center的保護。

    等待偵查工具檢測完成,檢測結果類似如下資訊。

    檢測結果樣本

    ------------------------------------------------------------
    
                OS: Alibaba Cloud Linux 3   Kernel: 5.10.134-16.3.al8.x86_64 
                Arch: x86_64       RTC-Mode: utc       Boot-Mode: UEFI
            
    ------------------------------------------------------------
    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
            
    ------------------------------------------------------------

    偵查工具會根據檢測項的等級給出OKFAILEDWARNING檢測結果。

    • OK:檢測項均符合要求。

    • FAILED:檢測項不符合要求,使用該自訂鏡像建立的ECS執行個體會出現無法正常啟動、網路異常等嚴重問題,建議您參考步驟2:修複鏡像,修複報錯項後再匯入鏡像。

    • WARNING:檢測項不符合要求,使用該自訂鏡像建立的ECS執行個體缺少Security Center保護、無法使用雲助手自動化營運等問題,建議您參考步驟2:修複鏡像,修複報錯項後再匯入鏡像,以提高您雲上的營運效率。

步驟2:修複鏡像

執行以下命令,自動修複鏡像。

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

上述命令涉及的參數說明如下表所示, 請您根據實際情況進行配置:

參數

是否必選

說明

run <case>

表示運行需要修複的檢測專案。當前支援的檢測項有cloudinitvirtionvmefstabgrubdhcpselinuxgrowpartaegisassistfirewallsshdfileattributeqemuguestagent

  • 全部檢測並修複:./main.sh --target=image --run all

  • 只針對某一項進行檢測並修複,例如檢測鏡像是否安裝cloud-init:./main.sh --target=image --run cloudinit

  • 同時針對多項檢測,各檢測項之間需要空格分隔,例如:./main.sh --target=image --run cloudinit virtio assist

[--debug]

添加該參數表示增加debug日誌列印。

[--dry-run]

  • 添加該參數表示只列印修複指令碼,不執行修複指令碼。

  • 不添加該參數表示直接執行修複指令碼。

[-y]

  • 添加該參數表示執行修複指令碼時不進行互動確認。

  • 不添加該參數表示執行修複指令碼時進行互動確認,需要輸入y確認執行。

重要

sersi工具修複鏡像時執行的指令碼無法復原,對系統的修改無法撤銷,因此強烈建議您:

  • 先添加[--dry-run]參數,僅查看修複指令碼,不執行修複指令碼,sersi工具會將修複指令碼儲存至cache目錄中,您可以查看或調試。確保無誤後,無需添加[--dry-run]參數即可執行修複指令碼,進行修複操作。

  • 先不要添加-y參數,表示進行互動確認後再執行修複指令碼,避免修複指令碼導致的意外更改或資料丟失。

修複命令樣本

說明

對於不支援通過sersi工具自動修複的檢測項,您也可以手動進行修複。

檢測項

工具自動修複

工具修複命令

手動修複方法

Virtio

工具在dracut設定檔中增加virtio驅動配置,重建帶有virtio驅動的initrd檔案。

./main.sh --target=image --run virtio --debug --dry-run

安裝virtio驅動

Nvme

工具在dracut設定檔中增加NVMe驅動配置,重建帶有NVMe驅動的initrd檔案。同時會在grub配置中增加nvmenvme_core核心模組的timeout參數,提高NVMe I/O處理的可靠性。

重要

修複完成後,需要您手動重啟系統才會生效。

./main.sh --target=image --run nvme --debug

如何為已有自訂鏡像安裝NVMe驅動?

Fstab

工具會注釋/etc/fstab異常的掛載項。

./main.sh --target=image --run fstab --debug

如何正確配置/etc/fstab,請參見在fstab檔案中配置UUID方式自動掛載資料盤

Grub

工具會修改grub中rootdevice為正確值。

./main.sh --target=image --run grub --debug

Dhcp

工具會配置網路服務設定檔,設定檔中網卡裝置命名是eth0,設定dhcp=true等。同時在grub中添加核心啟動參數 biosdevname=0 net.ifnames=0,確保網卡裝置命名為eth0。

重要

修複完成後,需要您手動重啟系統才會生效。

./main.sh --target=image --run dhcp --debug

Selinux

工具會修改設定檔/etc/selinux/config模式為 disabled,同時在grub中添加核心啟動參數 selinux=0關閉selinux。

重要

修複完成後,需要您手動重啟系統才會生效。

./main.sh --target=image --run selinux --debug

如何關閉SELinux,請參見開啟或關閉SELinux

OnlineResizeFS

工具會在系統中配置growpart指令碼,執行個體支援根分區擴容。

./main.sh --target=image --run growpart --debug

  • 安裝cloud-init

  • 安裝growpart工具。工具安裝方法請參見安裝cloud-init文檔中在建立執行個體時對系統硬碟進行擴容,但在執行個體內部發現根分區大小並沒有自動擴容,如何處理?問題的操作。

CloudInit

工具會為系統臨時配置軟體倉庫源,通過系統中的包管理器安裝cloud-init軟體包,並設定cloud-init設定檔,設定資料來源為阿里雲。

./main.sh --target=image --run cloudinit --debug

安裝cloud-init

DiskUsage

不支援,只能通過手動修複。

不涉及

手動刪除不必要檔案。

InodeUsage

不支援,只能通過手動修複。

不涉及

手動刪除不必要檔案。

SystemFileAttribute

支援。

工具會刪除檢測出來的異常檔案的屬性。

./main.sh --target=image --run fileattribute --debug

不要使用chattr命令鎖定/etc/shadow等檔案。

CriticalUser

不支援,只能通過手動修複。

不涉及

保留root帳號。

QemuGuestAgent

支援。

工具會卸載qemu-guestos-agent。

./main.sh --target=image --run qemuguestagent --debug

卸載qemu-guestos-agent。

SshConfig

支援。

工具會開啟sshd中的密碼認證和root使用者登入。

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

檢查sshd設定檔。

Firewall

支援。

工具會關閉防火牆服務。

./main.sh --target=image --run firewalld --debug

關閉系統防火牆服務。

LibDirectory

不支援,只能通過手動修複。

不涉及

連結檔案/lib/lib64的指向位置不能為絕對路徑,修改指向位置為相對路徑。

SupportMocInstanceTypes

不支援,只能通過手動修複。

不涉及

不支援神龍規格的系統通常是已經EOL不再維護的低版本系統,阿里雲建議您儘早更新升級,使用各發行廠商正在維護更新的作業系統版本。

CloudAssistant

支援。

工具會安裝雲助手。

./main.sh --target=image --run assist --debug

安裝雲助手Agent

SecurityCenterAgent

支援。

工具會安裝阿里雲Security Center用戶端。

./main.sh --target=image --run aegis --debug

安裝Agent

修複結果樣本

2024-07-19 17:20:54,480 root [INFO]: sersi run finished, print summary report
2024-07-19 17:20:54,480 root [INFO]: casename: cloudinit                            NO_FOUND_RISK
2024-07-19 17:20:54,480 root [INFO]: casename: virtio                               OK
2024-07-19 17:20:54,480 root [INFO]: casename: nvme                                 OK_Need_Reboot
2024-07-19 17:20:54,480 root [INFO]: casename: fstab                                NO_FOUND_RISK
2024-07-19 17:20:54,480 root [INFO]: casename: grub                                 NO_FOUND_RISK
2024-07-19 17:20:54,480 root [INFO]: casename: dhcp                                 NO_FOUND_RISK
2024-07-19 17:20:54,480 root [INFO]: casename: selinux                              NO_FOUND_RISK
2024-07-19 17:20:54,480 root [INFO]: casename: growpart                             NO_FOUND_RISK
2024-07-19 17:20:54,480 root [INFO]: casename: aegis                                NO_FOUND_RISK
2024-07-19 17:20:54,480 root [INFO]: casename: assist                               DRY_RUN
2024-07-19 17:20:54,480 root [INFO]: casename: firewall                             NO_FOUND_RISK
2024-07-19 17:20:54,480 root [INFO]: casename: sshd                                 NO_FOUND_RISK
2024-07-19 17:20:54,480 root [INFO]: casename: systemfileattribute                  NO_FOUND_RISK
2024-07-19 17:20:54,480 root [INFO]: casename: qemu_guest_agent                     FAILED

修複結束後,工具會根據修複情況產生以下修複結果:

  • OK:表示該項修複成功。

  • NO_FOUND_RISK:表示檢測鏡像中未找到該項的異常。

  • OK_Need_Reboot:表示該項修複完成需重啟系統才會生效。

  • DRY_RUN:表示找到該項的異常並通過dry-run模式運行僅列印修複指令碼,但未執行修複。

  • FAILED:表示該項修複失敗。

相關文檔

  • 通過工具檢測鏡像符合規範後,您可以擷取Linux鏡像檔案,並將鏡像檔案匯入阿里雲平台。

  • 您也可以在鏡像匯入阿里雲平台時,通過鏡像檢測功能檢測鏡像配置是否正常,並通過CloudOps Orchestration Service (OOS)進行一鍵修複。更多資訊,請參見匯入自訂鏡像鏡像檢測概述