我将为您提供几个不同脚本来检测系统虚拟化支持,这些脚本适用于 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
使用方法
-
保存脚本:将上述脚本保存为文件(如
check_virt.sh) -
添加执行权限:
chmod +x check_virt.sh
-
运行脚本:
# Bash 版本 ./check_virt.sh
Python 版本
python3 check_virt.py
## 检测结果解读
- **VMX**:Intel CPU 支持硬件虚拟化(VT-x)
- **SVM**:AMD CPU 支持硬件虚拟化(AMD-V)
- **KVM 已加载**:系统支持 KVM 虚拟化
- **/dev/kvm 存在**:KVM 设备可用
- **嵌套虚拟化**:支持在虚拟机内运行虚拟机
这些脚本可以帮您全面了解系统的虚拟化支持情况。