确定 Linux 机器虚拟化技术的简单方法?

确定 Linux 机器虚拟化技术的简单方法?

我可以通过命令行访问 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/scsiethtool选项显示如下:

小型计算机系统接口

$ 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

相关内容