合 如何判断当前服务器是云主机、物理机、虚拟机、docker环境?
Tags: LinuxOS云容器docker环境虚拟机云服务器云主机物理主机物理服务器物理机
简介
使用ssh连接到服务器后,可以通过如下几种方式来判断连接到的服务器是物理主机、虚拟机、还是云主机,还是docker环境???
容器和虚拟机的区别:容器共享内核,虚拟机独享内核
虚拟机和物理机的区别:虚拟机是软件模拟的完整硬件系统功能的、完全隔离环境的计算机系统。只要模拟的全面,是没有太大差别的。除了性能差异,毕竟软件做了硬件的事。
目前我们经常见到的VPS虚拟化技术有KVM、OpenVZ、XEN、Hyper-V、VMware等。
当拿到shell权限,看到数字和字母随机生成的主机名大概率猜到在容器里了,查看进程,进程数很少,PID为1的进程为业务进程,这也是容器环境的典型特征。当然,以上这两种都是比较主观的判断。
方法1:使用 virt-what
区分虚拟机和物理机的一个方法是使用 virt-what。virt-what 实际上是一个 Shell 脚本。它通过各种启发式方法来识别虚拟化环境类型,可以检测出 QEMU/KVM、VMware、Hyper-V、VirtualBox、OpenVZ/Virtuozzo、Xen、LXC、IBM PowerVM 以及 Parallels 等平台类型。
基本上,可以将其理解为是一个 shell 脚本,可以作为命令安装在大多数 Linux 发行版中。安装命令如下:
1 2 | sudo apt install virt-what yum install -y virt-what |
如果系统运行在一个物理机上,virt-what 命令将不会返回任何结果;相反,如果是运行在虚拟机上,将会输出虚拟机的一些信息,例如kvm、xen等,如下所示:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | -- 虚拟机 [root@lhrdb ~]# virt-what kvm [root@lhrdb ~]# [root@localhost ~]# virt-what vmware -- 使用了xen作为虚拟化,并且使用xen的hvm虚拟化方式 [root@xxx ~]$ virt-what xen xen-hvm -- 用的是Windows的hyperv虚拟化机器 [root@xxx ~]$ virt-what hyperv -- WSL2 [root@lhrxxt ~]# virt-what hyperv lxc -- docker容器 [root@kmdw ~]# virt-what kvm [root@kmdw ~]# -- 物理机 [root@mdw2 ~]# virt-what [root@mdw2 ~]# |
如果出现没有结果的情况,大概率是物理机,小概率是不能识别的虚拟化技术。
方法2:dmidecode命令查看
DMI 是桌面管理界面(Desktop Management Interface)的缩写,是几乎所有系统制造商都遵守的标准。DMI 框架用于管理和跟踪桌面、笔记本电脑或服务器计算机中的组件。
由于有了 DMI,我们可以获得有关系统硬件、系统制造商和设备序列号的信息,而使用 dmidecode(DMI Decode)命令,可以获取这些信息。另外,使用 -s system-manufacturer 也可获取制造商的详细信息。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | dmidecode -t 1 dmidecode -s system-product-name dmidecode -s system-Manufacturer PowerEdge R730 # 这个代表物理机 SYS-4028GR-TR # 这个代表物理机 Dell Inc. # 这个代表物理机 VMware Virtual Platform # 这个代表虚拟机 Bochs # 这个代表虚拟机 QEMU # 这个代表虚拟机 OpenStack Nova # 这个代表华为云云主机 Alibaba Cloud ECS # 这个代表阿里云云主机 |
如果是物理机,你会看到机器制造商的名称,比如 Dell,Lenovo,Huawei 等;
如果是虚拟机,你会看到一些类似于 QEMU , innotek Gmbh(for VirtualBox),Bochs,VMware Virtual Platform 等的输出信息。
华为云ECS云主机:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 | [root@eas-ora ~]# dmidecode -t 1 # 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-20210707213230_d1da3e2 Serial Number: 88f22f46-0843-4ccd-afe9-2929c08e7292 UUID: 88f22f46-0843-4ccd-afe9-2929c08e7292 Wake-up Type: Power Switch SKU Number: Not Specified Family: Virtual Machine [root@ecs-9b83 ~]# dmidecode -t 1 # dmidecode 3.2 Getting SMBIOS data from sysfs. SMBIOS 2.8 present. Handle 0x0100, DMI type 1, 27 bytes System Information Manufacturer: Huawei Cloud Product Name: c7.2xlarge.2 Version: 13.2.1-20220808115737_bd245dd Serial Number: 56207974-6690-4174-97fa-5f45250dad5d UUID: 56207974-6690-4174-97fa-5f45250dad5d Wake-up Type: Power Switch SKU Number: Not Specified Family: Virtual Machine [root@ecs-9b83 ~]# dmidecode -s system-Manufacturer Huawei Cloud |
阿里云ECS云主机:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | [root@dbaup ~]# dmidecode -t 1 # dmidecode 3.2 Getting SMBIOS data from sysfs. SMBIOS 2.8 present. Handle 0x0100, DMI type 1, 27 bytes System Information Manufacturer: Alibaba Cloud Product Name: Alibaba Cloud ECS Version: pc-i440fx-2.1 Serial Number: da419577-4e99-4c00-90f2-d2ef8cbb8571 UUID: da419577-4e99-4c00-90f2-d2ef8cbb8571 Wake-up Type: Power Switch SKU Number: Not Specified Family: Not Specified |
WSL2:
1 2 3 4 5 | [root@lhrxxt ~]# dmidecode -t 1 # dmidecode 3.2 Scanning /dev/mem for entry point. # No SMBIOS nor DMI entry point found, sorry. [root@lhrxxt ~]# |
Bochs虚拟技术:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | [root@HF ~]# dmidecode -t 1 # dmidecode 3.2 Getting SMBIOS data from sysfs. SMBIOS 2.8 present. Handle 0x0100, DMI type 1, 27 bytes System Information Manufacturer: Bochs Product Name: Bochs Version: pc-i440fx-2.5 Serial Number: Not Specified UUID: Not Settable Wake-up Type: Power Switch SKU Number: Not Specified Family: Not Specified |
华为的物理机:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | [root@lhrxxt soft]# virt-what [root@lhrxxt soft]# [root@lhrxxt soft]# [root@lhrxxt soft]# [root@lhrxxt soft]# dmidecode -t 1 # dmidecode 3.1 Getting SMBIOS data from sysfs. SMBIOS 3.0.0 present. Handle 0x0001, DMI type 1, 27 bytes System Information Manufacturer: Huawei Product Name: 2288H V5 Version: Purley Serial Number: 2102312BRF10J5111307 UUID: 75d525a1-80b5-9061-1111-5063b8d73bb9 Wake-up Type: Power Switch SKU Number: Type2Sku0 Family: Type2Family |
方法3:查看根分区的磁盘类型
一般物理机的根分区为/dev/sda2,而云主机的根分区为/dev/vda1,如下:
1 2 3 4 5 6 7 8 9 10 | [root@eas ~]# df -h Filesystem Size Used Avail Use% Mounted on devtmpfs 95G 0 95G 0% /dev tmpfs 95G 9.5M 95G 1% /dev/shm tmpfs 95G 978M 94G 2% /run tmpfs 95G 0 95G 0% /sys/fs/cgroup /dev/vda1 40G 14G 25G 36% / /dev/mapper/vg_oracle-lv_oracle 1.5T 1.3T 190G 87% /oracle tmpfs 19G 0 19G 0% /run/user/0 [root@eas-ora ~]# |
注意:也有部分云主机的根目录使用的是共享盘,那么磁盘类型也是/dev/sda1,如下:
123456789 [root@ecs-9b83 ~]# df -hFilesystem Size Used Avail Use% Mounted ondevtmpfs 7.6G 0 7.6G 0% /devtmpfs 7.6G 0 7.6G 0% /dev/shmtmpfs 7.6G 8.7M 7.6G 1% /runtmpfs 7.6G 0 7.6G 0% /sys/fs/cgroup/dev/sda1 40G 3.0G 35G 8% /tmpfs 1.6G 0 1.6G 0% /run/user/0[root@ecs-9b83 ~]#
方法4:查看欢迎语
各个厂商的云主机都配置了欢迎语,即文件/etc/motd
,如下:
1 2 3 4 5 6 7 8 9 10 | -- 华为云 [root@ora ~]# cat /etc/motd Welcome to Huawei Cloud Service -- 阿里云 [lhr@dbaup ~]$ cat /etc/motd Welcome to Alibaba Cloud Elastic Compute Service ! |