Chu*_*cks 6 linux hard-drive diskmanagement amazon-web-services
在正在运行的 EC2 实例上,如何识别 EBS 卷和本地磁盘?我想从 shell 中识别它们。
fdisk, lsblk 仅有助于查明 EBS 卷。
假设我总共有 20 个磁盘,其中有 20 个标识 ebs 存储。
有什么建议?
Mic*_*bot 10
每个 EC2 实例都可以访问位于链接本地地址的 REST 端点,该地址http://169.254.169.254提供对有关该实例的元数据的访问。
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”,因为我的特定实例用于其设备名称,最后sort将其按词法顺序排列。
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
Run Code Online (Sandbox Code Playgroud)
示例输出:
/dev/xvda1 is ami
/dev/xvda1 is root
/dev/xvdb is ephemeral0
/dev/xvdf is ebs2
/dev/xvdg is ebs1
/dev/xvdh is ebs5
Run Code Online (Sandbox Code Playgroud)
那是非常光滑且相对无痛的。
但是,我的回答有一个小问题。
块设备映射/ebsN
与 Amazon EBS 卷关联的虚拟设备(如果存在)。如果该值在启动时存在,则该值仅在元数据中可用。
此解决方案不会告诉您在实例启动后挂载的 EBS 卷。这可能没问题,因为临时卷信息始终可用,因为临时磁盘只能在启动时添加,而不能稍后添加......所以如果卷是临时的,您应该始终能够通过这种方法发现它。如果它不在这里,它就不是一个临时磁盘。
有鉴于此,如果您确实需要了解有关实例附加内容的所有信息,则需要使用EC2 API或aws cli实用程序(调用 EC2 API)。那里有更多数据,但在脚本中使用会有些棘手。我想是经典的权衡。
| 归档时间: |
|
| 查看次数: |
5651 次 |
| 最近记录: |