我调查了这个主题,以下是我的结论(但我仍然有疑问。如果我的结论有任何错误,请纠正我):
VMWare:
VMWare 于 1999 年开发了其 VM Hypervisor SW,但它是专有的。
量子计算单元(QEMU):
继 VMWare 之后的 4 年,法国开发者 Fabrice Bellard 于 2003 年开发了 QEMU(Quick Emulator)Hypervisor,并将其免费开源。经过多年的社区开发,QEMU 成为了“完全虚拟化”的 2 类虚拟机管理程序。
- QEMU 能够模拟各种硬件,包括 CPU 和 I/O 设备。
- QEMU 能够将发送到 VM 的 vCPU 的指令解释为真实指令并将它们发送到物理 CPU。
- 一些 QEMU 模拟设备被 VirtualBox 等虚拟化软件广泛使用。
- QEMU 有自己的 GUI 和 CLI。
QEMU 能够独立运行,无需任何其他 VM SW。
硬件虚拟化:
英特尔和 AMD 都在 2006 年推出了各自的硬件虚拟化技术(VT-x 和 AMD-V)。
键盘/鼠标:
2006 年,一家小公司(两年后,即 2008 年,被 Red Hat 收购)开发了一个名为“KVM”的 Linux 可加载内核模块,它能够使用前面提到的硬件虚拟化技术创建虚拟机。2007 年,它正式合并到 Linux 内核中。
- KVM 不模拟 vCPU,而是使用物理 CPU 提供的硬件虚拟化技术。
- 作为 Linux 内核组件,KVM 既没有 GUI,也没有 CLI。必须编写 C 代码来调用 KVM 内核模块来创建 VM,因此最终用户无法直接使用它。
- KVM 被视为虚拟机管理程序 (Hypervisor)。
KVM 能够独立创建虚拟机,无需任何其他虚拟机管理程序(如 QEMU)的支持。
libvirt
:
由于市场上有许多虚拟机管理程序,因此libvirt
在 2005 年底开发了统一创建和管理虚拟机的 API 和 CLI。从最终用户的角度来看,它提供了 CLI 工具,例如:
virsh
virt-manager
virt-install
libvirt
本身并不创建或管理虚拟机,而是将用户发出的命令映射到底层 Hypervisor 的一个或一系列 API 调用。
libvirt
是免费且开源的。
virt-manager
:
当人们使用 KVM 创建虚拟机时,他们可能会看到这个屏幕:
我以前一直以为这个软件是 KVM 的 GUI,但经过调查,我发现它是另一个软件,名为“虚拟机管理器”,正如标题所示。它virt-manager
也被称为。virt-manager
由 Red Hat 提供支持。
根据其网站,virt-manager
主要针对 KVM VM,但也管理 Xen 和 LXC。请参阅虚拟机管理器官方网站。
virt-manager
建立在 之上libvirt
。即它专注于用户界面(GUI 和 CLI)。对于底层 VM 管理,它只是调用libvirt
,最终调用底层 Hypervisor,例如 KVM。
我的问题:
- 我的结论有错误吗?
virt-manager
当我创建 KVM 虚拟机时,为什么GUI 在其 VM 列表中显示“localhost (QEMU)”或“QEMU/KVM”?libvirt
声称几乎所有以 virt-* 开头的虚拟化工具都是 libvirt 工具,尤其是virt-manager
和virt-install
。请参阅lib-virt 常见问题解答。但virt-manager
alcalvirt-install
是 的一部分virt-manager
。请参阅virt-manager 网站。那么哪一个是正确的?virt-install
和到底virt-manager
属于什么?- 有些文章谈到了
qemu-kvm
,但根据我的调查,它们只是两个不同的虚拟机管理程序。我可以独立使用 KVM 创建虚拟机,那么我为什么要使用qemu-kvm
?什么是qemu-kvm
?是 QEMU 在必要时使用一些 KVM 功能,还是 KVM 必须使用一些 QEMU 功能,否则它将无法创建虚拟机?
答案1
KVM 能够独立创建虚拟机,无需任何虚拟机管理程序(如 QEMU)的支持。
是也不是;它可以创建虚拟机,但不能提供除 CPU 和 RAM 之外的硬件。
当我创建 KVM 虚拟机时,为什么 virt-manager GUI 在其 VM 列表中显示“localhost (QEMU)”或“QEMU/KVM”?
KVM 无法独立运行;它只是内核为用户空间提供的 API。正如您所指出的:“作为 Linux 内核,KVM 既没有 GUI 也没有 CLI。必须编写 C 代码来调用 KVM 模块来创建 VM,这对最终用户来说毫无用处。”
因此,最终用户通常通过 QEMU 使用 KVM(它作为一种加速方法存在)。您可以使用已经熟悉的 qemu CLI 启动 VM,只需添加-accel kvm
或-enable-kvm
(旧版本)。还有许多其他使用 KVM 的 VM 管理器,例如kvmtool
,但 QEMU 是最受欢迎的。
同样适用于 libvirt – 它不直接管理 KVM,而只是使用正确的选项启动 QEMU。
此外,KVM 不会模拟大多数硬件——它不会为虚拟机提供磁盘或网卡;它只提供允许用户空间程序执行这些操作所需的钩子。KVM 本身主要处理特权 CPU 指令。
这意味着使用 QEMU 还有另一个优势——您可以使用 QEMU 已经实现的所有模拟硬件(SCSI 适配器、以太网控制器),而不必从头开始。
libvirt 声称几乎所有以 virt-* 开头的虚拟化工具都是 libvirt 工具,尤其是 virt-manager 和 virt-install。请参阅 lib-virt FAQ。
此类声明不可执行。如果其他人想使用 virt-* 作为其程序的名称(尤其是当该程序主要管理libvirt),那么他们可以将其命名为 virt-*。
有些文章谈到了 qemu-kvm,但根据我的调查,它们只是两个不同的虚拟机管理程序。我可以独立使用 KVM 来创建虚拟机,那么我为什么要使用 qemu-kvm?什么是 qemu-kvm?它是一个在必要时使用一些 KVM 功能的 QEMU,还是一个必须使用一些 QEMU 功能否则将无法创建虚拟机的 KVM?
原本它是 QEMU 的一个分支,添加了基于 KVM 的加速支持,后来又合并回主线 QEMU,所以命令qemu-kvm
就变成了qemu -enable-kvm
(后来调整为qemu -accel=kvm
)。