提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
前言
1. 虚拟化技术概述
- VMX支持:说明VMX是CPU虚拟化的功能,只有物理机支持,虚拟机无法使用。
- 软件虚拟化:介绍QEMU作为软件虚拟化选项,强调其性能不足,适合测试环境。
2. 企业常用虚拟化解决方案
vSphere
- 每台物理机安装ESXi(基于Linux),过程简单,只需设置管理密码。
- vCenter是管理平台,安装较复杂,需要配置数据库和网络设置,提供集中管理、监控和自动化功能。
- 依赖安装:Windows环境下需安装vCenter Server,通常需要配置外部数据库(如PostgreSQL、Oracle)。
KVM
- KVM集成在Linux内核中,需支持硬件虚拟化的CPU。
- QEMU负责磁盘、声卡等设备的虚拟化,Libvirt提供命令行和API接口,简化管理。
3. KVM组件与安装
- 关键软件包:
qemu-kvm
:主虚拟化组件。libvirt-daemon
:管理守护进程。libvirt-client
:命令行工具。libvirt-daemon-driver-qemu
:QEMU驱动。
4. 创建Ubuntu虚拟机
- 创建虚拟硬盘:
sudo qemu-img create -f qcow2 /var/lib/libvirt/images/ubuntu-vm.qcow2 20G
- 准备XML配置文件(
ubuntu-vm.xml
):<domain type='kvm'> <name>ubuntu-vm</name> <memory unit='KiB'>2048000</memory> <vcpu placement='static'>2</vcpu> <os> <type arch='x86_64' machine='pc-i440fx-2.9'>hvm</type> <boot dev='cdrom'/> </os> <devices> <disk type='file' device='disk'> <driver name='qemu' type='qcow2'/> <source file='/var/lib/libvirt/images/ubuntu-vm.qcow2'/> <target dev='vda' bus='virtio'/> </disk> <disk type='file' device='cdrom'> <driver name='qemu' type='raw'/> <source file='/path/to/ubuntu.iso'/> <target dev='hdc' bus='ide'/> </disk> <interface type='network'> <source network='default'/> <model type='virtio'/> </interface> </devices> </domain>
- 定义并启动虚拟机:
virsh define ubuntu-vm.xml virsh start ubuntu-vm
5. virsh
virsh 是一个命令行工具,用于与libvirt(Linux虚拟化管理库)进行交互,管理虚拟机(VM)和相关资源。它提供了管理虚拟机生命周期、网络、存储和快照等功能。
- 主要用途:
管理虚拟机生命周期:启动、暂停、重启、关闭虚拟机。
虚拟机配置:修改虚拟机的CPU、内存、磁盘等资源配置。
管理快照:创建、删除、恢复虚拟机快照。
网络和存储管理:管理虚拟网络、虚拟交换机、虚拟磁盘等资源。
连接远程虚拟机主机:通过 libvirt 可以连接本地或远程的虚拟化主机。
- 基本命令:
- 查看虚拟机列表:
virsh list
- 查看所有虚拟机:
virsh list --all
- 启动虚拟机:
virsh start <虚拟机名称>
- 关闭虚拟机:
virsh shutdown <虚拟机名称>
- 强制关闭虚拟机(非必要不要这么做):
virsh destroy <虚拟机名称>
- 重新启动虚拟机:
virsh reboot <虚拟机名称>
- 查看虚拟机列表:
- 虚拟机管理:
- 定义虚拟机(基于XML文件):
virsh define <xml文件路径>
- 删除虚拟机:
virsh undefine <虚拟机名称>
- 克隆虚拟机:
virsh clone --original <原虚拟机名称> --name <新虚拟机名称>
- 定义虚拟机(基于XML文件):
- 查看和监控:
- 查看虚拟机状态:
virsh dominfo <虚拟机名称>
- 查看虚拟机的 CPU 使用情况:
virsh cpu-stats <虚拟机名称>
- 查看虚拟机的内存使用情况:
virsh dommemstat <虚拟机名称>
- 查看虚拟机状态:
- 网络和存储:
- 列出网络接口:
virsh net-list --all
- 列出存储池:
virsh pool-list --all
- 列出网络接口:
- 控制台访问:
- 连接到虚拟机控制台:
virsh console <虚拟机名称>
- 连接到虚拟机控制台:
- 导入和导出:
- 导出虚拟机:
virsh dumpxml <虚拟机名称> > <文件名>.xml
- 从XML文件导入虚拟机:
virsh define <文件名>.xml
- 导出虚拟机:
5. qemu-img
qemu-img 是一个与QEMU虚拟化相关的工具,主要用于创建、转换、修改和管理虚拟机磁盘镜像文件。它不直接管理虚拟机的运行状态,而是针对虚拟机的磁盘操作。
- 主要用途:
创建虚拟磁盘镜像:支持多种磁盘格式(如 qcow2、raw、vmdk)。
转换镜像格式:在不同磁盘镜像格式之间转换(如 qcow2 转 raw)。
调整镜像大小:增加或减少虚拟磁盘镜像的大小。
校验镜像文件:检查镜像文件的完整性。
压缩磁盘镜像:减少磁盘镜像占用的空间。
- 常见镜像类型:
常见镜像类型(虚拟化用)有 RAW 和 QCOW2。 - 基本命令:
- 创建指定格式和大小的虚拟磁盘文件:
qemu-img create -f <格式> <镜像文件名> <大小>
- 查看磁盘镜像文件的详细信息:
qemu-img info <镜像文件>
- 转换镜像文件为其他格式:
qemu-img convert -f <源格式> -O <目标格式> <源镜像> <目标镜像>
- 扩展现有镜像文件的大小:
qemu-img resize <镜像文件> <新大小>
- 校验镜像文件是否有错误:
qemu-img check <镜像文件>
- 压缩镜像以节省空间(仅限 qcow2 格式):
qemu-img convert -O qcow2 -c <源镜像> <目标镜像>
- 压缩镜像以节省空间(仅限 qcow2 格式):
qemu-img convert -O qcow2 -c <源镜像> <目标镜像>
- 将快照合并回基础镜像:
qemu-img commit <镜像文件>
- 删除镜像中未使用的部分(仅限 qcow2 格式):
qemu-img amend -f qcow2 --shrink <镜像文件>
- 导入外部 ISO 或 RAW 文件:
qemu-img dd if=<输入文件> of=<镜像文件>
- 创建指定格式和大小的虚拟磁盘文件:
6.区别
virsh 和 qemu-img 都与虚拟化相关,但它们的作用、管理对象和使用场景有明显的区别。以下是它们的主要区别:
1. 作用层次不同:
virsh:
用于管理虚拟机的生命周期和相关的虚拟化资源,如虚拟网络、存储池等。
它主要依赖于libvirt,支持多种虚拟化技术(如 KVM、Xen、QEMU、LXC 等)。
你可以使用 virsh 来启动、暂停、重启虚拟机,管理虚拟网络和存储等。
qemu-img:
专注于虚拟机磁盘镜像的管理,如创建、转换、扩展和压缩虚拟磁盘镜像。
它直接与磁盘镜像文件(例如 .qcow2、.raw、.vmdk)打交道,而不涉及虚拟机的运行或资源管理。
qemu-img 并不管理虚拟机的状态,而是管理虚拟机使用的磁盘文件。
2. 管理对象不同:
virsh:
管理的是整个虚拟化环境,包括虚拟机(VM)、虚拟网络、存储池等资源。
它可以启动、暂停、停止、删除虚拟机,并进行快照、迁移等操作。
qemu-img:
管理的是虚拟机磁盘镜像文件。它可以创建新的磁盘镜像文件、调整镜像大小、检查镜像的完整性,以及在不同的镜像格式之间转换。
3. 依赖工具不同:
virsh:
依赖于libvirt,这是一个虚拟化 API,可以用于控制 KVM、Xen、QEMU 等多个虚拟化平台。virsh 作为 libvirt 的命令行接口,提供管理虚拟机的高层次功能。
virsh 管理的是运行中的虚拟机和虚拟化平台的资源。
qemu-img:
依赖于QEMU,这是一个开源的仿真器和虚拟化工具。qemu-img 是一个专门用于操作磁盘镜像文件的工具,而不是虚拟机本身的管理工具。
qemu-img 管理的是虚拟机磁盘镜像,它不需要虚拟机运行。
4. 使用场景不同:
virsh:
适用于管理虚拟化环境中虚拟机的生命周期,比如启动、关闭、快照和迁移等。
例如,你使用 virsh 启动一个虚拟机,监控其状态或修改虚拟机的配置。
qemu-img:
适用于管理虚拟机使用的磁盘镜像文件。典型场景包括:创建虚拟机磁盘、转换磁盘格式、压缩镜像、扩展磁盘大小等。
例如,你需要将一个虚拟机磁盘从 qcow2 格式转换为 raw 格式时,会使用 qemu-img。
5. 例子对比:
virsh 的例子:
启动一个虚拟机:
virsh start my-vm
停止一个虚拟机:
virsh shutdown my-vm
查看所有虚拟机状态:
virsh list --all
qemu-img 的例子:
创建一个 10GB 大小的 qcow2 格式虚拟磁盘:
qemu-img create -f qcow2 mydisk.qcow2 10G
将 qcow2 格式磁盘转换为 raw 格式:
qemu-img convert -f qcow2 -O raw mydisk.qcow2 mydisk.raw
扩展磁盘大小到 20GB:
qemu-img resize mydisk.qcow2 20G
总结:
virsh 是一个管理虚拟化平台和虚拟机生命周期的工具,主要用于管理虚拟机的运行状态、配置和资源分配。
qemu-img 是一个专门用于管理虚拟机磁盘镜像的工具,侧重于磁盘的创建、转换和调整。
它们的功能互补,virsh 处理虚拟机的高层管理,而 qemu-img 则负责底层的磁盘管理。