Estou procurando um comando terminal que não exija que o usuário em execução esteja no grupo sudoers e também seja universal e não exija a instalação de pacotes adicionais. Até agora, descobri que, se o sistema possui o systemd instalado, posso usar:
$ hostnamectl status
Static hostname: mint
Icon name: computer-laptop
Chassis: laptop
Machine ID: bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
Boot ID: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
Operating System: Linux Mint LMDE
Kernel: Linux 3.16.0-6-amd64
e em Nome do ícone e chassi, posso ver se é VM ou máquina física. Mas eu queria saber se posso usar lscpu
, especialmente porque é um método mais universal do que hostnamectl
e não requer systemd. Minha teoria é que, se a CPU tiver apenas um thread por núcleo e também não listar a frequência mínima e máxima da CPU, isso deve ser uma indicação de que o servidor é realmente virtualizado.
$ lscpu
Architecture: x86_64
CPU op-mode(s): 32-bit, 64-bit
Byte Order: Little Endian
CPU(s): 8
On-line CPU(s) list: 0-7
Thread(s) per core: 2
Core(s) per socket: 4
Socket(s): 1
NUMA node(s): 1
Vendor ID: GenuineIntel
CPU family: 6
Model: 60
Model name: Intel(R) Core(TM) i7-4710HQ CPU @ 2.50GHz
Stepping: 3
CPU MHz: 2500.488
CPU max MHz: 3500.0000
CPU min MHz: 800.0000
BogoMIPS: 4988.18
Virtualization: VT-x
L1d cache: 32K
L1i cache: 32K
L2 cache: 256K
L3 cache: 6144K
NUMA node0 CPU(s): 0-7
Eu sei que se uma CPU tiver apenas um thread por núcleo não significa necessariamente que é VM, com certeza, mas todas as CPUs modernas devem ter 2 threads por núcleo e, além disso, também posso levar em consideração a falta / presença de freqüência mínima e máxima da CPU na lscpu
saída.
fonte
Respostas:
Sob determinadas condições:
o método mais óbvio e simples para VMs não modificadas, cujos proprietários intencionalmente não tentaram esconder o fato de o SO ser VM, é
Mais possibilidades:
Fora das condições dadas pelo autor do OP, existem abordagens mais complicadas como esta: Onde estou? Identificação do sistema operacional e da virtualização sem chamadas do sistema
fonte
cat /sys/class/dmi/id/product_name
, portanto, não tenho certeza do quanto isso é útil.Standard PC (i440FX + PIIX, 1996)
é uma impressão digital bem conhecida das máquinas virtuais QEMU / KVM. By the way, esta impressão digital pode ser facilmente anulado: askubuntu.com/questions/564643/...pr -t /sys/class/dmi/id/sys_vendor /sys/class/dmi/id/product_name
o conteúdo desses dois arquivos também deve fornecer uma idéia bastante precisa se o sistema é físico ou virtual.Isso também requer systemd (o que é bastante onipresente atualmente), mas
systemd-detect-virt
é uma ferramenta melhor para saber se isso está sendo executado em hardware físico ou virtual.Você pode dar uma olhada na lógica usada
systemd-detect-virt
, perceberá que ela realmente olha para muitos lugares para detectar várias tecnologias de virtualização distintas ...Acho que algo ingênuo, como olhar para a
lscpu
saída, pode funcionar em alguns casos algumas vezes, mas acho que dificilmente funcionaria o tempo todo. Observe também que muitas tecnologias tornam possível (e até provável) que as VMs tenham mais de um encadeamento por núcleo; portanto, nem acho que esse recurso específico seja suficiente para fazer qualquer tipo de detecção confiável aqui.fonte