等待 AWS 中的 LVM 初始化

等待 AWS 中的 LVM 初始化

我正在寻找一种方法来等待 AWS 实例中的 LVM 初始化。理想情况下,允许等待“所有”VG。我有 4 个 VG 和 6 个 LV 需要初始化,目前 cloud-init 脚本执行的操作如下:

aws ec2 attach-volume ....
aws ec2 attach-volume ....
...
aws ec2 wait volume-in-use --volume-ids vol-id vol-id ...
udevadm settle
vgchange -a y
mount ...
mount ...
...

不幸的是,运行时vgchange只有一个 VG 可见,并且第二个mount命令失败。

在这种情况下,有没有一种好的方法来等待 LV,而不需要手动循环睡眠/等待/dev/mapper/...每个卷?卷需要动态连接,而不是在实例描述中设置它们。

答案1

pvscan
vgscan
lvscan

sleep 5而且我会在其中添加类似的东西以便更好地衡量。

答案2

一段时间后,我使用非常基本的脚本解决了这个问题:

for try in $(seq 1 20); do
  echo "Waiting for LVM to initialise ($try)"
  count=$(ls -1 /dev/mapper | grep -cv control)
  if (($count >= 7)) ; then
    break
  fi
  sleep 2
done

这些XXscan命令本身是不够的,因为运行命令后可以扫描所有现有设备attach-volume,但这并不意味着所有必需的设备都已存在。这意味着所有设备XXscan都完成得太早了。

相关内容