KVM虚拟化技术介绍以及相关操作
时间:2022-10-18 10:30:00
KVM功能是扩展虚拟化CPU为硬件基础(如Intel-VT,AMD-V),利用CPU虚拟化技术。
KVM提供虚拟化功能作为核心模块。如果系统需要虚拟化功能,KVM模块可以被linux内核按需动态加载到内存运行。如果不需要,KVM该模块可动态卸载。
QEMU是一套模拟CPU开源软件。KVM作为一个内核模块,可以通过QEMU使用处理器提供的模拟方法。KVM它提供了一个模拟(虚拟)硬件层,虚拟机在模拟硬件层上运行。

-
在所谓的kvm实际上,技术中有两件事需要应用: qemu kvm
-
kvm负责cpu虚拟化 实现了内存虚拟化cpu以及内存的虚拟化,但是kvm其他设备不能模拟;
-
qemu是模拟Io设备(网卡,磁盘,kvm加上qemu之后,服务器可以真正虚拟化。
-
因为用了以上两个东西,一般都叫。qemu-kvm。
-
libvirt则是调用kvm管理采用虚拟化技术界面,7ibvirt管理方便.
[root@localhost ~]# vim /etc/selinux/config # This file controls the state of SELinux on the system. # SELINUX= can take one of these three values: #enforcing - SELinux security policy is enforced. #permissive - SELinux prints warnings instead of enforcing. #disabled - No SELinux policy is loaded. SELINUX=disabled # SELNUXTYPE= can take one of three values:
# targeted - Targeted processes are protected,
# minimum - Modification of targeted policy. Only selected processes are protected.
# mls - Multi Level Security protection.
SELINUXTYPE=targeted
[root@localhost qemu]# cd /var/lib/libvirt/images/
[root@localhost images]# cp vm1.qcow2 vm2.img
[root@localhost images]# ll
总用量 10487812
-rw-------. 1 root root 5369757696 5月 2 11:11 vm1.qcow2
-rw------- 1 root root 5369757696 5月 2 11:19 vm2.img
[root@localhost ~]# cd /etc/libvirt/qemu/
[root@localhost qemu]# cp vm1.xml vm2.xml
[root@localhost qemu]#
[root@localhost images]# virsh define /etc/libvirt/qemu/vm2.xml
定义域 vm2(从 /etc/libvirt/qemu/vm2.xml)
net.ipv4.ip_forward = 1 #添加这一行
[root@localhost images]# sysctl -p
net.ipv4.ip_forward = 1
[root@localhost images]#
[root@localhost images]# vim /etc/libvirt/qemu/vm1.xml #添加一下信息
[root@localhost images]# qemu-img create -f qcow2 /var/lib/libvirt/images/vm1-1.qcow2 2G
Formatting '/var/lib/libvirt/images/vm1-1.qcow2', fmt=qcow2 size=2147483648 encryption=off cluster_size=65536 lazy_refcounts=off
[root@localhost images]#
[root@localhost ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sr0 11:0 1 1024M 0 rom
vda 252:0 0 5G 0 disk
├─vda1 252:1 0 1G 0 part /boot
└─vda2 252:2 0 4G 0 part
├─centos-root 253:0 0 3.5G 0 lvm /
└─centos-swap 253:1 0 512M 0 lvm [SWAP]
vdb 252:16 0 2G 0 disk
[root@localhost ~]#
-
KVM必须要配置一个目录当作它存储磁盘镜像(存储卷)的目录,我们称这个为存储池
[root@localhost ~]# virsh pool-define-as vmdisk --type dir --target /data/vmfs
定义池 vmdisk
[root@localhost ~]#
[root@localhost ~]# virsh pool-list --all
名称 状态 自动开始
-------------------------------------------
default 活动 是
root 活动 是
vmdisk 不活跃 否
[root@localhost ~]# virsh pool-start vmdisk
池 vmdisk 已启动
[root@localhost ~]# virsh pool-autostart vmdisk
池 vmdisk 标记为自动启动
[root@localhost ~]# virsh pool-list --all
名称 状态 自动开始
-------------------------------------------
default 活动 是
root 活动 是
vmdisk 活动 是
[root@localhost ~]# qemu-img create -f qcow2 /var/lib/libvirt/test.qcow2 3G
Formatting '/var/lib/libvirt/test.qcow2', fmt=qcow2 size=3221225472 encryption=off cluster_size=65536 lazy_refcounts=off
[root@localhost ~]#
[root@localhost ~]# qemu-img create -f raw /var/lib/libvirt/test.img 2G
Formatting '/var/lib/libvirt/test.img', fmt=raw size=2147483648
-
当虚拟机无法启动,而磁盘文件没有损坏时,可以将虚拟机的主分区挂载,拷贝重要信息出来
-
使用Libguestfs,首先需要使用Libvirt。Libvirt是一个管理接口,可以和KVM、Xen和其他一些基于Liunx的虚拟机相互连接。
-
Libguestfs的功能更加强大,可以打开Windows虚拟机上的文件。但是首先你需要将虚拟机迁移到libguestfs可用的环境当中,也就是Linux环境。
[root@localhost ~]# virt-df -h -d vm1
文件系统 大小 已用空间 可用空间 使用百分比%
vm1:/dev/sda1 1014M 100M 914M 10%
vm1:/dev/centos/root 3.5G 974M 2.5G 28%
[root@localhost ~]#
[root@localhost ~]# virt-filesystems -d vm1
/dev/sda1
/dev/centos/root
[root@localhost ~]# guestmount -d vm1 -m /dev/centos/root --rw /mnt
[root@localhost ~]# df -Th
文件系统 类型 容量 已用 可用 已用% 挂载点
devtmpfs devtmpfs 4.8G 0 4.8G 0% /dev
tmpfs tmpfs 4.8G 0 4.8G 0% /dev/shm
tmpfs tmpfs 4.8G 13M 4.8G 1% /run
tmpfs tmpfs 4.8G 0 4.8G 0% /sys/fs/cgroup
/dev/mapper/centos-root xfs 44G 20G 25G 45% /
/dev/sda1 xfs 1014M 213M 802M 21% /boot
tmpfs tmpfs 967M 0 967M 0% /run/user/0
/dev/fuse fuse 3.5G 1007M 2.6G 29% /mnt
[root@localhost ~]# cd /mnt
[root@localhost mnt]# ls
bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
[root@localhost ~]# guestunmount /mnt/
[root@localhost ~]# cd /mnt/
[root@localhost mnt]# ls
[root@localhost mnt]#
[root@localhost ~]# virsh list --all
Id 名称 状态
----------------------------------------------------
- vm1 关闭
- vm2 关闭
[root@localhost ~]# virsh dumpxml vm1
vm1
6b10e3d2-7cb5-4827-8f3e-efe33703e5c1
1048576
1048576
1
hvm
方法一
[root@localhost ~]# virsh shutdown vm1
域 vm1 被关闭
方法二
[root@localhost ~]# virsh destroy vm1
[root@localhost ~]# ll /etc/libvirt/qemu
总用量 16
drwx------. 3 root root 42 5月 1 17:08 networks
-rw------- 1 root root 4590 5月 2 11:39 vm2.xml
-rw-r--r-- 1 root root 4642 5月 3 11:52 vm6.xml
[root@localhost ~]#
[root@localhost ~]# qemu-img info /var/lib/libvirt/images/vm2.img image: /var/lib/libvirt/images/vm2.img file format: qcow2 virtual size: 5.0G (5368709120 bytes) disk size: 5.0G cluster_size: 65536 Snapshot list: ID TAG VM SIZE DATE VM CLOCK 1 vm2.snap 0 2022-05-03 14:37:36 00:00:00.000 Format specific information: compat: 1.1 lazy refcounts: true [root@localhost ~]#
[root@localhost ~]# virsh snapshot-list vm2
名称 生成时间 状态
------------------------------------------------------------
vm2.snap 2022-05-03 14:37:36 +0800 shutoff
[root@localhost ~]#
[root@localhost qemu]# virsh define vm2.xml
定义域 vm2(从 vm2.xml)
[root@localhost qemu]#
[root@localhost qemu]# ll /var/lib/libvirt/images/ -h
总用量 11G
-rw-r--r-- 1 root root 9.1K 5月 2 11:58 route
-rw-r--r-- 1 root root 193K 5月 2 12:43 vm1-1.qcow2
-rw-------. 1 root root 5.1G 5月 3 13:29 vm1.qcow2
-rw-r--r-- 1 root root 193K 5月 3 15:07 vm2-1.qcow2
-rw-r--r-- 1 qemu qemu 2.0G 5月 3 14:54 vm2-1.raw
-rw------- 1 qemu qemu 5.1G 5月 3 15:07 vm2.img
[root@localhost qemu]#
[root@localhost qemu]# #查看是否转成功
[root@localhost images]# qemu-img info vm2-1.qcow2
image: vm2-1.qcow2
file format: qcow2
virtual size: 2.0G (2147483648 bytes)
disk size: 196K
cluster_size: 65536
Format specific information:
compat: 1.1
lazy refcounts: false
[root@localhost images]#
[root@localhost images]# vim /etc/libvirt/qemu/vm2.xml
[root@localhost images]# virsh snapshot-list vm2
名称 生成时间 状态
------------------------------------------------------------
vm2.snap 2022-05-03 14:37:36 +0800 shutoff
vm2.snap2 2022-05-03 15:34:11 +0800 running
vm2.snap3 2022-05-03 15:44:07 +0800 running
[root@localhost images]#
[root@localhost images]# virsh snapshot-list vm2
名称 生成时间 状态
------------------------------------------------------------
vm2.snap 2022-05-03 14:37:36 +0800 shutoff
vm2.snap2 2022-05-03 15:34:11 +0800 running
[root@localhost images]#
[root@localhost images]# brctl show
bridge name bridge id STP enabled interfaces
virbr0 8000.5254000fa76a yes virbr0-nic
vnet0
[root@localhost images]# brctl delif virbr0 vnet0
[root@localhost images]# brctl show
bridge name bridge id STP enabled interfaces
virbr0 8000.5254000fa76a yes virbr0-nic
[root@localhost images]#
[root@localhost images]# brctl addif virbr0 vnet0
[root@localhost images]# brctl show
bridge name bridge id STP enabled interfaces
virbr0 8000.5254000fa76a yes virbr0-nic
vnet0
[root@localhost images]#
DEVICE=br0
ONBOOT="yes"
BOOTPROTO=static
DEFROUTE=yes
IPADDR=192.168.124.225
GATEWAY=192.168.126.2
NETMASK=255.255.255.0
DNS1=192.168.0.1
DNS2=8.8.8.8