Table of Contents

Las máquinas virtuales se esfuerzan mucho por convencer a sus sistemas operativos de que se ejecutan en {hardware} físico. Entonces, ¿puede saber desde l. a. línea de comandos de Linux si l. a. computadora es física o digital?
Máquinas virtuales e hipervisores
Una computadora tradicional es un objeto físico. Es una colección de diferentes piezas de {hardware} que se conectan y unen para que pueda cargar un sistema operativo, instalar aplicaciones, ejecutarlas y usarlas.
El {hardware} es caro. Estar restringido a un sistema operativo por computadora física significa que el costo de ejecutar varios sistemas operativos pronto se vuelve prohibitivo. Una mejor solución sería permitir que una sola computadora física ejecute una selección de sistemas operativos al mismo tiempo, con cada uno pensando que se está ejecutando en su propio {hardware} único.
Un hipervisor lo hace posible. Un hipervisor, también llamado administrador de máquina digital o track de máquina digital, es un instrument que le permite crear máquinas virtuales. Estos se comportan como si fueran computadoras físicas individuales, aunque se ejecutan en el mismo host físico, compartiendo su espacio en el disco duro, l. a. memoria y los núcleos de l. a. CPU.
Por supuesto, l. a. computadora host debe ser lo suficientemente poderosa para hacer frente a las demandas de l. a. colección de máquinas virtuales, pero, con suficiente memoria RAM y potencia de procesamiento en el host, las máquinas virtuales pueden ejecutarse a velocidades casi completas.
Desde el lanzamiento del kernel 2.6.20 en 2007, Linux ha tenido okbasado en ernel Vdigital METROEl soporte de l. a. máquina está integrado. Linux tiene varios hipervisores disponibles, como caja virtual, Cajas GNOMEy QEMU-KVM. Hacen uso de l. a. capacidad KVM nativa de Linux, basándose en l. a. funcionalidad del kernel nativo al agregar interfaces de usuario y funcionalidades como l. a. posibilidad de tomar una instantánea de una máquina digital.
Las máquinas virtuales brindan ahorros de costos, eficiencias, implementaciones simplificadas y, si se aprovisionan correctamente, beneficios de seguridad. También facilitan l. a. escalabilidad. Los nuevos servidores pueden activarse automáticamente a medida que aumenta l. a. demanda de un servicio y apagarse cuando l. a. demanda disminuye. Esto los hace muy populares tanto en l. a. nube como en l. a. infraestructura native.
Tal vez esté administrando de forma remota un servidor Linux y necesite saber si es una máquina digital o una caja física. O tiene un script que necesita saber en qué tipo de plataforma se está ejecutando. Aquí hay varias formas en que puede detectar si l. a. computadora en l. a. que está trabajando es física o digital.
El comando dmicode
Él dmidecode
El comando admite una gran cantidad de opciones y modificadores. Interroga las tablas de l. a. interfaz de administración de escritorio (DMI) e imprime l. a. información en l. a. ventana del terminal.
Lo usaremos con el -s
(mostrar una sola cadena) y solicite el nombre del producto del sistema. Tenga en cuenta que debemos usar sudo
.
Ejecutaremos el comando en una máquina digital VirtualBox con Ubuntu 22.04.
sudo dmidecode -s system-product-name
Los angeles plataforma está correctamente identificada como VirtualBox.
En una máquina digital QEMU-KVM que ejecuta Fedora 35, obtenemos este resultado.
sudo dmidecode -s system-product-name
Aunque se informa como una PC estándar, es una PC digital QEMU estándar, de tipo Q35. Entonces l. a. plataforma se reconoce correctamente como una máquina digital.
Si ejecutamos el mismo comando en una computadora física, obtenemos información sobre el fabricante.
sudo dmidecode -s system-product-name
Esta computadora es una construcción personalizada basada en una placa base Micro-Superstar Global Corporate Restricted, con el código de producto de MS-7B86.
El comando lshw
Él lshw
El comando enumera los detalles de una amplia gama de {hardware} informático. Podemos elegir qué clase de {hardware} queremos lshw
para informar.
vamos a usar el -class
opción con el method
modificador Utilizando sudo
con este comando asegura que veamos todos los detalles.
Ejecutaremos este comando en nuestra máquina digital Ubuntu VirtualBox.
sudo lshw -class method
- El campo “descripción” tiene una entrada genérica de “computadora”.
- El campo “producto” nos cube que se trata de una máquina digital que se ejecuta en VirtualBox.
- El campo “proveedor” contiene el nombre de l. a. empresa alemana que creó VirtualBox, Innotek GmbH. Innotek fue adquirido por Oracle Company en 2010 como parte de su adquisición de Solar Microsystems, Inc.
Tuvimos que instalar lshw
en Fedora.
sudo dnf set up lshw
Probemos ese comando en nuestra VM de Fedora ejecutándose en GNOME Containers.
sudo lshw -class method
- Nuevamente, el campo “descripción” tiene una entrada genérica de “computadora”.
- El campo “producto” nos brinda l. a. misma información estándar de QEMU PC que vimos con el
dmidecode
dominio. - El campo “proveedor” contiene “QEMU”, lo que indica claramente que se trata de una máquina digital.
Este es el resultado de ejecutar el mismo comando en nuestra computadora física.
sudo lshw -class method
Podemos ver que se trata de una computadora de {hardware}, con una placa base Micro-Superstar.
- El {hardware} se identifica como una computadora de escritorio.
- El campo “producto” nos da el tipo de placa base, MS-7B86.
- El campo “proveedor” contiene el nombre del fabricante.
El comando hostnamectl
Este comando tiene l. a. ventaja de que no necesita tener sudo
privilegios para ejecutarlo. Sin embargo, solo está disponible en systemd
distribuciones habilitadas. Los angeles mayoría de las distribuciones modernas utilizan systemd
.
Esta es l. a. respuesta al ejecutar el comando en nuestra máquina digital Ubuntu VirtualBox.
hostnamectl
- El campo “icon-name” tiene “-vm” adjunto.
- El campo “Chasis” contiene “vm”.
- El campo “Virtualización” contiene “oracle”.
- El campo “Proveedor de {hardware}” contiene “innotek GmbH”.
- El campo “Modelo de {hardware}” contiene “VirtualBox”.
El resultado de nuestra VM Fedora dentro de GNOME Containers es muy an identical.
hostnamectl
- El campo “icon-name” tiene “-vm” adjunto.
- El campo “Chasis” contiene “vm”.
- El campo “Virtualización” contiene “kvm”.
- El campo “Proveedor de {hardware}” contiene “QEMU”
- El campo “Modelo de {hardware}” contiene “PC estándar (Q35 + ICH9, 2009)”.
Si usamos el comando hostnamectl en nuestro escritorio físico, l. a. salida no contiene una línea de “Virtualización”.
hostnamectl
Si no hay un campo de “Virtualización”, debe estar ejecutando en naked steel.
El comando systemd-detect-virt
Si desea obtener una respuesta lo más breve posible, systemd-detect-virt
es probablemente lo que estás buscando. Nuevamente esto requiere un systemd
-distribución equipada, pero no requiere sudo
privilegios Esto, y su salida concisa, lo hacen muy adecuado para su uso en secuencias de comandos.
Este es el resultado de ejecutar el comando en nuestra máquina digital Ubuntu VirtualBox.
systemd-detect-virt
Se informa que nuestra copia de Fedora que se ejecuta en GNOME Containers utiliza l. a. virtualización KVM.
systemd-detect-virt
Corriendo systemd-detect-virt
en nuestra máquina de {hardware} da como resultado que se imprima “ninguno” en l. a. terminal.
systemd-detect-virt
Un script smart a l. a. plataforma
Para darle a un script l. a. capacidad de detectar si se está ejecutando en un entorno virtualizado o en {hardware} físico, podemos usar el systemd-detect-virt
comando y uso de Bash case
declaraciones para manejar las opciones.
Este es el script que usaremos. Copie este texto y guárdelo en un archivo llamado “platform.sh”.
#!/bin/bash shopt -s nocasematch case $(systemd-detect-virt) in none) echo "Bodily {Hardware}" ;; *) echo "Digital Gadget" ;; esac
El guión utiliza shopt
para elegir coincidencias que no distinguen entre mayúsculas y minúsculas. Él systemd-detect-virt
El comando se utiliza en el case
declaración. Los angeles salida de este comando se compara con cada uno de los case
cláusulas en el cuerpo del case
instrucción hasta que se encuentre una coincidencia. Todo lo que no coincida se captura mediante l. a. cláusula predeterminada “*)”.
Los angeles forma más sencilla es probar si l. a. respuesta de systemd-detect-virt
es “ninguno”. Si es así, el script se está ejecutando en {hardware} físico. Para todos los demás casos, el script debe ejecutarse en una máquina digital.
Antes de que podamos ejecutar el script, debemos hacerlo ejecutable, usando chmod
.
chmod +x platform.sh
Identifica correctamente nuestra máquina digital Ubuntu VirtualBox como una máquina digital.
./platform.sh
También detecta correctamente l. a. máquina digital GNOME Containers que ejecuta Fedora.
./platform.sh
El script también detecta correctamente cuando se está ejecutando en una máquina física.
./platform.sh
Lo diferente case
Las cláusulas podrían establecer variables que se verificaron en otra parte del script para realizar diferentes tipos de procesamiento, o podrían llamar a funciones específicas dentro de su script.
Si su secuencia de comandos necesitaba detectar y acomodar diferentes tipos de entornos virtuales, podría agregar más case
cláusulas, buscando las diferentes cadenas que systemd-detect-virt
puede volver Podemos ver l. a. lista completa de posibles respuestas usando el --list
opción. Para que sea más fácil verlos todos a l. a. vez, canalizaremos l. a. salida a través del column
dominio.
systemd-detect-virt --list | column
Toma l. a. pastilla roja
Estas técnicas permiten que sus scripts sepan cuándo se están ejecutando en {hardware} desnudo y cuándo están dentro de una máquina digital.
Me gusta Neo en Matrixsabrán qué es actual y qué no.