判断是否在ec2实例上安装了卷

时间:2016-10-17 09:30:40

标签: linux amazon-web-services amazon-ec2 boto3

我想知道是否可以通过boto3检查是否安装了附加到EC2实例的EBS卷。这样做的原因是我相信许多实例已经卸载了卷,但管理员忘记分离卷,因此会对卷进行计费,但我们并未使用它。

我无法在boto3文档中看到任何内容,我唯一能想到的就是尝试分离卷并查看它是否有错误,这会让我担心这个方法,以防卷被分离在安装和使用的情况下,它可能会导致严重的问题。

我能想到的另一件事是使用salt-key(我们用来管理配置)打印出一个实例列表,然后运行一个" df -h"在服务器上,剥离LVM,并返回已挂载的卷列表,我可以与实例从boto3附加的卷列表交叉引用。这似乎是一种更安全的方式,但可能是一种痛苦,只能在我们的盐主人身上运行。

2 个答案:

答案 0 :(得分:3)

Boto没有任何此类功能。 Boto允许您与AWS基础架构进行交互,而不是使用内部OS功能。 https://boto3.readthedocs.io/en/latest/reference/services/ec2.html#volume

您可以检查音量是否已连接,但如果已安装则不能。

您提到的过程是一种方法,但需要大量的人工干预。另一方面,您始终可以使用 python 来运行命令并列出服务器上所有已安装的分区,并获取输出并将其与您附加到实例的EBS卷列表交叉引用,您可以使用博托。

答案 1 :(得分:3)

我不确定您是否可以通过尝试卸载音量来完全解决它。

需要注意的是,您的音量设备和安装的设备可能不同

  

根据内核的块设备驱动程序,可能使用与指定名称不同的名称附加设备。例如,如果指定设备名称为/ dev / sdh,则内核可能会将设备重命名为/ dev / xvdh或/ dev / hdh;在大多数情况下,尾随的字母保持不变。在某些版本的Red Hat Enterprise Linux(及其变体,如CentOS)中,甚至尾随的字母也可能会发生变化(/ dev / sda可能会变成/ dev / xvde)。在这些情况下,每个设备名称尾随字母增加相同的次数。例如,/ dev / sdb将成为/ dev / xvdf,/ dev / sdc将成为/ dev / xvdg。 Amazon Linux AMI使用您在启动时指定的名称创建符号链接,该名称指向重命名的设备路径,但其他AMI可能表现不同。

不好的一面是,这封信可以改变,而且不容易链接2(有一些blog post关于你如何做)

如果你把这部分拿出来,我可能会采取安全的方式,而不是使用和解析df -k的结果我会列出可用的磁盘及其终点

[root@light ~]# lsblk -o NAME,MOUNTPOINT -r
NAME MOUNTPOINT
xvde /
xvdj

解析将更容易一些,对于未安装的每个卷,您将能够检索它们并从boto3或aws 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)。在这些情况下,每个设备名称尾随字母的递增次数相同