Как определить тома EBS по сравнению с локальными томами на работающем экземпляре EC2

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

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

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

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

2 ответа

Решение

Каждый экземпляр 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 а затем повторить хотя каждое отображение с bashfor/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

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

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

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

Тем не менее, я заметил, что:

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

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

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

tune2fs -l $dev | grep "Mount count"

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

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

Другие вопросы по тегам