用脚本检测系统虚拟化支持

wen 实用脚本 2

我将为您提供几个不同脚本来检测系统虚拟化支持,这些脚本适用于 Linux 系统。

用脚本检测系统虚拟化支持

Bash 检测脚本

#!/bin/bash
# 系统虚拟化支持检测脚本
# 适用于 Linux 系统
echo "========================================="
echo "      系统虚拟化支持检测报告"
echo "========================================="
# 检测 CPU 虚拟化支持
echo -e "\n[1] CPU 虚拟化支持检查"
echo "------------------------"
# 检查 Intel VT-x (vmx) 或 AMD-V (svm)
if grep -E -c '(vmx|svm)' /proc/cpuinfo > /dev/null 2>&1; then
    if grep -q 'vmx' /proc/cpuinfo; then
        echo "  ✓ Intel VT-x 技术: 支持"
    fi
    if grep -q 'svm' /proc/cpuinfo; then
        echo "  ✓ AMD-V 技术: 支持"
    fi
else
    echo "  ✗ CPU 虚拟化: 不支持"
fi
# 显示 CPU 信息
echo -e "\n[2] CPU 详细信息"
echo "------------------------"
echo "  CPU 型号: $(grep 'model name' /proc/cpuinfo | head -1 | cut -d':' -f2 | sed 's/^[ \t]*//')"
echo "  CPU 核心数: $(nproc)"
echo "  CPU 架构: $(uname -m)"
# 检查 KVM 支持
echo -e "\n[3] KVM 虚拟化检查"
echo "------------------------"
# 检查 KVM 模块是否加载
if lsmod | grep -q 'kvm'; then
    echo "  ✓ KVM 模块: 已加载"
    # 检查 KVM 具体版本
    if lsmod | grep -q 'kvm_intel'; then
        echo "  ✓ KVM 类型: Intel (kvm_intel)"
    elif lsmod | grep -q 'kvm_amd'; then
        echo "  ✓ KVM 类型: AMD (kvm_amd)"
    fi
else
    echo "  ✗ KVM 模块: 未加载"
fi
# 检查 /dev/kvm 设备
if [ -e /dev/kvm ]; then
    echo "  ✓ /dev/kvm 设备: 存在"
else
    echo "  ✗ /dev/kvm 设备: 不存在"
fi
# 检查嵌套虚拟化
echo -e "\n[4] 嵌套虚拟化支持"
echo "------------------------"
if [ -f /sys/module/kvm_intel/parameters/nested ]; then
    nested_status=$(cat /sys/module/kvm_intel/parameters/nested)
    echo "  Intel 嵌套虚拟化: $nested_status"
elif [ -f /sys/module/kvm_amd/parameters/nested ]; then
    nested_status=$(cat /sys/module/kvm_amd/parameters/nested)
    echo "  AMD 嵌套虚拟化: $nested_status"
else
    echo "  无法检测嵌套虚拟化状态"
fi
# 检测是否在虚拟机中
echo -e "\n[5] 当前运行环境评估"
echo "------------------------"
# 多种方法检测是否在虚拟机中
if systemd-detect-virt > /dev/null 2>&1; then
    virt_type=$(systemd-detect-virt)
    if [ "$virt_type" = "none" ]; then
        echo "  ✓ 当前运行环境: 物理机"
    else
        echo "  当前运行环境: 虚拟机 ($virt_type)"
        echo "  注意: 检测到的物理虚拟化可能受嵌套虚拟化影响"
    fi
else
    # 备用检测方法
    if grep -qi 'hypervisor' /proc/cpuinfo; then
        echo "  当前运行环境: 虚拟机"
    else
        echo "  当前运行环境: 物理机"
    fi
fi
# 最终总结
echo -e "\n========================================="
echo "          检测完成"
echo "========================================="

Python 检测脚本

