适用的症狀和原因
在某些情況下,Linux作業系統會出現啟動異常,此時,在阿裡雲ECS控制台顯示的執行個體狀态可能是運作中,但執行個體内的應用不可通路,執行個體内的網絡不可達,既無法ping通,也無法通過workbench或者ssh建立連接配接。如果您在阿裡雲ECS控制台通過vnc連接配接上去,可能會看到如下的錯誤提示:
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檔案被損壞。
-
其他原因造成的檔案系統損害。
在上述情況下,您可以嘗試使用本文的的自救方案,自行修複損傷的Linux執行個體。
自救方案概覽
阿裡雲的運維編排服務OOS(
https://www.aliyun.com/product/oos),是阿裡雲官方提供的免費的自動化運維平台,通過簡單的YAML格式的模闆,提供自動化任務的管理與執行。
本文的自救方案,包含了一個經過阿裡雲官方測試的OOS模闆,進而提供了一鍵修複的自動化方案。具體使用辦法參見後面的“使用步驟”。
此自救方案會先對問題執行個體打鏡像備份,然後解除安裝問題執行個體的系統盤,挂載到一個新建立的臨時執行個體上,執行檢查和修複動作,在修複完成後,重新把系統盤挂載回原執行個體,并且嘗試啟動修複後的執行個體,最後,釋放臨時執行個體。
支援的作業系統
- CentOS 7.2 64位,7.3 64位, 7.4 64位,7.5 64位,7.6 64位,7.7 64位,8.0 64位
- Debian 9.6 64位,9.8 64位,9.9 64位,9.11 64位,8.9 64位,8.11 64位,
- OpenSUSE 42.3 64位,15.1 64位
- SUSE Linux Enterprise Server 12 SP4 64位, 12 SP2 64位。
- Aliyun Linux 2.1903 64位
- Ubuntu 16.04 64位,18.04 64位,
特别提示
• Linux系統啟動失敗的原因衆多,此自救方案不能保證修複所有的系統啟動失敗的執行個體。
• 修複過程中,會建立臨時執行個體并是以産生一定費用(一般小于1元RMB)。
• 此自救方案會修改系統的fstab和initrd檔案,在修改之前,會自動對待修複執行個體打鏡像備份,以友善您利用備份鏡像恢複資料。保有鏡像是收費的(參見快照的收費标準),在您确認執行個體修複成功之後,您可考慮删除鏡像。
準備賬号和權限
如果您使用主賬号,可以跳過此節,直接檢視使用步驟。
如果您使用RAM子賬号或者角色,請确認該子賬号或者角色擁有OOS、ROS、ECS、VPC的适當權限。有如下兩種方式:
1,您可以給子賬号或者角色授予系統權限: AliyunOOSFullAccess ,AliyunROSFullAccess , AliyunECSFullAccess , AliyunVPCFullAccess 的權限。詳情參見RAM幫助文檔
https://help.aliyun.com/document_detail/93732.html。
2,您也可以建立自定義政策,然後授權給子賬戶。參考的政策内容為
https://oos-debug.oss-cn-hangzhou.aliyuncs.com/rt_policy.json操作步驟參見阿裡雲RAM的幫助文檔
https://help.aliyun.com/document_detail/93733.html使用步驟
首先登入到
運維編排控制台。選擇問題執行個體所在的region地域。
單擊我的模版>建立模版,并選取空白模版。

單擊YAML,将
ACS-ECS-RescueUnreachableInstance-Linux中模版内容粘貼到空白編輯欄,輸入模版名稱,單擊建立模版。
在我的模版中,找到剛建立成功的模版,單擊建立執行。
單擊 下一步,設定參數 。
輸入以下的參數。
• unreachableInstanceId: 必填,待修複系統盤的執行個體ID。
• credentialType: 必填,修複完系統盤後,将系統盤挂回原執行個體時将設定的認證憑證,可選擇KeyPairName(密鑰對)或Password(自定義密碼)方式。
• credentialValue: 必填,認證憑證值,如選擇了密鑰對方式則輸入密鑰對名稱;如選擇了自定義密碼方式,則輸入密碼。
• imagePrefix: 選填,在修複前對待修複執行個體打鏡像,打鏡像時設定的鏡像名稱字首,預設為OOSRescueBackup-。
• helperInstanceType: 選填,将建立臨時執行個體的規格,預設為ecs.t5-lc1m2.large。
• 執行使用到的權限的來源:選擇目前賬号的已有權限。
單擊 下一步,确認 ,單擊 建立執行 。
您可在執行詳情中檢視OOS模版執行,可通過執行輸出的參數rtCommandOutput檢視修複腳本執行情況。
此執行過程大約需要5-10分鐘,請耐心等待。如果執行成功,您的執行個體應該已經被修複并且處于正常運作中了。
提醒
如果模版執行過程中被取消,或者模闆執行中斷,可能會造成執行個體的系統盤被解除安裝後沒有挂載回去,此時,該執行個體狀态會顯示無系統盤,您可按如下步驟還原挂載,首先登入到ECS控制台,找到您修複的執行個體, 單擊該執行個體的ID通路執行個體詳情,單擊本執行個體磁盤,單擊挂載雲盤,此時在頁面上可以檢視到源系統盤對應的ID,将此以d-bp為字首的系統盤id複制并填寫到目标CD光牒搜尋欄中,嘗試搜尋該磁盤ID,根據搜尋結果執行如下步驟。
• 若可以搜尋到該ID,确認選擇該磁盤ID, 登入憑證可選擇 密鑰對 或 自定義密碼,該憑證将在您啟動執行個體後通過root使用者登入時使用。比如此處 登入憑證 選擇的是自定義密碼,則請在登入密碼和确認密碼中填寫您要設定的密碼,單擊确定,單擊執行挂載,若挂載成功則可以看到執行個體狀态轉變為已停止。
• 若無法搜尋到該ID,傳回檢視剛剛建立的OOS執行,在untilStackReady任務中可找到輸出參數helperInstanceId,複制對應參數值以i-為字首的執行個體iD,然後在ECS控制台中搜尋該執行個體id,找到後釋放該臨時執行個體,釋放成功後,回到上述步驟:将以d-bp為字首的系統盤id複制并填寫到目标CD光牒搜尋欄中,并按步驟繼續挂載系統盤。
自救方案内部的實作邏輯
修複/etc/fstab
- 檢查 /etc/fstab。如果/etc/fstab已經存在,則備份原檔案。
- • 當/etc/fstab 不存在或者解析失敗時,建立預設/etc/fstab。
• 當發現nofail沒有設定時,設定nofail,防止啟動失敗。
• 當發現fsck選項打開時,将fsck選項關閉。
更新ramdisk
- 檢查/boot裡面的ramdisk,如果存在,則備份原檔案。
- 重新建構 ramdisk 檔案。