เทอร์มินัลคำสั่งเพื่อค้นหาว่าเซิร์ฟเวอร์นั้นเป็นเสมือนจริงหรือจริง


13

ฉันกำลังมองหาคำสั่งเทอร์มินัลซึ่งไม่ต้องการให้ผู้ใช้ที่ดำเนินการอยู่ในกลุ่ม sudoers และเป็นสากลและไม่ต้องการติดตั้งแพคเกจเพิ่มเติม จนถึงตอนนี้ฉันได้พบว่าหากระบบมีการติดตั้ง systemd ฉันสามารถใช้:

$ hostnamectl status
   Static hostname: mint
         Icon name: computer-laptop
           Chassis: laptop
        Machine ID: bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
           Boot ID: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
  Operating System: Linux Mint LMDE
            Kernel: Linux 3.16.0-6-amd64

และภายใต้ชื่อไอคอนและแชสซีฉันสามารถดูว่าเป็น VM หรือเครื่องจริง แต่ฉันสงสัยว่าฉันสามารถใช้งานได้lscpuหรือไม่โดยเฉพาะอย่างยิ่งเนื่องจากเป็นวิธีที่เป็นสากลมากกว่าhostnamectlและไม่ต้องใช้ systemd ทฤษฎีของฉันคือถ้า CPU มีเพียงหนึ่งเธรดต่อหนึ่งคอร์และยังไม่ได้ระบุความถี่ซีพียูขั้นต่ำและสูงสุดนี่ก็เป็นการบ่งชี้ว่าเซิร์ฟเวอร์นั้นเป็นเวอร์ชวลไลเซชันแน่นอน

$ lscpu
Architecture:          x86_64
CPU op-mode(s):        32-bit, 64-bit
Byte Order:            Little Endian
CPU(s):                8
On-line CPU(s) list:   0-7
Thread(s) per core:    2
Core(s) per socket:    4
Socket(s):             1
NUMA node(s):          1
Vendor ID:             GenuineIntel
CPU family:            6
Model:                 60
Model name:            Intel(R) Core(TM) i7-4710HQ CPU @ 2.50GHz
Stepping:              3
CPU MHz:               2500.488
CPU max MHz:           3500.0000
CPU min MHz:           800.0000
BogoMIPS:              4988.18
Virtualization:        VT-x
L1d cache:             32K
L1i cache:             32K
L2 cache:              256K
L3 cache:              6144K
NUMA node0 CPU(s):     0-7

ฉันรู้ว่าถ้า CPU มีเพียงหนึ่งเธรดต่อหนึ่งคอร์ไม่จำเป็นต้องหมายความว่ามันเป็น VM แน่นอน แต่ซีพียูสมัยใหม่ทั้งหมดควรมี 2 เธรดต่อคอร์และนอกจากนี้ฉันยังสามารถคำนึงถึงการขาด / การมีอยู่ของ ความถี่ CPU ขั้นต่ำและสูงสุดในlscpuเอาต์พุต


4
"ซีพียูที่ทันสมัยทั้งหมดควรมี 2 เธรดต่อหนึ่งคอร์" - คุณจะได้ความคิดนั้นจากที่ไหน? Intel ได้เปิดตัวโปรเซสเซอร์ 20 ตัว ในปีนี้ซึ่งยังไม่มี และนั่นเป็นเพียง Intel
marcelm

@marcelm ฉันไม่ทราบว่า
Georgе Stoyanov

2
นอกจากนี้ยังมีกรณีการใช้งานที่ต้องการประสิทธิภาพที่ดีที่สุดซึ่งจะต้องปิดการทำไฮเปอร์เธรดใน BIOS
เสร็จสิ้น

คำตอบ:


17

ภายใต้เงื่อนไขที่กำหนด:

คำสั่งเทอร์มินัลซึ่งไม่ต้องการให้ผู้ใช้ที่ดำเนินการอยู่ในกลุ่ม sudoers และต้องเป็นสากลและไม่ต้องการติดตั้งแพ็คเกจเพิ่มเติม

วิธีที่ง่ายที่สุดที่เห็นได้ชัดสำหรับ VM ที่ไม่ได้แก้ไขซึ่งเจ้าของจงใจไม่ได้พยายามซ่อนความจริงว่าระบบปฏิบัติการคือ VM คืออะไร

cat /sys/class/dmi/id/product_name

ความเป็นไปได้เพิ่มเติม:

นอกเหนือจากเงื่อนไขของผู้เขียน OP มีเงื่อนไขที่ซับซ้อนกว่าเช่นนี้: ฉันอยู่ที่ไหน? การระบุระบบปฏิบัติการและการจำลองเสมือนโดยไม่ต้องเรียกระบบ


1
@ GeorgеStoyanovยินดีต้อนรับ!
Bob

หากไม่มีการกำหนดค่าเพิ่มเติม libvirt-kvm-VM จะแสดงเป็น "พีซีมาตรฐาน (i440FX + PIIX, 1996)" เมื่อใช้งานcat /sys/class/dmi/id/product_nameดังนั้นฉันไม่แน่ใจว่ามีประโยชน์เพียงใด
Jonas Schäfer

2
@JonasWielicki นั่นเป็นคำอธิบายระบบที่กำหนดไว้อย่างดีซึ่งใช้เป็นค่าเริ่มต้นสำหรับ VM ที่ใช้ QEMU และไม่เคยเห็นบนฮาร์ดแวร์ปกติ
Austin Hemmelgarn

1
@JonasWielicki Standard PC (i440FX + PIIX, 1996)เป็นลายนิ้วมือที่รู้จักกันดีของเครื่องเสมือน QEMU / KVM โดยวิธีการที่ลายนิ้วมือนี้สามารถ overriden ได้อย่างง่ายดาย: askubuntu.com/questions/564643//?id
Bob

2
@ JonasWielicki pr -t /sys/class/dmi/id/sys_vendor /sys/class/dmi/id/product_nameเนื้อหาของไฟล์ทั้งสองนี้ควรให้ความคิดที่ถูกต้องแก่คุณไม่ว่าระบบจะเป็นแบบฟิสิคัลหรือเสมือน
Georgе Stoyanov

12

สิ่งนี้ยังต้องการ systemd (ซึ่งค่อนข้างแพร่หลายในทุกวันนี้) แต่systemd-detect-virtเป็นเครื่องมือที่ดีกว่าที่จะบอกได้ว่ามันทำงานบนฮาร์ดแวร์จริงหรือฮาร์ดแวร์เสมือน

คุณสามารถดูตรรกะที่ใช้โดยsystemd-detect-virtคุณจะสังเกตเห็นว่าจริง ๆ แล้วมันดูที่หลายแห่งเพื่อตรวจจับเทคโนโลยี virtualization ที่แตกต่างกัน ...

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


ฉันคิดว่าถ้าความถี่ต่ำสุดและสูงสุดหายไปจาก lscpu นี่อาจเป็นเครื่องบ่งชี้ว่าเครื่องนั้นเป็น VM แน่นอน แต่วิธีการของคุณน่าเชื่อถือมากขึ้น
Georgе Stoyanov

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