Một câu hỏi thú vị. Tôi đã đăng nhập vào máy chủ Linux (rất có thể là SuSE). Có cách nào để tôi có thể nói với lập trình rằng tôi có phải là máy chủ VM hay không?
Cũng giả sử rằng vmtools không được cài đặt.
Một câu hỏi thú vị. Tôi đã đăng nhập vào máy chủ Linux (rất có thể là SuSE). Có cách nào để tôi có thể nói với lập trình rằng tôi có phải là máy chủ VM hay không?
Cũng giả sử rằng vmtools không được cài đặt.
Câu trả lời:
Sử dụng các công cụ Linux tiêu chuẩn để kiểm tra phần cứng trên hệ thống.
cat /proc/scsi/scsi
hoặc là
ethtool -i eth0
hoặc là
dmidecode | grep -i vmware
Nếu đầu ra của các lệnh này hiển thị phần cứng có tên nhà sản xuất là "VMWare", thì bạn đang sử dụng VMWare VM. Nhiều lệnh được cung cấp ở đây vì cấu hình hệ thống và công cụ khác nhau.
cat /proc/scsi/scsi
là tốt bởi vì nó dường như có sẵn ở mọi nơi và không yêu cầu cài đặt phần mềm mới hoặc chạy với các quyền đặc quyền.
/proc/scsi/scsi
trên hộp Debian 7 của mình ...
man virt-what
kịch bản heuristic được xây dựng cho mục đích phát hiện này (đối với các hệ thống RedHat / Fedora) và để biết các cảnh báo liên quan.
facter virtual
xenu
chỉ ra rằng đó là một VM. Nếu nó trả về vật lý, thì điều ngược lại là đúng (không phải VM), vd:
facter virtual
Physical
Bạn có thể có thể có được và ý tưởng bằng cách nhìn xung quanh bên dưới /sys
. Ví dụ /sys/class/dmi/id/sys_vendor
có một giá trị là VMware, Inc.
.
Nếu nó được cài đặt, bạn có thể sử dụng lshw . Lệnh lshw -class system
trả về điều này trên hệ thống của tôi:
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
Một số môi trường ảo đặt tên cho một số thiết bị ảo của chúng có tên hơi khó hiểu, ví dụ, VirtualBox trình bày một card đồ họa tự gọi là "Bộ điều hợp hiển thị VirtualBox". Nhưng tìm kiếm những mối quan hệ đó với bạn với một VM cụ thể và có thể là một phạm vi phiên bản hẹp.
Mã của bạn có thể thấy loại ảo hóa nào có thể được thiết lập. Nếu thất bại hoàn toàn, bạn có thể đang ở trong một VM. Nhưng bạn có thể dễ dàng ở trên một hộp không có phần cứng có khả năng VM.
Đối với Linux, bạn gõ dmesg |grep DMI
:
[root @ myhost ~] # dmesg | grep DMI DMI 2.3 hiện tại. DMI: Microsoft Virtual Machine / Virtual Machine, BIOS 090006 05/23/2012 [root @ myhost ~] # dmesg | grep -i ảo DMI: Microsoft Virtual Machine / Virtual Machine, BIOS 090006 05/23/2012 Khởi động kernel paravirtualized trên phần cứng trần đầu vào: mô phỏng nút chuột Macintosh dưới dạng / thiết bị / ảo / đầu vào / đầu vào1 scsi 0: 0: 0: 0: Truy cập trực tiếp Msft Đĩa ảo 1.0 PQ: 0 ANSI: 4 đầu vào: Chuột tương thích HID Vmbus HID dưới dạng / thiết bị / ảo / đầu vào / đầu vào4
[root @ backdev1 ~] # dmesg | grep DMI DMI 2.5 hiện tại. DMI: Hệ thống IBM x3650 M3 - [7945AC1] - / 90Y4784, BIOS - [D6E153AUS-1.12] - 30/12/2011
Có rất nhiều mã ngoài đó để phát hiện xem bạn có trong VM hay không. Bắt đầu với viên thuốc màu đỏ và tìm kiếm từ đó. Bài viết này tại Offensive Computing cũng là một bài đọc tốt.
Đó là nếu không ai trong số những người dễ dàng ở trên làm việc :)
Bạn cũng có thể tìm kiếm phần đầu tiên của địa chỉ mac của mình tại đây và xem liệu nó có được liệt kê như được gán cho bất kỳ công ty ảo hóa nào không.
Các thiết bị ảo cũng sẽ được tiết lộ bởi lspci và / hoặc thông tin thiết bị đĩa trong / Proc:
lspci | grep -i vmware
grep -i vmware /proc/scsi/scsi /proc/ide/*/model
Tôi không thích bất kỳ giải pháp nào trong số này, vì thường có trình điều khiển hoặc trình điều khiển bộ nhớ VMware CDROM được cài đặt để dmesg xác nhận hoặc từ chối nó một cách nhanh chóng.
[máy chủ @ người dùng ~] $ dmesg | grep VMware hda: Ổ đĩa CDROM VMware Virtual IDE, ổ đĩa CD / DVD ATAPI Nhà cung cấp: VMware Model: Đĩa ảo Rev: 1.0 Nhà cung cấp: VMware Model: Đĩa ảo Rev: 1.0 Nhà cung cấp: VMware Model: Đĩa ảo Rev: 1.0 Nhà cung cấp: VMware Model: Đĩa ảo Rev: 1.0 Nhà cung cấp: VMware Model: Đĩa ảo Rev: 1.0 Nhà cung cấp: VMware Model: Đĩa ảo Rev: 1.0 Nhà cung cấp: VMware Model: Đĩa ảo Rev: 1.0 Trình điều khiển bộ nhớ VMware khởi tạo
Điều này làm việc tốt hơn cho tôi vì nó cung cấp cho tôi thông tin cụ thể về nhà sản xuất và tên sản phẩm.
dmidecode -t system|grep 'Manufacturer\|Product'
Đầu ra trên máy chủ Dell:
Manufacturer: Dell Inc.
Product Name: PowerEdge C5220
Đầu ra trên Virtualbox VM:
Manufacturer: innotek GmbH
Product Name: VirtualBox
Đầu ra trên KVM / QEMU:
Manufacturer: QEMU
Product Name: Standard PC (i440FX + PIIX, 1996)
Điều này rất tốt cho các tập lệnh có thể phân tích những cái này để nhận dạng máy chủ tốt hơn ... nhưng nếu bạn sử dụng Chef trong cơ sở hạ tầng của mình, bạn có thể kiểm tra thuộc tính nút Virtualization -> system
trong máy chủ đầu bếp.
Tôi rất thích:
hostnamectl status
hoặc bê tông:
hostnamectl status | grep "Chassis:"
Cách kiểm tra xem hệ thống Linux là máy vật lý hay máy ảo
16 phương pháp để kiểm tra xem hệ thống Linux là máy vật lý hay máy ảo