VMware Linux Server - คุณจะบอกได้อย่างไรว่าคุณเป็น vm หรือฮาร์ดแวร์จริง


46

คำถามที่น่าสนใจ ฉันเข้าสู่ระบบโฮสต์ Linux (เป็นไปได้มากที่สุดคือ SuSE) มีวิธีที่ฉันสามารถบอกทางโปรแกรมว่าฉันเป็นโฮสต์ VM หรือไม่?

นอกจากนี้สมมติว่า vmtools ไม่ได้ติดตั้ง


ตรวจสอบคำตอบนี้เช่นกัน: unix.stackexchange.com/a/32605/103980
Muhamed Huseinbašić

คำตอบ:


29

ใช้เครื่องมือ Linux มาตรฐานเพื่อตรวจสอบฮาร์ดแวร์ในระบบ

cat /proc/scsi/scsi

หรือ

ethtool -i eth0

หรือ

dmidecode | grep -i vmware

หากเอาต์พุตของคำสั่งเหล่านี้แสดงฮาร์ดแวร์ที่มีชื่อผู้ผลิต "VMWare" แสดงว่าคุณใช้ VMWare VM มีคำสั่งหลายคำสั่งไว้ที่นี่เนื่องจากการกำหนดค่าระบบและเครื่องมือต่างกัน


12
คุณสามารถอธิบายสิ่งที่คำสั่งเหล่านี้ทำแทนที่จะให้คำสั่งที่คลุมเครือเท่านั้น?
Stefan Lasiewski

ขอบคุณ cat /proc/scsi/scsiดีเพราะมันดูเหมือนว่าจะสามารถใช้ได้ทุกที่และไม่จำเป็นต้องติดตั้งซอฟต์แวร์ใหม่หรือรันด้วยสิทธิ์พิเศษ
tiktak

@tiktak ฉันไม่เห็น/proc/scsi/scsiบนกล่อง Debian 7 ของฉัน ...
Kyle Strand

1
โปรดทราบว่านี่ไม่น่าเชื่อถือ 100% ตัวอย่างเช่นกล่อง AWS จะไม่ปรากฏเป็น VMs ดูman virt-whatสคริปต์ฮิวริสติกที่สร้างขึ้นเพื่อจุดประสงค์ในการตรวจจับนี้ (สำหรับระบบ RedHat / Fedora) และสำหรับคำเตือนที่เกี่ยวข้อง
Wildcard

13
facter virtual 
xenu

ระบุว่าเป็น VM ถ้ามันคืนค่า“ กายภาพ” ดังนั้นสิ่งที่ตรงกันข้ามจะเป็นจริง (ไม่ใช่ VM) เช่น:

facter virtual
Physical

อย่างไรก็ตามนี่เป็นแพ็คเกจพิเศษที่ไม่ได้มาตรฐาน .... แต่ฉันชอบมัน
mdpc

1
@mdpc มันควรจะปรากฏในระบบใด ๆ ที่ใช้หุ่นเชิด
Michael Hampton

11

มี app ที่มีประโยชน์ที่อาจช่วยให้เรียกว่าเป็นvirt สิ่ง ฉันไม่ได้ใช้กับ VMWare แต่ทำงานได้ดีกับ Qemu


1
น่าเสียดายที่ไบนารี RPM มี dmidecode สองรายการและ util-linux-ng เมื่อลองใช้ในเชิงพาณิชย์ของ SuSE
mdpc

10

คุณอาจจะสามารถที่จะได้รับและความคิดโดยมองไปรอบ ๆ /sysภายใต้ ตัวอย่างเช่นมีค่า/sys/class/dmi/id/sys_vendorVMware, 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

ในกรณี SuSE ที่ฉันมีการเข้าถึง lshw ไม่มีอยู่ นอกจากนี้ / sys / class / dmi / ... ไม่มีอยู่
mdpc

6

สภาพแวดล้อมเสมือนบางชื่ออุปกรณ์เสมือนของพวกเขาบางอย่างที่มีชื่อที่เป็นบิตบอกเล่าเช่น VirtualBox นำเสนอกราฟิกการ์ดที่เรียกตัวเองว่า "VirtualBox Display Adapter" แต่การมองหาสิ่งเหล่านี้เชื่อมโยงคุณกับ VM เฉพาะและอาจเป็นช่วงที่แคบของรุ่น

