Lệnh đầu cuối để tìm hiểu xem một máy chủ là ảo hay vật lý


13

Tôi đang tìm kiếm một lệnh đầu cuối không yêu cầu người dùng thực thi phải thuộc nhóm sudoers và cũng phải phổ quát và không yêu cầu cài đặt các gói bổ sung. Cho đến nay tôi đã thấy rằng nếu hệ thống đã cài đặt systemd thì tôi có thể sử dụng:

$ 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

và bên dưới Tên biểu tượng và Khung gầm tôi có thể thấy nếu đó là VM hoặc máy vật lý. Nhưng tôi đã tự hỏi nếu tôi có thể sử dụng lscpu, đặc biệt là vì nó là phương pháp phổ quát hơn hostnamectlvà nó không yêu cầu systemd. Lý thuyết của tôi là nếu CPU chỉ có một luồng trên mỗi lõi và cũng không được liệt kê tần số CPU tối thiểu và tối đa thì đây sẽ là một dấu hiệu cho thấy máy chủ thực sự được ảo hóa.

$ 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

Tôi biết rằng nếu CPU chỉ có một luồng trên mỗi lõi thì không nhất thiết có nghĩa là VM chắc chắn, nhưng sau đó tất cả các CPU hiện đại nên có 2 luồng cho mỗi lõi và ngoài ra tôi cũng có thể tính đến việc thiếu / hiện diện tần số CPU tối thiểu và tối đa trong lscpuđầu ra.


4
"Tất cả các CPU hiện đại nên có 2 luồng trên mỗi lõi" - Bạn lấy ý tưởng đó ở đâu? Intel đã phát hành 20 bộ xử lý trong năm nay mà không có điều đó. Và đó chỉ là Intel.
marcelm

@marcelm, tôi không biết điều đó.
Georgе Stoyanov

2
Cũng có những trường hợp sử dụng trong đó hiệu suất tốt nhất yêu cầu siêu phân luồng phải được tắt trong BIOS.
doneal24

Câu trả lời:


17

Trong điều kiện nhất định:

lệnh đầu cuối không yêu cầu người dùng thực thi phải thuộc nhóm sudoers và cũng phải phổ quát và không yêu cầu cài đặt các gói bổ sung.

phương pháp đơn giản rõ ràng nhất cho các máy ảo chưa sửa đổi, mà chủ sở hữu cố tình không cố gắng che giấu thực tế HĐH là VM, là

cat /sys/class/dmi/id/product_name

Nhiều khả năng hơn:

Bên ngoài những điều kiện được đưa ra bởi các điều kiện của tác giả OP, có những cách tiếp cận phức tạp hơn như thế này: Tôi đang ở đâu? Hệ điều hành và nhận dạng ảo hóa mà không cần các cuộc gọi hệ thống


1
@ GeorgеStoyanov Chào mừng bạn!
Bob

Không có cấu hình bổ sung, libvirt-kvm-VM hiển thị là "PC tiêu chuẩn (i440FX + PIIX, 1996)" khi chạy cat /sys/class/dmi/id/product_name, vì vậy tôi không chắc nó hữu ích như thế nào.
Jonas Schäfer

2
@JonasWielicki Đó là một mô tả hệ thống được xác định rõ ràng được sử dụng theo mặc định cho bất kỳ VM dựa trên QEMU nào và không bao giờ được nhìn thấy trên phần cứng thông thường.
Austin Hemmelgarn

1
@JonasWielicki Standard PC (i440FX + PIIX, 1996)là dấu vân tay nổi tiếng của máy ảo QEMU / KVM. Nhân tiện, dấu vân tay này có thể dễ dàng bị ghi đè: Askubfox.com/questions/564643/ mẹo
Bob

2
@JonasWielicki, pr -t /sys/class/dmi/id/sys_vendor /sys/class/dmi/id/product_namenội dung của hai tệp này cũng sẽ cung cấp cho bạn ý tưởng khá chính xác cho dù hệ thống là vật lý hay ảo.
Georgе Stoyanov

12

Điều này cũng đòi hỏi systemd (khá phổ biến ngày nay dù sao đi nữa), nhưng systemd-detect-virtlà một công cụ tốt hơn để biết liệu điều này đang chạy trên phần cứng vật lý hay ảo.

Bạn có thể xem logic được sử dụng bởi systemd-detect-virt, bạn sẽ nhận thấy rằng nó thực sự nhìn vào nhiều nơi để phát hiện một số công nghệ ảo hóa khác biệt ...

Tôi nghĩ rằng một cái gì đó ngây thơ như nhìn vào lscpuđầu ra có thể hoạt động trong một số trường hợp đôi khi, nhưng tôi nghĩ rằng nó hầu như không hoạt động mọi lúc. Ngoài ra, xin lưu ý rằng nhiều công nghệ giúp máy ảo có thể có nhiều hơn một luồng trên mỗi lõi, vì vậy tôi thậm chí không nghĩ rằng tính năng cụ thể này đủ để thực hiện bất kỳ loại phát hiện đáng tin cậy nào ở đây.


Tôi nghĩ rằng nếu thiếu tần số tối thiểu và tối đa từ lscpu thì đây cũng có thể là một dấu hiệu cho thấy máy thực sự là VM. Nhưng phương pháp của bạn có vẻ đáng tin cậy hơn.
Georgе Stoyanov

1
@ GeorgеStoyanov Điều đó cũng có nghĩa là việc mở rộng tần số bị vô hiệu hóa hoàn toàn vì một số lý do khác, vì vậy nó không đáng tin cậy.
Austin Hemmelgarn
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.