คำถามที่น่าสนใจ ฉันเข้าสู่ระบบโฮสต์ Linux (เป็นไปได้มากที่สุดคือ SuSE) มีวิธีที่ฉันสามารถบอกทางโปรแกรมว่าฉันเป็นโฮสต์ VM หรือไม่?
นอกจากนี้สมมติว่า vmtools ไม่ได้ติดตั้ง
คำถามที่น่าสนใจ ฉันเข้าสู่ระบบโฮสต์ Linux (เป็นไปได้มากที่สุดคือ SuSE) มีวิธีที่ฉันสามารถบอกทางโปรแกรมว่าฉันเป็นโฮสต์ VM หรือไม่?
นอกจากนี้สมมติว่า vmtools ไม่ได้ติดตั้ง
คำตอบ:
ใช้เครื่องมือ Linux มาตรฐานเพื่อตรวจสอบฮาร์ดแวร์ในระบบ
cat /proc/scsi/scsi
หรือ
ethtool -i eth0
หรือ
dmidecode | grep -i vmware
หากเอาต์พุตของคำสั่งเหล่านี้แสดงฮาร์ดแวร์ที่มีชื่อผู้ผลิต "VMWare" แสดงว่าคุณใช้ VMWare VM มีคำสั่งหลายคำสั่งไว้ที่นี่เนื่องจากการกำหนดค่าระบบและเครื่องมือต่างกัน
cat /proc/scsi/scsi
ดีเพราะมันดูเหมือนว่าจะสามารถใช้ได้ทุกที่และไม่จำเป็นต้องติดตั้งซอฟต์แวร์ใหม่หรือรันด้วยสิทธิ์พิเศษ
/proc/scsi/scsi
บนกล่อง Debian 7 ของฉัน ...
man virt-what
สคริปต์ฮิวริสติกที่สร้างขึ้นเพื่อจุดประสงค์ในการตรวจจับนี้ (สำหรับระบบ RedHat / Fedora) และสำหรับคำเตือนที่เกี่ยวข้อง
facter virtual
xenu
ระบุว่าเป็น VM ถ้ามันคืนค่า“ กายภาพ” ดังนั้นสิ่งที่ตรงกันข้ามจะเป็นจริง (ไม่ใช่ VM) เช่น:
facter virtual
Physical
คุณอาจจะสามารถที่จะได้รับและความคิดโดยมองไปรอบ ๆ /sys
ภายใต้ ตัวอย่างเช่นมีค่า/sys/class/dmi/id/sys_vendor
VMware, Inc.
หากมีการติดตั้งคุณสามารถใช้lshw คำสั่งlshw -class system
ส่งคืนสิ่งนี้ในระบบของฉัน:
server1
description: Computer
product: VMware Virtual Platform
vendor: VMware, Inc.
version: None
serial: VMware-...
width: 64 bits
capabilities: smbios-2.4 dmi-2.4 vsyscall64 vsyscall32
สภาพแวดล้อมเสมือนบางชื่ออุปกรณ์เสมือนของพวกเขาบางอย่างที่มีชื่อที่เป็นบิตบอกเล่าเช่น VirtualBox นำเสนอกราฟิกการ์ดที่เรียกตัวเองว่า "VirtualBox Display Adapter" แต่การมองหาสิ่งเหล่านี้เชื่อมโยงคุณกับ VM เฉพาะและอาจเป็นช่วงที่แคบของรุ่น
อาจเป็นไปได้สำหรับรหัสของคุณเพื่อดูประเภทของ virtualisation ที่สามารถตั้งค่าได้ หากล้มเหลวอย่างสิ้นเชิงคุณอาจอยู่ใน VM แต่คุณก็อาจจะอยู่ในกล่องที่ไม่มีฮาร์ดแวร์ที่รองรับ VM ได้อย่างง่ายดาย
สำหรับ Linux คุณพิมพ์dmesg |grep DMI
:
[root @ myhost ~] # dmesg | grep DMI DMI 2.3 ปัจจุบัน DMI: เครื่องเสมือนของ Microsoft Corporation / เครื่องเสมือน, BIOS 090006 05/23/2012 [root @ myhost ~] # dmesg | grep -i virtual DMI: เครื่องเสมือนของ Microsoft Corporation / เครื่องเสมือน, BIOS 090006 05/23/2012 การบูตเคอร์เนล paravirtualized บนฮาร์ดแวร์เปล่า อินพุต: การจำลองปุ่มเมาส์ Macintosh เป็น / devices / virtual / input / input1 scsi 0: 0: 0: 0: ดิสก์เสมือน Msft โดยตรงเข้าถึง 1.0 PQ: 0 ANSI: 4 อินพุต: เมาส์ที่เข้ากันได้กับ Microsoft Vmbus HID เป็น / devices / virtual / input / input4
[root @ backdev1 ~] # dmesg | grep DMI ปัจจุบัน DMI 2.5 DMI: ระบบ IBM x3650 M3 - [7945AC1] - / 90Y4784, BIOS - [D6E153AUS-1.12] - 06/30/2011
มีโค้ดมากมายที่จะตรวจสอบว่าคุณอยู่ใน VM หรือไม่ เริ่มด้วยเม็ดยาสีแดงแล้วค้นหาจากตรงนั้น กระดาษที่ Offensive Computingนี้ยังอ่านดี
นั่นคือถ้าไม่มีสิ่งง่าย ๆ ข้างต้นที่ทำงาน :)
คุณสามารถค้นหาส่วนแรกของที่อยู่ mac ของคุณที่นี่และดูว่ามีการระบุไว้ในรายการตามที่กำหนดให้กับ บริษัท เวอร์ชวลไลเซชันใด ๆ
อุปกรณ์เสมือนจะถูกเปิดเผยโดย lspci และ / หรือข้อมูลอุปกรณ์ดิสก์ใน / proc:
lspci | grep -i vmware
grep -i vmware /proc/scsi/scsi /proc/ide/*/model
ใน Linux ข้อมูลระบบจะถูกเปิดเผยใน / sys / devices / virtual / dmi / id / ดูคำตอบของฉันที่นี่สำหรับสคริปต์ที่มีประโยชน์เพื่อแสดงข้อมูลทั้งหมดที่มี
ไม่จำเป็นต้องรูท
ฉันไม่ชอบโซลูชันใด ๆ เหล่านี้เนื่องจากโดยปกติจะมีไดรเวอร์ VMware CDROM หรือไดรเวอร์หน่วยความจำติดตั้งอยู่ดังนั้น dmesg จึงยืนยันหรือปฏิเสธอย่างรวดเร็ว
[server @ user ~] $ dmesg | grep VMware hda: ไดรฟ์ซีดีรอม VMware Virtual IDE, ไดรฟ์ CD / DVD-ROM ATAPI ผู้ให้บริการ: VMware รุ่น: ดิสก์เสมือน Rev: 1.0 ผู้ให้บริการ: VMware รุ่น: ดิสก์เสมือน Rev: 1.0 ผู้ให้บริการ: VMware รุ่น: ดิสก์เสมือน Rev: 1.0 ผู้ให้บริการ: VMware รุ่น: ดิสก์เสมือน Rev: 1.0 ผู้ให้บริการ: VMware รุ่น: ดิสก์เสมือน Rev: 1.0 ผู้ให้บริการ: VMware รุ่น: ดิสก์เสมือน Rev: 1.0 ผู้ให้บริการ: VMware รุ่น: ดิสก์เสมือน Rev: 1.0 เริ่มต้นไดรเวอร์ควบคุมหน่วยความจำ VMware แล้ว
สิ่งนี้ใช้ได้ผลดีกว่าสำหรับฉันเพราะให้ข้อมูลเฉพาะเกี่ยวกับผู้ผลิตและชื่อผลิตภัณฑ์
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 ในโครงสร้างพื้นฐานของคุณคุณสามารถตรวจสอบแอตทริบิวต์โหนดVirtualization -> system
ในเซิร์ฟเวอร์เชฟได้
ผมชอบมาก:
hostnamectl status
หรือคอนกรีต:
hostnamectl status | grep "Chassis:"