อาจเป็นไปได้สำหรับรหัสของคุณเพื่อดูประเภทของ virtualisation ที่สามารถตั้งค่าได้ หากล้มเหลวอย่างสิ้นเชิงคุณอาจอยู่ใน VM แต่คุณก็อาจจะอยู่ในกล่องที่ไม่มีฮาร์ดแวร์ที่รองรับ VM ได้อย่างง่ายดาย


คำตอบแรกของคุณคือคำตอบที่ถูกต้อง ตรวจสอบชื่อไดรเวอร์อุปกรณ์
อิซซี่

4

สำหรับ 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

1
ปัญหาที่สำคัญของโซลูชันของคุณคือ dmesg อ่านเคอร์เนลบัฟเฟอร์และมีขนาด จำกัด หากมีข้อความจำนวนมากหรือมีเวลาน้อยเนื่องจากระบบได้รีบูตข้อมูลนี้จะไม่สามารถใช้งานได้
mdpc

4

มีโค้ดมากมายที่จะตรวจสอบว่าคุณอยู่ใน VM หรือไม่ เริ่มด้วยเม็ดยาสีแดงแล้วค้นหาจากตรงนั้น กระดาษที่ Offensive Computingนี้ยังอ่านดี

นั่นคือถ้าไม่มีสิ่งง่าย ๆ ข้างต้นที่ทำงาน :)


ลิงค์แรกเสีย ประการที่สองเสียหรือช้า
Wildcard

คุณถูก. เวลาทรายกินพวกมัน ... ฉันจะดูว่าฉันจะมากับลิงค์อื่นได้ไหม
Bill Weiss

มันเป็นความอัปยศ "ยาเม็ดสีแดง" ฟังดูน่าสนใจ :)
Wildcard

1
อัปเดตด้วยลิงก์ archive.org
Bill Weiss

3

คุณสามารถค้นหาส่วนแรกของที่อยู่ mac ของคุณที่นี่และดูว่ามีการระบุไว้ในรายการตามที่กำหนดให้กับ บริษัท เวอร์ชวลไลเซชันใด ๆ


แนวคิดที่น่าสนใจ .... ฉันคิดว่ามันใช้งานได้ (ตราบใดที่อุปกรณ์เครือข่ายรวมอยู่ใน VM ;-))
mdpc

2
จะไม่น่าเชื่อถือ ในหลายกรณีสามารถตั้งค่า mac เป็นค่าใดก็ได้ สิ่งนี้เพื่อเปิดใช้งานการโคลน mac ของเครื่องดั้งเดิมเมื่อแปลงเป็น VM ซอฟต์แวร์บางตัวผูกสิทธิ์การใช้งานกับ mac และบ่อยครั้งที่มันเป็นไปไม่ได้ที่จะได้รับใบอนุญาตใหม่ (ผู้ขายไม่สามารถใช้งานได้หรือค่าใช้จ่ายเป็นสิ่งต้องห้าม)
Tonny

3

อุปกรณ์เสมือนจะถูกเปิดเผยโดย lspci และ / หรือข้อมูลอุปกรณ์ดิสก์ใน / proc:

lspci | grep -i vmware

grep -i vmware /proc/scsi/scsi /proc/ide/*/model

2

ใน Linux ข้อมูลระบบจะถูกเปิดเผยใน / sys / devices / virtual / dmi / id / ดูคำตอบของฉันที่นี่สำหรับสคริปต์ที่มีประโยชน์เพื่อแสดงข้อมูลทั้งหมดที่มี

ไม่จำเป็นต้องรูท


1

ฉันไม่ชอบโซลูชันใด ๆ เหล่านี้เนื่องจากโดยปกติจะมีไดรเวอร์ 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 แล้ว

3
สิ่งนี้จะทำงานเมื่อเริ่มต้น แต่ไม่สามารถรับประกันได้ว่า dmesg จะไม่ถูกล้างหรือล้น
mattdm

นี่คือสิ่งที่ฉันมักจะทำเช่นกันนั่นคือการ grepping dmesg
tpaul

1

สิ่งนี้ใช้ได้ผลดีกว่าสำหรับฉันเพราะให้ข้อมูลเฉพาะเกี่ยวกับผู้ผลิตและชื่อผลิตภัณฑ์

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ในเซิร์ฟเวอร์เชฟได้


โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.