Top
安装
安装依赖包
yum install qemu-kvm qemu-img virt-manager libvirt libvirt-python virt-manager libvirt-client virt-install virt-viewer -y
启动服务
systemctl start libvirtd
systemctl enable libvirtd
# KVM的管理工具栈:qemu:qemu-kvm,qemu-img 和libvirt
# CLI: virt-install, virsh
退出这个控制台,按住 ctrl键 和 ]键 即可退出
创建虚拟机
# 创建基本的虚拟机
virt-install --name=kvm2 --vcpus=2 --memory=2048 --location=/data/iso/CentOS-7-x86_64-DVD-2009.iso --disk path=/var/lib/libvirt/images/kvm2.qcow2 --network network=default --graphics none --extra-args='console=ttyS0'
--name=kvm2 # 表示为创建的虚拟机命名为kvm2。
--vcpus=2 # 表示设置虚拟机cpu有2个核心。
--memory=2048 # 表示设置内存为2G。单位默认为 MB
--location=/data/iso/CentOS-7-x86_64-DVD-2009.iso # 表示使用本地iso镜像安装虚拟机。
--disk path=/var/lib/libvirt/images/kvm2.qcow2 # 表示指定虚拟机的磁盘镜像的路径
# 在创建时,可提前准备好磁盘,然后直接指定,或者是使用参数 "--disk size=50G" 当下创建,并且磁盘的前缀名和虚拟机名相同,并且是预分配所有磁盘空间。
# 默认的创建保存目录为: /var/lib/libvirt/images/
--network network=default # 表示使用kvm的默认网络
--graphics none # 表示我们安装的过程中,需要使用的图形化控制台, none 表示不使用图形化控制台安装虚拟机
--extra-args='console=ttyS0' # 表示为创建的虚拟机指定内核启动时的内核参数
# 在通过命令行的方式安装虚拟机时最好给其分配一个虚拟终端,以便我们执行安装操作和安装完成后的登录、控制虚拟机等操作
# 默认使用"全虚拟化"的方式创建虚拟硬件.
# "全虚拟化"是指以纯软件的方式来模拟硬件设备的,如果虚拟机系统(客户机)支持virtio驱动,则可以使用”半虚拟化”的方式创建虚拟机硬件,virtio的”半虚拟化”省去了”全虚拟化”中异常捕获的环节,可以理解为操作路径更短了,所以在IO性能上有所提升。
# 控制虚拟机,与其交互,就像在物理机的命令行控制台中一样可控制机器。
virsh console <name> # 前提是虚拟机存在配置 tty 虚拟终端,
# 配置命令: grubby --update-kernel=ALL --args="console=ttyS0"
# 使用 virtio 驱动创建半虚拟化的虚拟机
virt-install --name=kvm2 --vcpus=2 --memory=2048 --location=/data/iso/CentOS-7-x86_64-DVD-2009.iso --disk path=/var/lib/libvirt/images/kvm2.qcow2,bus=virtio --network network=default,model=virtio --graphics none --extra-args='console=ttyS0'
导入虚拟机
# 通过虚拟机磁盘镜像文件导入虚拟机
virt-install --import --name kvm2import --ram 4096 --vcpus=4 --cpu host-model --disk path=/var/lib/libvirt/images/kvm2.qcow2,bus=virtio --network network=default,model=virtio --nographics
--nographics # 使用命令行的方式导入虚拟机
--noautoconsole # 导入虚拟机时不连入控制台
# 通过虚拟机 xml 配置文件和 磁盘镜像文件导入(还原)虚拟机
virsh define /etc/libvirt/qemu/kvm2.xml
virsh domblklist <VMName> # 显示 VM 当前连接的块设备
克隆虚拟机
# 通过kvm1虚拟机自动克隆出kvm2虚拟机
virt-clone --auto-clone -o kvm1 -n kvm2 # -o 表示克隆源,-n 表示新克隆出的虚拟机。
删除虚拟机
# 删除虚拟机
virsh undefine <name>
# 本质上只是在目录 /etc/libvirt/qemu 下删除了虚拟机的 xml 配置文件,但目录下 /var/lib/libvirt/images/ 的虚拟机的 镜像文件依然还是存在的。可手动删除,此为风险操作,
# 彻底删除,包括镜像文件
virsh undefine --remove-all-storage <name>
磁盘镜像 -- qemu-img
# 创建一个磁盘,
qemu-img create ubuntu.img 10G # 默认磁盘映像格式为 raw 映像
qemu-img create -f qcow2 testdisk1.qcow2 50G # 默认创建到当前目录, 并且默认为动态分配空间
qemu-img create -f qcow2 -o size=10G ubuntu.img
qemu-img create -f vmdk -o size=20G ubuntu.img # 创建 vmdk 格式的 磁盘镜像
# 转换镜像文件格式
qemu-img convert -f qcow2 -O raw centos.qcow2 centos.raw
-f 表示源镜像文件的格式。
-O(必须是大写)表示目标镜像格式 、源镜像文件名称和目标文件名称。
# 查看 磁盘镜像的详细信息
root@R4900G3_44 /e/qemu# qemu-img info test001.qcow2
image: test001.qcow2 # 显示了磁盘映像文件名
file format: qcow2
virtual size: 10G (10737418240 bytes) # 显示虚拟机将读取的映像的磁盘大小
disk size: 196K # 显示保存在主机文件系统中的实际大小
cluster_size: 65536
Format specific information:
compat: 1.1
lazy refcounts: false
refcount bits: 16
corrupt: false
# 压缩磁盘映像
qemu-img convert -O qcow2 -c ubuntu.qcow2 ubuntu_c.qcow2
# 检查磁盘映像是否有错误
qemu-img check ubuntu.qcow2
# 增加磁盘映像大小
qemu-img resize ubuntu.qcow2 +5GB
# 缩小磁盘映像大小
qemu-img resize ubuntu.qcow2 -5GB
# qemu-img 支持的格式
qemu-img -h | grep Supported
其他
# 判断机器是否支持硬件虚拟化
lscpu | grep -oE 'vmx|svm'
# 查看处于运行状态或暂停状态的的虚拟机列表
virsh list
# 查看所有虚拟机,无论虚拟机处于什么状态
virsh list --all
# 停止虚拟机
virsh shutdown <name>
# 启动虚拟机
virsh start <name>
# 暂停虚拟机: 暂停虚拟机任然占用宿主机的资源,只是不被继续调度使用
virsh suspend <name>
# 恢复虚拟机 让处于暂停状态的虚拟机继续运行
virsh resume <name>
# 如果有图形界面的话,可以进入虚拟机的界面
virt-viewer <name>
# 查看虚拟机的状态
virsh domstate <name>
# 强制关闭 虚拟机
virsh destroy suosuo02
# 重命名虚拟机
virsh domrename kvm2import kvm2
# 查看虚拟机基本的概览信息, 比如cpu数量,内存大小,是否自动启动等信息
virsh dominfo <name> # 可以理解成domaininfo的缩写
# 设置虚拟机跟随物理机自动启动
virsh autostart <name>
# 取消虚拟机自启
virsh autostart --disable <name>
# 修改虚拟机的配置
virsh edit <name>
# 通过命令的方式查看虚拟机的详细配置信息
virsh dumpxml <name>
# 虚拟机的默认配置文件所在的目录
root@R4900G3_44 ~# ll /etc/libvirt/qemu
-rw-------. 1 root root 5.8K Jun 13 21:01 ba001.xml # 虚拟机的详细配置文件
drwx------. 3 root root 4.0K Oct 11 2021 networks
# 注意不可直接手动修改虚拟机的详细配置 xml 文件, 要通过专业的方式
# 虚拟机的默认镜像文件所在目录: /var/lib/libvirt/images
root@R4900G3_44 /v/l/l/images# ll /var/lib/libvirt/images
-rw-------. 1 root root 51G Jun 13 21:22 ba001.qcow2 # 以 'qcow2' 结尾
-rw-------. 1 root root 41G Mar 21 06:11 rhel82_45.qcow2
# 使用 virt-manager 命令创建默认为 非动态分配磁盘空间
# 直接分配所有磁盘空间的磁盘效率更高,动态分配磁盘空间的方式效率稍低
# Vmware 机器默认的磁盘格式为 vmdk文件
# Qcow2是针对Vmdk和Vdi开发的开源格式。 Qcow2提供压缩,快照,备份文件等功能。它在Kvm,Qemu社区中很流行
虚拟机快照
# 创建快照
virsh snapshot-create kvm1 # 默认生成的快照的名字是 一串时间戳数字
virsh snapshot-create-as kvm1 snap2 # 指定快照名字
virsh snapshot-create-as --domain kvm1 --name snap3 --description 'test snapshot3' # 添加快照描述
# 快照配置文件的默认目录为/var/lib/libvirt/qemu/snapshot/
# 查看某一个虚拟机的某一个快照的配置信息
virsh snapshot-dumpxml kvm1 snap3
# 修改快照的名字
virsh snapshot-edit kvm1 --rename aaa bbb # 危险
# 如果需要做快照的虚拟机有多个qcow2文件组成(不同的qcow2对应的不同的磁盘挂载),那么,在创建快照时,应该加上–atomic参数,以便保证创建快照操作的原子性
virsh snapshot-create kvm1 --atomic
# 或者
virsh snapshot-create-as kvm1 snap5 --atomic
# 查看快照概览信息
virsh snapshot-info kvm1 snap2
# 查看虚拟机快照树
virsh snapshot-list kvm1 --tree
# 查看某个快照的父快照
virsh snapshot-parent kvm1 snap3
# 查看虚拟机的状态在哪个快照状态之后
virsh snapshot-current kvm1 # 默认显示其快照详细信息 , --name 参数只显示名字
# 指定恢复到某个快照的状态
virsh snapshot-revert kvm1 --snapshotname snap2
# 默认恢复到最近的快照
virsh snapshot-revert kvm1 --current
# 单独只删除某一个快照
virsh snapshot-delete kvm1 snap7
# 删除某一个快照的同时,将其所有后裔快照一并删除
virsh snapshot-delete kvm1 snap6 --children
# 删除某一个快照的所有后裔快照,但不删除快照本身
virsh snapshot-delete kvm1 snap2 --children-only
网络
# 查看网络信息
virsh net-list
虚拟机系统自动化安装脚本
待更新...