Detectar a maioria das soluções de virtualização reais não é exatamente difícil.
O kernel do Linux pode detectar pelo menos VMware, HyperV, Xen e KVM: procure por uma mensagem como Hypervisor detected: <virtualization type>
in dmesg
output.
Pelo menos o VMware e o HyperV podem ser detectados com as informações de assinatura que eles adicionam aos resultados do código de operação do processador cpuid
, para que possam ser detectados em um nível muito baixo. Observar as saídas de dmidecode
e / ou lspci
é outra maneira rápida de detectar muitas formas de virtualização.
Por razões práticas, a maioria das soluções de virtualização apresenta um conjunto de componentes do sistema para a VM que são conhecidos por serem simples e bem suportados. Isso geralmente leva a combinações que não fazem sentido no hardware físico real: por exemplo, se você vir um controlador SATA Intel ICH8M e uma ponte ISA Intel PIIX3 no mesmo sistema, essa é uma indicação bastante inoperante: os dois devem ser dispositivos integrados no chipset do sistema, mas eles pertencem a chipsets muito diferentes para que eles nunca existam no mesmo sistema físico.
Além disso, se você ver partes pertencentes a um chipset do sistema que foram usadas com os chips Pentium II originais com velocidades de clock medidas em valores de MHz de dois dígitos, e ainda assim o processador exigir velocidade de vários GHz, você sabe que tem que haver alguma virtualização acontecendo.
Veja também: Maneira fácil de determinar a tecnologia de virtualização
systemd
inclui recursos projetados para controlar VMs e contêineres, portanto, sua biblioteca principal provavelmente também inclui um conjunto de rotinas de detecção de virtualização. Você também pode usá-los com o comando systemd-detect-virt.