Como obter informações do host de virtualização a partir de uma máquina virtual

Ambientes de virtualização hoje em dia são muito comuns e máquina virtuais dominam, tanto que se você tem acesso remoto a um host muito provavelmente ele é virtual e você nem sabe.

Ter acesso a Máquina Virtual é trivial para qualquer sysadmin, mas ter acesso ao Host de Virtualização, não, e isso muitas vezes é uma pedra no sapato quando de qualquer um quando é necessário fazer troubleshooting ou até um inventário.

Sem acesso ao Host de Virtualização eu não posso obter informações de onde a máquina virtual está hospedada, então não dá para fazer nada.

Bom, se você usa o Microsoft Hyper-V como hypervisor, você tem uma saída.

Integration Services

Os Integration Services são serviços que permitem a máquina virtual se comunicar com o host de virtualização [1].

É fato que uma máquina virtual é isolada, ela não sabe quem é o seu host e ela só pode se comunicar com o host através do hypervisor. Então é ai que entra o Integration Services, através dele podemos ter acesso a informações do host de virtualização.

📎
Quando falamos em virtualização, existe uma abstração entre o hardware físico e o hardware virtual que o hypervisor disponibiliza, essa camada de abstração nunca pode ser violada, ou seja, uma máquina virtual nunca terá acesso direto ao host (há algumas exceções como por exemplo acesso direto ao disco, gpu etc, mas não vem ao caso nesse momento).

Hoje eu não vou entrar nos detalhes de como fazer a instalação do Integration Services na máquina virtual, você pode saber mais sobre isso em https://docs.microsoft.com/en-us/windows-server/virtualization/hyper-v/manage/manage-hyper-v-integration-services.

Neste ponto acredito que você já entendeu que precisamos do Integration Services funcionando na VM, então, para finalizar, precisamos garantir que o serviço Guest Services também esteja ativo nas configurações da VM para seja possível consultar as informações sobre o host.

Obtendo informações do host a partir de uma máquina virtual Windows

O ponto de partida é sabermos onde estão as informações que o Integration Services disponibiliza sobre o host em uma VM Windows.

A chave de tudo que precisamos

HKLM:\\SOFTWARE\\Microsoft\\Virtual Machine\\Guest\\Parameters

Agora que já sabemos a chave de registro, vamos fazer algumas consultas sobre o Host de Virtualização usando PowerShell.

Host Name

Vamos consultar o nome do host de virtualização.

(Get-Item "HKLM:\\SOFTWARE\\Microsoft\\Virtual Machine\\Guest\\Parameters").GetValue("HostName")

Virtual Machine Name

Vamos consultar nome da máquina virtual criada no host de virtualização (não é o host name da VM).

(Get-Item "HKLM:\\SOFTWARE\\Microsoft\\Virtual Machine\\Guest\\Parameters").GetValue("VirtualMachineName")

Aqui podemos ver que o hostname da VM é diferente do nome dado a máquina virtual no host de virtualização.

Consulta via Prompt de Comandos

Caso preferir as consultas também podem ser feitas usando o Prompt de Comandos, neste caso use:

reg query "HKLM\\SOFTWARE\\Microsoft\\Virtual Machine\\Guest\\Parameters" /v VirtualMachineName

Obtendo informações do host a partir de uma máquina virtual Linux

Assim como no Windows, para o Linux também precisamos saber onde o Integration Services disponibiliza as informações do Host de Virtualização na VM.

O caminho das pedras

/var/lib/hyperv/.kvp_pool_3

Agora que temos o caminhos das pedras vamos na busca.

Virtual Machine Na

strings /var/lib/hyperv/.kvp_pool_3 | grep -A1 -w VirtualMachineName

Host Name

strings /var/lib/hyperv/.kvp_pool_3 | grep -A1 -w HostName

Se preferir você também pode consultar usando o sed para extrair a informação:

strings /var/lib/hyperv/.kvp_pool_3 | sed -n '/VirtualMachineName/ {n;p}'

O que o Integration Services sabe sobre o Host?

Já vimos como podemos consultar informações do Host de Virtualização a partir de Máquinas Virtuais Windows e Linux, mas o Integration Services sabe mais sobre o Host do que apenas o nome da máquina virtual.

Veja a lista a seguir com os parâmetros que você pode consultar:

HostName
HostingSystemEditionId
HostingSystemNestedLevel
HostingSystemOsMajor
HostingSystemOsMinor
HostingSystemProcessorArchitecture
HostingSystemProcessorIdleStateMax
HostingSystemProcessorThrottleMax
HostingSystemProcessorThrottleMin
HostingSystemSpMajor
HostingSystemSpMinor
PhysicalHostName
PhysicalHostNameFullyQualified
VirtualMachineDynamicMemoryBalancingEnabled
VirtualMachineId
VirtualMachineName

Conclusão

Vimos que é muito fácil consultar informações do host de virtualização através da máquina virtual com o Integration Services.

O Integration Services pode ser instalado em máquinas virtuais com S.O Windows, Linux e BSD. Para Linux, também chamado de Linux Integration Services ou LIS é suportado em CentOS, Debian, SUSE, FreeBSD e outros [2].



Referências:

[1] https://docs.microsoft.com/en-us/virtualization/hyper-v-on-windows/reference/integration-services

[2] https://docs.microsoft.com/en-us/windows-server/virtualization/hyper-v/supported-linux-and-freebsd-virtual-machines-for-hyper-v-on-windows

Comentários

Postagens mais visitadas deste blog

Gestão de Serviços de TI com Open Source - OTRS