【问题标题】:Tell if a volume is mounted on an ec2 instance判断卷是否安装在 ec2 实例上
【发布时间】:2017-02-26 05:28:58
【问题描述】:

我想知道是否可以通过 boto3 检查是否挂载了附加到 EC2 实例的 EBS 卷。原因是我相信很多实例都卸载了卷,但管理员忘记分离卷,所以对卷收费,但我们没有使用它。

我在 boto3 文档中看不到任何内容,我唯一能想到的就是尝试分离卷并查看它是否出错,如果卷与实例分离,我会担心这种方法安装和使用时,可能会导致严重问题。

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

【问题讨论】:

  • 你是对的,安装预置的 EBS 存储是操作系统的工作。 Boto3 不处理 OS 层。
  • lsblk 可能比df 更直接/更易于使用。

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


【解决方案1】:

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

您可以检查卷是否已附加,但不能检查是否已挂载。

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

【讨论】:

  • 感谢您的意见,我认为它不会起作用,但我想确保我没有遗漏一些明显的东西!
【解决方案2】:

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

需要注意的重要一点是你的卷设备和挂载的设备可以不同

根据内核的块设备驱动程序,设备的附加名称可能与您指定的名称不同。例如,如果您指定设备名称为 /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)。在这些情况下,每个设备名称的尾随字母都会增加相同的次数

【讨论】:

  • 感谢您的意见,我认为它不会起作用,但我想确保我没有遗漏一些明显的东西! RHEL 问题不应该让我发现,我们使用的是 ubuntu AMI,但感谢您指出这一点
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-23
  • 1970-01-01
  • 2020-06-20
  • 2015-04-04
  • 2021-09-17
  • 1970-01-01
相关资源
最近更新 更多