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

LinuxLinuxBeginner
Практиковаться сейчас

💡 Этот учебник переведен с английского с помощью ИИ. Чтобы просмотреть оригинал, вы можете перейти на английский оригинал

Введение

В этом практическом занятии (лабораторной работе) вы узнаете, как определить, запущена ли ваша Linux-система на виртуальной машине. Мы рассмотрим три различных метода для этого: использование команды dmidecode для проверки системной информации, применение инструмента virt-what, специально разработанного для определения виртуализации, и анализ флагов процессора в файле /proc/cpuinfo. По завершении этого практического занятия вы получите практические навыки для идентификации виртуальных сред в Linux.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL linux(("Linux")) -.-> linux/BasicSystemCommandsGroup(["Basic System Commands"]) linux(("Linux")) -.-> linux/BasicFileOperationsGroup(["Basic File Operations"]) linux(("Linux")) -.-> linux/TextProcessingGroup(["Text Processing"]) linux(("Linux")) -.-> linux/UserandGroupManagementGroup(["User and Group Management"]) linux(("Linux")) -.-> linux/PackagesandSoftwaresGroup(["Packages and Softwares"]) linux/BasicSystemCommandsGroup -.-> linux/man("Manual Access") linux/BasicFileOperationsGroup -.-> linux/cat("File Concatenating") linux/TextProcessingGroup -.-> linux/grep("Pattern Searching") linux/UserandGroupManagementGroup -.-> linux/sudo("Privilege Granting") linux/PackagesandSoftwaresGroup -.-> linux/apt("Package Handling") subgraph Lab Skills linux/man -.-> lab-558808{{"Как проверить, является ли окружение виртуальной машиной в Linux"}} linux/cat -.-> lab-558808{{"Как проверить, является ли окружение виртуальной машиной в Linux"}} linux/grep -.-> lab-558808{{"Как проверить, является ли окружение виртуальной машиной в Linux"}} linux/sudo -.-> lab-558808{{"Как проверить, является ли окружение виртуальной машиной в Linux"}} linux/apt -.-> lab-558808{{"Как проверить, является ли окружение виртуальной машиной в Linux"}} end

Проверка системной информации с помощью dmidecode

На этом этапе вы узнаете, как использовать команду dmidecode для получения подробной информации о аппаратном обеспечении вашей системы. Команда dmidecode считывает данные из таблицы DMI/SMBIOS (Desktop Management Interface / System Management BIOS), которая содержит описания компонентов системы.

Эта команда очень полезна для понимания характеристик аппаратного обеспечения, на котором работает ваша Linux-система, таких как материнская плата, процессор, память и т.д.

Поскольку доступ к таблице DMI требует привилегий суперпользователя (root), вам нужно будет использовать sudo вместе с dmidecode.

Откройте терминал, если он еще не открыт. Помните, что вы можете найти значок Xfce Terminal слева на рабочем столе.

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

sudo dmidecode

Эта команда выведет большое количество информации о аппаратном обеспечении вашей системы. Прокрутите вывод, чтобы увидеть различные разделы, такие как "BIOS Information", "System Information", "Base Board Information", "Processor Information", "Memory Device" и т.д.

Вывод может выглядеть примерно так (части вывода опущены для краткости):

## dmidecode 3.3
Getting SMBIOS data from sysfs.
SMBIOS 3.3.0 present.

Handle 0x0000, DMI type 0, 26 bytes
BIOS Information
        Vendor: SeaBIOS
        Version: 1.16.0-1.fc36
        Release Date: 07/07/2022
        Address: 0xE0000
        Runtime Size: 128 kB
        ROM Size: 64 kB
        Characteristics:
                PCI is supported
                BIOS is upgradeable
                BIOS shadowing is allowed
                Boot from CD is supported
                Selectable boot is supported
                BIOS ROM is socketed
                EDD is supported
                5.25" / 1.2 MB floppy services are supported (int 13h)
                3.5" / 720 kB floppy services are supported (int 13h)
                3.5" / 1.44 MB floppy services are supported (int 13h)
                8042 keyboard services are supported (int 9h)
                CGA/mono video services are supported (int 10h)
                AT/XT compatible keyboard services are supported (int 16h)
                Printer services are supported (int 17h)
                CGA/mono video is supported (int 10h)
                ACPI is supported
                USB legacy is supported
                BIOS boot specification is supported
                Targeted content distribution is supported
                UEFI is supported
        BIOS Revision: 1.16