#!/usr/bin/env python3
import os
import subprocess
import sys
def check_virtualization_support():
    """检测系统虚拟化支持"""
    print("=" * 50)
    print("      系统虚拟化支持检测报告")
    print("=" * 50)
    # 1. 检查 CPU 虚拟化支持
    print("\n[1] CPU 虚拟化支持检查")
    print("-" * 30)
    try:
        with open('/proc/cpuinfo', 'r') as f:
            cpuinfo = f.read()
        # 检查 Intel VT-x
        if 'vmx' in cpuinfo:
            print("  ✓ Intel VT-x 技术: 支持")
        # 检查 AMD-V
        if 'svm' in cpuinfo:
            print("  ✓ AMD-V 技术: 支持")
        if 'vmx' not in cpuinfo and 'svm' not in cpuinfo:
            print("  ✗ CPU 虚拟化: 不支持")
    except FileNotFoundError:
        print("  无法读取 CPU 信息")
    # 2. 检查 KVM 支持
    print("\n[2] KVM 虚拟化检查")
    print("-" * 30)
    # 检查 KVM 模块
    try:
        result = subprocess.run(['lsmod'], capture_output=True, text=True)
        if 'kvm' in result.stdout:
            print("  ✓ KVM 模块: 已加载")
            if 'kvm_intel' in result.stdout:
                print("  ✓ KVM 类型: Intel (kvm_intel)")
            if 'kvm_amd' in result.stdout:
                print("  ✓ KVM 类型: AMD (kvm_amd)")
        else:
            print("  ✗ KVM 模块: 未加载")
    except Exception as e:
        print(f"  检查 KVM 模块时出错: {e}")
    # 检查 /dev/kvm 设备
    if os.path.exists('/dev/kvm'):
        print("  ✓ /dev/kvm 设备: 存在")
    else:
        print("  ✗ /dev/kvm 设备: 不存在")
    # 3. 检查嵌套虚拟化
    print("\n[3] 嵌套虚拟化支持")
    print("-" * 30)
    nest_intel_path = '/sys/module/kvm_intel/parameters/nested'
    nest_amd_path = '/sys/module/kvm_amd/parameters/nested'
    if os.path.exists(nest_intel_path):
        with open(nest_intel_path, 'r') as f:
            nested = f.read().strip()
        print(f"  Intel 嵌套虚拟化: {nested}")
    elif os.path.exists(nest_amd_path):
        with open(nest_amd_path, 'r') as f:
            nested = f.read().strip()
        print(f"  AMD 嵌套虚拟化: {nested}")
    else:
        print("  无法检测嵌套虚拟化状态")
    # 4. 检测是否在虚拟机中
    print("\n[4] 当前运行环境评估")
    print("-" * 30)
    try:
        result = subprocess.run(['systemd-detect-virt'], capture_output=True, text=True)
        virt_type = result.stdout.strip()
        if virt_type == 'none':
            print("  ✓ 当前运行环境: 物理机")
        else:
            print(f"  当前运行环境: 虚拟机 ({virt_type})")
            print("  注意: 检测到的虚拟化可能受嵌套虚拟化影响")
    except FileNotFoundError:
        # 备选检测方法
        print("  无法使用 systemd-detect-virt,使用备选方法检测")
        if 'hypervisor' in cpuinfo.lower():
            print("  当前运行环境: 虚拟机")
        else:
            print("  当前运行环境: 物理机")
    print("\n" + "=" * 50)
    print("          检测完成")
    print("=" * 50)
if __name__ == "__main__":
    check_virtualization_support()

简单快捷版本

#!/bin/bash
# 快速检测虚拟化支持
echo "=== 快速虚拟化检测 ==="
# CPU 虚拟化支持
echo -n "CPU 虚拟化: "
if grep -q -E '(vmx|svm)' /proc/cpuinfo; then
    echo "✓ 支持"
    grep -q 'vmx' /proc/cpuinfo && echo "  - Intel VT-x"
    grep -q 'svm' /proc/cpuinfo && echo "  - AMD-V"
else
    echo "✗ 不支持"
fi
# KVM 支持
echo -n "KVM 支持: "
if [ -e /dev/kvm ]; then
    echo "✓ 可用"
else
    echo "✗ 不可用"
fi
# 运行环境
echo -n "运行环境: "
if systemd-detect-virt 2>/dev/null | grep -q 'none'; then
    echo "物理机"
else
    echo "虚拟机"
fi

使用方法

  1. 保存脚本:将上述脚本保存为文件(如 check_virt.sh

  2. 添加执行权限

    chmod +x check_virt.sh
  3. 运行脚本

    # Bash 版本
    ./check_virt.sh

Python 版本

python3 check_virt.py


## 检测结果解读
- **VMX**:Intel CPU 支持硬件虚拟化(VT-x)
- **SVM**:AMD CPU 支持硬件虚拟化(AMD-V)
- **KVM 已加载**:系统支持 KVM 虚拟化
- **/dev/kvm 存在**:KVM 设备可用
- **嵌套虚拟化**:支持在虚拟机内运行虚拟机
这些脚本可以帮您全面了解系统的虚拟化支持情况。

抱歉,评论功能暂时关闭!