虚拟化入门指南
虚拟化概念简介
摘要
第 1 章 什么是虚拟化和迁移?
1.1. 什么是虚拟化?
虚拟化方式
- 全虚拟化
- 全虚拟化利用处理器的硬件特性,向客机提供底层实体系统的总抽象。这创建了新的虚拟系统,被称为一个“虚拟机 ”(virtual machine),它允许客机操作系统在无需修改的情况下运行。客机操作系统和任何在客机虚拟机器中的应用并不会察觉出虚拟化环境并正常运作。硬件支持虚拟化这项技术,用于实现在 Red Hat Enterprise Linux 中 KVM 的全面虚拟化。
- 半虚拟化
- 半虚拟化应用一系列呈现给虚拟机的软件和数据结构,需要客机中的软件修改以使用半虚拟环境。半虚拟化包含整个内核,就像 Xen 准虚拟机,或者虚拟化 I/O 设备的驱动程序一样。
- 软件虚拟化(或仿真)
- 软件虚拟化利用更慢的二进制转换和其他仿真技术运行未更改的操作系统。Red Hat Enterprise Linux 不支持软件虚拟化。
注意
1.2. 什么是迁移?
迁移类型
- 离线迁移
- 离线迁移暂停或关闭虚拟机,接着移动一个虚拟机的内存镜像到目标主机。虚拟机在目标主机上恢复,在源主机上被虚拟机使用的内存得以释放。
- 即时迁移
- 即时迁移是将一个活跃虚拟机从一个实体主机迁移到另一个实体主机的过程。
1.2.1. 迁移虚拟机器的益处
- 负载均衡
- 一台主机超载时,其虚拟机的一个或多个可以即时迁移到其他主机上。
- 针对主机升级或进行更改
- 需要升级、添加或卸下一台主机的硬件设备时,虚拟机可以安全地转移到其他主机。这也就是说客机不会由于任何一个主机的更改而停机。
- 节能
- 虚拟机器可以重新分配至其他主机,空载主机系统可以在使用率低的时段关机以节省能源和开支。
- 地理迁移
- 为实现更低的延迟或其他特殊情况,虚拟化机器可以转移到另一个物理位置。
第 2 章 虚拟化的优势及误解
2.1. 虚拟化的成本
- 能耗更少
- 使用虚拟化可以减少对实体平台的需求。这等同于机器运行和冷却时减少了能耗,使能源费用降低。通过使用虚拟化技术,可以减少用于购置多个实体平台的初始费用,以及相应的能耗费用和冷却费用。
- 更少的维护任务
- 如果在实体系统转移至虚拟系统前做好充分的规划,那么用于维护系统的时间将变少。这意味着用于零部件和人工的花费将变少。
- 延长已安装软件的寿命
- 旧版本软件也许不能在最新的裸机上直接运行。然而,通过在更大更快的系统上虚拟地运行旧版本软件,利用新型系统性能,使软件寿命得以延长。
- 可预计成本
- Red Hat Enterprise Linux 订阅服务为虚拟化提供了一个价格固定的支持模式,使成本易于估算。
- 节省空间
- 把服务器整合到更少机器上意味着所需的物理空间减少。这些节省下来的空间可作它用。
2.2. 虚拟化学习曲线
2.3. 性能
- 业界标准的 SAP 销售与分配(SD)标准应用基准数据显示,使用 Red Hat Enterprise Linux 6.2 和 KVM ,与运行在相同硬件配置的裸机系统相比,虚拟化的效率为 85% 。
- Red Hat Enterprise Linux 6.1 和 KVM 达到了由标准性能评估机构 ( SPEC ) 制定的 SPECvirt_sc2010 基准中创记录的虚拟化性能标准,它的虚拟性能指标在所公布的所有 SPECvirt 结果中是最佳的。SPECvirt_sc2010 标准衡量了系统部件在虚拟化数据中心服务器中,终端至终端的性能。
注意
- Red Hat 知识库文章“在 VM 上执行 SAP-SD 效能测试 — 使用 RHEL / KVM 达到领先效能”,网址为 https://access.redhat.com/knowledge/articles/216943
- 标准性能评估机构(SPEC),网址为 http://www.spec.org
- Red Hat Achieves New Top Virtualization Performance Benchmark with HP 一文,网址为 http://investors.redhat.com/releasedetail.cfm?ReleaseID=617594
2.4. 灾难修复
2.5. 安全性
2.5.1. 虚拟化安全性特点
SELinux 由美国国家安全局及其他机构开发,向 Linux 提供强制访问控制(MAC,Mandatory Access Control)。在 SELinux 的控制下,所有程序和文件被命名为一种“类型 ”,并可以精确控制对这些资源的访问。SELinux 限制攻击者的能力,致力于防止许多常见的安全问题,如缓冲溢出攻击和特权升级。
sVirt 是包含在 Red Hat Enterprise Linux 7 中的一个技术,它把 SELinux 和虚拟化技术整合在一起。sVirt 用强制访问控制来提高虚拟机使用过程中的安全性,它强化了系统,以应对虚拟机监控程序中可能被利用来攻击主机或其它虚拟机载体的故障。
注意
2.6. 服务器和个体机的虚拟化
2.6.1. 虚拟化部署方案
- 具有多达 3 个物理主机和 10 个客机的小型部署:virt-manager
- 像 virt-manager 这样的工具,对那些运行多个没有严格运行时间要求,或服务等级协议(SLA)的服务器的小型商务用户非常有用。在这种环境下,一个管理员可能就负责整个基础设施,若其中一个部件需要改变,维持程序的灵活性会十分重要。这一环境可能包含一些应用程序,如网络服务器、文件及打印服务器和应用服务器。
- 大的部署或关键应用系统:Red Hat Enterprise 虚拟化(RHEV)
- 像 Red Hat Enterprise Virtualization(RHEV)这样的完全虚拟化平台,可能适合企业实施大型部署或运行关键应用系统。在这种环境下,物理基础设施大到需要信息技术部门和商业要求根据新需求做出准确回应。一些适合 Red Hat Enterprise Virtualization 的大型部署案例可能包含数据库、贸易平台或必须无故障持续运行的信息系统。
- 软件开发者开发管理应用程序:libvirt
- virt-manager 和 Red Hat Enterprise Virtualization(RHEV)都使用 libvirt 管理虚拟机。libvirt 一个是虚拟化 API,软件开发者可以使用它来开发和改变管理应用。
第 3 章 红帽虚拟化产品介绍
3.1. Red Hat Enterprise Linux 的 KVM 和虚拟化
- 何谓 KVM ?
- KVM(基于内核的虚拟机,Kernel-based Virtual Machine)是为 AMD64 和 Intel 64 硬件上的 Linux 提供的完全虚拟化的解决方案,它包括在标准 Red Hat Enterprise Linux 7 内核中。KVM 可运行多种无需修改的 Windows 和 Linux 客机操作系统。 Red Hat Enterprise Linux 的 KVM 虚拟机监控程序使用 libvirt API 和 libvirt 的工具程序(如
virt-manager、virsh)进行管理。虚拟机以多线程的 Linux 进程形式运行,并通过上面提到的工具程序进行管理。 - 过度分配
- KVM 监控程序支持系统资源“过度分配 ”(overcommitting)功能。过度分配意味着可以分配比系统中实际拥有的资源更多的虚拟化 CPU 或内存。过度分配内存允许主机充分利用物理内存来分配更多虚拟内存,从而达到提升客机密度的目的。
重要
过度分配功能可能对系统稳定性造成风险。更多关于 KVM 过度分配功能的信息和应采取的预防措施,请参照《Red Hat Enterprise Linux 7 虚拟化部署与管理指南 》。 - 精简配置
- “精简配置 ”(thin provisioning)允许灵活分配内存,并且为每个客机虚拟机优化可用空间。它产生一种现象,即客机物理内存比实际可用内存更多。这与过度分配功能不同,因为它只适用于存储,而不适用于 CPU 或内存分配。但是,过度分配功能所存在的风险同样适用于这个功能。
重要
精简配置可能对系统稳定性造成风险。更多关于 KVM 精简配置的信息,和应采取的预防措施,请参照《Red Hat Enterprise Linux 7 虚拟化部署与管理指南 》。 - KSM
- KVM hypervisor 使用的 “Kernel SamePage Merging ”(KSM)允许 KVM 客机共享相同内存页面。这些共享页一般是通用的库或其他相同的、高频使用的数据。KSM 通过避免重复的内存,使具有相同或相似客机操作系统的客机密度更大。
注意
更多关于 KSM 的信息,请参照《Red Hat Enterprise Linux 7 虚拟化部署与管理指南 》。 - QEMU 客机代理
- “QEMU 客机代理 ”(QEMU Guest Agent)在客机操作系统上运行,通过它,主机可以向客机操作系统发出命令。
注意
更多关于 QEMU 客机代理的信息,请参照《Red Hat Enterprise Linux 7 虚拟化部署与管理指南 》。 - Hyper-V 入门知识
- Red Hat Enterprise Linux 7 的 KVM 实现了几个 Hyper-V 兼容功能,Windows 客机通过使用它们可以提高性能和稳定性,从而使得 Windows 客机如在微软 Hyper-V 虚拟机监控程序上运行一般。
注意
更多关于Hyper-V 功能性的信息,请参照《Red Hat Enterprise Linux 7 虚拟化部署与管理指南 》。 - 磁盘 I/O 节流
- 当几个虚拟机同时运行,可能会因为使用过多磁盘 I/O 对系统性能形成干扰。KVM 中的“磁盘 I/O 节流 ”(Disk I/O throttling)对从虚拟机器向主机发出的磁盘 I/O请求作出限定 。这可以防止虚拟机过度使用共享资源,并影响其他虚拟机的性能。
注意
关于使用磁盘 I/O 节流的指示,请参照《Red Hat Enterprise Linux 7 虚拟化调试和优化指南 》。 - 自动化 NUMA 平衡
- “自动化 NUMA 平衡 ”功能在不需要对 Red Hat Enterprise Linux7 虚拟机进行手工性能优化的情况下,提高 NUMA 硬件系统上运行的应用程序的性能。自动化 NUMA 平衡功能会把所执行的任务(线程或进程)移到和所需要访问的内存更接近的地方。
注意
更多关于自动化 NUMA 平衡的信息,请参照《Red Hat Enterprise Linux 7 虚拟化调试和优化指南 》。 - 虚拟 CPU 热添加
- 虚拟 CPU (vCPU) 热添加功能可以在无需要停机的情况下,根据需要为运行的虚拟机增加处理能力。分配到虚拟机的 vCPU 可能会被添加到运行的客机上,来满足工作量需求,或维持与工作负载相关的服务等级协议 (SLA)。
注意
更多关于虚拟 CPU 热添加的信息,请参照《Red Hat Enterprise Linux 7 虚拟化调试和优化指南 》。 - KVM 客机虚拟机的兼容性
- Red Hat Enterprise Linux 7 服务器有特定的支持限定。以下 的 URL 解释了 Red Hat Enterprise Linux 对处理器和内存容量的限制:有关支持的操作系统及主客机组合的完整表格,请参照 https://access.redhat.com/site/supported-hypervisors。
注意
要验证处理器是否支持虚拟化扩展程序,以及如何启用虚拟化扩展的信息,请参照《 Red Hat Enterprise Linux 7 虚拟化部署与管理指南 》。
3.2. libvirt 和 libvirt 工具程序
- 一个稳定的通用层来安全地管理主机上的虚拟机。
- 一个管理本地系统和连网主机的通用接口。
- 在虚拟机监控程序支持的情况下,部署、创建、修改、监测、控制、迁移以及停止虚拟机操作都需要这些 API。尽管 libvirt 可同时访问多个主机,但 API 只限于单节点操作。
virt-manager 与 virsh 命令行管理工具。libvirt 主要的功能是管理单节点主机,并提供 API 来列举、监测和使用管理节点上的可用资源,其中包括 CPU、内存、储存、网络和非一致性内存访问(NUMA)分区。管理工具可以位于独立于主机的物理机上,并通过安全协议和主机进行交流。
- virsh
virsh命令行工具是基于 libvirt API 创建的命令行工具,它可以作为图形化的virt-manager应用的备选工具。没有相关权利的用户可以使用只读的模式运行virsh命令,而具有 root 权限的用户可以使用所有的管理功能。virsh命令可以被用来创建虚拟化任务管理脚本,如安装、启动和停止虚拟机。- virt-manager
virt-manager是一个管理虚拟机的图形化桌面工具。它允许访问图形化的客机控制台,并可以执行虚拟化管理、虚拟机创建、迁移和配置等任务。它也提供了查看虚拟机、主机数据、设备信息和性能图形的功能。本地的虚拟机监控程序可以通过单一接口进行管理。
注意
virsh 和 virt-manager 的信息,请参照《Red Hat Enterprise Linux 7 虚拟化部署与管理指南 》。
3.3. 虚拟化硬件设备
- 虚拟和仿真设备
- 半虚拟化设备
- 物理共享设备
3.3.1. 虚拟和仿真设备
- 虚拟化 CPU (vCPU)
- 无论主机 CPU 的数量有多少,主机系统都可以为客机提供多达 160 个虚拟化 CPU (vCPU)。
- 仿真图形设备
- 有两种仿真图形设备可供选择。这类设备可以使用 SPICE (Simple Protocol for Independent Computing Environments)协议或 VNC 进行连接:
- Cirrus CLGD 5446 PCI VGA 卡(使用 cirrus 设备)
- 标准 VGA 图形卡,带有 Bochs VESA 扩展程序(硬件等级,包括所有非标准模式)
- 仿真系统组件
- 仿真以下核心系统组件来提供基本系统功能:
- Intel i440FX 主机 PCI 网桥
- PIIX3 PCI 到 ISA 的网桥
- PS/2 鼠标和键盘
- EvTouch USB 图形平板设备
- PCI UHCI USB 控制器与虚拟化 USB 集线器
- 仿真串口
- EHCI 控制器,虚拟化 USB 存储和 USB 鼠标
- USB 3.0 xHCI 主机控制器(Red Hat Enterprise Linux 7.1 技术预览)
- 仿真声音设备
- Red Hat Enterprise Linux 6.1 以上版本提供了仿真(Intel) HDA 声音设备,
intel-hda。此设备由以下客机运行系统进行支持:- Red Hat Enterprise Linux 7,用于 x86_64 架构
- Red Hat Enterprise Linux 6,用于 i386 和 x86_64 架构
- Red Hat Enterprise Linux 5,用于 i386 和 x86_64 架构
- Red Hat Enterprise Linux 4,用于 i386 和 x86_64 架构
- Windows 7,用于 i386 和 x86_64 架构
- Windows 2008 R2,用于 x86_64 架构
以下仿真声音系统同样可供选择,但鉴于与固定客机运行系统兼容性问题,不推荐使用:ac97,仿真 Intel 82801AA AC97 音频兼容声卡
- 仿真监视器设备
- Red Hat Enterprise Linux 6.0 及以上版本提供了两种仿真监视器设备。监视器可以在虚拟机超载或未响应时,自动重启虚拟机。watchdog 程序包务必安装在客机上。两种可供选择的设备为:
i6300esb,仿真 Intel 6300 ESB PCI 监视器设备。它支持客机操作系统 Red Hat Enterprise Linux 版本 6.0 以上,为推荐使用设备。ib700,仿真 iBase 700 ISA 监视器设备。ib700监视器仅支持使用 Red Hat Enterprise Linux 6.2 以上版本的客机。
两种监视器设备均支持客机操作系统 Red Hat Enterprise Linux 6.2 以上版本的 i386 与 x86_64 架构。 - 仿真网络设备
- 两种仿真网络设备可供选择:
e1000设备仿真了 Intel E1000 网络适配器(Intel 82540EM、82573L、82544GC)。rtl8139设备仿真了 Realtek 8139 网络适配器。
- 仿真储存驱动
- 储存驱动与储存池可以使用这些仿真设备,将储存设备与虚拟机相连。客机使用仿真储存驱动可访问储存池。注意,同所有虚拟设备一样,储存驱动不是储存设备。对于虚拟机器,该驱动作为备用储存设备、文件或储存池容量进行使用。备用储存设备可为任何支持的储存设备、文件、或储存池容量形式。
- 仿真 IDE 驱动
- KVM 提供两种仿真 PCI IDE 接口。仿真 IDE 驱动可以用于将多达四个虚拟化 IDE 硬盘或虚拟化 IDE 光盘驱动组合与每台虚拟机相连接。仿真 IDE 驱动同样可用于虚拟化 CD-ROM 和 DVD-ROM 驱动。
- 仿真软盘驱动
- 仿真软盘驱动用于创造虚拟化软驱。
- 仿真 AHCI 控制器
- 仿真 Advanced Host Controller Interface(AHCI)是 IDE 的一种替代产品。它包括在 Red Hat Enterprise Linux 7.1 中作为技术预览。
注意
如需了解更多与 KVM 存储相关的信息,请参阅第 3.4 节 “储存”。
3.3.2. 半虚拟化设备
注意
- 半虚拟化网络设备(virtio-net)
- 半虚拟化网络设备是虚拟化网络设备,它为虚拟机提供了网络访问能力,并可以提供网络性能及减少网络延迟。
- 半虚拟化块设备(virtio-blk)
- 半虚拟化块设备是高性能虚拟化储存设备,它可以为虚拟机提供高性能、低延迟的 I/O 存储。半虚拟化块设备由虚拟机监控程序支持,与虚拟机相连(软盘驱动除外,它只能被仿真)。
- 半虚拟化控制器设备(virtio-scsi)
- 半虚拟化 SCSI 控制器设备是一种更为灵活且可扩展的 virtio-blk 替代品。virtio-scsi 客机能继承目标设备的各种特征,并且能操作几百个设备,相比之下,virtio-blk 仅能处理 28 台设备。virtio-scsi 完全支持以下客机操作系统:
- Red Hat Enterprise Linux 7
- Red Hat Enterprise Linux 6.4 以上版本。
- Windows Server 2008(32/64 比特)
- Windows Server 2008 R2
- Windows 7(32/64 比特)
- Windows Server 2012
- Windows Server 2012 R2
- Windows 8(32/64 比特)
- Windows 8.1(32/64 比特)
- 半虚拟化时钟
- 使用时间戳计数器(TSC,Time Stamp Counter)作为时钟源的客机可能会出现与时间相关的问题。KVM 在主机外围工作,这些主机在向客机提供半虚拟化时间时没有固定的 TSC。此外,半虚拟化时钟会在客机运行 S3 或挂起 RAM 时帮助调整所需时间。半虚拟化时钟不支持 Windows 客机。
- 半虚拟化串口设备 (virtio-serial)
- 半虚拟化串口设备是面向比特流的字符流设备,它为主机用户空间与客机用户空间之间提供了一个简单的交流接口。
- 气球设备(virtio-balloon)
- 气球(ballon)设备可以指定虚拟机的部分内存为没有被使用(这个过程被称为气球“充气 ” — inflation),从而使这部分内存可以被主机(或主机上的其它虚拟机)使用。当虚拟机这部分内存时,气球可以进行“放气 ”(deflated),主机就会把这部分内存重新分配给虚拟机。
- 半虚拟化随机数字生成器 (virtio-rng)
- 半虚拟化随机数字生成器使虚拟机可以直接从主机收集熵或随意值来使用,以进行数据加密和安全。因为典型的输入数据(如硬件使用情况)不可用,虚拟机常常急需熵。取得熵很耗时;virtio-rng 通过直接把熵从主机注入客机虚拟机从而使这个过程加快 。
- 半虚拟化图形卡(QXL)
- 半虚拟化图形卡与 QXL 驱动一同提供了一个有效地显示来自远程主机的虚拟机图形界面。SPICE 需要 QXL 驱动。
3.3.3. 物理主机设备
- VFIO 设备分配
- 虚拟功能 I/O(VFIO)是 Red Hat Enterprise Linux 7 中一个新的内核驱动,它为虚拟机提供了访问物理硬件的高性能。VFIO 把主机系统上的 PCI 设备与虚拟机直接相连,允许客机在执行特定任务时有独自访问 PCI 设备的权限。这就象 PCI 设备物理地连接到客机虚拟机上一样。通过把设备分配从 KVM 虚拟机监控系统中移出,并在内核级中强制进行设备隔离,VFIO 比以前的 PCI 设备分配有了很大的改进。VFIO 安全性更高且与安全启动兼容。在 Red Hat Enterprise Linux 7 中,它是默认的设备分配机制。Red Hat Enterprise Linux 7 中 VFIO 把分配设备的数量从 Red Hat Enterprise Linux 6 中最多 8 个增加到 32 个。VFIO 也支持对 NVIDIA GPU 的分配。
注意
关于 VFIO 设备分配的更多信息,请参照《Red Hat Enterprise Linux 7 虚拟化部署与管理指南 》。 - USB 传递
- KVM hyperviso 支持把主机系统上的 USB 设备连接到虚拟机。USB 设备分配允许客机拥有在执行特定任务时有专有访问 USB 设备的权利。这就象 USB 设备物理地连接到虚拟机上一样。
注意
关于 USB 传递的更多信息,请参照《Red Hat Enterprise Linux 7 虚拟化部署与管理指南 》。 - SR-IOV
- SR-IOV (Single Root I/O Virtualization)是一个 PCI 快捷标准,把单一物理 PCI 功能扩展到同分散的虚拟化功能(VF)一样共享 PCI 资源。通过 PCI 设备分配,每个功能可以被不同虚拟机使用。支持 SR-IOV 的 PCI-e 设备提供一个单一根功能(如单一以太网接口),并把多个各自分离的虚拟设备作为独特 PCI 设备功能。每个虚拟化设备都可能有自身独特的 PCI 配置空间、内存映射的寄存器以及单独的基于 MSI 的中断系统。
注意
关于 SR-IOV 更多信息,请参照《Red Hat Enterprise Linux 7 虚拟化部署与管理指南 》。 - NPIV
- N_Port ID Virtualization(NPIV)是对光纤通道设备有效的功能。NPIV 共享单一物理 N_Port 作为多个 N_Port ID。NPIV 为 HBA(光纤通道主机总线适配器,Fibre Channel Host Bus Adapter)提供和 SR-IOV 为 PCIe 接口提供的功能相似的功能。有了 NPIV,可以为 SAN(存储区域网络,Storage Area Network)提供带有虚拟光纤通道发起程序的虚拟机。NPIV 可以提供带有企业级存储解决方案的高密度虚拟环境。
3.3.4. 客机 CPU 型号
注意
3.4. 储存
3.4.1. 储存池
- 本地储存池
- 本地储存池直接连接到主机服务器。它们包括本地目录、直接连接的磁盘、物理分区和本地设备上的 LVM 卷组。本地储存池对开发、测试及不需要迁移或具有大量虚拟机的小型部署十分有用。因为本地储存池不支持实时迁移,所有它可能不适用于某些生产环境。
- 网络(共享)储存池
- 网络储存池包括在网络上使用标准协议共享的储存设备。使用 virt-manager 在主机间进行虚拟机的迁移需要网络储存,但是当使用
virsh迁移时,它是可选的。网络储存池由 libvirt 进行管理。
3.4.2. 储存卷
3.4.3. 仿真储存设备
- virtio-scsi
- virtio-scsi 是为使用大量磁盘或高级储功能(如 TRIM)的客机推荐使用的半虚拟化设备。使用除 Red Hat Enterprise Linux 7 以外操作系统的客机可能需要安装相应的客机驱动。
- virtio-blk
- virtio-blk 是适用于向客机提供镜像文件的半虚拟化储存设备。virtio-blk 可以为虚拟机提供最好的磁盘 I/O 性能,但比 virtio-scsi 的功能少。
- IDE
- IDE 是推荐给不支持 virtio 驱动的旧客机用的。IDE 性能不如 virtio-scsi 或 virtio-blk,但它与不同系统广泛兼容。
- CD-ROM
- ATAPI CD-ROM 与 virtio-scsi CD-ROM 都能向客机提供 ISO 文件或主机 CD-ROM 驱动。virtio-scsi CD-ROM 可以与安装了 virtio-scsi 驱动的客机一同使用。ATAPI CD-ROM 兼容性广泛但性能较低。
- USB 存储设备和软盘
- 如需要可移动介质,可使用 USB 存储设备和软盘。USB 存储设备由于其较大的容量比软盘更受欢迎。
- AHCI
- 仿真 AHCI(高级主机控制器接口,Advanced Host Controller Interface)总线是 IDE 的一种替代品,它的特征增多、性能提高,包括与串行 ATA(SATA)设备交流。AHCI 作为一种技术预览包括在 Red Hat Enterprise Linux 7.1 中。
3.4.4. 主机存储
- 镜像文件
- 镜像文件储存在主机文件系统中。它可以储存在本地文件系统中,如 ext4 或 xfs;或网络文件系统中,如 NFS 。例如 libguestfs 这样的工具,能管理、备份及监控文件。KVM 上的磁盘镜像格式包括:
- raw
- raw 镜像文件指不包含附加元数据的磁盘内容。假如主机文件系统允许,raw 文件可以是预分配(pre-allocated)或稀疏(sparse)。稀疏文件根据需求分配主机磁盘空间,因此它是一种精简配置形式(thin provisioning)。预分配文件的所有空间需要被预先分配,但它比稀疏文件性能好。当对磁盘 I/O 性能要求非常高,而且通常不需要通过网络传输镜像文件时,可以使用 raw 文件。
- qcow2
- qcow2 镜像文件提供许多高级磁盘镜像特征,如快照、压缩及加密。它们可以用来代表通过模板镜像创建的虚拟机。因为只有虚拟机写入的扇区部分才会分配在镜像中,所以 qcow2 文件的网络传输效率较高。Red Hat Enterprise Linux 7.0 及更新版本支持 qcow2 v3 镜像文件格式。
- LVM 卷
- 逻辑卷可用于磁盘镜像,并使用系统的 LVM 工具进行管理。 由于它使用更简单的块储存模式,LVM 比文件系统的性能更高。LVM 精简配置为 LVM 卷提供快照和高效的空间使用,它可以作为 qcow2 的一种替代选择。
- 主机设备
- 主机设备如物理 CD-ROM、原始磁盘或 LUN 都可以提供给客机。这使得 SAN 或 iSCSI LUN 还有本地 CD-ROM 都可以提供给客机所用。在 SAN 而不是主机上进行储存管理时,可以使用主机设备。
- 分布式存储系统
- Gluster 卷可用作磁盘镜像。它提供了高效的、使用网络的集群存储。Red Hat Enterprise Linux 7 包括在 GlusterFS 上对磁盘镜像的原生支援。这使 KVM 主机可以直接从 GlusterFS 卷引导虚拟机镜像,并使用 GlusterFS 卷中的镜像作为虚拟机的数据磁盘。与 GlusterFS FUSE 相比,KVM 原生支持性能更好。
注意
第 4 章 虚拟化工具
4.1. virsh
virsh 命令行工具建立在 libvirt 管理 API,并作为可选择的一个运行方式来替代 qemu-kvm 命令和图形界面的 virt-manager 应用。无特权的用户以只读的方式使用 virsh 命令;有根用户权限的用户可以使用该命令的所有功能。virsh 是一个对虚拟环境的管理任务进行脚本化的理想工具。另外,virsh 工具是 virsh 客机域的一个主要管理接口,可以用于创造、暂停和关闭“域”,或罗列现有域。这一工具作为 libvirt-client 软件包中的一部分被安装。
注意
virsh 管理虚拟机器的信息。
4.2. virt-manager
注意
virt-manager 管理虚拟机的信息。
4.3. virt-install
注意
virt-install 的更多信息。
4.4. guestfish
guestfs API 所提供的功能。这个工具包括在同名的软件包中,称为 guestfish。
警告
guestfish 会引起磁盘镜像损坏。若一个正在运行中的虚拟机正在使用磁盘镜像,则需搭配 --ro(只读)共同使用 guestfish 命令。
注意
guestfish 的信息。
4.5. GNOME Boxes
注意
4.6. 其他有用工具
disk-image 文件可以直接访问客机磁盘。然而有时通过进入 libvirt 域也可以实现访问。后续命令属于 libvirt 的一部分“域”,并用以访问客机磁盘镜像。
guestmount- 一个用于挂载虚拟机文件系统和主机上磁盘镜像的命令行工具。此工具作为 libguestfs-tools 软件包的一部分进行安装。
警告
使用--r/w(读/写)模式中的guestmount以访问正被一个访客使用的磁盘,将导致磁盘崩溃。请勿对实时虚拟机使用--r/w(读/写)模式的guestmount。若磁盘镜像正被使用,则需--ro(读/写)选项共同使用guestmount命令。 virt-builder- 一个用于快速构建和定制的新虚拟机的命令行工具。该工具安装在 Red Hat Enterprise Linux 7.1 并作为软件包 libguestfs 的一部分。
virt-cat- 有以下用途的命令行工具:快速浏览特定虚拟机器的磁盘或磁盘镜像中,一个或多个文件的内容。此工具作为 libguestfs-tools 软件包中的一部分进行安装。
virt-customize- 用于定制虚拟机磁盘镜像的命令行工具。virt-customize 可以用来安装软件包、编辑配置文件、运行脚本并设置密码。该工具安装于 Red Hat Enterprise Linux 7.1 并作为 libguestfs 软件包的一部分。
virt-df- 用于显示虚拟机的实际物理磁盘使用的命令行工具,同命令行工具
df类似。请注意此工具不能在远程连接下工作。它作为 libguestfs-tools 软件包的一部分进行安装。 virt-diff- 用于显示两个虚拟机文件系统不同的命令行工具,例如,发现快照中哪些发生了变化。该工具安装在 Red Hat Enterprise Linux 7.1 并作为 libguestfs 软件包的一部分。
virt-edit- 用于编辑已存在于特定虚拟机器中的文件的命令行工具。此工具作为 libguestfs-tools 软件包的一部分进行安装。
警告
在实时虚拟机器上使用virt-edit会引起虚拟机器磁盘崩溃。尽管virt-edit命令会尽量防止用户编辑实时虚拟机器的文件,但并不能保证涵盖所有情况。请勿在实时虚拟机器上使用virt-edit。 virt-filesystems- 用于发现磁盘映像或虚拟机其中的文件系统、分区、逻辑卷和其大小的命令行工具。常见用法是在命令过程中,迭代磁盘镜像中的所有文件系统。此工具作为 libguestfs-tools 软件包中的部分进行安装。此工具替代
virt-list-filesystems和virt-list-partitions。 virt-inspector- 具有如下用途的命令行工具:检测一个虚拟机或磁盘镜像,以决定其运行系统版本和其他信息。它同样可以产生 XML 输出,该输出可以输入到其他程序中。请注意
virt-inspector一次只能检查一个域。此工具作为 libguestfs-tools 软件包的一部分进行安装。 virt-ls- 罗列了虚拟化机器中的文件和目录的命令行工具。此工具作为 libguestfs-tools 软件包的一部分进行安装。
virt-log- 用于列出 Linux 和 Windows 虚拟机日志文件的命令行工具。该工具安装在 Red Hat Enterprise Linux 7.1 以上,并作为 libguestfs 软件包的一部分。
virt-make-fs- 用于创建文件系统的命令行工具,该文件系统基于命令中 tar 存档或文件。这同
mkisofs和mksquashfs工具相似,但它可以产生普通文件系统类型,如 ext2、ext3、NTFS。其文件系统的大小可以等同或大于基础文件大小。此工具作为 libguestfs-tools 软件包的一部分进行装备。 virt-rescue- 命令行工具为不可启动的虚拟机和磁盘镜像提供救援 shell 和一些简单的恢复工具。它可以在任何 libvirt 可识别的虚拟机,或直接在磁盘映像上运行。此工具作为 libguestfs-tools 软件包的一部分进行安装。
警告
在正运行的虚拟机器上使用virt-rescue会引起虚拟机器的磁盘崩溃。virt-rescue设法阻止其自身在虚拟机器上运行,但不能涵盖所有情况。使用--ro(只读) 命令选项不会引发磁盘崩溃,但可能导致不正常及不稳定的结果。避免在运行中的虚拟机器上使用virt-rescue。 virt-resize- 用以调整虚拟机磁盘大小的命令行工具,该工具同时也用来调整或删除虚拟机器上的任意分区。它依靠复制客机映像进行工作,并使原始磁盘映像不被修改。此工具作为 libguestfs-tools 软件包的一部分进行安装。
重要
在正运行的虚拟机上使用virt-resize可导致不稳定结果。最好在尝试调整其大小前,关闭虚拟机器。 virt-sparsify- 使虚拟机磁盘(或磁盘镜像)自动精简配置的命令行工具。使用该工具可以将磁盘镜像里的可用空间转换为主机中的可用空间。
virt-sysprep- 有如下用途的命令行工具:重置、定制、或取消虚拟机器配置以为建立复制做准备。该工具作为 libguestfs-tools 软件包的一部分进行安装。
重要
虚拟机必须在运行virt-sysprep前关闭。为保护虚拟机的已有文件,在运行virt-sysprep前进行快照、复制或克隆磁盘。 virt-tar-in- 命令行存档工具,用来将未压缩的 tarball 拆解到虚拟机的磁盘映像,或指定的 libvirt 的域。该工具作为 libguestfs-tools 软件包的一部分安装。
警告
在即时虚拟机上使用virt-tar-in命令会造成虚拟机的磁盘损毁。虚拟机必须在使用该命令之前关闭。 virt-tar-out- 命令行存档工具,用来将虚拟机磁盘镜像目录打包到一个 tarball。该工具作为 libguestfs-tools 软件包的一部分安装.
virt-top- 与
top相似的命令行工具程序,显示与虚拟化域相关的数据。这个工具包括在同名的软件包 virt-top 之中。 virt-v2v- 具有如下用途的命令行工具:将虚拟机由外部管理程序转换,用以在由 libvirt 管理的 KVM、Red Hat Enterprise Linux OpenStack 平台以及 Red Hat Enterprise Virtualization 运行。目前,virt-v2v 可以转换运行在 Xen 和 VMware ESX 上的 Red Hat Enterprise Linux 和 Windows 客机。该 virt-v2v 工具安装在 Red Hat Enterprise Linux 7.1 以上版本中,并作为 libguestfs 软件包的一部分。
virt-viewer- 通过 VNC 和 SPICE 协议显示虚拟机器图形控制台的最小工具。该工具在其同名软件包中:virt-viewer。
virt-what- 外壳脚本检测程序是否在虚拟机器上运行。该工具包括在其同名的软件包中:virt-what。
virt-who- virt-who 软件包是 Red Hat Enterprise Linux 主机代理,用以查询客机 UUID 的 libvirt。它将数据传到本地授权服务器以发放证书。该工具包括在其同名软件包中:virt-who。
virt-win-reg- 具有如下用途的命令行工具:将 Windows 注册表项从一个 Windows 虚拟机中导出并合并,并且执行简单注册表操作。该工具作为 libguestfs-tools 软件包的一部分进行安装。
警告
在正运行的虚拟机器上使用virt-win-reg,会导致虚拟机器不可逆转的磁盘崩溃。virt-win-reg尝试阻止其在工作虚拟机器上运行,但不能涵盖所有情况。警告
修改 Windows 注册表这一操作的风险与生俱来,因为其格式刻意模糊且未被文件记录。更改注册表可以使系统无法启动,所以要保证您在使用--merge选项之前有一个可靠的备份。 virt-xml-validate- 验证 libvirt XML 文件与已发布 schema 相对应的命令行工具。该工具作为 libvirt-client 软件包的一部分进行安装。
第 5 章 Red Hat Enterprise Linux 7 虚拟化的快速指南
注意
5.1. 基本要求和安装
- 系统要求
- 在系统中实现虚拟化的最低配置要求是:
- 6 GB 可用磁盘空间;
- 2GB 内存。
- 虚拟化所需软件包
- 在使用虚拟化之前,电脑必须已经安装了虚拟化软件包。虚拟化软件包可以在主机安装进程中安装,或者在主机安装之后使用
yum命令和红帽客户门户。该部分讲述在可以正常工作的 Red Hat Enterprise Linux 7 系统中安装 KVM 虚拟机安装程序的步骤。注册后方能安装软件包。通过红帽订阅管理器注册,运行subscription-manager register命令并按提示操作。如果您还没有有效的红帽订阅,请访问红帽网上商店来获取。过程 5.1. 使用
yum安装虚拟软件包在 Red Hat Enterprise Linux上使用虚拟化,您需要至少qemu-kvm和qemu-img软件包。 这些软件包在红帽企业 Linux 主机系统上提供用户级 KVM 仿真器和磁盘映像管理器。- 用下列指令安装 qemu-kvm 和 qemu-img 软件包:
# yum install qemu-kvm qemu-img
- 用下列指令安装 virt-manager 软件包:
# yum install virt-manager
- 此外,按照本教程,下载 Red Hat Enterprise Linux 7 ISO 镜像到您的系统,来创建虚拟机操作系统。Red Hat Enterprise Linux ISO 文件可以在红帽客户门户上找到:https://access.redhat.com/downloads/。
5.2. 用虚拟机管理器部署虚拟机
5.2.1. 虚拟机管理器介绍

