如何使用適用於 Linux 的 EC2Rescue 對作業系統層級問題進行疑難排解?

3 分的閱讀內容
0

我無法連接至 Amazon Elastic Compute Cloud (Amazon EC2) Linux 執行個體,或者我遇到了開機問題。為了更正這些問題,我需要修復常見問題,例如 OpenSSH 檔案許可或收集系統 (OS) 日誌以進行分析和疑難排解。如何使用適用於 Linux 的 EC2Rescue 來執行此操作?

簡短描述

適用於 Linux 的 EC2Rescue 是一種工具,可協助診斷 Amazon EC2 Linux 執行個體上的問題並進行疑難排解。適用於 Linux 的 EC2Rescue 會在 Amazon EC2 Linux 執行個體上執行,以更正作業系統層級問題。適用於 Linux 的 EC2Rescue 也會收集進階日誌、系統使用率報告和組態檔案,以供進一步分析。

適用於 Linux 的 EC2Rescue 所處理的常見案例:

  • 收集系統使用率報告,例如 vmstat、iostat、mpstat 等。
  • 收集日誌和詳細資訊,例如 syslog、dmesg、應用程式錯誤日誌和 SSM 日誌。
  • 偵測系統問題,例如非對稱路由或重複的根裝置標籤。
  • 自動修復系統問題,例如更正 OpenSSH 檔案許可或停用已知有問題的核心參數。

系統需求

適用於 Linux 的 EC2Rescue 需要符合下列先決條件的 Amazon EC2 Linux 執行個體:

支援的作業系統

  • Amazon Linux 2
  • Amazon Linux 2016.09+
  • SLES 12+
  • RHEL 7+
  • Ubuntu 16.04+

軟體需求

  • Python 2.7.9+ 或 3.2+

**注意:**如果您已啟用適用於 Linux 的 EC2 序列主控台,則可以使用它來對支援的 Nitro 型執行個體類型進行疑難排解。序列主控台可協助您對開機問題、網路組態和 SSH 組態問題進行疑難排解。序列主控臺可連線至您的執行個體,無需可運作的網路連線。您可以使用 Amazon EC2 主控台或 AWS Command Line Interface (AWS CLI) 存取序列主控台。

使用序列主控台之前,請先在帳戶層級授予對主控台的存取權。建立 AWS Identity and Access Management (IAM) 政策,將存取權授予 IAM 使用者。此外,每個使用序列主控台的執行個體都必須包含至少一個密碼型使用者。如果您的執行個體無法連線,而且您並未設定序列主控台的存取權,請遵循解決方法一節中的指示進行。如需有關設定適用於 Linux 的 EC2 序列主控台的資訊,請參閱設定 EC2 序列主控台的存取權

**注意:**如果您在執行 AWS CLI 命令時收到錯誤,請確定您使用的是最新版本的 AWS CLI

解決方法

若要使用適用於 Linux 的 EC2Rescue 對無法連線的 Amazon EC2 Linux 執行個體進行疑難排解,請執行以下操作:

1.    使用相同的 Amazon Machine Image (AMI),並在與受損執行個體相同的可用區域中,於虛擬私有雲端 (VPC) 中啟動新的 Amazon EC2 執行個體。新執行個體會變成您的「救援」執行個體。或者,如果您可以存取的現有執行個體使用相同的 AMI 且與受損執行個體位於相同的可用區域中,則使用該執行個體。

2.    將 Amazon Elastic Block Store (Amazon EBS) 根磁碟區 (/dev/xvda/dev/sda1) 從受損的執行個體中分離。記下裝置名稱,以確保稍後重新連接裝置時它是相同的

3.    將 EBS 磁碟區作為次要裝置 (/dev/sdf) 連接至救援執行個體。

4.    使用 SSH 連接至您的救援執行個體

5.    成為 root,使用 lsblk 識別正確的裝置名稱,然後儲存以在整個程序中使用:

$ sudo -i
# lsblk
# rescuedev=/dev/xvdf1

**注意:**裝置 (/dev/xvdf1) 可能會以不同的裝置名稱連接至救援執行個體。使用 lsblk 命令以檢視可用的磁碟裝置及其掛載點,以判斷正確的裝置名稱。

6.    選取要使用的適當暫時掛載點,並確保它存在,除非該掛載點已在使用中,否則請使用 /mnt。

# rescuemnt=/mnt
# mkdir -p $rescuemnt

7.    從連接的磁碟區掛載根檔案系統:

# mount $rescuedev $rescuemnt

**注意:**如果磁碟區掛載失敗,請檢查 dmesg | tail。如果日誌提示 UUID 衝突,請使用選項 -o nouuid

8.    掛載特殊檔案系統並將根目錄 (chroot) 變更為新掛載的檔案系統:

# for i in proc sys dev run; do mount --bind /$i $rescuemnt/$i ; done
# chroot $rescuemnt

9.     在離線 Linux 根磁碟區上下載並安裝適用於 Linux 的 EC2Rescue 工具:

# curl -O https://s3.amazonaws.com/ec2rescuelinux/ec2rl.tgz
# tar -xf ec2rl.tgz

10.    列出說明檔案以確認安裝:

# cd ec2rl-<version_number>
# ./ec2rl help

11.    在沒有執行所有模組的選項下,執行適用於 Linux 的 EC2Rescue

# ./ec2rl run

12.    在 /var/tmp/ec2rl 中檢視結果:

# cat /var/tmp/ec2rl/*/Main.log | more

13.    根據結果啟用支援模組的修復:

# ./ec2rl run --remediate

14.    修復完成後,結束 chroot 並卸載次要裝置:

# exit
# umount $rescuemnt/{proc,sys,dev,run,}

注意: 如果卸載操作不成功,您可能必須停止或重新啟動救援執行個體,以啟用全新卸載。

15.    將次要磁碟區 (/dev/sdf) 從救援 EC2 執行個體分離,然後將該磁碟區作為 /dev/xvda/dev/sda1 (根磁碟區) 連接至原始執行個體。請確保這與步驟 2 中看到的相同。

16.    啟動 EC2 執行個體,然後確認執行個體是否有回應。

**注意:**您也可以使用 AWS Systems Manager Automation 文件對連線問題進行疑難排解。如需詳細資訊,請參閱逐步解說: 在無法連線的執行個體上執行 EC2Rescue 工具。AWSSupport-ExecuteEC2Rescue 文件旨在自動執行使用適用於 Linux 的 EC2Rescue 通常所需的步驟。這些步驟結合了 Systems Manager 動作、AWS CloudFormation 動作和 AWS Lambda 函數。

其他疑難排解


相關資訊

使用 EC2Rescue 和 Amazon EC2 Systems Manager Automation 復原受損的執行個體

AWS 官方
AWS 官方已更新 2 年前