KVM(Kernel-based Virtual Machine)是一个基于Linux内核的开源虚拟化解决方案,它允许在单个物理服务器上运行多个虚拟机。每个虚拟机都可以运行自己的操作系统和应用程序。KVM利用了Linux内核的虚拟化功能,通过将物理主机的资源(如CPU、内存和网络接口)动态分配给虚拟机,实现了对虚拟机的隔离和资源管理。
操作系统版本信息
查看服务器是否支持虚拟化
grep -E -o 'vmx|svm' /proc/cpuinfo
vmx
vmx
vmx
vmx
BIOS开启虚拟化功能,查看kvm模块
lsmod |grep kvm
kvm_intel 372736 5
kvm 970752 1 kvm_intel
irqbypass 16384 4 kvm
加载kvm模块
modprobe kvm
modprobe kvm-intel
内核模块/dev/kvm设备将虚拟机的的地址空间独立于内核或者任何应用程序的地址空间
ll -ls /dev/kvm
0 crw-rw---- 1 root kvm 10, 232 Apr 22 06:35 /dev/kvm
安装kvm软件包
dnf install libvirt qemu-kvm qemu-img virt-install bridge-utils libguestfs-tools
启动libvirtd服务
systemctl start libvirtd && systemctl enable libvirtd
虚拟机列表
virsh -c qemu:///system list
Id Name State
------------------------------
virsh版本
virsh --version
6.2.0
virt-install工具版本
virt-install --version
2.1.0
qemu-kvm程序
ls -ll /usr/bin/qemu-kvm
lrwxrwxrwx 1 root root 21 Mar 14 2023 /usr/bin/qemu-kvm -> /usr/libexec/qemu-kvm
qemu-kvm版本信息
qemu-kvm --version
QEMU emulator version 4.1.0 (qemu-4.1.0-76.up2.uel20)
Copyright (c) 2003-2019 Fabrice Bellard and the QEMU Project developers
创建虚拟网桥
网卡ens192
cat /etc/sysconfig/network-scripts/ifcfg-ens192
TYPE=Ethernet
BOOTPROTO=static
NAME=ens192
DEVICE=ens192
ONBOOT=yes
BRIDGE=br192
网桥br192
cat /etc/sysconfig/network-scripts/ifcfg-br192
TYPE=Bridge
BOOTPROTO=static
NAME=br192
DEVICE=br192
ONBOOT=yes
IPADDR=192.168.100.235
PREFIX=24
GATEWAY=192.168.100.1
DNS1=223.5.5.5
重启网络
nmcli connection reload
nmcli connection up ens192
nmcli connection up br192
查看网络
ip add show
查看网桥
brctl show
添加网卡到网桥
brctl addif br0 vnet0
创建虚拟磁盘
qemu-img create -f qcow2 /var/lib/libvirt/images/uosv20-1060a.qcow2 50G
查看虚拟磁盘信息
qemu-img info /var/lib/libvirt/images/uosv20-1060a.qcow2
虚拟机开机查看磁盘信息
qemu-img info /var/lib/libvirt/images/uosv20-1060a.qcow2 --force-share
qemu-img info /var/lib/libvirt/images/uosv20-1060a.qcow2 -U
virt-install 创建虚拟机
virt-install --name=uosv20-1060a --memory=4096 --vcpus=2 --disk path=/var/lib/libvir/images/uosv20-1060a.qcow2,format=qcow2,bus=virtio --cdrom /mnt/cdrom/uos-server-20-1060a-amd64.iso --network bridge=br192,model=virtio --noautoconsole --accelerate --graphics vnc,listen=0.0.0.0,port=5910
创建虚拟机参数介绍
--virt-type kvm 指定虚拟化类型(qemu/kvm)
--os-type=linux 系统类型
--os-variant rhel8 系统版本
--name 虚拟机的名字
--memory 内存大小
--vcpus 2 处理器数量
硬盘类型(qcow2,raw),存放位置,以及大小(G)
--disk /var/lib/libvir/images/uosv20-1060a.qcow2,format=raw,size=6
--disk path=/var/lib/libvir/images/uosv20-1060a.qcow2,format=qcow2,bus=virtio
指定光驱文件
--cdrom /mnt/cdrom/uos-server-20-1060a-amd64.iso
指定网络类型,默认是nat模式
--network bridge=br192,model=virtio
--graphics vnc,listen=0.0.0.0,port5910 指定终端输出设备vnc端口
--noautoconsole 不自动尝试连接到客户端控制台
--accelerate 内核加速器,选项默认参数
--video cirrus 指定video类型,默认qxl
VNC控制台登录虚拟机
virsh vncdisplay uosv20-1060a
:10
Windows VNC Viewer 工具连接5910端口安装操作系统
virsh qemu-img qemu-kvm 命令不补全
dnf install bash-completion
重启系统生效
virt-manager
virt-manager是一个基于KVM的虚拟机管理工具,它提供了一个图形用户界面(GUI),用户更加直观和方便地管理虚拟机。virt-manager 提供了直观的图形界面,用户可以通过它来创建、配置、启动、停止和监控虚拟机。实现对虚拟机的整个生命周期管理,包括创建、修改、删除虚拟机,以及对虚拟机进行快照和迁移等操作。存储管理允许用户配置虚拟机的存储和网络设置,包括添加虚拟硬盘、配置网络接口和网络源等。远程管理,通过SSH连接到远程服务器上的libvirt守护进程,从而实现远程虚拟机管理。
安装virt-manager
dnf install virt-manager
启动virt-manager
virt-manager
虚拟机操作
virsh console
当操作系统内核崩溃时会报出内核系统crash出错信息,通常启动的时候一闪而过, 而此时系统还没有起来,不能通过远程工具(比如ssh)进入系统查看,通过配置grub,把日志重定向到Serial Console中,通过Serial console来访问错误信息。
方法1
grubby --update-kernel 命令不会更新`/etc/default/grub`文件
grubby --update-kernel=ALL --args="console=tty0 console=ttyS0,115200n8"
重启系统生效 rebbot
方法2
编辑/etc/default/grub文件
GRUB_CMDLINE_LINUX="crashkernel=auto console=tty0 console=ttyS0,115200n8"
执行grub2-mkconfig 加载生效grub配置
grub2-mkconfig -o /boot/grub2/grub.cfg
重启系统生效
console控制台登录虚拟机
virsh console uosv20-1060a
acpid 部署
acpid是一个用户空间的服务进程, 用来处理电源相关事件,比如将kernel中的电源事件转发给应用程序,告诉应用程序安全的退出,防止应用程序异常退出导致数据损坏。
安装acpid软件包,并设置开机启动服务
dnf install -y acpid
systemctl start acpid && systemctl enable acpid
虚拟机克隆
虚拟机克隆是在KVM虚拟化环境中复制一个虚拟机到另一个新虚拟机的过程,通常包括停止源虚拟机、复制其磁盘文件、修改配置文件以区分新旧虚拟机,然后将新虚拟机注册到虚拟化平台并启动。
克隆设备必须暂停或关闭虚拟机
virt-clone 命令克隆生成磁盘文件和xml文件
virsh destroy uosv20-1060a
virt-clone --auto-clone -o uosv20-1060a -n uosv20-1060a_clone
[root@uosv20-1060e ~]# virsh list --all
Id Name State
-------------------------------------
- uosv20-1060a shut off
- uosv20-1060a_clone shut off
虚拟机快照备份恢复
虚拟机快照是虚拟化技术中的一项功能,它允许用户在虚拟机的当前状态创建一个完整的、静态的副本。这个状态包括了操作系统、应用程序、配置以及数据等所有信息。
(1) uosv20-1060a虚拟机创建快照
[root@uosv20-1060e ~]# virsh snapshot-create uosv20-1060a
Domain snapshot 1713750569 created
默认快照的名称为随机指定分配,可使用snapshot-create-as命令指定快照名称
virsh snapshot-create-as 【虚拟机名】 【快照名】
virsh snapshot-create-as uosv20-1060a uosv20-1060a_202404
(2)查看虚拟机快照的版本
[root@uosv20-1060e ~]# virsh snapshot-list uosv20-1060a
Name Creation Time State
---------------------------------------------------
1713750569 2024-04-22 09:49:29 +0800 running
(3)查看当前虚拟机镜像快照的版本
[root@uosv20-1060e ~]# virsh snapshot-current uosv20-1060a
(4)查看当前虚拟机镜像文件
[root@uosv20-1060e ~]# ll /var/lib/libvirt/qemu/snapshot/uosv20-1060a/
total 12
-rw------- 1 root root 8883 Apr 22 09:50 1713750569.xml
(5)恢复虚拟机快照
确认恢复快照的时间恢复到1713750569
[root@uosv20-1060e ~]# virsh snapshot-list uosv20-1060a
Name Creation Time State
---------------------------------------------------
1713750569 2024-04-22 09:49:29 +0800 running
(6)执行恢复,并确认恢复版本
[root@uosv20-1060e ~]# virsh snapshot-revert uosv20-1060a 1713750569
(7)删除虚拟机快照,查看虚拟机快照
[root@uosv20-1060e ~]# qemu-img info /var/lib/libvirt/images/uosv20-1060a.qcow2 --force-share
image: /var/lib/libvirt/images/uosv20-1060a.qcow2
file format: qcow2
virtual size: 50 GiB (53687091200 bytes)
disk size: 4.64 GiB
cluster_size: 65536
Snapshot list:
ID TAG VM SIZE DATE VM CLOCK
1 1713750569 936 MiB 2024-04-22 09:49:29 03:14:18.744
Format specific information:
compat: 1.1
lazy refcounts: false
refcount bits: 16
corrupt: false
(8)删除快照
[root@uosv20-1060e ~]# virsh snapshot-delete uosv20-1060a 1713750569
Domain snapshot 1713750569 deleted
[root@uosv20-1060e ~]# qemu-img info /var/lib/libvirt/images/uosv20-1060a.qcow2 --force-share
image: /var/lib/libvirt/images/uosv20-1060a.qcow2
file format: qcow2
virtual size: 50 GiB (53687091200 bytes)
disk size: 3.72 GiB
cluster_size: 65536
Format specific information:
compat: 1.1
lazy refcounts: false
refcount bits: 16
corrupt: false
虚拟机管理命令
virsh list --all # 查看所有的虚拟机
virsh start uosv20-1060a # 启动虚拟机
virsh shutdown uosv20-1060a # 正常关机虚拟机
virsh destroy uosv20-1060a # 强制关机(相当于拔电源)
virsh reboot uosv20-1060a # 重启虚拟机
virsh undefine uosv20-1060a # 删除虚拟机
virsh domrename uosv20-1060a uosv20-1060a-server
# 虚拟机重命名(注意:必须关机重命名,开机状态下重命名会失败)
virsh suspend uosv20-1060a # 挂起虚拟机
virsh resume uosv20-1060a # 从挂起状态恢复
virsh autostart uosv20-1060a # 设置kvm虚拟机开机自启动(.xml文件创建软连接 /etc/libvirt/qemu/autostart/)
virsh autostart --disable uosv20-1060a
# 取消虚拟机开机自启动(删除创建的软连接)
虚拟机配置文件管理命令
导出虚拟机配置文件
virsh dumpxml uosv20-1060a >/data/uosv20-1060a-server.xml
注册虚拟机
virsh define /data/uosv20-1060a-server.xml
注意:拷贝xml配置文件和磁盘文件来克隆,删除uuid,修改name,网卡mac,硬盘source file,vnc端口号等,避免与被克隆虚拟机冲突。
修改虚拟机的配置文件(虚拟磁盘文件路径)
virsh edit uosv20-1060a-server
启动虚拟机
virsh start uosv20-1060a-server
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有