KVM安装使用
KVM是开源的虚拟化技术,可通过模块的方式集成在Linux内核。
一、安装
- 查看是否支持硬件虚拟化(
>0 代表支持)
1
| egrep -c '(vmx|svm)' /proc/cpuinfos
|
- 安装
RHEL
1
| yum install libvirt virt-install qemu-kvm -y
|
Debian
1 2
| sudo apt update sudo apt install qemu-kvm libvirt-daemon-system libvirt-clients bridge-utils virt-manager
|
- 启动,查看状态
1 2
| systemctl start libvirtd systemctl status libvirtd
|
- 验证
kvm 模块是否启用
二、虚拟机管理
虚拟机本质上是
- 一个存放在
/etc/libvirt/qemu/<虚拟机名称>.xml 的配置文件
- 一个或多个存放在
/var/lib/libvirt/images/* 下的虚拟硬盘文件
- 查看运行状态的虚拟机
查看所有状态的虚拟机
- 创建虚拟机(纯命令行)
1 2 3 4 5 6 7 8 9 10
| virt-install --connect qemu:///system \ -n win10 \ --memory 4096 \ --vcpus=2 \ --disk path=/var/lib/libvirt/images/win10.qcow2,size=70,format=qcow2,bus=sata \ --os-variant=win10 \ --network bridge=virbr0 \ --cdrom=/opt/Windows10-LTSC2021-ChnSimp-2021-x64.ISO \ --graphics vnc,listen=0.0.0.0,password=123456 \ --noautoconsole
|
--connect :连接到系统级的 KVM 守护进程(libvirtd)
-n :给虚拟机起个名字叫 win10
--memory :分配 4096 MB (即 4GB) 的内存给虚拟机
--vcpus :分配 2 个虚拟 CPU 核心
--disk:虚拟磁盘文件存放的路径、大小、格式、硬盘总线接口
--os-variant:指定操作系统,osinfo-query os 显示的 Short ID 一列
--network:网卡连接到名为 virbr0 的网桥。(这是默认的NAT网卡)
--cdrom:指定安装光盘镜像(ISO 文件)的路径
--graphics :开启 VNC 图形协议,监听所有端口,设置连接密码
--noautoconsole :不要自动尝试在当前终端弹出图形窗口
- 查看虚拟机的
VNC 端口
1
| virsh vncdisplay <虚拟机名称>
|
1 2
| [root@polish-PC ~]# virsh vncdisplay win10 :1
|
- 查看支持安装的操作系统
--os-variant 参数通常应该指定 Short ID 这一列的值。
- 删除虚拟机(只删除配置文件,须手动删除硬盘文件)
删除虚拟机,同时删除磁盘文件,ISO镜像文件
1
| virsh undefine <虚拟机名称> --remove-all-storage
|
- 启动虚拟机
- 关闭虚拟机
- 强制关闭虚拟机(断电)
- (定义|创建|激活)虚拟机
提前准备好配置文件、硬盘。
1
| virsh define /etc/libvirt/qemu/<虚拟机名称>.xml
|
配置文件需要修改的地方:
- 设置虚拟机开启自启
会在 /etc/libvirt/qemu/autostart 下创建配置文件的软链接
- 禁用虚拟机开机自启
1
| virsh autostart --disable <虚拟机名称>
|
- 查看开机自启的虚拟机
1
| virsh list --all --autostart
|
- 重启虚拟机
- 重置虚拟机(断电一瞬间再通电,比重启更快)
- 暂停虚拟机
- 恢复虚拟机
三、虚拟机克隆
- 克隆虚拟机,小写
O
1
| virt-clone -o <旧的虚拟机名称> --auto-clone
|
1
| virt-clone -o node4 --auto-clone
|
- 克隆时指定新的虚拟机名称
1
| virt-clone -o <旧的虚拟机名称> -n <新的虚拟机名称> --auto-clone
|
1
| virt-clone -o node4 -n node5 --auto-clone
|
- 克隆时指定新虚拟机的磁盘文件路径
1
| virt-clone -o <旧的虚拟机名称> -n <新的虚拟机名称> -f <新的磁盘文件路径>
|
1
| virt-clone -o node4 -n node6 -f /var/lib/libvirt/images/node6.qcow2
|
<<<<<<< HEAD
查看虚拟机ip地址
1
| virsh domifaddr centos7.9
|
卸载
1
| vitsh undefine centos7.9
|
克隆
1
| virt-clone -o vm1 -n vm1-1 --auto-clone
|
查看linux的模块,正常可以看到 kvm模块。没有的化,说明是软件模拟的,vmware可以 cpu、那里开启。
1 2 3 4 5 6 7 8
| lsmod |grep kvm =======
1. 创建磁盘文件
```bash qemu-img create -f 格式 磁盘文件路径 磁盘文件大小
|
1
| qemu-img create -f qcow2 /var/lib/libvirt/images/centos7.9-1.qcow2 2G
|
1
| qemu-img create -f raw /var/lib/libvirt/images/centos7.9-1.raw 2G
|
- 查看磁盘文件中的系统分区
1 2 3 4 5
| [root@polish-PC ~]# virt-df -h -d centos7.9 文件系统 大小 已用空间 可用空间 使用百分比% centos7.9:/dev/sda1 1014M 118M 896M 12% centos7.9:/dev/centos_centos7/root 17G 1.2G 16G 8% [root@polish-PC ~]#
|
- 查看磁盘文件中的分区
1
| virt-filesystems -d <虚拟机名称>
|
1
| virt-filesystems -d centos7.9
|
- 将磁盘文件中的分区挂载到宿主机
1
| guestmount -d <虚拟机名称> -m <磁盘文件中的分区> --rw <宿主机中的挂载点>
|
1
| guestmount -d centos7.9 -m /dev/centos_centos7/root --rw /mnt/c7test
|
- 取消挂载
1
| guestunmount /mnt/c7test
|
- 创建增量镜像,相当于链接克隆
1
| qemu-img create -f <原始磁盘的格式> -b <原始磁盘文件> -F <目标磁盘文件的格式> <目标磁盘文件>
|
1
| qemu-img create -f qcow2 -b /var/lib/libvirt/images/centos7.9.qcow2 -F qcow2 /var/lib/libvirt/images/node5.qcow2
|
- 查看磁盘文件的详细信息
如果是 qcow2 格式的文件,可查看到内部的快照。
1
| qemu-img info /var/lib/libvirt/images/node5.qcow2
|
- 磁盘文件格式转换,是大写的
o
1
| qemu-img convert -O <目标磁盘文件的格式> <转换前的磁盘文件> <转换后的磁盘文件>
|
1
| qemu-img convert -O qcow2 /var/lib/libvirt/images/centos7.9-1.raw /var/lib/libvirt/images/centos7.9-1.qcow2
|
五、快照管理
raw 格式的磁盘文件不支持快照。
- 创建快照
1
| virsh snapshot-create-as <虚拟机名称> <快照名称>
|
1
| virsh snapshot-create-as node4 node4.snap
|
- 查看快照
1
| virsh snapshot-list <虚拟机名称>
|
1
| virsh snapshot-list node4
|
- 查看快照的树状图
1
| virsh snapshot-list <虚拟机名称> --tree
|
1
| virsh snapshot-list node4 --tree
|
- 恢复快照
1
| virsh snapshot-revert <虚拟机名称> 快照名
|
1
| virsh snapshot-revert node4 node4-1.snap
|
- 删除快照
1
| virsh snapshot-delete <虚拟机名称> <快照名称>
|
1
| virsh snapshot-delete node4 node4-1.snap
|
- 快照的物理位置
快照镜像分为两种,
- 内部快照,放在磁盘文件内部
- 外部快照,在原磁盘位置生成增量镜像
1
| virsh domblklist <虚拟机名称>
|
快照元数据(配置文件)
1
| /var/lib/libvirt/qemu/snapshot/<虚拟机名称>/<快照名>.xml
|
- 生成快速删除所有的快照的命令(谨慎使用)
1
| virsh snapshot-list <虚拟机名称> |awk 'NR>2 && $1{print "virsh snapshot-delete <虚拟机名称>",$1}'
|
1
| virsh snapshot-list node4 |awk 'NR>2 && $1{print "virsh snapshot-delete node4",$1}'
|
先查看要执行的命令,没问题的传递给 bash ,开机时删除可能有问题。
六、网络管理
- 查看所有的KVM网络
查看激活的网络
- 停止网络
1
| virsh net-destroy <网络名称>
|
1
| virsh net-destoy dev-NAT8
|
- (删除|取消定义)网络
本质是删除配置文件,在内存中的网络还会存在。
1
| virsh net-undefine <网络名称>
|
1
| virsh net-undefine dev-NAT8
|
- 启动网络
1
| virsh net-start dev-NAT8
|
开机自启
1
| virsh net-autostart <网络名称>
|
1
| virsh net-autostart dev-NAT8
|
- (创建|定义)新的网络
创建新的配置文件(任意位置)
1 2 3 4 5 6 7 8 9 10
| <network> <name>dev-NAT8</name> <forward mode='nat'/> <domain name='dev.local'/> <ip address='10.10.10.1' netmask='255.255.255.0'> <dhcp> <range start='10.10.10.100' end='10.10.10.200'/> </dhcp> </ip> </network>
|
导入网络
1
| virsh net-define dev-NAT8.xml
|
- 获取虚拟机的IP地址(需要虚拟机正在运行中)