虚拟化
虚拟化是一种资源管理技术,在虚拟化系统中,硬件资源可以被抽象和分割成多个虚拟的实体用于支持多个操作系统,多个操作系统可以共享所有的实体硬件资源,从而达到物理资源的最大化利用。
Virtual Machine Motior(VMM)
,虚拟机监控器,也叫Hypervisor
,向下管理实际的物理资源,向上给不同的虚拟机提供逻辑资源;Virtual Machine(VM)
,虚拟机可以根据自己的选择运行不同的OS(Guest OS),它会认为自己独享硬件;
QEMU 本身支持全虚拟化和半虚拟化:
- 全虚拟化:QEMU 模拟所有的硬件,包括 CPU、内存、I/O 设备等。这样做的好处是可以在不支持虚拟化的硬件上运行虚拟机,但性能较低。
- 半虚拟化:如果结合 KVM(Kernel-based Virtual Machine)来使用,QEMU 能利用 CPU 的虚拟化扩展指令(比如 Intel 的 VT-x 或 AMD 的 AMD-V),从而大幅提高虚拟机的性能。
QEMU
QEMU(Quick Emulator)是一个开源的虚拟化平台,它可以模拟各种硬件设备和 CPU 架构,从而在一台物理机器上运行多个操作系统。
QEMU本质上完成的工作是二进制的翻译,翻译过程:将Guest代码指令
翻译成TCG(Tiny Code Generator)中间代码
,最终翻译成Host架构支持的代码指令
。
举例:比如Guest OS运行时,APP和OS都认为自己是运行在ARM64中,执行文件也都是交叉编译器生成的,我们都知道不同的处理器架构,指令集都不一样,ARM上运行的程序放置到X86运行是无法执行的,Qemu的出现就可以解决这个问题,硬生生转换翻译过去;
但是纯软件行为来翻译指令,显然是一件很低效的事情,硬件虚拟化的支持可以提高整体的性能,硬件虚拟化指处理器本身提供能力来让客户机指令运行,提升性能需要KVM
KVM
KVM是linux内核的模块,它需要CPU的支持,采用硬件辅助虚拟化技术Intel-VT,AMD-V,Guest OS的CPU指令不用再经过Qemu转译,直接运行,大大提高了速度,KVM通过/dev/kvm暴露接口,用户态程序可以通过ioctl函数来访问这个接口
Libvirt
Libvirt 是一个虚拟化管理层,它提供了一个抽象的 API,用来管理不同的虚拟化平台(包括 QEMU/KVM)。Libvirt 通过 virsh
命令行工具、libvirt API 或图形化管理工具(如 virt-manager)来帮助用户管理虚拟机。
Libvirt 提供了一层简化管理虚拟机的接口,你可以通过它做以下事情:
- 创建、启动、停止、删除虚拟机
- 管理虚拟机的存储卷、网络接口、快照等
- 与 QEMU/KVM、Xen、LXC 等虚拟化后端进行交互
虚拟机搭建
检查
- virsh版本
[root@jcjg-host-109 /etc/libvirt/qemu]# virsh -V
Virsh command line tool of libvirt 6.0.0
See web site at libvirt.org/
Compiled with support for:
Hypervisors: QEMU/KVM ESX Test
Networking: Remote Network Bridging Interface netcf Nwfilter VirtualPort
Storage: Dir Disk Filesystem SCSI Multipath iSCSI LVM RBD Gluster
Miscellaneous: Daemon Nodedev SELinux Secrets Debug DTrace Readline
- 检查linux系统是否加kvm模块
[root@jcjg-host-109 /root]# lsmod | grep kvm
kvm_intel 315392 0
kvm 847872 1 kvm_intel
irqbypass 16384 1 kvm
//检查KVM是否启用 你可以使用以下命令来检查你的系统是否支持KVM
[root@jcjg-host-109 /root]# egrep -c '(vmx|svm)' /proc/cpuinfo
128
- 列出所有虚拟机
[root@jcjg-host-109 /root]# virsh list --all
Id Name State
--------------------------------
- ctyunos-2.0.1 shut off
- ctyunos-sdh shut off
- 查看虚拟机的详细信息,包括 CPU、内存、磁盘、网络等信息
[root@jcjg-host-109 /root]# virsh dominfo ctyunos-2.0.1
Id: -
Name: ctyunos-2.0.1
UUID: 719c96bf-d35e-4064-bd45-ef8724fabd5e
OS Type: hvm
State: shut off
CPU(s): 32
Max memory: 16777216 KiB
Used memory: 16777216 KiB
Persistent: yes
Autostart: disable
Managed save: no
Security model: none
Security DOI: 0
#virsh dumpxml ctyunos-2.0.1
- 查看系统中有哪些存储池
存储池的配置文件位置:存储池的定义文件通常保存在 /etc/libvirt/storage/ 目录下
[root@jcjg-host-109 /root]# virsh pool-list --all
Name State Autostart
------------------------------------
ctyunos active yes
ctyunos-vm inactive yes
iso active yes
iso-1 active yes
vm active yes
vm-cy2 active yes
zengj active yes
virsh vol-list
命令用于列出某个 存储池 中的所有卷(即虚拟机磁盘文件),就是看文件夹里的文件
[root@jcjg-host-109 /root]# virsh vol-list vm-cy2
Name Path
---------------------------------------------------------------
ctyunos-2.0.1.qcow2 /home/zengj/vm-cy2/ctyunos-2.0.1.qcow2
[root@jcjg-host-109 /root]# virsh vol-list vm
Name Path
---------------------------------------------------
data_disk.qcow2 /home/zengj/vm/data_disk.qcow2
nohup.out /home/zengj/vm/nohup.out