我需要确定我的Python脚本何时在Xen虚拟机中运行。 VM将运行Linux。
我在平台模块中找不到任何明显的东西。我能得到的最接近的是platform.platform()
中'xen'的外观>>> platform.platform()
'Linux-2.6.18-194.el5xen-x86_64-with-redhat-5.5-Final'
确定这个的最佳方法是什么?
感谢。
答案 0 :(得分:7)
仅供参考,如果是半虚拟VM,则应该有/ proc / xen / capabilities文件。如果它的内容是“control_d”,那么你在dom0下运行,你正在运行domU。
不要依赖内核版本。如果使用自定义内核或不同的内核版本编译VM,或者甚至是现代的PV-ops内核(其中没有“xen”字符串,与REDHAT的内核不同),那么您的代码将无法工作。
另一方面,还有其他漂亮的技巧。 cpuid指令就是这样一个例子。我不知道如何在python中做到这一点,但如果你将eax设置为1并调用cpuid,那么ECX的第31位将得到答案。如果设置,则表示您正在运行虚拟机管理程序。否则,你不是。但这仅适用于64位平台。
答案 1 :(得分:1)
virt-what:http://people.redhat.com/~rjones/virt-what/
virt-什么是shell脚本,可用于检测程序 正在虚拟机中运行。
virt-what支持大量不同的虚拟机管理程序类型, 包括常见的开源虚拟机管理程序(KVM,Xen,QEMU,VirtualBox), 大型机系统,如IBM Systemz,LPAR,z / VM,硬件分区 像Hitachi Virtage这样的方案,像VMWare这样的专有虚拟机管理程序, Microsoft Hyper-V等等。
答案 2 :(得分:0)
你能依靠platform.platform()
吗?我不知道。如果可以,它每次都有效:
>>> output = 'Linux-2.6.18-194.el5xen-x86_64-with-redhat-5.5-Final'
>>> if 'xen' in output:
print 'Xen found'
Xen found
这样做的方法不止一种。你想要遵循哪一个取决于你。在SO上查看此问题here,仅回答此问题。现在你的任务是在Python中实现它,这可能涉及调用一些外部进程并检查输出。可能吗?是。
答案 3 :(得分:0)
某些系统在Xen DomU的“普通”内核和内核中没有区别,例如Fedora。使用内核名称来检测系统是否在Xen上运行并不总是可靠的。
一种可能的方法是检查内核引导消息和grep xen:
dmesg | grep xen
答案 4 :(得分:0)
对于半虚拟化VM,请使用:
ps auwx | egrep -c '\[xenbus\]$'
如果返回值为1,则它是一个xen半虚拟客户端。否则,它不是。
答案 5 :(得分:0)
您可以调用xen-detect命令,该命令是用C语言编写的。
答案 6 :(得分:-1)
import re, platform
def is_xen():
return bool(re.search('xen', platform.platform()))