2016-10-17 76 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