确定哪个来宾在 XEN 上运行:HVM 或 PV 来宾

Ha *_*Hai 9 linux xen xenserver centos5

我正在使用 Xen 主机,该主机由某人从 Citrix 安装了 XenServer。他已经在主机上安装了很多 CentOS 5.2 来宾。我想知道如何检查这些客人以知道他们是 PV 类型还是 HVM 类型?

Ada*_*m C 10

快速说明,实际上有 3 种模式,当涉及到正在使用的驱动程序时,而不是两种:

  • HVM:使用软件模拟设备的未修改内核和驱动程序
  • PV-HVM:具有半虚拟化(Xen 特定)磁盘和网络驱动程序的未修改内核
  • PV:修改后的内核和驱动程序

对于 Xen 来宾/DomU,您可以执行一个非常基本的操作,unamelsmod使用 grep 列出正在使用的模块:

uname -a
lsmod | grep xen
Run Code Online (Sandbox Code Playgroud)

如果uname -a列出了一个带有字符串“xen”的内核,那么你有一个修改过的内核,它很可能是一个 PV 来宾,你将看到lsmod命令的输出以确认它。如果您有来自 grep 的输出,lsmod但没有修改内核的迹象,那么您就是 PV-HVM。没有任何迹象,这是一个直接的 HVM。

注意:通常,您可以对安装了 PV 工具的 VM 执行更多操作,因此这可能是一个非常明显的指针,但是您可以伪造PV 工具的存在以允许挂起/恢复等,因此您通常不能依赖它.


Ant*_*nov 10

有一个更好的替代方法来分析uname -a来自来宾域内部的输出。您应该检查管理程序本身中的 VM 配置文件。

加大码

使用当前用于独立 Xen 安装的 XenLight 工具堆栈,这可以通过运行以下xl list --long命令来实现:

# xl list
Name                   ID   Mem VCPUs      State   Time(s)
My-Virtual-Machine     42  1024     1     -b----    9001.0

# xl list -l 42
    or
# xl list --long My-Virtual-Machine

[
    {
        "domid": 6,
        "config": {
            "c_info": {
                "name": "My-Virtual-Machine",
                "uuid": "12345678-abcd-1234-abcd-12345678abcd",
                "type": "pv",
                ...
            },
            ...
        }
    }
]
Run Code Online (Sandbox Code Playgroud)

请注意该部分中的type项目 c_info- 如果它等于 "pv",则表示半虚拟化。

XM

对于使用传统管理工具堆栈的较旧的独立 Xen 安装xm,情况类似:

# xm list --long My-Virtual-Machine
(domain
    (domid 42)
    (name My-Virtual-Machine)
    (image
        (linux
            (kernel ...)
            ...
        )
    )
    ...
)
Run Code Online (Sandbox Code Playgroud)

请注意该(linux)部分中的元素 (image)——它对应于 builder配置指令,其中“linux”表示“半虚拟化”(而不是实际内核),而“hvm”代表“完全虚拟化”。

XE

使用 XenServer 或 XCP设备,您可以使用xe vm-list params=all命令或类似的东西。

虚拟的

可能(或曾经)有某种方法可以从libvirt 工具堆栈中获取此信息 ,但我不知道。


请注意,从 Xen 4.5 开始,x86-64 上的半虚拟模式有两种风格:

  • 经典的半虚拟化(PV) 依赖于从使用环 0到使用环 1重写来宾系统;由于 AMD 在 x86-64 中丢弃了环 1 和环 2,Xen 不得不退回到基于软件的管理,这比 HVM 还要慢;
  • 硬件辅助半虚拟化(PVH),不要与半虚拟驱动程序完全虚拟化(PV-on-HVM)混淆 ,它依赖于硬件辅助来处理特权指令和内存页表,但在其他方面使用传统的 PV 技术,因此无需模拟硬件并实现接近本机的性能,就像在旧的 x86-32 时代一样。

要检查主机是否在启用 PVH 的情况下运行,可以使用xl info(尽管此方法并不比检查grub.cfg 好):

# xl info | grep xen_commandline
xen_commandline        : pvh=1 loglvl=all guest_loglvl=all console=com1,vga
                         ^^^^^
Run Code Online (Sandbox Code Playgroud)

要检查特定来宾是否在 PVH 模式下运行(pvh=1在配置文件中),请再次查阅xl list -l

            "c_info":{
                "name": "My-Virtual-Machine",
                "type": "pv",
                "pvh": "True",
                ...
            },
Run Code Online (Sandbox Code Playgroud)

但是,从管理的角度来看,PVH 应该与 PV 没有任何不同。

  • 这需要访问管理程序,如何知道他(她)是否只能访问来宾? (2认同)