Difference with qemu kvm and libvirt

Author:ChatGPT。本人排版了 wikitext 格式

本笔记梳理了 Linux 下常用虚拟化组件的概念、作用及关系,方便理解和实践。

KVM

  • 本质:Kernel-based Virtual Machine。Linux 内核模块,提供硬件虚拟化能力(CPU + 内存虚拟化)。
  • 作用:把物理 CPU 转变为虚拟 CPU,让 guest OS 可以像在真实硬件上一样运行。
  • 特点:仅提供虚拟化能力,不负责虚拟机管理或硬件模拟。
比喻:KVM 就像发动机,你有一辆车的发动机,但还没有车身,也没人开。

QEMU

  • 本质:用户态程序,提供完整的硬件模拟(CPU、内存、硬盘、网卡等)。
  • 作用:
    • 当没有 KVM 时,QEMU 可以完全模拟 CPU(速度慢)。
    • 当有 KVM 时,QEMU 仅模拟外围设备,CPU 部分由 KVM 加速。
  • 特点:可以运行几乎任何架构的虚拟机(x86、ARM 等)。
比喻:QEMU 是车身和方向盘,它负责把发动机(KVM)装好,能开车。

libvirt

  • 本质:虚拟化管理框架 / API。
  • 作用:
    • 提供统一接口管理不同虚拟化技术(KVM、Xen、VMware 等)。
    • 管理虚拟机生命周期(创建、启动、暂停、快照等)。
  • 特点:可以通过命令行工具 `virsh` 或程序调用 libvirt API,无需直接操作 QEMU/KVM。
比喻:libvirt 是车库管理员,帮你调度发动机和车身,让你不用手动装配每辆车。

virt-manager

  • 本质:图形化管理工具。
  • 作用:通过 libvirt 管理虚拟机。
  • 特点:
    • 提供图形界面创建、启动、快照、查看虚拟机。
    • 底层仍由 libvirt + QEMU + KVM 驱动虚拟机运行。
比喻:virt-manager 是你在电脑上开车的方向盘界面,你看得见车并能操作,但发动机是 KVM,车身是 QEMU,车库管理员是 libvirt。

层级关系

物理主机 (Linux)
 └─ KVM (内核模块, CPU/内存虚拟化)
 └─ QEMU (用户态, 硬件模拟)
      └─ libvirt (API/管理框架)
           └─ virt-manager (图形界面, 调用 libvirt)

总结

  • virt-manager = 操作虚拟机的 GUI
  • libvirt = 管理和调度虚拟机
  • QEMU = 模拟硬件
  • KVM = 内核虚拟化模块
  • 物理主机 = 提供真实硬件