图 5.1. 虚拟机管理器界面
创建新的虚拟机:从此处开始创建一个新的虚拟机。
虚拟机:所有虚拟机(或客机)的清单。在创建一个虚拟机后,它就会在此列出。客机运行时,CPU 使用下的动态图像会显示客机 CPU 的使用情况。
从清单上选定虚拟机后,使用下列按钮来控制已选定虚拟机的状态:
打开:在新的窗口中打开客机虚拟机控制台和明细。
运行:启动虚拟机。
暂停:暂停虚拟机。
关闭虚拟机:关闭虚拟机。点击箭头显示一个下拉菜单,其中有几个关闭虚拟机的选项,包括重新启动、关机、强制重置、强制关闭并保存。
- 克隆:克隆虚拟机
- 迁移:把虚拟机迁移到另外一个主机。
- 删除:删除虚拟机。
5.2.2. 使用虚拟机管理器创建一个虚拟机
过程 5.2. 用虚拟管理器创建客机虚拟机
打开虚拟机管理器
从“”菜单和“”子菜单中启动“”应用。创建新虚拟机
点击键 (图 5.2 “创建新虚拟机键”) 打开 向导。
图 5.2. 创建新虚拟机键
指定名称和安装方式
输入虚拟机名并选定安装类型,安装虚拟机操作系统。虚拟机创建步骤第一步是选定名称和安装方式。虚拟机名可以包含下划线(_)、英文句号(.)和连字符(-)。
图 5.3. 命名虚拟机和选定安装方式
根据本教程,选定本地安装媒体(ISO 镜像)。该安装方式使用安装盘图像(例如.iso文檔)。 点击键继续。查找安装媒体
提供 ISO 的位置,客机虚拟机将从该 ISO 安装操作系统安装。例如, 在过程 5.1, “使用yum安装虚拟软件包”中查找已下载 ISO,通过使用提供现行存储路径。选定安装“”以及“”,确保选定 OS 类型与虚拟机相匹配。例如,在“”中从下拉中选定 Linux ,并在“”中从下拉中选定 Red Hat Enterprise Linux 7,点击键。
图 5.4. 本地 ISO 镜像安装
配置内存和 CPU
选定分配给虚拟机的内存数量和 CPU 数。向导显示可用于分配的 CPU 数和内存。按照本教程,选定默认设置并点击键。
图 5.5. 配置 CPU 及内存
配置存储设备
为客机虚拟机分配存储空间。向导会显示存储选项,包括将虚拟机存储在主机的什么位置。按照本教程,选定默认设置并点击键。
图 5.6. 配置存储
最终配置
验证虚拟机设置并点击键。虚拟机管理器将会用选定硬件设置创建虚拟机 。
图 5.7. 验证配置
注意
5.2.3. 浏览虚拟机

