Linux

如何在執行的 EC2 實例上辨識 EBS 卷與本地捲

  • August 27, 2015

在執行的 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 卷關聯的虛擬設備(如果有)。此值僅在啟動時存在時才在元數據中可用。

http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/AESDG-chapter-instancedata.html#instancedata-data-categories

此解決方案不會告訴您實例啟動後掛載的 EBS 卷。這可能很好,因為臨時卷資訊始終可用,因為臨時磁碟只能在啟動時添加,而不是稍後……所以如果卷是臨時卷,您應該始終能夠通過此方法發現它。如果它不在這裡,它就不是一個臨時磁碟。

有鑑於此,如果您確實需要了解有關實例附加內容的所有資訊,則需要使用EC2 APIaws cli實用程序(呼叫 EC2 API)。那裡有更多數據,但在腳本中使用會有些棘手。經典的權衡,我想。

引用自:https://serverfault.com/questions/602141