Como verificar se o ambiente é uma máquina virtual no Linux

LinuxBeginner
Pratique Agora

Introdução

Neste laboratório, você aprenderá como determinar se seu ambiente Linux está rodando em uma máquina virtual. Exploraremos três métodos diferentes para alcançar isso: usando o comando dmidecode para inspecionar informações do sistema, utilizando a ferramenta virt-what especificamente projetada para detecção de virtualização e examinando as flags da CPU dentro do arquivo /proc/cpuinfo. Ao final deste laboratório, você estará equipado com técnicas práticas para identificar ambientes virtualizados no Linux.

Verificar informações do sistema com dmidecode

Nesta etapa, você aprenderá como usar o comando dmidecode para recuperar informações detalhadas sobre o hardware do seu sistema. dmidecode lê dados da tabela DMI/SMBIOS (Desktop Management Interface / System Management BIOS), que contém descrições dos componentes do sistema.

Este comando é incrivelmente útil para entender os detalhes do hardware em que seu sistema Linux está rodando, como a placa-mãe, CPU, memória e muito mais.

Como o acesso à tabela DMI requer privilégios de root, você precisará usar sudo com dmidecode.

Abra seu terminal, se ainda não estiver aberto. Lembre-se, você pode encontrar o ícone do Xfce Terminal no lado esquerdo da sua área de trabalho.

Agora, digite o seguinte comando e pressione Enter:

sudo dmidecode

Este comando exibirá uma grande quantidade de informações sobre o hardware do seu sistema. Role pela saída para ver as diferentes seções, como "BIOS Information", "System Information", "Base Board Information", "Processor Information", "Memory Device", etc.

A saída pode ser semelhante a esta (partes da saída foram omitidas para brevidade):

## dmidecode 3.3
Getting SMBIOS data from sysfs.
SMBIOS 3.3.0 present.

Handle 0x0000, DMI type 0, 26 bytes
BIOS Information
        Vendor: SeaBIOS
        Version: 1.16.0-1.fc36
        Release Date: 07/07/2022
        Address: 0xE0000
        Runtime Size: 128 kB
        ROM Size: 64 kB
        Characteristics:
                PCI is supported
                BIOS is upgradeable
                BIOS shadowing is allowed
                Boot from CD is supported
                Selectable boot is supported
                BIOS ROM is socketed
                EDD is supported
                5.25" / 1.2 MB floppy services are supported (int 13h)
                3.5" / 720 kB floppy services are supported (int 13h)
                3.5" / 1.44 MB floppy services are supported (int 13h)
                8042 keyboard services are supported (int 9h)
                CGA/mono video services are supported (int 10h)
                AT/XT compatible keyboard services are supported (int 16h)
                Printer services are supported (int 17h)
                CGA/mono video is supported (int 10h)
                ACPI is supported
                USB legacy is supported
                BIOS boot specification is supported
                Targeted content distribution is supported
                UEFI is supported
        BIOS Revision: 1.16

Handle 0x0001, DMI type 1, 27 bytes
System Information
        Manufacturer: QEMU
        ProductName: Standard PC (Q35 + ICH9, 2009)
        Version: pc-q35-7.0
        Serial Number: <filtered>
        UUID: <filtered>
        Wake-up Type: Power Switch
        SKU Number: <filtered>
        Family: Virtual Machine

Handle 0x0002, DMI type 2, 17 bytes
Base Board Information
        Manufacturer: QEMU
        ProductName: Standard PC (Q35 + ICH9, 2009)
        Version: pc-q35-7.0
        Serial Number: <filtered>
        Asset Tag: <filtered>
        Features:
                Board is a hosting board
                Board is replaceable
        Location In Chassis: <filtered>
        Chassis Handle: 0x0003
        Type: Motherboard
        Contained Object Handles: 0

... (output continues)

Você também pode filtrar a saída para ver informações sobre um tipo específico de hardware usando a opção -t seguida pelo número do tipo ou palavra-chave. Por exemplo, para ver apenas as informações da CPU, você pode usar:

