我调查了这个话题,这是我的结论(但我仍然有疑问,如果我的结论有任何错误,请纠正我):
虚拟机:
VMWare 在 1999 年开发了它的 VM Hypervisor SW,但它是专有的。
QEMU:
在 VMWare 之后 4 年后,法国开发人员 Fabrice Bellard 在 2003 年开发了 QEMU(快速仿真器)Hyporvisor,并使其免费和开源。经过多年的社区发展,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 年,一家小公司(2 年后在 2008 年被 Red Hat 收购)开发了一个名为“KVM”的 Linux 可加载内核模块,它能够使用前面提到的硬件虚拟化技术创建 VM。然后在 2007 年正式合并到 Linux 内核中。
- KVM 不模拟 vCPU,而是使用物理 CPU 提供的硬件虚拟化技术。
- 作为 Linux 内核,KVM 既没有 GUI 也没有 CLI。必须编写 C 代码来调用 KVM 模块来创建 VM,使其对最终用户无用。
- KVM 被视为 Hypervisor。
KVM 能够独立创建 VM,无需任何 Hypervisor(如 QEMU)的支持。
库:
由于市场上有许多 Hypervisor,libvirt 是在 2005 年底开发的,用于统一创建和管理 VM 的 API 和 CLI。从最终用户的角度来看,它提供了 CLI 工具,例如:
- 虚拟
- 虚拟管理器
- 虚拟安装
libvirt 本身并不创建或管理虚拟机,而是将用户发出的命令映射到对底层 Hypervisor 的一个或一系列 API 调用。
libvirt 是免费和开源的。
虚拟经理:
人们在使用 KVM 创建 VM 时,可能会看到这样的画面:
以前我把这个软件看成是KVM的GUI,但经过我的调查,我发现它是另一个名为“虚拟机管理器”的软件,如标题所示。它也被称为 virt-manager。virt-manager 由 Red Hat 提供支持。
根据其网站,virt-manager 主要针对 KVM 虚拟机,但也管理 Xen 和 LXC。请参阅Virtual Machine Manager 官方网站。
virt-manager 建立在 libvirt 之上。即它专注于用户界面(GUI 和 CLI)。对于底层的VM管理,简单的调用libvirt,最终调用底层的Hypervisor,比如KVM。
我的问题:
- 我的结论有什么错误吗?
- 为什么我创建 KVM 虚拟机时 virt-manager GUI 在其 VM 列表中显示“localhost (QEMU)”或“QEMU/KVM”?
- libvirt 声称几乎所有以 virt-* 开头的虚拟化工具都是 libvirt 工具,尤其是 virt-manager 和 virt-install。请参阅lib-virt 常见问题解答。但是 virt-manager alcal virt-install 是 virt-manager 的一部分。请参阅virt-manager 网站。那么哪一个是正确的呢?virt-install 和 virt-manager 到底属于什么?
- 有些文章谈到了 qemu-kvm,但根据我的调查,它们只是两个不同的 Hypervisor。我可以独立使用 KVM 来创建虚拟机,那我为什么要使用 qemu-kvm?什么是 qemu-kvm?它是一个在必要时使用一些 KVM 功能的 QEMU,还是一个必须使用一些 QEMU 功能的 KVM,否则它将无法创建 VM?
是与否;它可以创建虚拟机,但不能提供除 CPU 和 RAM 以外的硬件。
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 不模拟大多数硬件——它不会为 VM 提供磁盘或网卡;它只提供允许用户空间程序这样做所需的钩子。KVM 本身主要只处理特权 CPU 指令。
这意味着使用 QEMU 还有另一个优势——您可以使用 QEMU 已经实现的所有模拟硬件(SCSI 适配器、以太网控制器),而不必从头开始。
此类索赔是不可执行的。如果其他人想使用 virt-* 作为他们程序的名称(尤其是当程序主要管理libvirt 时),那么他们可以将其命名为 virt-*。
最初它是 QEMU 的一个分支,添加了基于 KVM 的加速支持。后来它被合并回主线 QEMU,所以
qemu-kvm
命令变得只是qemu -enable-kvm
(后来被调整为qemu -accel=kvm
)。