Como posso ter certeza de que o volume do EBS está montado em um determinado ponto?

1

Eu preciso da minha instância do EC2 para criar instantâneos do EBS de seus volumes anexados. Para garantir um instantâneo consistente, quero usar fsfreeze ; no entanto, fsfreeze requer o ponto de montagem.

Posso usar APIs da AWS para obter a lista de volumes do EBS anexados e seus nomes de dispositivos, mas os nomes de dispositivos estão listados como /dev/sd[a-z][1-6] e o Ubuntu (ou Xen?) os renomeia como /dev/xvd[a-z][1-6] . A documentação da AWS diz "na maioria dos casos, a letra final permanece a mesma." Eu sei que posso obter o ponto de montagem do nome do dispositivo com mount -l , mas isso obviamente requer que eu tenha o nome do dispositivo correto (ou seja, não /dev/sda1 ).

Para um determinado conjunto de IDs de volume do EBS (por exemplo, "vol-abc123"), como posso confiantemente determinar seu ponto de montagem no sistema de arquivos?

Editado para adicionar um novo pensamento: Se a API me der /dev/sda1 e nem que nem /dev/xvda1 exista, posso supor com segurança que o primeiro /dev/xvd[b-z]1 existente será o mesmo volume?

Experiência: estou executando o Ubuntu 14.04 LTS Server; o log do Kernel fala sobre o carregamento de drivers virtuais Xen, então presumo que é o que a AWS está usando para a virtualização HVM. Minha situação atual é trivial (um volume do EBS, montado em / ), mas gostaria que a solução funcionasse para cenários mais complexos (vários volumes do EBS, incluindo a presença de volumes de instância - que não precisarão de instantâneos, mas pode estar por perto enquanto estou tirando fotos).

    
por Calrion 25.10.2015 / 04:41

1 resposta

3

Como o udev faz toda essa renomeação no momento da montagem, você pode inspecionar os logs do udev e ver para que o dispositivo está sendo renomeado. Você pode ter que definir o nível de log como info ou debug primeiro, pois acho que o padrão é err .

Depois de definir o nível de log e reinicializar, vejo isso quando conecto um novo volume do EBS em / dev / sdf (de acordo com a AWS):

# cat /var/log/messages | grep udev | grep sdf
Oct 25 08:04:10 ip-10-128-240-37 udevd-work[571]: '/usr/sbin/ami-udev' (stdout) 'sdf'
Oct 25 08:04:10 ip-10-128-240-37 udevd-work[571]: LINK 'sdf' /etc/udev/rules.d/99-ami-udev.rules:1
Oct 25 08:04:10 ip-10-128-240-37 udevd-work[571]: creating link '/dev/sdf' to '/dev/xvdf'

Com certeza, o dispositivo é chamado /dev/xvdf e há um link simbólico para ele em /dev/sdf .

Estou testando no CentOS, então meus logs do udev estão em /var/log/messages , mas o seu provavelmente estará em /var/log/syslog .

Não sei ao certo como essa saída aparece quando a letra é alterada (a para e, etc). Eu vi isso acontecer, mas eu não tenho uma instância na minha frente, onde esse é o caso.

Você também pode procurar em /etc/udev/rules.d e ver quais são as regras de renomeação para sua AMI.

Para seu problema específico, acredito que o fluxo de trabalho seria primeiro chamar a API da AWS para obter um mapeamento de ID do volume para o nome do dispositivo especificado pela AWS e inspecionar os registros do udev para obter o dispositivo renomeado.

    
por 25.10.2015 / 13:21