教你探测虚拟环境是物理机、虚拟机还是容器

目前裸机(物理机)、虚拟机、容器是云计算提供计算服务的三种主流形式。那么如何判断一个虚拟shell环境到底是物理机、虚拟机还是容器呢?

更进一步,如果是物理机,这个物理机厂商是什么,虚拟机到底是KVM还是XEN,容器是Docker还是rkt、lxc等?

更进一步,如果是虚拟机,是否可以判断这个虚拟机是运行在AWS还是阿里或者OpenStack,是否能够获取虚拟机的UUID、instance-type、vpc-id、安全组等信息?

判断物理机

如果使用了systemd,则可以直接通过systemd-detect-virt命令判断是否物理机:

微信截图_20200108174104.png

如果输出为none,则说明是物理机。
获取物理机的信息最直接的方式是查看DMI信息/sys/firmware/dmi/tables/DMI,使用dmidecode命令解码:

[root@KVM ~]# dmidecode -t system
# dmidecode 3.1
Getting SMBIOS data from sysfs.
SMBIOS 2.7 present.

Handle 0x0001, DMI type 1, 27 bytes
System Information
    Manufacturer: LENOVO
    Product Name: ThinkServer RD640   
    Version: FFFFFFF             
    Serial Number: NC01711670          
    UUID: 4752ed66-9e24-11e4-9ff5-70e2840da7ca
    Wake-up Type: Power Switch
    SKU Number:                       
    Family:                       

Handle 0x002C, DMI type 12, 5 bytes
System Configuration Options
    Option 1:                       

Handle 0x0059, DMI type 32, 20 bytes
System Boot Information
    Status: No errors detected

如上可以看出这台是物理机,厂商为LENOVO,型号为ThinkServer RD640,序列号为NC01711670
当然如果是虚拟机,如上命令会执行失败。另外也可以通过其他命令查看物理信息,如lshw命令。

判断虚拟机

其实前面已经提到了,如果使用了systemd,则可以直接通过systemd-detect-virt命令判断是否虚拟机:

如果是虚拟机,则会输出虚拟机类型,如kvm、oracle(virtualbox)、xen等。
参考物理机的获取方式,我们可以通过dmidecode命令获取更多的虚拟机信息。比如我在一台KVM虚拟机运行如下命令:

[root@k8s-master ~]# dmidecode -t system
# dmidecode 3.1
Getting SMBIOS data from sysfs.
SMBIOS 2.4 present.

Handle 0x0100, DMI type 1, 27 bytes
System Information
    Manufacturer: Red Hat
    Product Name: KVM
    Version: RHEL 7.0.0 PC (i440FX + PIIX, 1996)
    Serial Number: Not Specified
    UUID: c0e534f5-93ce-4141-9f6f-f8e20501e2f0
    Wake-up Type: Power Switch
    SKU Number: Not Specified
    Family: Red Hat Enterprise Linux

Handle 0x2000, DMI type 32, 11 bytes
System Boot Information
    Status: No errors detected

如上Product Name为KVM,说明运行在KVM平台,而UUID即虚拟机的UUID。
XEN上的一台虚拟机输出为:

[root@compute1 ~]# dmidecode -t system
# dmidecode 3.1
Getting SMBIOS data from sysfs.
SMBIOS 2.4 present.

Handle 0x0100, DMI type 1, 27 bytes
System Information
    Manufacturer: Xen
    Product Name: HVM domU
    Version: 4.7.1-1.9
    Serial Number: a7b7e316-fed2-d1a2-bb41-ba45e3d859a4
    UUID: a7b7e316-fed2-d1a2-bb41-ba45e3d859a4
    Wake-up Type: Power Switch
    SKU Number: Not Specified
    Family: Not Specified

Handle 0x2000, DMI type 32, 11 bytes
System Boot Information
    Status: No errors detected

如上Manufacturer为XEN,说明运行在XEN平台,而UUID即虚拟机的UUID。
腾讯云的虚拟机如下:

[root@VM_16_10_centos ~]# dmidecode -t system
# dmidecode 2.12
SMBIOS 2.4 present.

Handle 0x0100, DMI type 1, 27 bytes
System Information
    Manufacturer: Bochs
    Product Name: Bochs
    Version: Not Specified
    Serial Number: e4d64b5f-f700-447f-963b-aff1ffd1e1e4
    UUID: E4D64B5F-F700-447F-963B-AFF1FFD1E1E4
    Wake-up Type: Power Switch
    SKU Number: Not Specified
    Family: Not Specified

Handle 0x2000, DMI type 32, 11 bytes
System Boot Information
    Status: No errors detected

华为云的虚拟机如下:

[root@wly2c8g-0001 ~]# dmidecode -t system
# dmidecode 3.2
Getting SMBIOS data from sysfs.
SMBIOS 2.8 present.

Handle 0x0100, DMI type 1, 27 bytes
System Information
    Manufacturer: OpenStack Foundation
    Product Name: OpenStack Nova
    Version: 13.2.1-20191122150812
    Serial Number: 76b9d24f-b505-4425-b372-87d5198bed18
    UUID: f60c612e-17e3-48fa-b75f-9e6a1bc01b15
    Wake-up Type: Power Switch
    SKU Number: Not Specified
    Family: Virtual Machine

Handle 0x2000, DMI type 32, 11 bytes
System Boot Information
    Status: No errors detected

如上Manufacturer为OpenStack Foundation,说明运行在OpenStack平台,而UUID即虚拟机的UUID。

可见虽然可以从system信息中获取云厂商的线索,但其实虚拟机的system信息并没有统一的标准,有的在version中体现,有的在Product Name中表现,完全取决于云厂商自己的配置。

判断容器

目前还没有什么方法能够100%准确判断虚拟环境是否是容器
如果环境有systemd-detect-virt命令,则可以直接通过systemd-detect-virt -c命令判断,如果输出为none则不是容器,否则会输出容器类型,比如lxc。目前很少容器里面放systemd的,我见过的就只有LXD的ubuntu镜像,因此这种方法适用性不广。

关于linux开机默认设置(图形化/命令行)

1.查看目前默认的启动默认

systemctl get-default

2.设置为图形界面模式

systemctl set-default graphical.target

3.设置为命令行模式

systemctl set-default multi-user.target

查看CPU是否支持虚拟化

grep -E '(svm|vmx)' /proc/cpuinfo

svm - Secure virtual machine, AMD的虚拟化技术AMD-V
vmx - Intel的虚拟化技术Intel-VT

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,692评论 6 501
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,482评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,995评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,223评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,245评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,208评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,091评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,929评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,346评论 1 311
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,570评论 2 333
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,739评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,437评论 5 344
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,037评论 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,677评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,833评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,760评论 2 369
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,647评论 2 354

推荐阅读更多精彩内容