Como identificar volumes do EBS versus volumes locais na execução da instância do EC2

4

Em uma instância do EC2 em execução, como identifico volumes do EBS e discos locais? Eu gostaria de identificá-los do shell.

fdisk, o lsblk não está ajudando a identificar apenas os volumes do EBS.

Digamos que eu tenha um total de 20 discos, de 20 identifique lojas de ebs.

Alguma sugestão?

    
por Chucks 05.06.2014 / 20:22

2 respostas

7

Cada instância do EC2 pode acessar um ponto de extremidade REST no endereço de link local http://169.254.169.254 que fornece acesso a metadados sobre essa instância.

O mapeamento de dispositivos de bloco do EBS e os volumes de armazenamento de instâncias são uma das várias propriedades disponíveis, e os dados são facilmente acessados a partir do shell e scripts usando uma ferramenta como "curl".

link

Esta é provavelmente a maneira mais "correta" de descobrir o que você está procurando.

Update: Eu elaborei um one-liner rápido e extremamente sujo para demonstrar essa funcionalidade. Não pretendo sugerir que este seja um código de qualidade de produção, nem particularmente bem documentado, mas funciona definitivamente.

O endpoint acima parece oferecer várias "versões" de sua interface, a maioria das quais usa a data de lançamento da versão, ou você pode usar a versão "mais recente". Para que este código de exemplo continue funcionando mesmo se a interface mudar, eu escolherei a versão "2012-01-12".

Armazenaremos um link na variável shell $ METAURL, recuperaremos a lista de mapeamentos disponíveis com curl e, em seguida, iteraremos cada mapeamento com um bash for / do / done loop (novamente com curl ) para encontrar o dispositivo de bloco ... então use perl para torná-lo mais ordenado e reescreva "sdX" como "xvdX" como minha instância particular usa para seus nomes de dispositivos e finalmente sort para colocar em ordem lexical.

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

Exemplo de saída:

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

Isso foi muito legal e relativamente indolor.

Mas há um pequeno problema com minha resposta.

block-device-mapping/ebsN

The virtual devices associated with Amazon EBS volumes, if any are present. This value is only available in metadata if it is present at launch time.

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

Esta solução não informará sobre os volumes do EBS montados após o lançamento da instância. Isso pode ser bom, porque as informações de volume efêmeras estão sempre disponíveis, pois os discos efêmeros só podem ser adicionados no momento do lançamento, não mais tarde ... portanto, se um volume for efêmero, você sempre poderá descobri-lo por esse método. Se não está aqui, não é um disco efêmero.

Diante disso, a API do EC2 ou < Um utilitário href="http://docs.aws.amazon.com/cli/latest/reference/ec2/describe-instances.html"> aws cli (que chama a API do EC2) seria o que você preciso usar se você realmente precisa saber tudo o que há para saber sobre o que está anexado à instância. Há mais dados lá, mas seria um pouco mais complicado utilizar em scripts. Troca clássica, suponho.

    
por 06.06.2014 / 05:22
1

A resposta de Michael mostra que não parece haver uma maneira de distinguir os discos de instância dos volumes do EBS dentro de uma instância da AWS. Na verdade, as informações do kernel, por exemplo, e os discos do EBS, que você pode comparar com diff -r /sys/block/xvd{f,g} , são idênticas, exceto para estatísticas de gravação e nome do dispositivo. E os discos não respondem a smartctl .

No entanto, notei que:

  • Novos volumes do EBS parecem surgir sem nenhuma tabela de partição como todos.

  • Novos discos efêmeros parecem estar formatados para ext e ter o parâmetro superblock de "contagem de montagens" definido como 0 para refletir o fato de que eles nunca foram montados em nenhum lugar.

Usando isso, uma maneira de fazer isso é executar um script, quando a máquina é inicializada pela primeira vez, que procura dispositivos com formatação ext e para os quais

tune2fs -l $dev | grep "Mount count"

retorna 0. Salve uma lista de tais discos em algum lugar da instância e trate todos os outros discos como EBS.

A Amazon está, naturalmente, sujeita a alterar tudo isso a qualquer momento, sem aviso prévio. Mas parece funcionar por enquanto.

    
por 28.08.2015 / 00:39