Назад | Перейти на главную страницу

Ожидание инициализации LVM в AWS

Я ищу способ дождаться инициализации 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 там для хорошей меры.