图 5.8. 客机虚拟机控制台
显示图形控制台:这显示了虚拟机显示器上的内容。虚拟机从控制台上可以和实体机用相同方式操作。
显示虚拟硬件细节:该窗口显示客机正在使用的虚拟硬件细节,提供基本系统细节、性能、处理器、内存和引导设置,以及系统虚拟设备细节的概述。
- 下列键控制虚拟机的状态:
执行:打开虚拟机。
暂停:暂停虚拟机。
关闭虚拟机:关闭虚拟机。点击箭头会出现一个下拉菜单,其中有几个选项可用于关闭虚拟机,包括重新启动、关机、强制复位、强制关闭、并保存。
全屏:转换虚拟机至全屏显示。
发送键:向虚拟机发送组合键如 Ctrl+Alt+Backspace、Ctrl+Alt+Delete、 Ctrl+Alt+F1、PrintScreen 等。
注意
附录 A. 修订历史
| 修订历史 | ||||||||
|---|---|---|---|---|---|---|---|---|
| 修订 1.0-35.2 | Sat Feb 20 2016 | |||||||
| ||||||||
| 修订 1.0-35 | Wed Feb 25 2015 | |||||||
| ||||||||
| 修订 1.0-34 | Wed Feb 18 2015 | |||||||
| ||||||||
| 修订 1.0-33 | Tue Feb 17 2015 | |||||||
| ||||||||
| 修订 1.0-31 | Tue Jan 13 2015 | |||||||
| ||||||||
| 修订 1.0-30 | Mon Jan 12 2015 | |||||||
| ||||||||
| 修订 1.0-29 | Mon Dec 08 2014 | |||||||
| ||||||||
| 修订 1.0-27 | Fri Dec 05 2014 | |||||||
| ||||||||
| 修订 1.0-25 | Tue Nov 25 2014 | |||||||
| ||||||||
| 修订 1.0-24 | Wed July 16 2014 | |||||||
| ||||||||
| 修订 1.0-22 | Tues June 3 2014 | |||||||
| ||||||||
| 修订 1.0-21 | Tues June 3 2014 | |||||||
| ||||||||
| 修订 1.0-20 | Tues May 20 2014 | |||||||
| ||||||||
| 修订 1.0-19 | Mon May 19 2014 | |||||||
| ||||||||
| 修订 1.0-18 | Fri May 9 2014 | |||||||
| ||||||||
| 修订 1.0-14 | Tues May 6 2014 | |||||||
| ||||||||
| 修订 1.0-12 | Mon April 28 2014 | |||||||
| ||||||||
| 修订 1.0-10 | Tues April 16 2014 | |||||||
| ||||||||
| 修订 1.0-09 | Mon April 14 2014 | |||||||
| ||||||||
| 修订 1.0-08 | Wed April 9 2014 | |||||||
| ||||||||
| 修订 1.0-07 | Mon April 7 2014 | |||||||
| ||||||||
| 修订 1.0-06 | Thurs April 3 2014 | |||||||
| ||||||||
| 修订 1.0-04 | Wed April 2 2014 | |||||||
| ||||||||
| 修订 1.0-03 | Wed April 2 2014 | |||||||
| ||||||||
| 修订 1.0-02 | Mon March 31 2014 | |||||||
| ||||||||
| 修订 0.1-23 | Mon March 17 2014 | |||||||
| ||||||||
| 修订 0.1-22 | Wed March 12 2014 | |||||||
| ||||||||
| 修订 0.1-21 | Thurs Feb 27 2014 | |||||||
| ||||||||
| 修订 0.1-20 | Fri Feb 7 2014 | |||||||
| ||||||||
| 修订 0.1-19 | Mon Jan 13 2014 | |||||||
| ||||||||
| 修订 0.1-18 | Thurs Dec 12 2013 | |||||||
| ||||||||
| 修订 0.1-17 | Fri Dec 6 2013 | |||||||
| ||||||||
| 修订 0.1-16 | Wed Dec 4 2013 | |||||||
| ||||||||
| 修订 0.1-15 | Thurs Nov 28 2013 | |||||||
| ||||||||
| 修订 0.1-14 | Wed Nov 27 2013 | |||||||
| ||||||||
| 修订 0.1-13 | Thurs Oct 17 2013 | |||||||
| ||||||||
| 修订 0.1-12 | Wed Oct 2 2013 | |||||||
| ||||||||
| 修订 0.1-11 | Mon June 10, 2013 | |||||||
| ||||||||
| 修订 0.1-10 | Mon May 6, 2013 | |||||||
| ||||||||
| 修订 0.1-7 | Mon Apr 29 2013 | |||||||
| ||||||||
| 修订 0.1-6 | Fri Apr 26 2013 | |||||||
| ||||||||
| 修订 0.1-3 | Thurs Jan 31 2013 | |||||||
| ||||||||
| 修订 0.1-2 | Wed Jan 23 2013 | |||||||
| ||||||||
