如何在執行的 EC2 實例上辨識 EBS 卷與本地捲
在執行的 EC2 實例上,如何辨識 EBS 捲和本地磁碟?我想從外殼中辨識它們。
fdisk, lsblk 僅有助於查明 EBS 卷。
假設我總共有 20 個磁碟,在 20 個標識 ebs 商店中。
有什麼建議麼?
每個 EC2 實例都可以訪問連結本地地址
http://169.254.169.254
上的 REST 端點,該地址提供對該實例的元數據的訪問。EBS 和實例儲存卷的塊設備映射是其中可用的幾個屬性之一,並且可以使用“curl”之類的工具從 shell 和腳本輕鬆訪問數據。
http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/AESDG-chapter-instancedata.html
這可能是發現您正在尋找的內容的“最正確”方式。
更新:我敲定了一個快速且極其骯髒的單線來展示此功能。我並不打算暗示這是生產質量程式碼,也不是特別有據可查的,但它確實有效。
上面的端點似乎提供了其界面的幾個“版本”,其中大部分使用版本發布日期,或者您可以使用“最新”版本。為了讓這個範常式式碼即使在界面發生變化的情況下也能繼續工作,我將選擇版本“2012-01-12”。
我們將在 shell 變數 $METAURL 中儲存一個連結,檢索其中可用的映射列表,然後使用//循環(再次使用)
curl
遍歷每個映射以找到塊設備……然後使用使其更整潔並將“sdX”重寫為“xvdX”,因為我的特定實例用於其設備名稱,最後按詞法順序排列。bash
for``do``done``curl``perl``sort
bash$ METAURL="http://169.254.169.254/2012-01-12/meta-data/block-device-mapping/" bash$for bd in `curl -s $METAURL`; do curl -s $METAURL$bd | \ perl -pe 'BEGIN { $d = shift } s/^(\/dev\/)?(sd)?(.*)$/\/dev\/xvd$3 is $d\n/' $bd; \ done | sort
範例輸出:
/dev/xvda1 is ami /dev/xvda1 is root /dev/xvdb is ephemeral0 /dev/xvdf is ebs2 /dev/xvdg is ebs1 /dev/xvdh is ebs5
那是相當光滑和相對無痛的。
**但是,**我的回答有一個小問題。
塊設備映射/ebsN
與 Amazon EBS 卷關聯的虛擬設備(如果有)。此值僅在啟動時存在時才在元數據中可用。
此解決方案不會告訴您實例啟動後掛載的 EBS 卷。這可能很好,因為臨時卷資訊始終可用,因為臨時磁碟只能在啟動時添加,而不是稍後……所以如果卷是臨時卷,您應該始終能夠通過此方法發現它。如果它不在這裡,它就不是一個臨時磁碟。
有鑑於此,如果您確實需要了解有關實例附加內容的所有資訊,則需要使用EC2 API或aws cli實用程序(呼叫 EC2 API)。那裡有更多數據,但在腳本中使用會有些棘手。經典的權衡,我想。