如何判断Linux系统是运行在物理机还是虚拟机
1、概述
大家好,我是欧阳方超。今天看一看判断Linux是运行在物理机还是虚拟机的问题。其实要不是项目经理的追问,我都想不到这来。
一次很偶然的谈话,
项目经理问到:你们的系统是运行在物理机还是虚拟机上,
我:啥,这有什么关系吗?
项目经理:xxx,
于是项目经理假装严肃地教育了一番,完事我还得反馈结果给他。
2、检测命令
简单搜索后,发现是有命令进行判断的。
2.1、systemd-detect-virt命令
systemd-detect-virt命令用于检测当前系统是否正在运行于虚拟机中。
具体作用:
如果检测到当前系统正在虚拟机环境中运行,则返回对应虚拟平台名称,如:kvm、vmware、xen 等;
如果检测到当前系统正在物理机上直接运行,则返回none;
下面是在物理机上执行的结果:
[root@peer0 ~]# systemd-detect-virt
none
下面是在kvm虚拟机上执行的结果:
$ systemd-detect-virt
kvm
2.2、lscpu命令
lscput命令主要作用是查看CPU信息,它有两方面的作用,一是显示CPU基本信息,包括:CPU架构(如x86_64)、CPU核数、CPU主频、是否支持多线程、L1/L2缓存大小、制造商和CPU型号;二是判断系统是否支持虚拟化技术以及所支持的虚拟化技术,具体来说,通过Virtualization字段表明CPU是否支持虚拟化技术(当运行在物理机上时显示VT-x或AMD-v),以及使用的时何种虚拟化技术(当运行在虚拟机上时显示KVM或VMware).
下面是当Linux系统运行在物理机上时,lscpu的执行效果:
[root@peer0 ~]# lscpu
Architecture: x86_64
CPU op-mode(s): 32-bit, 64-bit
Byte Order: Little Endian
CPU(s): 16
On-line CPU(s) list: 0-15
Thread(s) per core: 2
Core(s) per socket: 4
座: 2
NUMA 节点: 2
厂商 ID: GenuineIntel
CPU 系列: 6
型号: 85
型号名称: Intel(R) Xeon(R) Gold 5122 CPU @ 3.60GHz
步进: 4
CPU MHz: 3600.000
BogoMIPS: 7200.00
虚拟化: VT-x
L1d 缓存: 32K
L1i 缓存: 32K
L2 缓存: 1024K
L3 缓存: 16896K
NUMA 节点0 CPU: 0,2,4,6,8,10,12,14
NUMA 节点1 CPU: 1,3,5,7,9,11,13,15
3、区别
Linux系统运行在虚拟机或物理机上存在以下主要区别:
- 资源使用 - 虚拟机的资源(CPU、内存、磁盘等)是分配给它的,而物理机可以直接使用它所有安装的物理资源。所以物理机的性能会更高。
- 稳定性 - 物理机由于直接使用硬件,系统往往更稳定。虚拟机由于软件层面模拟硬件,稳定性会略差一些。
- 硬件访问 - 虚拟机访问硬件需要通过虚拟机软件,速度可能更慢一些。物理机直接访问硬件。
- 可移植性 - 虚拟机由于是软件层面的模拟,更易移植到不同的硬件和平台上。物理机限于自己的硬件。
- 隔离性 - 虚拟机之间运行互不影响,隔离性好。而物理机直接运行在硬件上,相互影响较大。
- 存储 - 虚拟机使用软件分配的虚拟磁盘,可以很容易地备份和迁移。 物理机的硬盘直接安装在硬件上,不易迁移。
- 成本 - 虚拟机由于不需要额外的硬件,成本更低。物理机需要购买独立的硬件,成本较高。
总的来说,虚拟机具有更高的隔离性、可移植性和成本效益,但相对来说资源使用效率和稳定性略逊于物理机。
4、总结
本文抛砖引玉,介绍了两个用于检测Linux系统时运行在物理机还是虚拟机上的命令,也许还有一些其他命令吧,大家可以在评论区讨论一下。
我是欧阳方超,把事情做好了自然就有兴趣了,如果你喜欢我的文章,欢迎点赞、转发、评论加关注。我们下次见。