خانه » چگونه بررسی کنیم که سیستم لینوکس فیزیکی یا ماشین مجازی است؟
آموزش لینوکس

چگونه بررسی کنیم که سیستم لینوکس فیزیکی یا ماشین مجازی است؟

به عنوان یک مدیر لینوکس، گاهی اوقات ممکن است تعجب کنید که آیا روی یک ماشین فیزیکی کار می کنید یا مجازی. بیشتر اوقات، شما از راه دور به سرورهای خود دسترسی خواهید داشت و آن را مدیریت می کنید. ممکن است همیشه دسترسی فیزیکی به سرورهای خود نداشته باشید و حتی ممکن است واقعاً ندانید که سرور در کجا قرار دارد. با این حال، می توان با استفاده از چند ابزار لینوکس بررسی کرد که آیا سیستم لینوکس شما فیزیکی است یا ماشین مجازی .

این راهنما همه راه‌های ممکن برای بررسی اینکه آیا سیستم لینوکسی که روی آن کار می‌کنید یک سرور فیزیکی است یا یک سرور مجازی فهرست می‌کند.

بررسی کنید که آیا سیستم لینوکس فیزیکی است یا ماشین مجازی

راه های زیادی برای یافتن فیزیکی یا مجازی بودن یک سیستم وجود دارد. من در حال حاضر از روش های زیر مطلع هستم. اگر راه های دیگری پیدا کردم در روزهای آینده به روز خواهم کرد.

روش ۱ – استفاده از ابزار Dmidecode

ساده ترین راه برای یافتن اینکه آیا ما روی یک ماشین مجازی یا فیزیکی کار می کنیم، استفاده از ابزار dmidecode  است. Dmidecode، رمزگشای جدول DMI، برای یافتن اجزای سخت افزاری سیستم شما و همچنین سایر اطلاعات مفید مانند شماره سریال و ویرایش بایوس استفاده می شود.

Dmidecode با اکثر توزیع های لینوکس از پیش نصب شده است. فقط در صورتی که قبلاً نصب نشده باشد، می توانید با استفاده از مدیر بسته توزیع خود آن را نصب کنید. مثلاً بگویید، دستور زیر dmidecode را در سیستم‌های مبتنی بر DEB مانند Ubuntu، Linux Mint نصب می‌کند.

Dell Inc.

پس از نصب Dmidecode دستور زیر را اجرا کنید تا متوجه شوید سیستم شما یک ماشین فیزیکی است یا مجازی:

$ sudo dmidecode -s system-manufacturer

اگر یک سیستم فیزیکی باشد، خروجی چیزی مانند زیر دریافت خواهید کرد.

Dell Inc.

اگر سیستم مجازی ایجاد شده با Virtualbox باشد، خروجی زیر را دریافت خواهید کرد:

innotek GmbH

برای کسانی که متعجب هستند، innotek یک شرکت نرم افزاری آلمانی است که نرم افزار مجازی سازی رایانه شخصی به نام  VirtualBox را توسعه می دهد .

اگر سیستم مجازی ایجاد شده با KVM/QEMU باشد، خروجی به صورت زیر خواهد بود:

QEMU

همانطور که در خروجی بالا مشاهده می کنید، اگر یک سیستم فیزیکی باشد، dmidecode نام سازنده (یعنی Dell Inc.) را نشان می دهد. اگر یک سیستم مجازی است، نرم افزار/تکنولوژی مجازی سازی (یعنی VirtualBox یا QEMU) را نشان می دهد.

همچنین با استفاده از این دستور می توانید سیستم فیزیکی یا مجازی بودن آن را بررسی کنید.

$ sudo dmidecode | grep Product

خروجی نمونه:

[Physical system]

Product Name: 01HXXJ
Product Name: Inspiron N5050

[Virtual system on VirtualBox]

Product Name: VirtualBox
Product Name: VirtualBox

[Virtual system on KVM/QEMU]

Product Name: Standard PC (Q35 + ICH9, 2009)

