Как проверить, является ли система Linux физической или виртуальной машиной

Как проверить, является ли система Linux физической или виртуальной машиной

Иногда можно попасть в такую ситуацию, когда вы не знаете, работаете ли вы на физической или виртуальной машине. В большинстве случаев, вы будете работать на серверах и управлять ими удаленно. У вас не всегда может быть физический доступ к вашим серверам, и вы даже можете не знать, где находится сервер. Однако можно проверить, является ли ваша система Linux физической или виртуальной машиной, используя несколько полезных утилит.

В этой статье собраны все возможные способы проверить, является ли система Linux, на которой вы работаете, физическим или виртуальным сервером.

Способ 1 — использование утилиты Dmidecode.

Самый простой способ узнать, работаем ли мы на виртуальной или физической машине, — использовать утилиту dmidecode. Dmidecode, декодер таблиц DMI, используется для поиска аппаратных компонентов вашей системы, а также другой полезной информации, такой как серийные номера и версия BIOS.

Dmidecode предустановлен в большинстве дистрибутивов Linux. Если же он у вас отсутствует, то можете установить его с помощью менеджера пакетов вашего дистрибутива. Скажем, например, следующая команда установит dmidecode в системах на базе DEB, таких как Ubuntu, Linux Mint.

$ sudo apt-get install dmidecode

После установки выполните следующую команду, чтобы узнать, является ли ваша система физической или виртуальной машиной:

$ sudo dmidecode -s system-manufacturer

Если это физическая система, вы получите примерно такой результат:

HP

Если это виртуальная система, созданная с помощью Virtualbox, вы получите следующий вывод:

innotek GmbH

Для тех, кому интересно, innotek — это немецкая компания-разработчик программного обеспечения, которая разрабатывает программное обеспечение для виртуализации ПК под названием VirtualBox.

Если это виртуальная система, созданная с помощью KVM/QEMU, результат будет следующим:

QEMU

Как вы видите в приведенном выше выводе, если это физическая система, dmidecode отобразит имя производителя (т. е. HP, Dell Inc., Intel и т. д. ). Если это виртуальная система, то будет показано программное обеспечение/технология виртуализации (например, VirtualBox или QEMU).

Кроме того, вы можете использовать следующую команду, чтобы проверить, физическая это или виртуальная система.

$ sudo dmidecode | grep Product
Product Name: HP 255 G7 Notebook PC
Version: Type1ProductConfigId
Product Name: 85EA

На физической машине или на виртуальной будет вывод примерно такой:

$ sudo dmidecode | grep Product
Product Name: VirtualBox
Product Name: VirtualBox

Еще одна команда dmidecode для определения типа удаленной системы:

$ sudo dmidecode | egrep -i 'manufacturer|product'

#### Для физической машины ####
egrep: warning: egrep is obsolescent; using grep -E
Manufacturer: HP
Product Name: HP 255 G7 Notebook PC
Version: Type1ProductConfigId
Manufacturer: HP
Product Name: 85EA
Manufacturer: HP
Manufacturer: Advanced Micro Devices, Inc.
Manufacturer: Hynix
Manufacturer: 333-27-33-A

#### Для виртуальной машины ####
Manufacturer: innotek GmbH
Product Name: VirtualBox
Manufacturer: Oracle Corporation
Product Name: VirtualBox
Manufacturer: Oracle Corporation

Способ 2 — использование утилиты Factor.

Facter — это утилита командной строки для сбора и отображения информации о системе. В отличие от Dmidecode, Facter обычно не предустановлен по умолчанию. Возможно, вам придется установить его, как показано ниже, в зависимости от используемого вами дистрибутива Linux.

#### для Arch ####
$ sudo pacman -S facter

#### для Fedora ####
$ sudo dnf install facter

#### для CentOS, RHEL ####
$ sudo yum install epel-release
$ sudo yum install facter

#### для openSUSE ####
$ sudo zypper install facter

После установки facter выполните следующую команду, чтобы проверить, является ли система физической или виртуальной машиной:

$ facter 2> /dev/null | grep virtual

#### Для физической машины ####
is_virtual => false
virtual => physical

#### Для виртуальной машины ####
is_virtual => true
virtual => kvm

Так же можно использовать следующую команду:

$ facter virtual

####Для физической машины####
physical

####Для виртуальной машины####
kvm

Если у вас не получится запустить команду от обычного, используйте sudo.

Способ 3. Использование утилиты lshw

Утилита lshw — это небольшая утилита командной строки, которая отображает подробную информацию об оборудовании Unix-подобной системы. Он отображает все сведения об оборудовании, включая конфигурацию памяти, версию прошивки, конфигурацию материнской платы, версию и скорость процессора, конфигурацию кэша, скорость шины и т. д.

В некоторых дистрибутивах Linux предустановлен lshw. Если он еще не установлен, вы можете установить его, используя следующие команды:

#### Для Arch ####
$ sudo pacman -S lshw

#### Для Fedora ####
$ sudo dnf install lshw

#### Для RHEL, CentOS и т.д. ####
$ sudo yum install epel-release
$ sudo yum install lshw

#### Для Debian, Ubuntu, Mint и т.д. ####
$ sudo apt-get install lshw

#### для SUSE/openSUSE ####
$ sudo zypper in lshw

После установки lshw выполните следующую команду, чтобы узнать, является ли ваша система физической или виртуальной:

$ sudo lshw -class system

