如何在Python脚本中检测Xen?

Mar*_*hio 4 python xen

我需要确定我的Python脚本何时在Xen虚拟机中运行.VM将运行Linux.

我在平台模块中找不到任何明显的东西.我能得到的最接近的是platform.platform()中'xen'的外观

>>> platform.platform()
'Linux-2.6.18-194.el5xen-x86_64-with-redhat-5.5-Final'
Run Code Online (Sandbox Code Playgroud)

确定这个的最佳方法是什么?

谢谢.

小智 7

仅供参考,如果是半虚拟VM,则应该有/ proc/xen/capabilities文件.如果它的内容是"control_d"那么,你在dom0下运行,你正在运行domU.
不要依赖内核版本.如果使用自定义内核或不同内核版本编译VM,或者甚至是现代PV-ops内核(其中没有"xen"字符串,与REDHAT的内核不同),那么您的代码将无法运行.

另一方面,还有其他漂亮的技巧.cpuid指令就是这样一个例子.我不知道如何在python中做到这一点,但是如果你将eax设置为1并调用cpuid,那么ECX的第31位将得到答案.如果设置,则表示您正在运行虚拟机管理程序.否则,你不是.但这仅适用于64位平台.

  • / proc/xen/capabilities文件是我正在寻找的.如果它不存在,那就不是Xen.如果它在那里但是空的,这是一个domU.如果它在那里并包含'control_d',那么它就是dom0.谢谢! (2认同)

Blu*_*ers -1

import re, platform

def is_xen():
    return bool(re.search('xen', platform.platform()))
Run Code Online (Sandbox Code Playgroud)