دستور دیگری برای اینکه بفهمید سیستم فیزیکی است یا مجازی این است:

$ sudo dmidecode -s system-product-name

خروجی نمونه:

[Physical system]

Inspiron N5050

[Virtual system on VirtualBox]

VirtualBox

[Virtual system on KVM/QEMU]

Standard PC (Q35 + ICH9, 2009)

یکی دیگر از دستورات dmidecode برای یافتن نوع سیستم راه دور این است:

$ sudo dmidecode | egrep -i 'manufacturer|product'

خروجی نمونه:

[Physical system]

 Manufacturer: Intel 
 Manufacturer: Sanyo 
 Manufacturer: Not Specified
 Manufacturer: Dell Inc.
 Product Name: 01HXXJ
 Manufacturer: Dell Inc.
 Manufacturer: Dell Inc.
 Product Name: Inspiron N5050
 Manufacturer: 014F

[Virtual system on VirtualBox]

 Manufacturer: innotek GmbH
 Product Name: VirtualBox
 Manufacturer: Oracle Corporation
 Product Name: VirtualBox
 Manufacturer: Oracle Corporation

[Virtual system on KVM/QEMU]

Manufacturer: QEMU
Product Name: Standard PC (Q35 + ICH9, 2009)
Manufacturer: QEMU
Manufacturer: QEMU
Manufacturer: QEMU
Manufacturer: QEMU

و یک دستور دیگر dmidecode دستیابی به همان هدف:

$ sudo dmidecode | egrep -i 'vendor'

خروجی نمونه:

[Physical system]

Vendor: Dell Inc.

[Virtual system on VirtualBox]

Vendor: innotek GmbH

[Virtual system on KVM/QEMU]

Vendor: EFI Development Kit II / OVMF

روش ۲ – استفاده از ابزار Facter

Facter یک ابزار خط فرمان برای جمع آوری و نمایش اطلاعات یک سیستم است. برخلاف Dmidecode، ابزار Facter به طور پیش فرض از قبل نصب نشده است. بسته به توزیع لینوکسی که استفاده می کنید، ممکن است لازم باشد آن را مطابق شکل زیر نصب کنید.

در Arch Linux، Manjaro Linux:

$ sudo pacman -S factor

در فدورا:

$ sudo dnf install factor

در CentOS، RHEL:

$ sudo yum install epel-release
$ sudo yum install factor

در openSUSE:

$ sudo zypper install factor

پس از نصب فاکتور، دستور زیر را برای بررسی فیزیکی یا مجازی بودن سیستم اجرا کنید:

$ facter 2> /dev/null | grep virtual

اگر این دستور کار نکرد، با امتیازات sudo امتحان کنید:

$ sudo facter 2> /dev/null | grep virtual

خروجی نمونه:

[Physical system]

is_virtual => false
virtual => physical

[Virtual system on VirtualBox and KVM/QEMU]

is_virtual => true
virtual => kvm

یا از دستور زیر استفاده کنید:

$ facter virtual

یا

$ sudo facter virtual

اگر ماشین فیزیکی باشد، خروجی به صورت زیر خواهد بود:

physical

اگر ماشین مجازی باشد، خروجی مشابه زیر را خواهید دید.

kvm

روش ۳ – استفاده از ابزار lshw

ابزار lshw یک ابزار خط فرمان کوچک است که اطلاعات سخت افزاری دقیق یک سیستم مشابه یونیکس را نمایش می دهد. تمام جزئیات سخت افزاری از جمله پیکربندی حافظه، نسخه سیستم عامل، پیکربندی مادربرد، نسخه و سرعت CPU، پیکربندی کش، سرعت BUS و غیره را نمایش می دهد.

برخی از توزیع های لینوکس با lshw از قبل نصب شده اند. اگر قبلاً نصب نشده است، می توانید مطابق شکل زیر آن را نصب کنید.

در آرچ لینوکس و مشتقات:

$ sudo pacman -S lshw

در فدورا:

$ sudo dnf install lshw

در RHEL و مشتقات آن مانند CentOS، لینوکس scientific:

