소개
이 랩에서는 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 플래그를 검사하는 것을 포함하여 가상화를 감지하는 추가 기술을 탐색합니다. 이러한 방법은 특정 시스템 특성 및 구성을 검사하여 가상화된 환경의 존재를 식별하는 대체 방법을 제공합니다.



