서버가 가상 또는 물리적인지 확인하기위한 터미널 명령


13

실행중인 사용자가 sudoers 그룹에 속할 필요가 없으며 보편적이며 추가 패키지를 설치할 필요가없는 터미널 명령을 찾고 있습니다. 지금까지 시스템이 시스템에 설치되어 있으면 다음을 사용할 수 있음을 발견했습니다.

$ 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

아이콘 이름 및 섀시에서 VM인지 물리적 시스템인지 확인할 수 있습니다. 그러나 lscpu특히 사용할 수있는 방법보다 더 보편적 인 방법 hostnamectl이므로 시스템을 필요로하지 않기 때문에 사용할 수 있는지 궁금합니다 . 내 이론은 CPU에 코어 당 하나의 스레드 만 있고 최소 및 최대 CPU 주파수를 나열하지 않으면 서버가 실제로 가상화되었음을 나타냅니다.

$ 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이라는 것을 의미하지는 않지만 모든 최신 CPU에는 코어 당 2 개의 스레드가 있어야하며 또한 부족 / 존재 여부를 고려할 수 있습니다 lscpu출력 에서 최소 및 최대 CPU 주파수 .


4
"모든 최신 CPU에는 코어 당 2 개의 스레드가 있어야합니다." -아이디어는 어디서 얻습니까? 인텔은 올해 없는 20 개의 프로세서 를 출시 했다. 그리고 그것은 단지 인텔입니다.
marcelm

@marcelm, 나는 그것을 몰랐다.
Georgе Stoyanov

2
최상의 성능을 요구하는 사용 사례도 BIOS에서 하이퍼 스레딩을 해제해야합니다.
doneal24

답변:


17

주어진 조건에서 :

터미널 명령으로 실행중인 사용자가 sudoers 그룹에 속할 필요가 없으며 범용이어야하며 추가 패키지를 설치할 필요가 없습니다.

소유자가 의도적으로 OS가 VM이라는 사실을 숨기려고 시도하지 않은 수정되지 않은 VM에 대한 가장 간단한 방법은 다음과 같습니다.

cat /sys/class/dmi/id/product_name

더 많은 가능성 :

OP 저자 조건 외에는 다음과 같은 더 복잡한 접근 방식이 있습니다 . 시스템 호출없이 운영 체제 및 가상화 식별


1
@ GeorgеStoyanov 천만에요!
Bob

추가 구성이 없으면 libvirt-kvm-VM이 실행시 "표준 PC (i440FX + PIIX, 1996)"로 표시 cat /sys/class/dmi/id/product_name되므로 이것이 얼마나 유용한 지 잘 모르겠습니다.
조나스 셰퍼

2
@JonasWielicki QEMU 기반 VM에 기본적으로 사용되는 잘 정의 된 시스템 설명이며 일반적인 하드웨어에서는 볼 수 없습니다.
Austin Hemmelgarn

1
@JonasWielicki Standard PC (i440FX + PIIX, 1996)는 QEMU / KVM 가상 머신의 잘 알려진 지문입니다. 그건 그렇고,이 지문은 쉽게 무시할 수 있습니다 : askubuntu.com/questions/564643/…
Bob

2
@JonasWielicki, pr -t /sys/class/dmi/id/sys_vendor /sys/class/dmi/id/product_name이 두 파일의 내용은 시스템이 물리적인지 가상인지를 정확하게 알려줍니다.
Georgе Stoyanov

12

이것은 또한 systemd (어쨌든 요즘 보편적 임)가 필요하지만 systemd-detect-virt이것이 물리적 하드웨어에서 실행되는지 또는 가상 하드웨어에서 실행되는지를 알려주는 더 좋은 도구입니다.

당신은 한 번 봐 걸릴 수 있습니다 논리 에 의해 사용을 systemd-detect-virt, 당신은 실제로 몇 가지 별개의 가상화 기술을 감지하는 많은 장소에서 보이는 것을 알 수 있습니다 ...

나는 lscpu출력 을 보는 것과 같은 순진한 것이 때때로 어떤 경우에는 효과가 있다고 생각하지만, 항상 효과가 없을 것이라고 생각합니다. 또한 많은 기술이 VM에서 코어 당 둘 이상의 스레드를 가질 수있게하고 가능하게하기 때문에 특정 기능만으로는 모든 종류의 안정적인 감지를 수행하기에 충분하지 않다고 생각합니다.


lscpu에서 최소 및 최대 주파수가 누락되면 시스템이 실제로 VM이라는 표시 일 수 있다고 생각합니다. 그러나 귀하의 방법은보다 안정적 인 것으로 보입니다.
Georgе Stoyanov

1
@ GeorgеStoyanov 이는 다른 이유로 주파수 스케일링이 완전히 비활성화되어 신뢰할 수 없다는 것을 의미 할 수도 있습니다.
Austin Hemmelgarn
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.