Как определить тома 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, если таковые имеются. Это значение доступно в метаданных, только если оно присутствует во время запуска.
Это решение не сообщит вам о томах 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 может изменить все это в любое время без предварительного уведомления. Но, похоже, пока это работает.