linux – 如何在运行EC2实例时识别EBS卷与本地卷

在正在运行的EC2实例上,如何识别EBS卷和本地磁盘?我想从 shell中识别它们.

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检索那里可用的映射列表,然后使用bash for / do / done循环(再次使用curl)迭代每个映射,以找到块设备…然后使用perl使其更整洁并将“sdX”重写为“xvdX”,因为我的特定实例用于其设备名称,最后排序以按词汇顺序排列.

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

这很光滑,相对无痛.

但是,我的回答有一个小问题.

block-device-mapping/ebsN

The virtual devices associated with Amazon EBS volumes,if any are present. This value is only available in Metadata if it is present at launch time.

— 07001

解决方案不会告诉您实例启动后安装的EBS卷.这可能没问题,因为短暂的卷信息总是可用的,因为短暂的磁盘只能在启动时添加,而不是更晚……所以如果卷是短暂的,你应该总是能够通过这种方法发现它.如果它不在这里,它不是一个短暂的磁盘.

鉴于此,EC2 APIaws cli实用程序(调用EC2 API)将是您需要使用的内容,如果您确实需要了解所有关于实例附加内容的信息.那里有更多的数据,但在脚本中使用会有点琐碎.我猜想经典的权衡.

相关文章

1、安装Apache。 1)执行如下命令,安装Apache服务及其扩展包...
一、先说一下用ansible批量采集机器信息的实现办法: 1、先把...
安装配置 1. 安装vsftpd 检查是否安装了vsftpd # rpm -qa | ...
如何抑制stable_secret读取关键的“net.ipv6.conf.all.stabl...
1 删除0字节文件 find -type f -size 0 -exec rm -rf {} ...
## 步骤 1:安装必要的软件包 首先,需要确保系统已安装 `dh...