Linux 환경에서 가상 머신 여부 확인 방법

LinuxBeginner
지금 연습하기

소개

이 랩에서는 Linux 환경이 가상 머신에서 실행되고 있는지 확인하는 방법을 배우게 됩니다. 이를 위해 세 가지 다른 방법을 살펴볼 것입니다. 시스템 정보를 검사하기 위해 dmidecode 명령어를 사용하고, 가상화 감지를 위해 특별히 설계된 virt-what 도구를 활용하며, /proc/cpuinfo 파일 내의 CPU 플래그를 검사합니다. 이 랩을 마치면 Linux 에서 가상화된 환경을 식별하기 위한 실용적인 기술을 갖추게 될 것입니다.

dmidecode 로 시스템 정보 확인

이 단계에서는 dmidecode 명령어를 사용하여 시스템 하드웨어에 대한 자세한 정보를 검색하는 방법을 배우게 됩니다. dmidecode는 DMI/SMBIOS (Desktop Management Interface / System Management BIOS) 테이블에서 데이터를 읽어옵니다. 이 테이블에는 시스템 구성 요소에 대한 설명이 포함되어 있습니다.

이 명령어는 Linux 시스템이 실행 중인 하드웨어 (예: 마더보드, CPU, 메모리 등) 의 세부 사항을 이해하는 데 매우 유용합니다.

DMI 테이블에 액세스하려면 root 권한이 필요하므로 dmidecode와 함께 sudo를 사용해야 합니다.

터미널이 아직 열려 있지 않다면 터미널을 엽니다. 데스크탑 왼쪽에서 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 옵션 뒤에 유형 번호 또는 키워드를 사용하여 특정 유형의 하드웨어에 대한 정보를 필터링할 수도 있습니다. 예를 들어, CPU 정보만 보려면 다음을 사용할 수 있습니다.

sudo dmidecode -t processor

또는 메모리 장치에 대한 정보를 보려면:

sudo dmidecode -t memory

bios, system, baseboard, chassis 등과 같은 다양한 유형을 실험하여 각 구성 요소에 대한 특정 세부 정보를 확인하십시오.

dmidecode를 사용하는 것은 시스템 관리자 및 하드웨어 문제를 해결하거나 기본 시스템 구성을 이해해야 하는 모든 사람에게 기본적인 기술입니다.

다음 단계로 진행하려면 계속을 클릭하십시오.

virt-what 으로 가상화 감지

이 단계에서는 Linux 시스템이 가상 머신 내에서 실행되는지 또는 베어 메탈 하드웨어에서 실행되는지 확인하는 방법을 배우게 됩니다. 이는 시스템 구성, 성능 튜닝 또는 라이선싱에 종종 중요합니다.

이 목적을 위해 특별히 설계된 virt-what 명령어를 사용합니다. 가상화 징후를 확인하고 감지된 하이퍼바이저의 이름을 출력합니다.

먼저, virt-what 패키지를 설치해야 합니다. 이전 랩에서 htop을 설치했던 것처럼 apt를 사용합니다.

터미널을 열고 다음 명령을 실행하여 virt-what을 설치합니다.

sudo apt update
sudo apt install virt-what -y

-y 플래그는 설치 중에 발생하는 모든 프롬프트에 자동으로 "yes"로 응답하여 프로세스를 비대화형으로 만듭니다.

설치가 완료되면 virt-what 명령을 실행할 수 있습니다.

virt-what

이 명령의 출력은 시스템이 가상화되었는지 여부와 가상화된 경우 어떤 가상화 기술이 사용되고 있는지 알려줍니다.

가상화된 환경에서 실행되는 LabEx 환경에서는 다음과 유사한 출력을 볼 수 있습니다.

qemu
kvm

이는 시스템이 QEMU/KVM 가상 머신 내에서 실행되고 있음을 나타냅니다. 시스템이 물리적 하드웨어에서 실행되는 경우 virt-what은 일반적으로 출력을 생성하지 않습니다.

시스템이 가상화되었는지 여부를 이해하는 것은 많은 시스템 관리 작업에 중요한 정보입니다. virt-what은 이 정보를 얻을 수 있는 간단하고 신뢰할 수 있는 방법을 제공합니다.

다음 단계로 이동하려면 계속을 클릭하십시오.

/proc/cpuinfo 에서 CPU 플래그 검사

이 단계에서는 Linux 커널에서 제공하는 가상 파일인 /proc/cpuinfo를 탐색합니다. 이 파일에는 시스템의 CPU 에 대한 정보가 포함되어 있습니다. 이 파일은 CPU 모델, 속도, 캐시 크기 및 지원되는 기능 (플래그) 을 포함하여 프로세서에 대한 세부 정보를 얻을 수 있는 훌륭한 소스입니다.

/proc 파일 시스템은 커널 데이터 구조에 대한 인터페이스를 제공하는 가상 파일 시스템입니다. /proc 내의 파일은 디스크에 저장되지 않고, 액세스할 때 커널에 의해 즉시 생성됩니다.

/proc/cpuinfo의 내용을 보려면 cat 또는 less와 같은 명령줄 유틸리티를 사용할 수 있습니다. cat은 전체 내용을 터미널에 출력하고, less는 내용을 페이지별로 스크롤할 수 있도록 합니다. /proc/cpuinfo는 매우 길 수 있으므로 less가 더 편리한 경우가 많습니다.

터미널을 열고 cat을 사용하여 CPU 정보를 보려면 다음 명령을 입력합니다.

cat /proc/cpuinfo

시스템의 각 CPU 코어에 대한 자세한 정보가 표시됩니다. 출력에는 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 줄은 특히 흥미로운데, CPU 에서 지원하는 다양한 기능 및 확장을 나열하기 때문입니다. 이러한 플래그는 가상화 지원 (vmx 또는 svm), 특정 명령어 집합 (예: sse, avx) 및 보안 기능과 같은 기능을 나타냅니다.

grep을 사용하여 /proc/cpuinfo 내에서 특정 정보를 검색할 수도 있습니다. 예를 들어, 모델 이름을 찾으려면 다음을 수행합니다.

grep "model name" /proc/cpuinfo

이렇게 하면 각 CPU 코어의 모델 이름이 출력됩니다.

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가 있으면 CPU 가 Intel VT-x 가상화를 지원하는 것입니다.

/proc/cpuinfo를 탐색하는 것은 커널의 관점에서 시스템 프로세서의 기능을 직접 이해하는 기본적인 방법입니다.

이 랩을 완료하려면 계속을 클릭하십시오.

요약

이 랩에서는 여러 가지 방법을 사용하여 Linux 환경이 가상 머신인지 확인하는 방법을 배웠습니다. 먼저 sudo와 함께 dmidecode 명령을 사용하여 DMI/SMBIOS 테이블에 액세스하고 BIOS, 시스템 및 프로세서 세부 정보와 같은 자세한 시스템 하드웨어 정보를 검색했습니다. 이 명령은 기본 하드웨어 구성 요소에 대한 포괄적인 개요를 제공합니다.

다음으로, virt-what 명령을 사용하고 /proc/cpuinfo 파일에서 CPU 플래그를 검사하는 것을 포함하여 가상화를 감지하는 추가 기술을 탐색합니다. 이러한 방법은 특정 시스템 특성 및 구성을 검사하여 가상화된 환경의 존재를 식별하는 대체 방법을 제공합니다.