我正在寻找一种方法来等待 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
都完成得太早了。