🦁KVM

KVM 是 Kernel-based Virtual Machine 的简称,KVM 要求 CPU 支持硬件虚拟化技术(例如Intel VT或AMD-V),是Linux下全虚拟化解决方案,KVM 由处于内核态的 KVM 模块kvm.ko和用户态的 QEMU 两部分构成。

内核模块kvm.ko实现了 CPU 和内存虚拟化等决定关键性能和核心安全的功能,并向用户空间提供了使用这些功能的接口,QEMU 利用 KVM 模块提供的接口来实现设备模拟、I/O 虚拟化和网络虚拟化等。

  • KVM:负责CPU、内存等,由kvm_xxx.ko实现,工作于hypervisor,在用户空间通过ioctl()系统调用来完成KVM创建、启动等工作。

  • QEMU:负责模拟IO设备、网卡、硬盘等,qemu-kvm进程工作于用户空间,用于实现一个虚拟机实例

  • Libvirt:提供统一API,守护进程libvirtd和相关工具,如:virsh、virt-manager;

创建Linux虚拟机

#验证开启虚拟化
grep -Em 1 "vmx|svm" /proc/cpuinfo
 
#安装
yum -y install qemu-kvm libvirt virt-manager virt-install virt-viewer
systemctl start --now libvirtd
 
#安装虚拟机Web管理方式
yum -y install cockpit
systemctl enable --now cockpit
 
#创建虚拟磁盘
qemu-img create -f qcow2 /var/lib/libvirt/images/centos7.qcow2 20G
 
#创建虚拟机
virt-install --virt-type kvm --name centos7 --ram 1024 --vcpus 1
--cdrom=/data/iso/CentOS-7-x86_64-DVD-2009.iso --disk
path=/var/lib/libvirt/images/centos7.qcow2 --network network=default --graphics
vnc,listen=0.0.0.0 --noautoconsole --os-variant=centos7.0
 
#需要在图形化界面打开init 5
export DISPLAY=10.0.0.1:0.0
virt-manager
 
#查看宿主机进程
ps aux|grep qemu-kvm

注意:

yum -y install cockpit

Centos7没有虚拟化管理功能,只支持Centos8

KVM管理工具:

  • libvirt

虚拟化管理工具和应用程序接口,通过libvirt调用KVM创建虚拟机,libvirt是kvm能用的访问API,不但能管理KVM还能管理Vmware、Xen、VirtualBox等虚拟化方案。

libvirt是一个C语言库,但也被其他语言的应用程序所应用,libvirt被封装为libvirtmod类或包。libvirtmod的实现与其C/C++语言的相应实现在语法和功能方面紧密相关。

  • virsh

管理KVM虚拟化的命令行工具,Virsh是一个使用C语言编写调用Libvirt API的虚拟化管理命令行工具。

  • Virt-manager

virt-manager是一个虚拟化图形软件,底层也是调用libvirt API来完成对虚拟机的操作。

常用命令

#查看虚拟机
virsh list --all
 
#启动虚拟机
virsh start centos7
 
#关机
virsh shutdown centos7
 
#查看虚拟机vnc端口号
virsh vncdisplay domain
 
利用模板创建新的虚拟机
#复制镜像
cp centos7.qcow2 centos7-1.qcow2
 
#导入重命名
virt-install --virt-type kvm --name centos7-1 --ram 1024 --vcpus 1 --disk
bus=virtio,path=/var/lib/libvirt/images/centos7-1.qcow2 --network
network=default,model=virtio --graphics vnc,listen=0.0.0.0 --noautoconsole
--os-variant=centos7.0 --autostart --boot hd

管理虚拟机

半虚拟化驱动Virtio

virtio 是半虚拟化的解决方案,是半虚拟化 Hypervisor 的一组通用 I/O 设备的抽象。提供了一套上层应用与各 Hypervisor 虚拟化设备(KVM、Xen、VMware 等)之间的通信框架和编程接口,客户机需要知道自己运行在虚拟化环境中,进而根据 Virtio 标准和 Hypervisor 协作,从而提高 I/O 性能。

Windows需要单独安装驱动,Linux自带virtio驱动。

创建Windows虚拟机

#创建虚拟磁盘
qemu-img create -f qcow2 /var/lib/libvirt/images/Windows2008.qcow2 60G
 
#下载virtio驱动,否则无法识别硬盘。
https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/archive-virtio/virtio-win-0.1.126-2/
 
#创建windows虚拟加并加载virtio驱动
virt-install --virt-type kvm --name Win_2008 --memory 1024 --vcpus=1
--os-variant=win2k8r2 --cdrom=/data/iso/cn_windows_server_2008_r2.iso --disk
path=/var/lib/libvirt/images/Windows2008.qcow2,format=qcow2,bus=virtio --disk
path=/data/iso/virtio-win-0.1.126_amd64.vfd,device=floppy --network
bridge=virbr0,model=virtio --graphics vnc,listen=0.0.0.0 --noautoconsole --autostart

安装时选择高级,找到这2个驱动就能识别出硬盘,安装其它Windows都是相同方法

安装 PCI内存管理驱动

#下载镜像
https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/archive-virtio/virtio-win-0.1.126-2/virtio-win-0.1.126.iso

找到对应驱动即可。

QEMU guest agent

主要实现是Host哥呢主使用libivrt向VM发送命令。

#Linux安装QEMU guest agent
yum -y install qemu-guest-agent
 
#Windows加载virtio驱动光盘里
#列出所有虚拟机
virsh list --all
 
#启动虚拟机
virsh start centos8 或者写编号
 
#强制关机
virsh destroy 1
 
virsh shutdown --mode=agent #关闭操作系统
virsh snapshot-create -quiesce #创建快照
virsh domtime #获得虚拟机上的时间
virsh domifaddr --source agent #查询虚拟机的IP
virsh set-user-password --user administrator --password=123456 --domain 8
#设置虚拟机用户的密码
每个虚拟机配置文件存放于:/etc/libvirt/qemu

离线工具

不启动虚拟机直接访问磁盘

· 观看下载虚拟磁盘中的文件

· 编辑或上传文件到虚拟机磁盘

#查看虚拟机磁盘文件
virsh domblklist centos7
 
#只读方式打开虚拟磁盘
guestfish --ro -a /var/lib/libvirt/images/centos7.qcow2
><fs> run #扫描
><fs> list-filesystems #列出文件系统
><fs> mount /dev/centos/root / #挂载目录
><fs> cat /etc/shadow
 
#实现自动探查后自动挂载
guestfish --ro -a /var/lib/libvirt/images/centos7.qcow2 -i

Last updated