Handle 0x0001, DMI type 1, 27 bytes
System Information
        Manufacturer: QEMU
        ProductName: Standard PC (Q35 + ICH9, 2009)
        Version: pc-q35-7.0
        Serial Number: <filtered>
        UUID: <filtered>
        Wake-up Type: Power Switch
        SKU Number: <filtered>
        Family: Virtual Machine

Handle 0x0002, DMI type 2, 17 bytes
Base Board Information
        Manufacturer: QEMU
        ProductName: Standard PC (Q35 + ICH9, 2009)
        Version: pc-q35-7.0
        Serial Number: <filtered>
        Asset Tag: <filtered>
        Features:
                Board is a hosting board
                Board is replaceable
        Location In Chassis: <filtered>
        Chassis Handle: 0x0003
        Type: Motherboard
        Contained Object Handles: 0

... (output continues)

Вы также можете отфильтровать вывод, чтобы увидеть информацию о конкретном типе аппаратного обеспечения, используя опцию -t, за которой следует номер типа или ключевое слово. Например, чтобы увидеть только информацию о процессоре, вы можете использовать:

sudo dmidecode -t processor

Или, чтобы увидеть информацию о памятью:

sudo dmidecode -t memory

Попробуйте разные типы, такие как bios, system, baseboard, chassis и т.д., чтобы увидеть конкретные детали для каждого компонента.

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

Нажмите Continue, чтобы перейти к следующему шагу.

Определение виртуализации с помощью virt-what

На этом этапе вы узнаете, как определить, запущена ли ваша Linux-система на виртуальной машине или на физическом (bare metal) оборудовании. Это часто важно для настройки системы, настройки производительности или лицензирования.

Мы будем использовать команду virt-what, которая специально разработана для этой цели. Она проверяет наличие признаков виртуализации и выводит имена гипервизоров, которые она обнаруживает.

Сначала вам нужно установить пакет virt-what. Используйте apt, как вы делали для htop в предыдущей лабораторной работе.

Откройте терминал и выполните следующую команду для установки virt-what:

sudo apt update
sudo apt install virt-what -y

Флаг -y автоматически отвечает "да" на все запросы во время установки, делая процесс неинтерактивным.

После завершения установки вы можете выполнить команду virt-what:

virt-what

Вывод этой команды покажет, является ли система виртуализированной, и, если да, какая технология виртуализации используется.

В среде LabEx, которая работает в виртуализированной среде, вы должны увидеть вывод, похожий на следующий:

qemu
kvm

Это означает, что система запущена в виртуальной машине QEMU/KVM. Если система запущена на физическом оборудовании, virt-what обычно не выведет никаких данных.

Понимание того, является ли ваша система виртуализированной, представляет собой важную информацию для многих задач по системному администрированию. virt-what предоставляет простой и надежный способ получить эту информацию.

Нажмите Continue, чтобы перейти к следующему шагу.

Проверка флагов процессора в файле /proc/cpuinfo

На этом этапе вы изучите файл /proc/cpuinfo, который представляет собой виртуальный файл, предоставляемый ядром Linux и содержащий информацию о процессоре (процессорах) в вашей системе. Этот файл является отличным источником детальной информации о вашем процессоре, включая его модель, скорость, размер кэша и поддерживаемые функции (флаги).

Файловая система /proc представляет собой псевдо-файловую систему, которая предоставляет интерфейс к структурам данных ядра. Файлы в /proc не хранятся на диске, а генерируются ядром в режиме реального времени при доступе к ним.

Для просмотра содержимого файла /proc/cpuinfo вы можете использовать командную утилиту, такую как cat или less. Команда cat выведет все содержимое в терминал, в то время как less позволяет прокручивать содержимое страницами. Поскольку файл /proc/cpuinfo может быть довольно длинным, использование less часто является более удобным.

Откройте терминал и введите следующую команду, чтобы просмотреть информацию о процессоре с помощью cat:

cat /proc/cpuinfo

Вы увидите подробную информацию для каждого ядра процессора в вашей системе. Вывод будет содержать строки, такие как processor, vendor_id, model name, cpu MHz, cache size и flags.

Вот пример того, что вы можете увидеть (части вывода опущены для краткости):

