Python脚本判断 Linux 是否运行在虚拟机上
在WebHostingTalk论坛上有些国外奸商会把虚拟机当作独立服务器卖,去年7月份的时候就有一位中国同胞上当受骗,并在WHT上发帖声讨,证据确凿,甚至连服务商自己也承认,回帖达355篇。这家独立服务器/VPS提供商HostATree.com居然大胆的把OpenVZVPS这种一看就知道是虚拟机的虚拟机当作独立服务器卖,晕,至少也要弄个VMWare/KVM/XenHVM吧(更难发现是虚拟机),用OpenVZ这种容器也太欺负人了:)昨天恰好收到网友一封邮件问到了如何判断自己买的是独立服务器还是虚拟机的问题。这里VPSee简单介绍一下市面上常用虚拟技术(包括容器技术)的判别小技巧。
判断OpenVZ/XenPV/UML
判断OpenVZ/XenPV/UML是最容易的,直接检查/proc下的相关目录和文件就可以知道,比如OpenVZVPS上会有/proc/vz这个文件;XenPV虚拟机上会有/proc/xen/这个目录,并且目录下有一些东西;UML上打印/proc/cpuinfo会找到UML标志。写了一个简单的Python脚本来检测:
#!/usr/bin/python #checkifalinuxsystemrunningonavirtualmachine(openvz/xenpv/uml)
importsys,os
defmain(): ifos.getuid()!=0: print"mustberunasroot" sys.exit(0)
#checkOpenVZ/Virtuozzo ifos.path.exists("/proc/vz"): ifnotos.path.exists("/proc/bc"): print"openvzcontainer" else: print"openvznode"
#checkXen ifos.path.exists("/proc/xen/capabilities"): if(os.path.getsize("/proc/xen/capabilities")>0): print"xendom0" else: print"xendomU"
#checkUserModeLinux(UML) f=open("/proc/cpuinfo","r");t=f.read();f.close() if(t.find("UML")>0): print"uml"
if__name__=="__main__": main()