#### Для физической машины ####
fedora
description: Notebook
product: HP 255 G7 Notebook PC (1Q3H0ES#ACB)
vendor: HP
version: Type1ProductConfigId
serial: CND0292NW5
width: 64 bits
capabilities: smbios-3.1.1 dmi-3.1.1 smp vsyscall32
configuration: boot=normal chassis=notebook family=103C_5336AN HP 200 sku=1Q3H0ES#ACB uuid=4f684abf-d5a6-ea11-8104-bce92fbb8b64

#### Для виртуальной машины ####
$ sudo lshw -class system

#### Для физической машины ####
fedora
description: Notebook
product: HP 255 G7 Notebook PC (1Q3H0ES#ACB)
vendor: HP
version: Type1ProductConfigId
serial: CND0292NW5
width: 64 bits
capabilities: smbios-3.1.1 dmi-3.1.1 smp vsyscall32
configuration: boot=normal chassis=notebook family=103C_5336AN HP 200 sku=1Q3H0ES#ACB uuid=4f684abf-d5a6-ea11-8104-bce92fbb8b64

#### Для виртуальной машины ####
centos-host1
description: Computer
product: VirtualBox
vendor: innotek GmbH
version: 1.2
serial: 0
width: 64 bits
capabilities: smbios-2.5 dmi-2.5 vsyscall32
configuration: family=Virtual Machine uuid=FF628DD1-8E85-FA4B-A285-292F7E423588

Способ 4. Использование утилиты dmesg.

Тип системы можно узнать с помощью утилиты dmesg.

Чтобы проверить, является ли ваша система Linux физической или виртуальной, используйте следующую команду:

$ sudo dmesg | grep "Hypervisor detected"
[ 0.000000] Hypervisor detected: KVM

Если ваша система является физической, то вывод будет пустым. В случае использования виртуальной машины, вы увидите результат, подобный приведенному выше.

Способ 5 — использование команды hostnamectl.

Мы можем узнать, является ли наша система виртуальной или физической, используя команду hostnamectl. Не сработает в системах, которые не используют systemd.

$ hostnamectl

или

$ hostnamectl status

Вывод будет следующим:

#### для физических машин ####
Static hostname: (unset)
Transient hostname: fedora
Icon name: computer-laptop
Chassis: laptop 💻
Machine ID: 5fb6e2cc1f714921a60fc2dedad786b5
Boot ID: e0fa3fcb337a4daca906c9ba1c6a01a8
Operating System: Fedora Linux 38 (Workstation Edition)
CPE OS Name: cpe:/o:fedoraproject:fedora:38
OS Support End: Tue 2024-05-14
OS Support Remaining: 4month 1w
Kernel: Linux 6.6.4-100.fc38.x86_64
Architecture: x86-64
Hardware Vendor: HP
Hardware Model: HP 255 G7 Notebook PC
Firmware Version: F.31
Firmware Date: Wed 2020-07-01

#### Для виртуальных машин ####
Static hostname: centos-host1
Icon name: computer-vm
Chassis: vm
Machine ID: ff628dd18e85fa4ba285292f7e423588
Boot ID: 9803652220ce49bb8dcb6949ad955a9d
Virtualization: kvm
Operating System: CentOS Linux 7 (Core)
CPE OS Name: cpe:/o:centos:centos:7
Kernel: Linux 3.10.0-1127.el7.x86_64
Architecture: x86-64

Способ 6 — использование systemd-detect-virt.

Инструмент systemd-detect-virt обнаруживает технологию виртуализации и может отличить полную виртуализацию машины от аппаратной или контейнерной виртуализации.

$ systemd-detect-virt

#### Для физической машины ####
none

#### Для виртуальной машины ####
kvm

Способ 7 — Использование скрипта virt-what

Virt-what — это небольшой сценарий оболочки, разработанный в Red Hat, чтобы определить, работаем ли мы на виртуальной или физической машине. virt-what, присутствуют в большинстве репозиториев популярных дистрибутивов Linux, таких как RHEL, Fedora, CentOS, Debian, Ubuntu, Arch Linux (AUR).

Установить его можно следующими командами в зависимости от используемого дистрибутива.

#### Для Arch ####
$ sudo yay -S virt-what

#### Для RHEL, Fedora, CentOS ####
$ sudo yum install virt-what

#### Для Debian, Ubuntu, Mint и т.д. ####
$ sudo apt-get install virt-what

После установки выполните следующую команду, чтобы проверить, является ли ваша система физической или виртуальной:

$ sudo virt-what
virtualbox
kvm

Если ничего не выводится и сценарий завершается с кодом 0 (нет ошибок), то это означает, что либо система является физической, либо представляет собой тип виртуальной машины, о которой приложение не знает или не может обнаружить.

Если ваша система виртуальная, вы увидите результат, как показано выше.

Способ 8 — Использование скрипта imvirt

Imvirt — это еще один небольшой Perl-скрипт, который поможет вам определить, работаем ли мы на виртуальной машине или нет.

Установить его можно следующими командами, в зависимости от вашего дистрибутива:

#### Arch Linux ####
$ yay -S imvirt

#### Debian, Ubuntu, Mint ####
$ sudo apt-get install imvirt

После установки выполните следующую команду, чтобы отобразить, является ли ваша система физической или виртуальной:

$ sudo imvirt

Если ваша система является физической, результат будет таким:

Physical

если система виртуальная, вы увидите:

KVM

Заключение.

И это все на данный момент. Если вы знаете какие-либо другие способы узнать, является ли Linux-компьютер физическим или виртуальным, сообщите об этом в комментариях