文章目录
- 前言
-
- [1. KVM + QEMU 支持的 CPU 架构](#1. KVM + QEMU 支持的 CPU 架构)
- [2. KVM + QEMU 支持的镜像格式](#2. KVM + QEMU 支持的镜像格式)
- [3.KVM + QEMU在X86上虚拟化arm系统?](#3.KVM + QEMU在X86上虚拟化arm系统?)
- 总结:
- [KVM + QEMU安装](#KVM + QEMU安装)
-
- [1. 确保硬件支持虚拟化](#1. 确保硬件支持虚拟化)
- [2. 安装必要的软件包](#2. 安装必要的软件包)
- [3. 启用并启动 libvirtd 服务](#3. 启用并启动 libvirtd 服务)
- [4. 配置网络桥接(可选)](#4. 配置网络桥接(可选))
- [5. 创建虚拟机](#5. 创建虚拟机)
- [6. 使用图形界面管理(可选)](#6. 使用图形界面管理(可选))
- [7. 常用命令](#7. 常用命令)
前言
KVM(Kernel-based Virtual Machine)和 QEMU 的组合提供了强大的虚拟化功能,支持多种 CPU 架构 和 镜像格式。下面详细介绍它们的支持范围。
1. KVM + QEMU 支持的 CPU 架构
KVM 和 QEMU 配合使用时,支持广泛的 CPU 架构,包括但不限于以下几种:
常见的 CPU 架构:
x86_64(64-bit Intel/AMD)
这是 KVM 最常用的架构,支持大多数现代服务器和桌面处理器。
包括 Intel 和 AMD 的 64 位处理器。
i386(32-bit Intel/AMD)
传统的 32 位架构,适用于较老的硬件或需要运行 32 位操作系统的情况。
支持 Intel 和 AMD 的 32 位处理器。
ARM (armv7, armv8, aarch64)
支持 ARM 32 位(armv7)和 64 位(armv8/aarch64)架构,适用于 Raspberry Pi、ARM 服务器、移动设备和嵌入式平台。
KVM 对 ARM 架构的支持通过 QEMU 实现虚拟化,能够运行 ARM 操作系统和应用程序。
PowerPC (ppc64, ppc64le)
支持 PowerPC 处理器,适用于 IBM 的 Power 系列服务器和一些高性能计算平台。
ppc64 为 64 位大端模式,ppc64le 为 64 位小端模式。
MIPS (mips64, mipsel)
支持 MIPS 架构,适用于一些嵌入式设备和网络设备。
mips64 为 64 位大端模式,mipsel 为小端模式。
S390 (s390x)
主要支持 IBM 的 Z 系列主机,适用于大规模的高性能计算环境。
SPARC (sparc64)
支持 Sun Microsystems(现为 Oracle)的 SPARC 处理器,用于高性能计算和数据库服务器。
RISC-V
RISC-V 是开源架构,KVM + QEMU 支持模拟 RISC-V 平台,适用于一些新兴的硬件平台。
支持的架构总结:

2. KVM + QEMU 支持的镜像格式
KVM 和 QEMU 支持多种 虚拟机镜像格式,包括以下几种:
常见的镜像格式:
RAW(原始磁盘映像)
扩展名:.raw 或 .img
特点:最简单的磁盘映像格式,直接映射磁盘扇区。性能较高,但不支持快照、压缩等高级功能。
用途:性能要求高的应用,或者与其他虚拟化平台兼容的需求。
QCOW2(QEMU Copy-On-Write version 2)
扩展名:.qcow2
特点:QEMU 默认的虚拟磁盘格式,支持动态磁盘大小、快照、压缩和加密等高级功能。
用途:大多数 KVM 用户选择的格式,因为它提供灵活性和高效的存储利用。
VMDK(VMware Virtual Machine Disk)
扩展名:.vmdk
特点:VMware 的虚拟磁盘格式,KVM 可以通过 QEMU 支持该格式,但需要转换为其他格式(如 QCOW2)才能更高效使用。
用途:用于从 VMware 迁移的虚拟机。
VHD / VHDX(Virtual Hard Disk / Virtual Hard Disk Extended)
扩展名:.vhd、.vhdx
特点:Microsoft Hyper-V 的虚拟磁盘格式,KVM 可以通过 QEMU 进行转换和使用。
用途:用于从 Hyper-V 迁移的虚拟机。
ISO(光盘映像)
扩展名:.iso
特点:通常用于安装操作系统,KVM 可以将 ISO 文件挂载为虚拟光驱。
用途:安装操作系统或用于恢复/修复系统。
QED(QEMU Enhanced Disk)
扩展名:.qed
特点:QEMU 的增强版磁盘格式,类似于 QCOW2,但更少使用。
用途:用于某些特定的 QEMU 场景,支持快速映像操作。
IMG(通用磁盘映像)
扩展名:.img
特点:通常为原始磁盘格式(RAW),是虚拟机镜像文件的一种常见扩展名。
用途:与 RAW 格式类似,用于存储原始磁盘映像。
Parallels Disk Image (PDI)
扩展名:.pdi
特点:Parallels 虚拟化平台的磁盘格式,KVM 通过 QEMU 支持该格式。
用途:用于从 Parallels 迁移的虚拟机。
支持的镜像格式总结:

3.KVM + QEMU在X86上虚拟化arm系统?
可以,但这不是一个"开箱即用"的功能,实现它需要理解KVM和QEMU各自的分工。
简单来说,KVM主要负责"加速",而QEMU主要负责"模拟"。在x86系统上运行ARM操作系统,会用到QEMU的模拟能力,但这通常意味着无法使用KVM的硬件加速。
为了清晰理解,我把这个问题的核心拆解成两个场景:

原理拆解:KVM 和 QEMU 的角色不同
要理解为什么会有这个限制,首先要明白KVM和QEMU在这个组合中各司其职:
-
KVM (Kernel-based Virtual Machine):它是Linux内核的一个模块,职责是让CPU直接执行虚拟机的代码,从而实现硬件加速。但它有一个硬性要求:它只能虚拟化与自己架构相同的CPU。因为x86的CPU无法直接执行ARM指令,所以在x86系统上,KVM无法直接"加速"一个ARM虚拟机。
-
QEMU:它是一个通用的模拟器。当KVM无法提供加速时,QEMU就退而求其次,使用其内置的TCG (Tiny Code Generator) 技术。它会将ARM指令"翻译"成x86指令来执行,这就实现了跨架构的模拟。
所以,"KVM + QEMU"在跨架构场景下,实际起作用的只有QEMU的软件模拟功能,而KVM的硬件加速无法参与。
场景与权衡
因此,最终选择哪种方案,取决于你的核心目标:
如果你需要接近原生的高性能,在x86上运行ARM系统是不可行的。你应该考虑使用原生ARM硬件(如树莓派、ARM云服务器)或支持硬件加速的苹果M系列芯片Mac。
如果你的主要目的是开发、学习或测试,那么使用纯QEMU软件模拟就是一个合适的工具,只是需要对它的慢速度有心理准备。
(一位开发者感慨:"QEMU软件模拟会 拖慢50倍 的速度!")------网上了解到的,没有实际验证过。
总结:
CPU 架构:KVM + QEMU 支持 x86_64、i386、ARM、PowerPC、MIPS、S390、SPARC、RISC-V 等多种架构,适用于不同硬件平台的虚拟化。
镜像格式:KVM + QEMU 支持 RAW、QCOW2、VMDK、VHD、VHDX、ISO、QED、IMG 和 PDI 等多种镜像格式,可以满足不同虚拟化场景的需求。
使用 KVM + QEMU 的组合,可以根据需求选择合适的硬件架构和镜像格式,以便更好地进行虚拟化部署和迁移。
KVM + QEMU安装
1. 确保硬件支持虚拟化
检查 CPU 是否支持虚拟化:
bash
egrep -c '(vmx|svm)' /proc/cpuinfo
如果输出结果大于 0,说明支持虚拟化。
检查 KVM 模块是否可用:
bash
lsmod | grep kvm
如果有 kvm_intel 或 kvm_amd,说明已加载虚拟化模块。
2. 安装必要的软件包
更新系统:
bash
sudo apt update && sudo apt upgrade -y # Ubuntu/Debian
sudo yum update -y # CentOS/RHEL
安装 KVM、QEMU 及相关工具:
Ubuntu/Debian:
bash
sudo apt install -y qemu-kvm libvirt-daemon-system libvirt-clients bridge-utils virt-manager
CentOS/RHEL:
bash
sudo yum install -y qemu-kvm libvirt libvirt-daemon-kvm virt-install bridge-utils
bash
virsh --version
qemu-system-x86_64 --version
3. 启用并启动 libvirtd 服务
启用并启动服务:
bash
sudo systemctl enable libvirtd
sudo systemctl start libvirtd
sudo systemctl status libvirtd
验证 KVM 安装是否正常:
bash
sudo virsh list --all
如果没有报错,说明安装正常。
4. 配置网络桥接(可选)
如果需要桥接网络:
编辑网络配置文件,创建 br0 桥接网络(示例适用于 Netplan 或 ifcfg 配置):
Netplan(Ubuntu 示例):
yaml
bash
network:
version: 2
renderer: networkd
ethernets:
ens3:
dhcp4: no
bridges:
br0:
interfaces: [ens3]
dhcp4: yes
应用配置:
bash
sudo netplan apply
CentOS/RHEL 示例: 编辑 /etc/sysconfig/network-scripts/ifcfg-br0:
bash
DEVICE=br0
TYPE=Bridge
BOOTPROTO=dhcp
ONBOOT=yes
然后重启网络服务:
bash
sudo systemctl restart network
5. 创建虚拟机
使用 virt-install 命令安装虚拟机:
bash
sudo virt-install \
--name=myvm \
--ram=2048 \
--vcpus=2 \
--disk path=/var/lib/libvirt/images/myvm.qcow2,size=20 \
--os-type=linux \
--os-variant=ubuntu20.04 \
--network bridge=br0,model=virtio \
--graphics vnc \
--cdrom=/path/to/iso/file.iso
参数说明:
--name:虚拟机名称。
--ram:分配的内存大小(MB)。
--vcpus:分配的 CPU 核心数。
--disk:磁盘路径及大小(单位:GB)。
--os-variant:指定操作系统类型(运行 osinfo-query os 获取支持的列表)。
--network:指定桥接网络。
--cdrom:指定 ISO 文件路径。
启动虚拟机:
bash
sudo virsh start myvm
sudo virsh console myvm
6. 使用图形界面管理(可选)
如果安装了 virt-manager,可以通过图形界面管理虚拟机:
启动 virt-manager:
bash
virt-manager
创建和管理虚拟机。
7. 常用命令
查看虚拟机状态:
bash
sudo virsh list --all
启动/关闭/删除虚拟机:
bash
sudo virsh start myvm
sudo virsh shutdown myvm
sudo virsh undefine myvm
导出/导入虚拟机:
bash
sudo virsh dumpxml myvm > myvm.xml
sudo virsh define myvm.xml
KVM + QEMU虚拟化方案可以在X86系统上虚拟化arm的操作系统