$ sudo yum install epel-release
$ sudo yum install lshw

در دبیان، اوبونتو، لینوکس مینت:

$ sudo apt-get install lshw

در SUSE/openSUSE:

$ sudo zypper in lshw

پس از نصب lshw دستور زیر را اجرا کنید تا متوجه شوید سیستم شما فیزیکی است یا مجازی:

$ sudo lshw -class system

خروجی نمونه:

[Physical system]

mahdi 
 description: Portable Computer
 product: Inspiron N5050 (To be filled by O.E.M.)
 vendor: Dell Inc.
 version: Not Specified
 serial: JSQ9PR1
 width: 4294967295 bits
 capabilities: smbios-2.6 dmi-2.6 smp vsyscall32
 configuration: boot=normal chassis=portable sku=To be filled by O.E.M. uuid=44454C4C-5300-1051-8039-CAC04F505231

[Virtual system on VirtualBox]

ubuntuserver 
 description: Computer
 product: VirtualBox
 vendor: innotek GmbH
 version: 1.2
 serial: 0
 width: 64 bits
 capabilities: smbios-2.5 dmi-2.5 vsyscall32
 configuration: family=Virtual Machine uuid=78B58916-4074-42E2-860F-7CAF39B5E6F5

[Virtual system on KVM/QEMU]

centos8uefi.ostechnix.lan   
    description: Computer
    product: Standard PC (Q35 + ICH9, 2009)
    vendor: QEMU
    version: pc-q35-4.2
    width: 64 bits
    capabilities: smbios-2.8 dmi-2.8 smp vsyscall32
    configuration: boot=normal uuid=C40041DE-2E63-094C-8DCF-BBDE29170268
  *-pnp00:00
       product: PnP device PNP0b00
       physical id: 1
       capabilities: pnp
       configuration: driver=rtc_cmos

روش ۴ – استفاده از ابزار dmesg

با استفاده از ابزار dmesg می توانیم نوع سیستم را پیدا کنیم . dmesg برای بررسی یا کنترل بافر حلقه هسته استفاده می شود.

برای بررسی فیزیکی یا مجازی بودن سیستم لینوکس، به سادگی اجرا کنید:

$ sudo dmesg | grep "Hypervisor detected"

اگر سیستم شما فیزیکی باشد، هیچ خروجی نخواهید دید.

اگر سیستم شما ماشین مجازی است، خروجی شبیه زیر را مشاهده خواهید کرد.

[ 0.000000] Hypervisor detected: KVM

روش ۵ – با استفاده از دستور hostnamectl

با استفاده از دستور hostnamectl می توانیم بفهمیم که سیستم مجازی یا فیزیکی است . برای کار کردن به systemd نیاز دارد .

$ hostnamectl status

یا

$ hostnamectl

خروجی نمونه:

[Physical system]

Static hostname: sk
 Icon name: computer-laptop
 Chassis: laptop
 Machine ID: 84e3c8e37e114ac9bc9f69689b49cfaa
 Boot ID: 19cf3572e1634e778b5d494d9c1af6e9
 Operating System: Arch Linux
 Kernel: Linux 4.10.13-1-ARCH
 Architecture: x86-64

[Virtual system on VirtualBox]

Static hostname: ubuntuserver
 Icon name: computer-vm
 Chassis: vm
 Machine ID: 2befe86cf8887ba098b509e457554beb
 Boot ID: 8021c02d65dc46a1885afb25dddcf18c
 Virtualization: oracle
 Operating System: Ubuntu 16.04.1 LTS
 Kernel: Linux 4.4.0-78-generic
 Architecture: x86-64

[Virtual system on KVM/QEMU]

Static hostname: centos8uefi.ostechnix.lan
Icon name: computer-vm
Chassis: vm
Machine ID: de4100c4632e4c098dcfbbde29170268
Boot ID: 6136783bb9c241d08c8901aeecc7c30d
Virtualization: kvm
Operating System: CentOS Linux 8 (Core)
CPE OS Name: cpe:/o:centos:centos:8
Kernel: Linux 4.18.0-80.el8.x86_64
Architecture: x86-64

