如需在ECS Linux實例系統盤異常時進行自助修復,您可以使用OOS提供的一鍵修復功能。
前提條件
已創建RAM用戶并賦予,AliyunOOSFullAccess、AliyunROSFullAccess、AliyunECSFullAccess和AliyunVPCFullAccess的權限。具體操作,請參見創建RAM用戶、權限策略概覽。
使用說明
使用場景
在某些情況下,Linux操作系統可能出現啟動異常。此時,盡管阿里云ECS控制臺顯示實例狀態為“運行中”,但實際上實例內的應用無法訪問,且實例網絡也不可達(無法ping通,也無法通過Workbench或SSH建立連接)。如果您通過VNC在阿里云ECS控制臺連接到該實例,可能會看到以下錯誤提示之一:
unexpected inconsistency;RUN fsck MANUALLY
Give root password for maintenance (or type CTRL-D to continue)
Enter 'help' for a list of built-in commands. (initramfs)
造成上述問題的原因包括但不限于:
實例被強制關機或重啟。
突然宕機導致文件系統數據不一致。
卸載了數據盤但未從/etc/fstab中刪除相應的掛載信息。
/etc/fstab文件丟失或損壞。
initrd文件被損壞。
其他原因導致的文件系統損害。
解決方案概覽
本文提供了一個一鍵修復的自動化方案,該方案采用了一個經過阿里云官方測試的OOS模板。模板流程如下:
對出現問題的實例進行鏡像備份。
卸載問題實例的系統盤,并將其掛載至新創建的臨時實例上。
在臨時實例上執行檢查與修復操作。
修復完成后,將系統盤重新掛載至原實例并嘗試啟動。
最后,釋放臨時實例。
支持的操作系統
CentOS 7.2 64位,7.3 64位, 7.4 64位,7.5 64位,7.6 64位,7.7 64位,8.0 64位。
Debian ,8.9 64位,8.11 64位,9.8 64位,9.9 64位,9.11 64位。
OpenSUSE 42.3 64位,15.1 64位。
SUSE Linux Enterprise Server 12 SP4 64位,12 SP2 64位。
Alibaba Cloud Linux 2.1903 64位。
Ubuntu 18.04 64位。
Linux啟動失敗的原因多樣,本自救方案可能無法解決所有問題。修復過程會創建臨時實例并產生小額費用(通常不足1元人民幣)。我們將修改fstab和initrd文件,并在修改前自動備份實例。保留備份需付費,請參見快照計費。確認修復后,可刪除備份以節省費用。
操作步驟
登錄系統運維管理控制臺。
單擊
,選擇ACS-ECS-RescueUnreachableInstance-Linux。單擊創建執行。
單擊下一步:設置參數,設置參數。
輸入以下的參數。
unreachableInstanceId:必填,待修復系統盤的實例ID。
credentialType:必填,修復完系統盤后,將系統盤掛回原實例時將設置的認證憑證,可選擇KeyPairName(密鑰對)或Password(自定義密碼)方式。
credentialValue:必填,認證憑證值,如選擇了密鑰對方式則輸入密鑰對名稱;如選擇了自定義密碼方式,則輸入密碼。
imagePrefix:選填,在修復前對待修復實例打鏡像,打鏡像時設置的鏡像名稱前綴,默認為OOSRescueBackup-。
helperInstanceTypes:選填,將創建臨時實例的規格,默認會從已輸入的實例規格列表中選擇一個單價最低的。
執行使用到的權限的來源:選擇當前賬號的已有權限。
單擊下一步:確定。
您可在執行詳情中查看OOS模板執行情況,通過執行輸出的參數rtCommandOutput查看修復腳本執行情況。此執行過程大約需要5-10分鐘,請耐心等待。如果執行成功,您的實例應當已被修復并處于正常運行狀態。
掛載恢復(可選)
如果模板執行過程中被取消或中斷,可能會導致實例的系統盤被卸載后未能重新掛載。此時,實例狀態會顯示為“無系統盤”。您可以按照以下步驟進行掛載恢復:
登錄ECS控制臺,找到需要修復的實例。
單擊該實例的ID進入實例詳情頁。
在實例詳情頁中找到并單擊系統盤。
單擊掛載云盤。
頁面上會顯示源系統盤對應的ID(以d-bp為前綴)。
復制該系統盤ID并粘貼到目標光盤搜索欄中,嘗試搜索該磁盤ID。
如果能搜索到該ID:
確認選擇該磁盤ID。
設置登錄憑證(可以選擇密鑰對或自定義密碼)。如選擇自定義密碼,請在登錄密碼和確認密碼中輸入新密碼。
單擊確定,然后單擊執行掛載。
若掛載成功,實例狀態將變為已停止。
如果無法搜索到該ID:
返回檢查之前創建的OOS執行記錄,在untilStackReady任務中查找輸出參數helperInstanceId。
復制該參數值(以i-為前綴的實例ID)。
在ECS控制臺中搜索該實例ID,找到后釋放該臨時實例。
釋放成功后,重復上述步驟:將以d-bp為前綴的系統盤ID復制并填寫到目標光盤搜索欄中,繼續執行掛載操作。
實現邏輯
修復/etc/fstab
檢查/etc/fstab。如果/etc/fstab已經存在,則備份原文件。
修復/etc/fstab。當/etc/fstab不存在或者解析失敗時,創建默認/etc/fstab。
當發現nofail沒有設置時,設置nofail,防止啟動失敗。
當發現fsck選項打開時,將fsck選項關閉。
更新ramdisk
檢查/boot里面的ramdisk,如果存在,則備份原文件。
重新構建ramdisk文件。