1、启用虚拟化
1.1、安装软件包
-
安装虚拟化hypervisor软件包
~]# dnf install qemu-kvm libvirt virt-install virt-viewer -y
-
启动虚拟化服务
~]# for drv in qemu network nodedev nwfilter secret storage interface; do systemctl start virt${drv}d{,-ro,-admin}.socket; done
1.2、验证安装结果
~]# virt-host-validate
QEMU: Checking for hardware virtualization : PASS
QEMU: Checking if device /dev/kvm exists : PASS
QEMU: Checking if device /dev/kvm is accessible : PASS
QEMU: Checking if device /dev/vhost-net exists : PASS
QEMU: Checking if device /dev/net/tun exists : PASS
QEMU: Checking for cgroup 'cpu' controller support : PASS
QEMU: Checking for cgroup 'cpuacct' controller support : PASS
QEMU: Checking for cgroup 'cpuset' controller support : PASS
QEMU: Checking for cgroup 'memory' controller support : PASS
QEMU: Checking for cgroup 'devices' controller support : PASS
QEMU: Checking for cgroup 'blkio' controller support : PASS
QEMU: Checking for device assignment IOMMU support : PASS
QEMU: Checking if IOMMU is enabled by kernel : PASS
QEMU: Checking for secure guest support : WARN (Unknown if this platform has Secure Guest support)
-
如果所有 virt-host-validate 检查返回 PASS 值,则说明系统已准备好创建虚拟机;如果有任何检查返回 FAIL 值,请按照显示的说明来修复问题
-
如果主机 CPU 不支持 KVM 虚拟化,virt-host-validate 会输出: QEMU: Checking for hardware virtualization: FAIL (Only emulated CPUs are available,performance will be significantly limited)
2、创建虚拟机
使用 virt-install
命令创建虚拟机,常用参数如下:
- –name:虚拟机名称
- –vcpus:CPU 数量
- –memory:内存大小
- –disk:存储的类型和大小
- –location(–cdrom):OS 安装源的类型和位置
- –os-variant:系统版本,可以通过
--osinfo list
参数查询 - –network:配置网络接口
- –autostart:开机自动启动客户机
- –import :在已有的磁盘镜像中构建客户机
使用 virt-install --help
查看更多详细信息
2.1、使用iso文件安装
~]# virt-install \
--name demo-guest1 \
--vcpus 4 \
--memory 4096 \
--disk /data/test-vm1.qcow2,size=100 \
--os-variant rocky9.0 \
--location=/iso/Rocky-9.1-x86_64-dvd.iso
2.2、使用现有磁盘镜像创建虚拟机
使用该方法创建虚拟机,可以跳过系统安装,而是使用磁盘中的现有系统
~]# virt-install \
--import \
--name demo-guest1 \
--vcpus 4 \
--memory 4096 \
--disk /data/test-vm1.qcow2 \
--osinfo rocky9.0
2.3、使用远程资源配合KS文件自动安装
~]# virt-install \
--name demo-guest2 \
--vcpus 4 \
--memory 4096 \
--disk size=100 \
--os-variant rocky9.0
--location http://10.10.10.1/rocky9/ \
--extra-args="inst.ks=http://10.10.10.1/ksfile/rocky9/ks-minimal.cfg console=tty0"
2.4、在远端主机上创建虚拟机
~]# virt-install \
--connect qemu+ssh://root@10.0.0.1/system \
--name demo-guest3 \
--vcpus 4 \
--memory 4096 \
--disk size=100 \
--os-variant rocky9.0
--location=/iso/Rocky-9.1-x86_64-dvd.iso \
--graphics none \
--extra-args='console=tty0'
3、管理虚拟机
3.1、启动虚拟机
# 本地虚拟机
virsh start VM-NAME
# 远程虚拟机
virsh -c qemu+ssh://root@HOST-IP/system start VM-NAME
3.2、关闭虚拟机
virsh shutdown VM-NAME
virsh -c qemu+ssh://root@HOST-IP/system shutdown VM-NAME
3.3、强制关闭虚拟机
virsh destroy VM-NAME
virsh -c qemu+ssh://root@HOST-IP/system destroy VM-NAME
3.4、自动开启虚拟机
virsh autostart VM-NAME
virsh -c qemu+ssh://root@HOST-IP/system autostart VM-NAME
4、连接虚拟机
此处仅介绍使用 virt-viewer 连接到虚拟机
virt-viewer VM-NAME
virt-viewer --direct --connect qemu+ssh://root@HOST-IP/system VM-NAME
为了方便,可以通过给远程主机配置别名来进行访问,例如将 qemu+ssh://root@10.10.10.1/system 命名为 test-host
# 配置别名访问
~]# vim /etc/libvirt/libvirt.conf
uri_aliases = [
"test-host=qemu+ssh://root@10.10.10.1/system",
]
# 使用别名远程执行命令
~]# virsh -c mian list
root@10.10.10.1's password:
Id 名称 状态
-----------------------------
1 demo-guest1 running
5、删除虚拟机
删除虚拟机的先决条件:
-
备份虚拟机中的重要数据
-
关闭虚拟机
-
确保没有其他虚拟机使用相同的关联的存储
virsh undefine VM-NAME --storage STORAGE --nvram
# --storage:删除关联的存储卷,可以通过domblklist查看
# --nvram:删除nvram文件
示例:
删除虚拟机:demo-guest1
# 通过domblklist查看对应存储文件
~]# virsh domblklist --domain demo-guest1
目标 源
------------------------------
vda /data/test-vm1.qcow2
sda -
# 删除虚拟机
~]# virsh undefine demo-guest1 --storage vda --nvram
Domain 'demo-guest1' has been undefined
已删除卷 'vda'(/data/test-vm1.qcow2)。
6、查看虚拟机信息
6.1、查看正在运行的虚拟机
~]# virsh list
Id 名称 状态
-----------------------------
1 demo-guest1 running
6.2、查看所有虚拟机列表
~]# virsh list --all
Id 名称 状态
-----------------------------
1 demo-guest1 running
- rocky9 关闭
- windows10 关闭
- windows11 关闭
6.3、查看指定虚拟机信息
~]# virsh dominfo demo-guest1
Id: 1
名称: demo-guest1
UUID: 82394689-9fa9-4d09-bb90-97e2c74bb6e6
OS 类型: hvm
状态: running
CPU: 4
CPU 时间: 20.5s
最大内存: 4194304 KiB
使用的内存: 4194304 KiB
持久: 是
自动启动: 禁用
管理的保存: 否
安全性模式: none
安全性 DOI: 0
6.4、查看虚拟机的XML配置文件
~]# virsh dumpxml demo-guest1
<domain type='kvm' id='1'>
<name>demo-guest1</name>
<uuid>82394689-9fa9-4d09-bb90-97e2c74bb6e6</uuid>
......
6.5、查看虚拟机存储
~]# virsh domblklist --domain demo-guest1
目标 源
------------------------------
vda /data/test-vm1.qcow2
6.6、查看虚拟机文件系统及挂载点
~]# virsh domfsinfo demo-guest1
Mountpoint 名称 类型 目标
----------------------------------
/ dm-0 xfs vda
/boot vda1 xfs vda
/home dm-2 xfs vda
6.7、查看虚拟机vCPU信息
~]# virsh vcpuinfo demo-guest1
VCPU: 0
CPU: 0
状态: running
CPU 时间: 11.0s
CPU关系: yyyyyyyyyyyyyyyyyyyyyyyyyyyy
......
6.8、查看主机上的所有虚拟网络接口
~]# virsh net-list --all
名称 状态 自动开始 持久
-----------------------------------
default 活动 是 是
~]# virsh net-info default
名称: default
UUID: 212884e5-a25f-441b-810d-dd867xxxxxxx
活跃: 是
持久: 是
自动启动: 是
桥接: virbr0
7、保存和恢复虚拟机
保存虚拟机会将其内存和设备状态保存到主机的磁盘中,并立即停止虚拟机进程。该操作可以保存处于运行状态或暂停状态的虚拟机,在恢复后,虚拟机将返回到停止前的状态
这个过程释放了主机系统中的 RAM 和 CPU 资源以交换磁盘空间,这样可提高主机系统的性能。当虚拟机被恢复时,因为不需要引导客户机操作系统,也避免使用较长的启动周期
7.1、保存虚拟机状态
~]# virsh managedsave demo-guest1
libvirt 已保存域 'demo-guest1' 的状态
保存的虚拟机文件默认位于 /var/lib/libvirt/qemu/save 目录中
~]# ls /var/lib/libvirt/qemu/save
demo-guest1.save
7.2、查看已保存的虚拟机
~]# virsh list --managed-save --all
Id 名称 状态
----------------------------
- demo-guest1 已保存
- rocky9 关闭
7.3、恢复已保存的虚拟机
~]# virsh start demo-guest1
Domain 'demo-guest1' started
8、克隆虚拟机
克隆虚拟机会复制源虚拟机及其磁盘镜像的 XML 配置,并对配置进行修改以确保新虚拟机的唯一性。这包括更改虚拟机的名称,并确保它使用磁盘镜像克隆。存储在克隆的虚拟磁盘上的数据与源虚拟机是一致的
这个过程比创建新虚拟机要快,并使用客户端操作系统安装它,并可用于快速生成带有特定配置和内容的虚拟机
8.1、创建虚拟机模板
使用 virt-sysprep 创建虚拟机模板,用于自动克隆虚拟机
-
先决条件
-
宿主机已经安装virt-sysprep
~]# dnf install /usr/bin/virt-sysprep -y
-
用作模板的虚拟机已经关闭
-
知道源虚拟机磁盘镜像的位置和虚拟机磁盘镜像文件的拥有者
-
-
创建虚拟机模板
~]# cp /data/demo-guest1.qcow2 /data/demo-template.qcow2 ~]# virt-sysprep -a /data/demo-template.qcow2 [ 0.0] Examining the guest ... [ 3.7] Performing "abrt-data" ... [ 3.7] Performing "backup-files" ... ......
8.2、克隆虚拟机
8.2.1、使用模板克隆
使用 demo-guest1 的本地虚拟机 ,创建 demo-guest1-clone 虚拟机,位置与原始虚拟机磁盘镜像相同的位置,使用相同的数据创建 demo-guest1-clone.qcow2 磁盘镜像
# 克隆
~]# virt-clone --original demo-guest1 --auto-clone
正在分配 'demo-guest1-clone.qcow2' 1% [- ] 0 B/s | 1.5 GB --:--:-- 正在分配 'demo-guest1-clone.qcow2' | 1.5 GB 00:00:00 ...
成功克隆 'demo-guest1-clone'。
# 查看虚拟机
~]# virsh list --all
Id 名称 状态
--------------------------------
- demo-guest1 关闭
- demo-guest1-clone 关闭
# 查看镜像文件
~]# ls -lah /data/
-rw------- 1 root root 1.6G 5月 30 17:12 demo-guest1-clone.qcow2
-rw------- 1 root root 1.6G 5月 30 17:08 demo-guest1.qcow2
-rw------- 1 root root 1.6G 5月 30 17:11 demo-template.qcow2
8.2.2、手动克隆
~]# virt-clone -o demo-guest1 -n demo-guest2 -f /data/demo-guest2.qcow2
正在分配 'demo-guest2.qcow2' 1% [- ] 0 B/s | 1.5 GB --:--:-- 正在分配 'demo-guest2.qcow2' | 1.5 GB 00:00:00 ...
成功克隆 'demo-guest2'。
# 查看虚拟机
~]# virsh list --all
Id 名称 状态
--------------------------
- demo-guest1 关闭
- demo-guest2 关闭
# 查看镜像文件
~]# ls -lah /data
-rw------- 1 root root 1.6G 5月 30 17:25 demo-guest1.qcow2
-rw------- 1 root root 1.6G 5月 30 17:33 demo-guest2.qcow2
-rw------- 1 root root 1.6G 5月 30 17:11 demo-template.qcow2