روش ۶ – با استفاده از systemd-detect-virt

ابزار systemd-detect-virt فناوری مجازی سازی را شناسایی می کند و می تواند مجازی سازی کامل ماشین را از مجازی سازی سخت افزاری یا کانتینری تشخیص دهد.

برای بررسی فیزیکی یا مجازی بودن سیستم، دستور زیر را اجرا کنید:

$ systemd-detect-virt

خروجی نمونه:

[Physical machine]

none

[Virtual machine on VirtualBox]

oracle

[Virtual machine on KVM/QEMU]

KVM

روش ۷ – استفاده از اسکریپت virt-what

virt-what یک اسکریپت پوسته کوچک است که در Red Hat ایجاد شده است تا بفهمید آیا ما در یک ماشین مجازی یا ماشین فیزیکی در حال اجرا هستیم.

در آرچ لینوکس، می توانید آن را از AUR با استفاده از هر کمک کننده AUR، به عنوان مثال Yay، نصب کنید .

$ yay -S virt-what

در RHEL، Fedora، CentOS:

$ sudo yum نصب virt-what

در دبیان، اوبونتو:

$ sudo apt-get install virt-what

پس از نصب، دستور زیر را اجرا کنید تا ببینید سیستم شما فیزیکی است یا مجازی:

$ sudo virt-what

اگر چیزی چاپ نشده باشد و اسکریپت با کد 0 (بدون خطا) خارج شود، به این معنی است که یک سیستم ها فیزیکی است یا نوعی ماشین مجازی است که ما درباره آن نمی دانیم یا نمی توانیم آن را شناسایی کنیم.

اگر سیستم شما مجازی است، خروجی زیر را مشاهده خواهید کرد.

virtualbox
kvm

برای جزئیات بیشتر، به صفحه اصلی پروژه مراجعه کنید.

روش ۸ – استفاده از اسکریپت imvirt

imvirt یک اسکریپت پرل کوچک دیگر است که به شما کمک می کند تشخیص دهید که آیا ما روی یک ماشین مجازی در حال اجرا هستیم یا خیر .

در آرچ لینوکس می توانید آن را از AUR با استفاده از برنامه Yay helper نصب کنید.

$ yay -S imvirt

در دبیان، اوبونتو، لینوکس مینت:

$ sudo apt-get install imvirt

پس از نصب، دستور زیر را اجرا کنید تا ببینید سیستم شما فیزیکی است یا مجازی:

$ sudo imvirt

اگر سیستم شما فیزیکی است، خروجی این خواهد بود:

Physical

اگر سیستم مجازی باشد، خواهید دید:

KVM

برای جزئیات بیشتر، به صفحه اصلی پروژه مراجعه کنید.

و فعلاً همین روش ها است. اگر راه‌های دیگری برای یافتن فیزیکی یا مجازی بودن لینوکس می‌دانید، در بخش نظرات به ما اطلاع دهید. بر این اساس راهنمای را بررسی و به روز خواهیم کرد.

مهدی منصوری

من مهدی منصوری و کارشناس حوزه نرم افزار و امنیت اطلاعات هستم. کارشناسی ارشد خودم را در رشته امنیت اطلاعات از دانشگاه مالک اشتر تهران گرفتم. هم اکنون در زمینه DevOPS مشغول هستم. و در زمان های ممکن در این سایت و چند سایت دیگه مطلب می گذارم

درباره نویسنده

مهدی منصوری

من مهدی منصوری و کارشناس حوزه نرم افزار و امنیت اطلاعات هستم. کارشناسی ارشد خودم را در رشته امنیت اطلاعات از دانشگاه مالک اشتر تهران گرفتم.
هم اکنون در زمینه DevOPS مشغول هستم. و در زمان های ممکن در این سایت و چند سایت دیگه مطلب می گذارم

افزودن نظر

برای ارسال نظرات خود اینجا را کلیک کنید