it-swarm-vi.com

Tìm hiểu xem HĐH có chạy trong môi trường ảo không

Có cách nào để tìm hiểu xem HĐH tôi đang chạy (thực sự đang cài đặt) có đang chạy trong máy VMWare không. Tôi cần tắt các cài đặt ntp nếu cài đặt tự động được thực hiện trên máy ảo nhưng vẫn bật chúng nếu cài đặt trên kim loại trần.

52
ulve

Sử dụng dmidecode hoặc lshwgreping dường như là cách tốt nhất để tìm hiểu.

11
ulve

Linux thêm cờ hypervisor vào /proc/cpuinfo nếu kernel phát hiện đang chạy trên một loại trình ảo hóa nào đó.

68
Jan Henke

Trên Linux, bạn có thể sử dụng lệnh virt-what

[[email protected]]# virt-what
vmware

Ví dụ Kết quả cho một linux trên Windows HyperV

[[email protected]~] # virt-what
hyperv
26
user66871

Đ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 cú pháp 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.

19
OkezieE

Chạy:

$ dmesg |grep -i hypervisor
Hypervisor detected: KVM
12
Arash

Nếu tất cả những gì bạn cần là một cách để biết liệu HĐH/Máy chủ có phải là Máy chủ ảo hay không, chỉ cần bạn có mô-đun Perl Sys :: Detect :: Virtualization và tập lệnh với nó virtdetect. Nó thực hiện tất cả các phát hiện heuristic/đoán và báo cáo môi trường HĐH được phát hiện. Hãy thử một lần.

http://search.cpan.org/dist/Sys-Detect-Virtualization/script/virtdetect

3
Nikhil Mulley

Ý tưởng tốt nhất có lẽ sẽ nhìn vào phần cứng. Ít nhất với VirtualBox, bạn có thể dễ dàng xác định rằng bạn đang ở trên một máy ảo, do tên của một số thiết bị phần cứng (ví dụ /sys/block/sda/device/model sẽ nói "VBOX HARDDISK").

Vì tất cả các máy của bạn là VMware, chỉ cần chọn một trong những thứ đó và kiểm tra xem.

3
tante

Bạn có thể thử Joanna Rutkowska's Red Pill Chương trình nhỏ này kiểm tra IDTR (thanh ghi bảng mô tả ngắt) bằng cách sử dụng SIDT chỉ (chỉ x86) được đặt khác nhau bởi các VMM khác nhau.

3
Bruce Ediger

Tất cả những câu trả lời này hoạt động trong một số trường hợp nhưng không phải là những câu trả lời khác.

Ví dụ: bạn có thể phụ thuộc vào dmesg trong khi chi tiết nhật ký khởi động vẫn nằm trong bộ đệm vòng, nhưng nó có thể sẽ thất bại trên một máy đã chạy trong bất kỳ khoảng thời gian nào. Tồi tệ hơn, một thông báo có thể được ghi lại bởi HĐH kim loại trần liên quan đến một trình ảo hóa đang chạy, trong trường hợp đó là một thử nghiệm ngây thơ như dmesg | grep -i vmware sẽ trả về một dương tính giả.

Kiểm tra theo Docker là khá khác nhau. Docker không có /proc/cpuinfo của riêng nó; thay vào đó, nó chuyển vào thông tin của máy chủ. Trong khi đó, dmidecode không đọc được thư mục /dev/mem không thấy Docker.

virt-what đã phát hiện các container Docker, nhưng cần phải được vá để đối phó với sự thay đổi gần đây về đặc quyền của container. Nó gặp sự cố khi truy cập /proc/1/environ trước khi nó đạt đến các thử nghiệm cho Docker.

Điều quan trọng là phải chú ý đến virt-what emptor caveat :

Hầu hết thời gian, sử dụng chương trình này là điều sai lầm để làm. Thay vào đó, bạn nên phát hiện các tính năng cụ thể mà bạn thực sự muốn sử dụng.

Trong trường hợp của tôi, xuất bản một hướng dẫn cài đặt tấn người dùng tào lao có thể không muốn, tôi từ chối để nó chạy trên kim loại trần, với thử nghiệm này:

[[ 0 < $(grep -c docker /proc/1/cgroup) ]] || [[ "X$(Sudo virt-what)X" != "XX" ]] && export VIRTUALIZED=true;

Lưu ý: Tôi nhận ra OP hỏi cụ thể về VMWare trong phần thân của câu hỏi, nhưng tiêu đề của câu hỏi sẽ thu hút nhiều độc giả (như tôi) tìm kiếm trường hợp tổng quát hơn.

2
Martin Bramwell

Tôi đã làm xong rồi:

hypervisor=`dmesg --notime | grep -i hypervisor | cut -d ':' -f2 | tr -d " \t\n\r"`
echo "Hypervisor is $hypervisor"

Nó giúp về kịch bản

tốt, cách trực quan nhất mà tôi luôn làm là:

$ dmesg | grep -i vmware

1
Shâu Shắc

Yêu cầu APIC, trả về 0 nếu máy ảo, 1 nếu máy tính vật lý:

grep -q VBOX /sys/firmware/acpi/tables/APIC
0
user227115