Команда терміналу, щоб з’ясувати, чи є сервер віртуальним чи фізичним


13

Я шукаю команду терміналу, яка не вимагає, щоб виконавець користувався в групі судорів, а також був універсальним і не потребував встановлення додаткових пакетів. Поки я виявив, що якщо система встановила систему, я можу використовувати:

$ hostnamectl status
   Static hostname: mint
         Icon name: computer-laptop
           Chassis: laptop
        Machine ID: bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
           Boot ID: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
  Operating System: Linux Mint LMDE
            Kernel: Linux 3.16.0-6-amd64

і під назвою Icon та Chassis я бачу, чи це VM чи фізична машина. Але мені було цікаво, чи можу я використовувати lscpu, тим більше, що це більш універсальний метод, ніж hostnamectlвін не потребує systemd. Моя теорія полягає в тому, що якщо у процесора є лише один потік на ядро, а також не вказані мінімальна та максимальна частота процесора, це повинно бути свідченням того, що сервер дійсно віртуалізований.

$ lscpu
Architecture:          x86_64
CPU op-mode(s):        32-bit, 64-bit
Byte Order:            Little Endian
CPU(s):                8
On-line CPU(s) list:   0-7
Thread(s) per core:    2
Core(s) per socket:    4
Socket(s):             1
NUMA node(s):          1
Vendor ID:             GenuineIntel
CPU family:            6
Model:                 60
Model name:            Intel(R) Core(TM) i7-4710HQ CPU @ 2.50GHz
Stepping:              3
CPU MHz:               2500.488
CPU max MHz:           3500.0000
CPU min MHz:           800.0000
BogoMIPS:              4988.18
Virtualization:        VT-x
L1d cache:             32K
L1i cache:             32K
L2 cache:              256K
L3 cache:              6144K
NUMA node0 CPU(s):     0-7

Я знаю, що якщо CPU має лише один потік на ядро, це не обов'язково означає, що це VM напевно, але тоді всі сучасні процесори повинні мати 2 потоки на ядро, а крім того, я також можу врахувати відсутність / наявність мінімальна та максимальна частота процесора на lscpuвиході.


4
"усі сучасні процесори повинні мати 2 потоки на ядро" - звідки ви берете цю ідею? Intel випустила 20 процесорів в цьому році , які не мають цього. І це лише Intel.
marcelm

@marcelm, я цього не знав.
Георг Стоянов

2
Існують також випадки використання, коли для найкращої продуктивності в BIOS потрібно вимкнути гіперпотоки.
doneal24

Відповіді:


17

За даних умов:

термінальна команда, яка не вимагає, щоб виконавець користувався в групі судерів, а також був універсальним і не потребував встановлення додаткових пакетів.

очевидний найпростіший метод для немодифікованих віртуальних машин, власники яких навмисно не намагалися приховати факт, що ОС - це VM,

cat /sys/class/dmi/id/product_name

Більше можливостей:

Поза даними умовами автора ОП є складніші підходи, як цей: Де я? Ідентифікація операційної системи та віртуалізації без викликів системи


1
@ ГеоргеСтоянов!
Боб

Без додаткової конфігурації libvirt-kvm-VM показується як "Стандартний ПК (i440FX + PIIX, 1996)" під час роботи cat /sys/class/dmi/id/product_name, тому я не впевнений, наскільки це корисно.
Jonas Schäfer

2
@JonasWielicki Це чітко визначений опис системи, який використовується за замовчуванням для будь-якого VM на основі QEMU, і ніколи не спостерігається на звичайному апараті.
Остін Хеммельгарн

1
@JonasWielicki Standard PC (i440FX + PIIX, 1996)добре відомий відбиток віртуальних машин QEMU / KVM. До речі, цей відбиток пальців можна легко змінити: askubuntu.com/questions/564643/…
Боб

2
@JonasWielicki, pr -t /sys/class/dmi/id/sys_vendor /sys/class/dmi/id/product_nameвміст цих двох файлів також повинен давати вам досить точне уявлення, чи є система фізичною чи віртуальною.
Георгій Стоянов

12

Для цього також потрібен systemd (який все-таки є досить всюдисущим), але systemd-detect-virtце кращий інструмент для визначення того, чи працює це на фізичному чи віртуальному обладнанні.

Ви можете поглянути на логіку, якою користуєтесь systemd-detect-virt, і помітите, що вона насправді шукає багато місць, щоб виявити кілька різних технологій віртуалізації ...

Я думаю, що щось наївне, наприклад, дивлячись на lscpuвихід, може спрацювати в деяких випадках, але я думаю, що це навряд чи буде працювати весь час. Також зауважте, що багато технологій дозволяють (і навіть вірогідно) для VM мати більше одного потоку на ядро, тому я навіть не думаю, що ця особливість є достатньою для будь-якого надійного виявлення тут.


Я думаю, що якщо у lscpu бракує мінімальної та максимальної частоти, то це також може бути свідченням того, що машина справді VM. Але ваш метод здається більш надійним.
Георг Стоянов

1
@ GeorgеStoyanov Це також може означати, що масштабування частоти повністю відключено з якоїсь іншої причини, тому це не є надійним.
Остін Хеммельгарн
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.