sudo dmidecode -t processor

Ou, para ver informações sobre os dispositivos de memória:

sudo dmidecode -t memory

Experimente com diferentes tipos como bios, system, baseboard, chassis, etc., para ver os detalhes específicos de cada componente.

Usar dmidecode é uma habilidade fundamental para administradores de sistema e qualquer pessoa que precise solucionar problemas de hardware ou simplesmente entender a configuração subjacente do sistema.

Clique em Continuar para prosseguir para a próxima etapa.

Detectar virtualização com virt-what

Nesta etapa, você aprenderá como determinar se seu sistema Linux está rodando dentro de uma máquina virtual ou em hardware bare metal. Isso é frequentemente importante para configuração do sistema, ajuste de desempenho ou licenciamento.

Usaremos o comando virt-what, que é especificamente projetado para esse propósito. Ele verifica sinais de virtualização e imprime os nomes dos hypervisors que detecta.

Primeiro, você precisa instalar o pacote virt-what. Use apt assim como você fez para htop no laboratório anterior.

Abra seu terminal e execute o seguinte comando para instalar virt-what:

sudo apt update
sudo apt install virt-what -y

A flag -y responde automaticamente "sim" a quaisquer prompts durante a instalação, tornando o processo não interativo.

Assim que a instalação for concluída, você pode executar o comando virt-what:

virt-what

A saída deste comando informará se o sistema está virtualizado e, em caso afirmativo, qual tecnologia de virtualização está sendo usada.

No ambiente LabEx, que roda em um ambiente virtualizado, você deve ver uma saída semelhante a esta:

qemu
kvm

Isso indica que o sistema está rodando dentro de uma máquina virtual QEMU/KVM. Se o sistema estivesse rodando em hardware físico, virt-what normalmente não produziria nenhuma saída.

Entender se seu sistema está virtualizado é uma informação crucial para muitas tarefas de administração de sistema. virt-what fornece uma maneira simples e confiável de obter essa informação.

Clique em Continuar para passar para a próxima etapa.

Inspecionar flags da CPU em /proc/cpuinfo

Nesta etapa, você explorará o arquivo /proc/cpuinfo, que é um arquivo virtual fornecido pelo kernel Linux que contém informações sobre a(s) CPU(s) em seu sistema. Este arquivo é uma ótima fonte de detalhes sobre seu processador, incluindo seu modelo, velocidade, tamanho do cache e recursos suportados (flags).

O sistema de arquivos /proc é um pseudo-sistema de arquivos que fornece uma interface para as estruturas de dados do kernel. Os arquivos dentro de /proc não são armazenados em disco, mas são gerados em tempo real pelo kernel quando você os acessa.

Para visualizar o conteúdo de /proc/cpuinfo, você pode usar um utilitário de linha de comando como cat ou less. cat imprimirá todo o conteúdo no terminal, enquanto less permite que você role pelo conteúdo página por página. Como /proc/cpuinfo pode ser bastante longo, less é frequentemente mais conveniente.

Abra seu terminal e digite o seguinte comando para visualizar as informações da CPU usando cat:

cat /proc/cpuinfo

Você verá informações detalhadas para cada núcleo da CPU em seu sistema. A saída incluirá linhas como processor, vendor_id, model name, cpu MHz, cache size e flags.

Aqui está um exemplo do que você pode ver (partes da saída foram omitidas para brevidade):

