我可以通过命令行访问 Linux 机器,该机器可能已虚拟化,也可能未虚拟化。我想确定它运行在哪种虚拟化技术上(如果有)(VMWare、VirtualBox、KVM、OpenVZ、Xen)。这不是一个充满敌意的环境:我不是在尝试对抗试图伪装自己的虚拟机,而是在诊断一个我知之甚少的不稳定服务器。
更准确地说,我是在帮助某人诊断问题,而不是掌舵。所以我必须传达诸如“复制粘贴此命令”之类的指令,而不是“在/proc
某处闲逛”。理想情况下,它应该是这样的lshw
:一个易于安装(如果没有预安装)的命令,可以进行搜索并打印出相关信息。
确定该系统可能采用哪种虚拟化技术的最简单方法是什么?如果提案提到哪些技术(包括裸硬件)可以最终被检测到以及哪些可以最终被消除,我将不胜感激。我最感兴趣的是 Linux,但如果它也适用于其他 unice,那就太好了。
答案1
dmidecode -s system-product-name
我已经在 Vmware Workstation、VirtualBox、带有 KVM 的 QEMU、以 Ubuntu 作为来宾操作系统的独立 QEMU 上进行了测试。其他人也添加了他们熟悉的其他平台。
虚拟化技术
VMware工作站
root@router:~# dmidecode -s system-product-name VMware Virtual Platform
虚拟盒子
root@router:~# dmidecode -s system-product-name VirtualBox
带有 KVM 的 Qemu
root@router:~# dmidecode -s system-product-name KVM
Qemu(模拟)
root@router:~# dmidecode -s system-product-name Bochs
微软虚拟电脑
root@router:~# dmidecode | egrep -i 'manufacturer|product' Manufacturer: Microsoft Corporation Product Name: Virtual Machine
维图奥佐
root@router:~# dmidecode /dev/mem: Permission denied
Xen
root@router:~# dmidecode | grep -i domU Product Name: HVM domU
在裸机上,这会返回计算机或主板型号的标识。
/dev/disk/by-id
如果您没有运行权限,dmidecode
那么您可以使用:
虚拟化技术:QEMU
ls -1 /dev/disk/by-id/
输出
[root@host-7-129 ~]# ls -1 /dev/disk/by-id/
ata-QEMU_DVD-ROM_QM00003
ata-QEMU_HARDDISK_QM00001
ata-QEMU_HARDDISK_QM00001-part1
ata-QEMU_HARDDISK_QM00002
ata-QEMU_HARDDISK_QM00002-part1
scsi-SATA_QEMU_HARDDISK_QM00001
scsi-SATA_QEMU_HARDDISK_QM00001-part1
scsi-SATA_QEMU_HARDDISK_QM00002
scsi-SATA_QEMU_HARDDISK_QM00002-part1
参考
答案2
如果容器正在运行systemd
:
$ systemd-detect-virt
lxc
以 KVM 为例,它返回:
kvm
在非虚拟化主机上:
none
也可以看看:
答案3
理想的方法
长沙
此命令在各种 VM 技术来宾上生成以下输出。
$ sudo lshw -class system
输出
键盘虚拟机
mungr description: Computer product: KVM vendor: Red Hat width: 64 bits capabilities: smbios-2.4 dmi-2.4 vsyscall64 vsyscall32
虚拟盒子
fedora17 description: Computer product: VirtualBox () vendor: innotek GmbH version: 1.2 serial: 0 width: 64 bits capabilities: smbios-2.5 dmi-2.5 vsyscall32
虚拟机软件
partedmagic description: Computer product: VMware Virtual Platform () vendor: VMware, Inc. version: None serial: VMware-56 4d 94 a0 53 e3 f3 c6-f9 a6 eb 1a 89 70 04 57 width: 32 bits capabilities: smbios-2.4 dmi-2.4 smp-1.4 smp
脚本编写
open-vm-tools
如果您使用的是 Ubuntu/Debian,则可以安装该软件包。它提供vmware-checkvm
。它只返回一个数字。 A0
表示它是虚拟机,a1
表示它是物理系统。
不太理想的方法
如果是 KVM,则/proc/scsi/scsi
和ethtool
选项显示如下:
小型计算机系统接口
$ cat /proc/scsi/scsi
Attached devices:
Host: scsi1 Channel: 00 Id: 00 Lun: 00
Vendor: QEMU Model: QEMU DVD-ROM Rev: 0.9.
Type: CD-ROM ANSI SCSI revision: 05
以太网工具
$ ethtool -i eth0
driver: virtio_net
version:
firmware-version:
bus-info: virtio0
supports-statistics: no
supports-test: no
supports-eeprom-access: no
supports-register-dump: no
supports-priv-flags: no
virtio_net 是 KVM 的一部分。它/proc/scsi/scsi
告诉您您位于 VM 中,并且您很可能是 KVM。
消息
使用以下命令grep
通过dmesg
日志。
$ sudo dmesg | grep -i virtual
虚拟机软件
VMware vmxnet virtual NIC driver Vendor: VMware Model: Virtual disk Rev: 1.0 hda: VMware Virtual IDE CDROM Drive, ATAPI CD/DVD-ROM drive
QEmu 或 KVM
如果
"-cpu host"
未使用该选项,QEmu 和 KVM 会将自己标识为:CPU: AMD QEMU Virtual CPU version 0.9.1 stepping 03
否则,主机的 CPU 信息将在
dmesg
或 中使用/proc/cpuinfo
。但是,您应该看到类似以下内容:[ 0.000000] Booting paravirtualized kernel on KVM
在较新的内核中,它们知道它们在半虚拟化下运行。
微软虚拟电脑
hda: Virtual HD, ATA DISK drive hdc: Virtual CD, ATAPI CD/DVD-ROM drive
Xen
$ sudo dmesg | grep -i xen Xen virtual console successfully installed as tty1
维图奥佐
# method #1 $ sudo dmesg (returns no output) # method #2 $ sudo cat /var/log/dmesg (returns no output) # method #3 $ sudo ls -al /proc/vz veinfo veinfo_redir veredir vestat vzaquota vzdata
参考
答案4
hostnamectl
是你的朋友(需要systemd
)。
几个例子:
没有任何虚拟化的笔记本电脑
$ hostnamectl status
Static hostname: earth.gangs.net
Icon name: computer-laptop
Chassis: laptop
Machine ID: 18a0752e1ccbeef09da51ad17fab1f1b
Boot ID: beefdc99969e4a4a8525ff842b383c62
Operating System: Ubuntu 16.04.2 LTS
Kernel: Linux 4.4.0-66-generic
Architecture: x86-64
Xen
$ hostnamectl status
Static hostname: pluto.gangs.net
Icon name: computer-vm
Chassis: vm
Machine ID: beef39aebbf8ba220ed0438b54497609
Boot ID: beefc71e97ed48dbb436a470fe1920e1
Virtualization: xen
Operating System: Ubuntu 16.04.2 LTS
Kernel: Linux 3.13.0-37-generic
Architecture: x86-64
开放VZ
$ hostnamectl status
Static hostname: mars.gangs.net
Icon name: computer-container
Chassis: container
Machine ID: 55296cb0566a4aaca10b8e3a4b28beef
Boot ID: 1bb259b0eb064d9eb8a22d112211beef
Virtualization: openvz
Operating System: CentOS Linux 7 (Core)
CPE OS Name: cpe:/o:centos:centos:7
Kernel: Linux 2.6.32-042stab120.16
Architecture: x86-64
键盘虚拟机
$ hostnamectl status
Static hostname: mercury.gangs.net
Icon name: computer-vm
Chassis: vm
Machine ID: beeffefc50ae499881b024c25895ec86
Boot ID: beef9c7662a240b3b3b04cef3d1518f0
Virtualization: kvm
Operating System: CentOS Linux 7 (Core)
CPE OS Name: cpe:/o:centos:centos:7
Kernel: Linux 3.10.0-514.10.2.el7.x86_64
Architecture: x86-64