我需要我的 EC2 实例为其附加卷创建 EBS 快照。为了确保快照的一致性,我想使用fsfreeze
;但是,fsfreeze
需要挂载点。
我可以使用 AWS API 获取附加的 EBS 卷及其设备名称的列表,但设备名称列为,/dev/sd[a-z][1-6]
Ubuntu(或 Xen?)将它们重命名为/dev/xvd[a-z][1-6]
。AWS 文档说“在大多数情况下,尾随字母保持不变。”我知道我可以使用 从设备名称中获取挂载点mount -l
,但这显然要求我有正确的设备名称(即不是/dev/sda1
)。
对于给定的一组 EBS 卷 ID(例如“vol-abc123”),我该如何可靠地确定它们在文件系统上的挂载点?
编辑并添加新想法:如果 API 给出的/dev/sda1
既不存在也不/dev/xvda1
存在,我可以安全地假设第一个现有的/dev/xvd[b-z]1
将是相同的卷吗?
背景:我正在运行 Ubuntu 14.04 LTS 服务器;内核日志谈到加载 Xen 虚拟驱动程序,因此我假设 AWS 正在使用这个驱动程序进行 HVM 虚拟化。我目前的情况很简单(一个 EBS 卷,安装在/
),但我希望该解决方案适用于更复杂的场景(多个 EBS 卷,包括实例卷的存在——不需要快照,但在我拍摄快照时可能会出现)。
答案1
由于 udev 在挂载时执行所有重命名操作,因此您可以检查 udev 日志并查看设备重命名为。您可能必须先将日志级别设置为info
或debug
,因为我认为它的默认值为err
。
设置日志级别并重新启动后,当我在 /dev/sdf 附加新的 EBS 卷时,我会看到此信息(根据 AWS):
# cat /var/log/messages | grep udev | grep sdf
Oct 25 08:04:10 ip-10-128-240-37 udevd-work[571]: '/usr/sbin/ami-udev' (stdout) 'sdf'
Oct 25 08:04:10 ip-10-128-240-37 udevd-work[571]: LINK 'sdf' /etc/udev/rules.d/99-ami-udev.rules:1
Oct 25 08:04:10 ip-10-128-240-37 udevd-work[571]: creating link '/dev/sdf' to '/dev/xvdf'
果然,该设备已命名/dev/xvdf
,并且在 处有一个指向它的符号链接/dev/sdf
。
我在 CentOS 上进行测试,因此我的 udev 日志在 中/var/log/messages
,但您的日志可能在 中/var/log/syslog
。
我不确定当字母发生变化时(a 变为 e 等)输出会是什么样子。我见过这种情况,但我面前没有这种情况的例子。
您还可以查看/etc/udev/rules.d
AMI 的重命名规则。
对于您的特定问题,我认为工作流程是首先调用 AWS API 来获取卷 ID 到 AWS 指定的设备名称的映射,然后检查 udev 日志以获取重命名的设备。