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

Как отличить тома EBS от локальных томов при запущенном инстансе EC2

Как определить тома EBS и локальные диски на работающем инстансе EC2? Я хотел бы идентифицировать их из оболочки.

fdisk, lsblk помогает не только определить тома EBS.

Допустим, у меня есть всего 20 дисков, из 20 идентифицирующих магазины ebs.

Какие-либо предложения?

Каждый экземпляр EC2 может получить доступ к конечной точке REST по локальному адресу ссылки. http://169.254.169.254 который обеспечивает доступ к метаданным об этом экземпляре.

Блочное сопоставление устройств EBS и томов хранилища экземпляров - одно из нескольких свойств, доступных там, и к данным легко получить доступ из оболочки и сценариев с помощью такого инструмента, как «curl».

http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/AESDG-chapter-instancedata.html

Вероятно, это «самый правильный» способ узнать, что вы ищете.


Обновление: я сделал быстрый и очень грязный однострочник, чтобы продемонстрировать эту функциональность. Я не собираюсь говорить о том, что это производственный код качества и не особо хорошо документирован, но он определенно работает.

Вышеупомянутая конечная точка, похоже, предлагает несколько «версий» своего интерфейса, в большинстве из которых используется дата выпуска версии, или вы можете использовать «последнюю» версию. Чтобы этот пример кода продолжал работать, даже если интерфейс изменится, я выберу версию «2012-01-12».

Мы сохраним ссылку в переменной оболочки $ METAURL, получим список доступных там сопоставлений с помощью curl а затем итерировать каждое отображение с bash for/do/done цикл (снова с curl), чтобы найти блочное устройство ... затем используйте perl чтобы сделать его более аккуратным и переписать "sdX" на "xvdX", как мой конкретный экземпляр использует для своих имен устройств, и, наконец, sort расположить его в лексическом порядке.

bash$ METAURL="http://169.254.169.254/2012-01-12/meta-data/block-device-mapping/"
bash$for bd in `curl -s $METAURL`; do curl -s $METAURL$bd | \
         perl -pe 'BEGIN { $d = shift } s/^(\/dev\/)?(sd)?(.*)$/\/dev\/xvd$3 is $d\n/' $bd; \
         done | sort

Пример вывода:

/dev/xvda1 is ami
/dev/xvda1 is root
/dev/xvdb is ephemeral0
/dev/xvdf is ebs2
/dev/xvdg is ebs1
/dev/xvdh is ebs5

Это было довольно гладко и относительно безболезненно.

Но есть одна небольшая проблема с моим ответом.

отображение блочного устройства / ebsN

Виртуальные устройства, связанные с томами Amazon EBS, если таковые имеются. Это значение доступно в метаданных, только если оно присутствует во время запуска.

- http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/AESDG-chapter-instancedata.html#instancedata-data-categories

Это решение не сообщит вам о томах EBS, смонтированных после запуска экземпляра. Это может быть хорошо, потому что информация об эфемерных томах всегда доступна, поскольку временные диски могут быть добавлены только во время запуска, а не позже ... поэтому, если том является эфемерным, вы всегда должны иметь возможность обнаружить его с помощью этого метода. Если его здесь нет, это не эфемерный диск.

В свете этого EC2 API или aws cli Утилита (которая вызывает API EC2) - это то, что вам нужно, если вам действительно нужно знать все, что нужно знать о том, что подключено к экземпляру. Там больше данных, но использовать их в скриптах будет несколько сложнее. Я полагаю, классический компромисс.

Ответ Майкла показывает, что, похоже, не существует способа отличить диски экземпляра от томов EBS внутри экземпляра AWS. Фактически, информация о ядре, например, и дисках EBS, которые вы можете сравнить с diff -r /sys/block/xvd{f,g}, идентично, за исключением статистики записи и имени устройства. И диски не реагируют на smartctl.

Однако я заметил, что:

  • Новые тома EBS появляются без какой-либо таблицы разделов.

  • Новые эфемерные диски кажутся отформатированными в формате ext, и для параметра суперблока «счетчик монтирования» установлено значение 0, чтобы отразить тот факт, что они никогда нигде не монтировались.

Используя это, один из способов сделать это - запустить скрипт, когда машина загружается в первый раз, который ищет устройства, отформатированные в формате ext и для которых

tune2fs -l $dev | grep "Mount count"

возвращает 0. Сохраните список таких дисков где-нибудь в экземпляре и относитесь ко всем остальным дискам как к EBS.

Разумеется, Amazon может изменить все это в любое время без предварительного уведомления. Но, похоже, пока это работает.