红联Linux门户
Linux帮助

判断Linux是否运行在虚拟机中

发布时间:2016-06-21 15:48:45来源:topspeedsnail.com作者:斗大的熊猫

我有一个bash脚本,这个脚本需要根据Linux是在虚拟机还是在实际硬件上运行,执行不同的任务。那么,怎么判断一个Linux系统是在虚拟机上运行还是在实际硬件上运行呢?

根据虚拟机(hypervisor/container)的不同,运行在其上的Linux系统会生成不同的指纹-处理器信息、/proc里的特殊文件、虚拟网卡驱动等等。根据这些信息就可以判断Linux系统是在虚拟机上运行还是在实际硬件上运行。

其实,从启动信息中就可以看出。例如,下面的Linux运行在QEMU虚拟机中:

判断Linux是否运行在虚拟机中

幸运的是,有几个Linux工具可以实现这个功能。


方法一:virt-what

使用命令行工具virt-what就可以判断Linux是否运行在虚拟机中。这个命令其实就是一个bash脚本,它使用上面的提到的指纹判断虚拟机的类型。它可以识别的虚拟机包括QEMU/KVM、VMware、Hyper-V、VirtualBox、OpenVZ/Virtuozzo、Xen、LXC、IBM PowerVM、Parallels等等。

在Ubuntu上安装virt-what:

$ sudo apt-get install virt-what

我有一个运行在VirtualBox上的Ubuntu,使用它做测试:

$ sudo virt-what

判断Linux是否运行在虚拟机中

如果Ubuntu在实际硬件上运行,执行上面命令不会输出任何信息。

我在DigitalOcean还有一个VPS,看看DO使用的什么虚拟机:

判断Linux是否运行在虚拟机中

在CentOS上安装virt-what:

$ sudo yum install virt-what

注意:要使用root运行virt-what。


方法二:dmidecode

dmidecode命令实际是用来查询BIOS和系统信息的。使用它判断:

$ sudo dmidecode -s system-manufacturer

上面命令输出电脑制造商的名字,如:Dell Inc、lenovo等。如果是虚拟机,输出虚拟机开发商的名字,如QEMU、Xen、VirtualBox、VMware等。

上面这个命令并不是%100可靠。


方法三:systemd

如果你使用的是基于systemd的Linux发行版,你可以使用systemd自带的一个工具,叫systemd–detect–virt。

$ systemd-detect-virt

判断Linux是否运行在虚拟机中

在实际机器上运行会输出“none”。


上面列出了三种判断Linux是否运行在虚拟机中的方法,如果你有其他方法, 欢迎评论。


本文永久更新地址:http://www.linuxdiyf.com/linux/21724.html