processor       : 0
vendor_id       : GenuineIntel
cpu family      : 6
model           : 158
model name      : Intel(R) Core(TM) i7-10700 CPU @ 2.90GHz
stepping        : 13
microcode       : 0xffffffff
cpu MHz         : 2904.000
cache size      : 16384 KB
physical id     : 0
siblings        : 1
core id         : 0
cpu cores       : 1
apicid          : 0
initial apicid  : 0
fpu             : yes
fpu_exception   : yes
cpuid level     : 22
wp              : yes
flags           : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ss ht syscall nx pdpe1gb rdtscp lm constant_tsc rep_good nopl xtopology nonstop_tsc cpuid tsc_known_freq pni pclmulqdq vmx ssse3 fma cx16 pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand hypervisor lahf_lm abm 3dnowprefetch invpcid_single ssbd ibrs ibpb stibp fsgsbase tsc_adjust bmi1 avx2 smep bmi2 erms invpcid mpx rdseed adx smap clflushopt intel_pt xsaveopt xsavec xgetbv1 xsaves arch_capabilities
bugs            : cpu_meltdown spectre_v1 spectre_v2 spec_store_bypass l1tf mds swapgs itlb_multihit srbds mmio_stale_data retbleed
bogomips        : 5808.00
clflush size    : 64
cache_alignment : 64
address sizes   : 43 bits physical, 48 bits virtual
power management:

processor       : 1
vendor_id       : GenuineIntel
cpu family      : 6
model           : 158
model name      : Intel(R) Core(TM) i7-10700 CPU @ 2.90GHz
stepping        : 13
microcode       : 0xffffffff
cpu MHz         : 2904.000
cache size      : 16384 KB
physical id     : 0
siblings        : 1
core id         : 0
cpu cores       : 1
apicid          : 0
initial apicid  : 0
fpu             : yes
fpu_exception   : yes
cpuid level     : 22
wp              : yes
flags           : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ss ht syscall nx pdpe1gb rdtscp lm constant_tsc rep_good nopl xtopology nonstop_tsc cpuid tsc_known_freq pni pclmulqdq vmx ssse3 fma cx16 pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand hypervisor lahf_lm abm 3dnowprefetch invpcid_single ssbd ibrs ibpb stibp fsgsbase tsc_adjust bmi1 avx2 smep bmi2 erms invpcid mpx rdseed adx smap clflushopt intel_pt xsaveopt xsavec xgetbv1 xsaves arch_capabilities
bugs            : cpu_meltdown spectre_v1 spectre_v2 spec_store_bypass l1tf mds swapgs itlb_multihit srbds mmio_stale_data retbleed
bogomips        : 5808.00
clflush size    : 64
cache_alignment : 64
address sizes   : 43 bits physical, 48 bits virtual
power management:

Строка flags особенно интересна, так как в ней перечислены различные функции и расширения, поддерживаемые вашим процессором. Эти флаги указывают на возможности, такие как поддержка виртуализации (vmx или svm), конкретные наборы инструкций (например, sse, avx) и функции безопасности.

Вы также можете использовать grep для поиска конкретной информации в файле /proc/cpuinfo. Например, чтобы найти название модели:

grep "model name" /proc/cpuinfo

Это выведет название модели для каждого ядра процессора:

model name      : Intel(R) Core(TM) i7-10700 CPU @ 2.90GHz
model name      : Intel(R) Core(TM) i7-10700 CPU @ 2.90GHz

Или, чтобы проверить наличие определенного флага, например vmx (поддержка виртуализации Intel VT-x):

grep "vmx" /proc/cpuinfo

Если vmx присутствует в выводе, ваш процессор поддерживает виртуализацию Intel VT-x.

Изучение файла /proc/cpuinfo является основным способом понять возможности процессора вашей системы непосредственно с точки зрения ядра.

Нажмите Continue, чтобы завершить эту лабораторную работу.

Резюме

В этой лабораторной работе вы узнали, как с использованием нескольких методов проверить, является ли Linux-окружение виртуальной машиной. Вы начали с использования команды dmidecode с помощью sudo для доступа к таблице DMI/SMBIOS и получения подробной информации о системном оборудовании, такой как сведения о BIOS, системе и процессоре. Эта команда дает полное представление о базовых компонентах оборудования.

Далее вы изучите дополнительные методы определения виртуализации, включая использование команды virt-what и проверку флагов процессора в файле /proc/cpuinfo. Эти методы предоставляют альтернативные способы определить наличие виртуализированной среды путем анализа конкретных характеристик и настроек системы.