最可靠的第一步是检查内核是否加载kvm模块:arm平台运行lsmod | grep kvm应显示kvm和kvm_arm,x86平台应显示kvm_intel或kvm_amd;同时lscpu需确认硬件虚拟化扩展已启用。

怎么确认麒麟系统是否支持KVM虚拟化
直接看内核有没有加载ARM或x86对应的KVM模块,这是最可靠的第一步。别只信CPU型号宣传,有些飞腾或鲲鹏服务器的UEFI默认关了HVC(ARM的虚拟化扩展),或者BIOS里VT-x被锁死,光查CPU信息会误判。
-
lsmod | grep kvm—— 如果看到kvm和kvm_arm(ARM平台)或kvm_intel/kvm_amd(x86平台),说明内核已启用基础支持 -
lscpu | grep Virtualization—— ARM平台显示Virtualization: ARM virtualization extensions才算硬件就绪;x86平台则应显示VT-x或AMD-V - 如果以上都空,但CPU本身支持(比如鲲鹏920、飞腾S2500),大概率是固件没开:进UEFI/BIOS找“虚拟化”“Hypervisor”“SMM Security Mitigations”之类选项,关闭SMM Lock或打开“ARM HVC support”
为什么kvm-ok在麒麟上经常报错或不可用
因为 kvm-ok 是 Ubuntu/Debian 系生态工具,依赖 cpu-checker 包,而麒麟V10(尤其是SP1及之后版本)默认源里不提供该包,强行 apt install cpu-checker 会失败或装错架构版本(比如装了x86_64版到aarch64系统上)。
- 替代方案更稳:
grep -E '(vmx|svm|hvc)' /proc/cpuinfo—— ARM平台必须看到hvc字样,x86平台看到vmx或svm -
test -c /dev/kvm && echo "OK" || echo "MISSING"—— 直接检查设备节点是否存在,比依赖外部工具更底层、更可信 - 某些定制版麒麟(如政务云镜像)会屏蔽
/dev/kvm设备节点,即使模块已加载。此时需确认 SELinux/AppArmor 策略或 systemd-udev 规则是否拦截了设备创建
容器能力检测不能只看docker --version
装了Docker命令不代表能跑容器——麒麟系统上常因内核配置缺失导致 overlay2 驱动无法加载,或 cgroup v2 未启用,结果 docker run hello-world 卡住或报 cannot create cgroup。
- 先查内核支持:
zcat /proc/config.gz | grep -E "(OVERLAY_FS|CGROUPS|CGROUP_V2)"(若无/proc/config.gz,说明内核未导出配置,需查uname -r后去麒麟官网核对对应内核的编译选项) - 运行
docker info | grep "Storage Driver\|Cgroup Driver"—— 正常应显示Storage Driver: overlay2和Cgroup Driver: systemd(麒麟V10 SP1+ 默认用 systemd cgroup v2) - 常见坑:麒麟桌面版默认禁用
systemd.unified_cgroup_hierarchy=1,需在/etc/default/grub的GRUB_CMDLINE_LINUX补上该参数,再sudo update-grub && reboot
libvirt是否正常工作?别只看systemctl status libvirtd
服务状态active并不等于能创建虚拟机。麒麟系统中 libvirt 常因权限、桥接配置或默认网络缺失而静默失败,virt-install 报 Failed to connect to the hypervisor 或 No network 'default' found 就是典型症状。
- 验证连接:
virsh -c qemu:///system list --all—— 能列出空列表才说明 libvirt daemon 和 KVM driver 通信正常 - 检查默认网络:
virsh net-list --all,若无default,运行virsh net-start default && virsh net-autostart default;如提示找不到,用virsh net-define /usr/share/libvirt/networks/default.xml先导入 - 权限问题高频点:普通用户需加入
libvirt用户组(sudo usermod -aG libvirt $USER),且登出重进;若用 root 运行 virt-manager 却连不上,很可能是 polkit 策略限制,需检查/etc/polkit-1/rules.d/下是否有麒麟定制的权限拦截规则
virt-install 就可能在某个环节哑火,而且错误提示往往不指向真正原因。










