Para fins de desenvolvimento e preparação, eu preciso criar frequentemente clones de harddisks virtuais individuais (contêiner vmdk) e movê-los / implementá-los em algum outro sistema.
Embora eu tenha sido capaz de hackear um POC em funcionamento, agora preciso de uma abordagem genérica que funcione para muitas VMs que eu nem mesmo pretendo controlar. Estou tendo dificuldades com o mapeamento de dispositivos de bloco nos arquivos vmdk reais nos armazenamentos de dados do ESX (há muitos HDDs virtuais por VM).
Esta resolução vmdk destina-se a ser executada nas VMs individuais, onde tenho acesso ssh a todos os hosts ESXi e também é assim que eu crio e recupero os clones vmdk. (Sim, isso é muito hacky e perigoso.)
Por fim, por exemplo, vou perguntar ao meu script what's the corresponding file of /dev/sdd?
e ele deve responder /vmfs/volumes/12345678-12345678-1234-123456789abc/foobar/filenamewithoutsemanticalinformation.vmdk
Como faço para determinar o caminho real do arquivo vmdk que mapeia para um determinado dispositivo de bloco dentro de uma VM?
Eu tenho uma idéia sobre como combinar os IDs de Destino SCSI de dentro da VM com as entradas vHDD no arquivo vmx, mas não sei se isso é uma informação confiável.
Tendo jogado por um tempo, estou bastante certo, que o controlador SCSI correspondente e os IDs de alvo são confiáveis e podem ser controlados facilmente. Neste caso, confiável significa estático; o sistema não altera os IDs e eles são expostos ao convidado exatamente como nomeados e numerados no arquivo vmx. Usando lsscsi
, pode-se obter o controlador e os IDs de destino dos dispositivos de bloco. Pode-se então fazer um grep para <controller>:<target>.filename
no arquivo vmx e extrair o nome do arquivo do resultado.
Encontrar o arquivo vmx correto é um novo problema. Isso pode ser obtido por find-grep
ing todos os arquivos vmx no armazenamento de dados para o endereço MAC da VM. Não é a abordagem mais bonita e não recomendada para grandes instalações.