Найти тему

Как проверить, является ли система 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-компьютер физическим или виртуальным, сообщите нам об этом в разделе комментариев. Проверю и дополню статью.