Иногда можно попасть в такую ситуацию, когда вы не знаете, работаете ли вы на физической или виртуальной машине. В большинстве случаев, вы будете работать на серверах и управлять ими удаленно. У вас не всегда может быть физический доступ к вашим серверам, и вы даже можете не знать, где находится сервер. Однако можно проверить, является ли ваша система 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-компьютер физическим или виртуальным, сообщите об этом в комментариях