processor       : 0
vendor_id       : GenuineIntel
cpu family      : 6
model           : 158
model name      : Intel(R) Core(TM) i7-10700 CPU @ 2.90GHz
stepping        : 13
microcode       : 0xffffffff
cpu MHz         : 2904.000
cache size      : 16384 KB
physical id     : 0
siblings        : 1
core id         : 0
cpu cores       : 1
apicid          : 0
initial apicid  : 0
fpu             : yes
fpu_exception   : yes
cpuid level     : 22
wp              : yes
flags           : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ss ht syscall nx pdpe1gb rdtscp lm constant_tsc rep_good nopl xtopology nonstop_tsc cpuid tsc_known_freq pni pclmulqdq vmx ssse3 fma cx16 pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand hypervisor lahf_lm abm 3dnowprefetch invpcid_single ssbd ibrs ibpb stibp fsgsbase tsc_adjust bmi1 avx2 smep bmi2 erms invpcid mpx rdseed adx smap clflushopt intel_pt xsaveopt xsavec xgetbv1 xsaves arch_capabilities
bugs            : cpu_meltdown spectre_v1 spectre_v2 spec_store_bypass l1tf mds swapgs itlb_multihit srbds mmio_stale_data retbleed
bogomips        : 5808.00
clflush size    : 64
cache_alignment : 64
address sizes   : 43 bits physical, 48 bits virtual
power management:

processor       : 1
vendor_id       : GenuineIntel
cpu family      : 6
model           : 158
model name      : Intel(R) Core(TM) i7-10700 CPU @ 2.90GHz
stepping        : 13
microcode       : 0xffffffff
cpu MHz         : 2904.000
cache size      : 16384 KB
physical id     : 0
siblings        : 1
core id         : 0
cpu cores       : 1
apicid          : 0
initial apicid  : 0
fpu             : yes
fpu_exception   : yes
cpuid level     : 22
wp              : yes
flags           : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ss ht syscall nx pdpe1gb rdtscp lm constant_tsc rep_good nopl xtopology nonstop_tsc cpuid tsc_known_freq pni pclmulqdq vmx ssse3 fma cx16 pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand hypervisor lahf_lm abm 3dnowprefetch invpcid_single ssbd ibrs ibpb stibp fsgsbase tsc_adjust bmi1 avx2 smep bmi2 erms invpcid mpx rdseed adx smap clflushopt intel_pt xsaveopt xsavec xgetbv1 xsaves arch_capabilities
bugs            : cpu_meltdown spectre_v1 spectre_v2 spec_store_bypass l1tf mds swapgs itlb_multihit srbds mmio_stale_data retbleed
bogomips        : 5808.00
clflush size    : 64
cache_alignment : 64
address sizes   : 43 bits physical, 48 bits virtual
power management:

A linha flags é particularmente interessante, pois lista os vários recursos e extensões suportados pela sua CPU. Essas flags indicam capacidades como suporte à virtualização (vmx ou svm), conjuntos de instruções específicos (como sse, avx) e recursos de segurança.

Você também pode usar grep para pesquisar informações específicas dentro de /proc/cpuinfo. Por exemplo, para encontrar o nome do modelo:

grep "model name" /proc/cpuinfo

Isso exibirá o nome do modelo para cada núcleo da CPU:

model name      : Intel(R) Core(TM) i7-10700 CPU @ 2.90GHz
model name      : Intel(R) Core(TM) i7-10700 CPU @ 2.90GHz

Ou, para verificar a presença de uma flag específica, como vmx (suporte à virtualização Intel VT-x):

grep "vmx" /proc/cpuinfo

Se vmx estiver presente na saída, sua CPU suporta a virtualização Intel VT-x.

Explorar /proc/cpuinfo é uma maneira fundamental de entender as capacidades do processador do seu sistema diretamente da perspectiva do kernel.

Clique em Continuar para concluir este laboratório.

Resumo

Neste laboratório, você aprendeu como verificar se um ambiente Linux é uma máquina virtual usando vários métodos. Você começou usando o comando dmidecode com sudo para acessar a tabela DMI/SMBIOS e recuperar informações detalhadas sobre o hardware do sistema, como detalhes do BIOS, sistema e processador. Este comando fornece uma visão geral abrangente dos componentes de hardware subjacentes.

Em seguida, você explorará técnicas adicionais para detectar a virtualização, incluindo o uso do comando virt-what e a inspeção das flags da CPU no arquivo /proc/cpuinfo. Esses métodos oferecem maneiras alternativas de identificar a presença de um ambiente virtualizado, examinando características e configurações específicas do sistema.