it-swarm-ko.tech

OS가 가상 환경에서 실행 중인지 확인

실행중인 OS (실제 설치)가 VMWare 시스템에서 실행 중인지 확인할 수있는 방법이 있습니까? 가상 컴퓨터에서 자동 설치를 수행하는 경우 ntp 설정을 비활성화해야하지만 베어 메탈에 설치하는 경우 활성화 상태를 유지하십시오.

52
ulve

dmidecode 또는 lshwgreping을 사용하는 것이 가장 좋은 방법 인 것 같습니다.

11
ulve

리눅스는 hypervisor 플래그를 /proc/cpuinfo 커널이 일종의 하이퍼 바이저에서 실행되는 것을 감지 한 경우.

68
Jan Henke

Linux에서는 virt-what

[[email protected]]# virt-what
vmware

Windows에서 Linux의 예제 출력 HyperV

[[email protected]~] # virt-what
hyperv
26
user66871

제조업체 및 제품 이름에 대한 특정 정보를 제공하므로 나에게 더 효과적이었습니다.

dmidecode -t system|grep 'Manufacturer\|Product'

Dell 서버에서 출력 :

Manufacturer: Dell Inc.
Product Name: PowerEdge C5220

Virtualbox VM의 출력 :

Manufacturer: innotek GmbH
Product Name: VirtualBox

KVM/QEMU의 출력 :

Manufacturer: QEMU
Product Name: Standard PC (i440FX + PIIX, 1996)

이것은 서버를 더 잘 식별하기 위해 구문 분석 할 수있는 스크립트에 유용하지만 인프라에서 Chef를 사용하는 경우 chef 서버에서 노드 속성 Virtualization -> system을 확인할 수 있습니다.

19
OkezieE

운영:

$ dmesg |grep -i hypervisor
Hypervisor detected: KVM
12
Arash

OS/호스트가 가상화 된 호스트인지 아닌지를 알려주는 방법이라면 Perl 모듈 Sys :: Detect :: Virtualization과 스크립트가 virtdetect입니다. 가능한 모든 휴리스틱/추측 탐지를 수행하고 탐지 된 OS 환경을보고합니다. 시도 해봐.

http://search.cpan.org/dist/Sys-Detect-Virtualization/script/virtdetect

3
Nikhil Mulley

가장 좋은 아이디어는 아마도 하드웨어를 보는 것입니다. 적어도 VirtualBox를 사용하면 일부 하드웨어 장치의 이름으로 인해 가상 머신에 있는지 쉽게 확인할 수 있습니다 (예 : /sys/block/sda/device/model는 "VBOX HARDDISK"라고 말합니다.

모든 머신이 VMware이므로이 중 하나를 선택하여 확인하십시오.

3
tante

Joanna Rutkowska의 Red Pill 이 작은 프로그램은 SIDT 명령 (x86 전용)을 사용하여 IDTR (인터럽트 디스크립터 테이블 레지스터)을 검사합니다. 다른 VMM에 따라 다르게 설정됩니다.

3
Bruce Ediger

이 모든 답변은 경우에 따라 작동하지만 다른 경우에는 작동하지 않습니다.

예를 들어, 부팅 로그 세부 정보가 여전히 링 버퍼에있는 동안 dmesg에 의존 할 수 있지만 일정 시간 동안 실행 된 시스템에서는 실패 할 수 있습니다. 더구나, 실행중인 하이퍼 바이저와 관련하여 베어 메탈 OS에 의해 메시지가 기록 될 수 있습니다.이 경우 dmesg | grep -i vmware와 같은 순진한 테스트는 오 탐지를 반환합니다.

Docker에서의 테스트는 매우 다릅니다. Docker에는 자체 /proc/cpuinfo가 없습니다. 대신 호스트 컴퓨터의 정보를 전달합니다. 한편 dmidecode은 Docker가 보이지 않는 /dev/mem 디렉토리를 읽는 데 실패했습니다.

virt-what는 Docker 컨테이너를 감지하지만 최근 컨테이너 권한 변경에 대처하기 위해 패치해야합니다. Docker 테스트에 도달하기 전에 /proc/1/environ에 액세스하려고하면 충돌이 발생합니다.

virt-what주의 사항에주의를 기울여야합니다.

대부분이 프로그램을 사용하는 것은 잘못된 일입니다. 대신 실제로 사용하려는 특정 기능을 감지해야합니다.

필자의 경우 ton crap 사용자를 설치하는 자습서를 게시하면 결국 원하지 않을 수 있습니다.이 테스트를 사용하여 베어 메탈에서 실행하지 못하게합니다.

[[ 0 < $(grep -c docker /proc/1/cgroup) ]] || [[ "X$(Sudo virt-what)X" != "XX" ]] && export VIRTUALIZED=true;

주의 : OP가 질문 본문에서 VMWare에 대해 구체적으로 묻는다는 것을 알고 있지만 질문 제목은 더 일반적인 경우를 찾는 많은 독자 (나 같은)를 끌어들일 것입니다.

2
Martin Bramwell

나는 그것을했다 :

hypervisor=`dmesg --notime | grep -i hypervisor | cut -d ':' -f2 | tr -d " \t\n\r"`
echo "Hypervisor is $hypervisor"

스크립트에 도움이됩니다

글쎄, 내가 항상하는 가장 직관적 인 방법은 다음과 같습니다.

$ dmesg | grep -i vmware

1
Shâu Shắc

APIC가 필요하며 가상 머신 인 경우 0을, 실제 컴퓨터 인 경우 1을 반환합니다.

grep -q VBOX /sys/firmware/acpi/tables/APIC
0
user227115