我正在寻找一种方法来等待AWS实例中的LVM初始化。 理想情况下,允许等待“所有”VGs。 我有4个VG和6个LV初始化,目前的云初始化脚本:
aws ec2 attach-volume .... aws ec2 attach-volume .... ... aws ec2 wait volume-in-use --volume-ids vol-id vol-id ... udevadm settle vgchange -ay mount ... mount ... ...
不幸的是,在运行vgchange ,只有一个VG可见,第二个mount命令失败。
在这种情况下是否有一个好的方法来等待LV,而不需要手动循环睡眠/等待每个卷的/dev/mapper/... ? 卷需要dynamic连接,而不是在实例描述中进行设置。
pvscan vgscan lvscan
而且我会在里面添加一些像sleep 5一样的东西。
一段时间后,我使用非常基本的脚本解决了这个问题:
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
由于所有当前设备都可以在运行attach-volume命令之后进行扫描,因此它们自己的XXscan命令是不够的,但这并不意味着所有需要的设备都存在。 那意味着所有XXscan完成得太早。