Я ищу способ дождаться инициализации LVM в экземпляре AWS. В идеале тот, который позволяет дождаться «всех» 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/...
для каждого тома? Тома необходимо прикреплять динамически, а не настраивать их в описании экземпляра.
Я решил проблему через некоторое время, используя очень простой скрипт:
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
закончить слишком рано.
pvscan
vgscan
lvscan
И я бы добавил что-то вроде sleep 5
там для хорошей меры.