GNU/Linux >> Tutoriales Linux >  >> Linux

¿Comando de terminal para averiguar si un servidor es virtual o físico?

Estoy buscando un comando de terminal que no requiera que el usuario que lo ejecuta esté en el grupo sudoers y que también sea universal y no requiera instalar paquetes adicionales. Hasta ahora he descubierto que si el sistema tiene systemd instalado, entonces puedo 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

y bajo Nombre de icono y Chasis, puedo ver si es una máquina virtual o una máquina física. Pero me preguntaba si puedo usar lscpu , especialmente porque es un método más universal que hostnamectl y no requiere systemd. Mi teoría es que si la CPU tiene solo un subproceso por núcleo y tampoco aparece la frecuencia mínima y máxima de la CPU, esto debería ser una indicación de que el servidor está 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

Sé que si una CPU tiene solo un subproceso por núcleo no significa necesariamente que sea una VM con seguridad, pero todas las CPU modernas deberían tener 2 subprocesos por núcleo y, además, también puedo tener en cuenta la falta/presencia de frecuencia de CPU mínima y máxima en el lscpu salida.

Respuesta aceptada:

En determinadas condiciones:

comando de terminal que no requiere que el usuario que lo ejecuta esté en el grupo sudoers y que también sea universal y no requiera instalar paquetes adicionales.

el método más simple y obvio para máquinas virtuales no modificadas, cuyos propietarios no han tratado de ocultar intencionalmente el hecho de que el sistema operativo es una máquina virtual, es

cat /sys/class/dmi/id/product_name

Más posibilidades:

  • Cómo detectar la virtualización
  • 16 métodos para verificar si un sistema Linux es una máquina física o virtual

Fuera de las condiciones dadas por el autor de OP, existen enfoques más complicados como este:¿Dónde estoy? Sistema operativo e identificación de virtualización sin llamadas al sistema


Linux
  1. Cómo obtener información de CPU virtual/física en Oracle VM (XEN)

  2. Linux:averigüe quién está conectado al servidor

  3. Contando el número de archivos en un directorio con un comando de terminal OSX

  4. ¿Puedo hacer una máquina virtual a partir de una máquina física con Windows XP?

  5. comando ip en la terminal Mac OS X

Cómo averiguar la dirección IP pública desde la línea de comandos en Linux

Cómo encontrar el número de núcleos de CPU desde la línea de comandos en Linux

Cómo encontrar información de la CPU en Linux usando la línea de comandos

¿Encontrar la línea de comando?

Linux:averigüe en qué número de puerto está escuchando un proceso

¿Cómo averiguar los principales directorios o archivos que consumen espacio?