2016-10-17 116 views
2

我想查看是否可以通過boto3檢查是否安裝了掛接到EC2實例的EBS卷。原因是我相信有很多實例已經卸載了卷,但管理員忘記了分離卷,因此卷被記帳,但我們沒有使用它。判斷卷是否安裝在ec2實例上

我在boto3文檔中看不到任何東西,我能想到的唯一的事情就是嘗試分離音量並查看是否有錯誤,這會擔心我作爲一種方法來防止音量從實例在安裝和使用時會導致嚴重問題。

我唯一能想到的其他事情是使用salt-key(我們用它來管理配置)打印出實例列表,然後在服務器上運行「df -h」,剝離出LVM ,然後返回已加載的卷的列表,我可以將該列表與實例從boto3附加的卷列表進行交叉引用。這似乎是一個更安全的方式,但可能會很痛苦,只能在我們的鹽師傅身上運行。

+0

您說得對,掛載配置EBS存儲是OS作業。 Boto3不處理OS層。 – mootmoot

+0

'lsblk'可能比'df'更直接/更易於使用。 –

回答

2

Boto沒有任何此類功能。 Boto允許您與AWS基礎架構進行交互,而不與內部OS功能進行交互。 https://boto3.readthedocs.io/en/latest/reference/services/ec2.html#volume

您可以檢查卷是否已連接,但是如果已掛載,則不能檢查。

您提到的過程是這樣做的一種方式,但需要大量的手動干預。另一方面,您始終可以使用python來運行該命令並列出服務器上的所有已加載分區獲取輸出並將其與您可以使用Boto檢索的實例附加的EBS卷列表交叉引用。

+0

感謝您的意見,我認爲它不會奏效,但我想確保我沒有錯過任何明顯的事情! – Rumbles

2

我不確定你可以完全解決它,試圖卸載你的音量。

還有要注意的是,你的音量和安裝設備的設備可以是不同的

取決於內核的塊設備驅動程序,設備可能有不同的名稱來連接一個重要的事情你指定的是什麼。例如,如果您指定設備名稱/ dev/sdh,則您的設備可能會被內核重命名爲/ dev/xvdh或/ dev/hdh;在大多數情況下,尾隨的信件保持不變。在紅帽企業Linux(及其變體,如CentOS)的某些版本中,即使後面的字母也可能更改(其中/ dev/sda可能成爲/ dev/xvde)。在這些情況下,每個設備名稱末尾的字母都會增加相同的次數。例如,/ dev/sdb將成爲/ dev/xvdf,/ dev/sdc將成爲/ dev/xvdg。 Amazon Linux AMI使用您在啓動時指定的名稱創建一個符號鏈接,指向重命名的設備路徑,但其他AMI可能行爲不同。

壞的部分是字母可以改變其不容易鏈接2(有一些blog post關於你如何能做到)

如果你把這個部分的時候,我可能會做安全方式而不是使用和解析的df -k結果我將列出可用的磁盤以及他們的終點

[[email protected] ~]# lsblk -o NAME,MOUNTPOINT -r 
NAME MOUNTPOINT 
xvde/
xvdj 

解析會更容易一點並沒有被安裝,您將能夠爲每個卷檢索它們並從boto3或aw中找到它們小號CLI

aws ec2 describe-volumes --query \ 
'Volumes[*].Attachments[?Device==`<the device>` && InstanceId==`<instance looked up>`].VolumeId' \ 
--output text 

這會工作得很好,這個問題再次

是在Red Hat Enterprise Linux(和它的變體,如CentOS的),連後綴字母也可以更改的一些版本(其中/ dev/sda可能成爲/ dev/xvde)。在這些情況下,每個設備名稱末尾的字母增加了相同的次數

+0

感謝您的意見,我不認爲它會工作,但我想確保我沒有錯過任何明顯的東西! RHEL問題不應該將我趕出去,我們正在使用ubuntu AMI,但感謝您指出了這一點 – Rumbles