目录
🍁libvirt架构概述
🍁使用virsh管理虚拟机
🍂常用命令总结
🍁kvm基本功能管理
🍂帮助命令
🍂KVM的配置文件存放目录
🍂查看虚拟机状态
🍂虚拟机关机与开机
🍂强制虚拟机系统关闭电源
🍂通过配置文件启动虚拟机系统
🍂挂起虚拟机
🍂恢复虚拟机
🍂设置虚拟机自启
🍂导出虚拟机配置
🍂删除和导入虚拟机
🍂修改虚拟机配置文件
🍂查看虚拟机信息
🍂连接虚拟机
🍂虚拟机克隆
🍃查看虚拟机状态
🍃克隆虚拟机
🍃查看状态并启动
🍁虚拟机快照
🍃对虚拟机拍摄快照
🍃查看快照详细信息
🍃恢复快照
🍃删除快照
🦐博客主页:大虾好吃吗的博客
🦐专栏地址:KVM虚拟化专栏
libvirt架构概述
libvirt是用来管理虚拟机或虚拟化功能的软件集合,主要包括:libvirt API,libvirtd进程和virsh工具集三部分。最初的目的是为不同的hypervisor提供统一的管理接口。
libvirtd该后台进程主要实现以下功能:
(1)远程代理所有remote client发送来的命令,由该进程监测执行
(2)本地环境初始化libvirt服务的启停,用户connection的响应等
(3)根据环境注册各种Driver(qemu, xen, storage…)的实现不同虚拟化技术以Driver的形式实现,由于libvirt对外提供的是统一的接口,所以各个Driver就是实现这些接口,即将Driver注册到libvirt中。
查看libvirtd服务状态
如果libvirtd服务停止运行,那么你将不能管理虚拟机,也就是不能使用virt-manager等工具来管理虚拟机。
[root@localhost ~]# systemctl status libvirtd
查看配置文件
虚拟机的所有配置是放置在一个xml文件中,位置在/etc/libvirt/qemu/目录中
[root@localhost ~]# ll /etc/libvirt/qemu
total 8
-rw------- 1 root root 3325 Apr 20 23:29 myvm01.xml
-rw------- 1 root root 3325 Apr 20 23:30 myvm02.xml
drwx------. 3 root root 42 Apr 17 04:32 networks
可以看到创建的2个虚拟机,libvirt的xml文件分为几个重要部分,整体结构如下:
<domain type='kvm'>
虚拟机整体信息
系统信息
硬件资源特性
突发事件处理
虚拟磁盘(单个或多个)
虚拟光盘(可选)
虚拟网络(单个或多个)
vnc/spice 配置
</domain>
使用virsh管理虚拟机
virsh是使用libvirt management API构建的管理工具,virsh的名称的含义是virtualization shell。它有两种工作模式:
立即模式
[root@localhost ~]# virsh list --all
Id Name State
----------------------------------------------------
3 myvm02 running
4 myvm01 running
交互模式
[root@localhost ~]# virsh
Welcome to virsh, the virtualization interactive terminal.
Type: 'help' for help with commands
'quit' to quit
virsh # list --all
Id Name State
----------------------------------------------------
3 myvm02 running
4 myvm01 running
常用命令总结
命令 | 描述 |
---|---|
attach-device | 使用XML文件中的设备定义在虚拟机中添加设备 |
attach-disk | 在虚拟机中附加新磁盘设备 |
attach-interface | 在虚拟机中附加新网络接口 |
create | 在XML配置文件生成虚拟机并启动新虚拟机 |
define | 为虚拟机输出XML配置文件 |
destroy | 强制关闭虚拟机 |
detach-device | 从虚拟机中分离设备,使用同样的XML描述作为命令attach-device |
detach-disk | 从虚拟机中分离磁盘设备 |
detach-interface | 从虚拟机中分离网络接口 |
domblkstat | 显示正在运行的虚拟机的块设备统计 |
domid | 显示虚拟机id |
domifstat | 显示正在运行的虚拟机的网络接口统计 |
dominfo | 显示虚拟机信息 |
domname | 显示虚拟机名称 |
domstate | 显示虚拟机状态 |
domuuid | 显示虚拟机uuid |
dumpxml | 输出虚拟机XML配置文件 |
help | 显示帮助命令 |
list | 列出所有虚拟机 |
migrate | 列出虚拟机迁移到两外一台主机中 |
nodeinfo | 有关管理程序的输出信息 |
quit | 退出交互终端 |
reboot | 重启虚拟机 |
restore | 恢复以前保存在文件中的虚拟机 |
resume | 恢复暂停的虚拟机 |
save | 将虚拟机当前状态保存到某个文件中 |
setmaxmem | 为管理程序设定内存上限 |
setmem | 为虚拟机设定分配的内存 |
setvcpus | 修改为虚拟机分配的虚拟cpu数量 |
shutdown | 关闭虚拟机 |
undefine | 删除与虚拟机关联的所有文件 |
vcpuinfo | 显示虚拟机的虚拟cpu信息 |
vcpupin | 控制虚拟机的虚拟cpu亲和性 |
version | 显示virsh版本 |
start | 启动未激活的虚拟机 |
suspend | 暂停虚拟机 |
kvm基本功能管理
为了区分主机及虚拟机,这里把主机改名为kvmserver
帮助命令
[root@kvmserver ~]# virsh -h
KVM的配置文件存放目录
[root@kvmserver ~]# ll /etc/libvirt/qemu
total 8
-rw------- 1 root root 3325 Apr 20 23:29 myvm01.xml
-rw------- 1 root root 3325 Apr 20 23:30 myvm02.xml
drwx------. 3 root root 42 Apr 17 04:32 networks
查看虚拟机状态
list只能查看启动状态下的虚拟机,加参数--all可以查看全部虚拟机,但未启动的虚拟机不会有id。
[root@kvmserver ~]# virsh list --all
Id Name State
----------------------------------------------------
5 myvm01 running
- myvm02 shut off
虚拟机关机与开机
通过上面查看的虚拟机状态,这里把myvm01关闭,myvm02开启。
[root@kvmserver ~]# virsh shutdown myvm01
Domain myvm01 is being shutdown
[root@kvmserver ~]# virsh start myvm02
Domain myvm02 started
强制虚拟机系统关闭电源
当虚拟机出现故障,通过上面温柔的关机方式,无法关闭时。这时你就需要用到暴力(拔电源)关机了,这种方式关机速度快,但是不推荐!!!
[root@kvmserver ~]# virsh list --all
Id Name State
----------------------------------------------------
6 myvm02 running
- myvm01 shut off
[root@kvmserver ~]# virsh destroy myvm02
Domain myvm02 destroyed
[root@kvmserver ~]# virsh list --all
Id Name State
----------------------------------------------------
- myvm01 shut off
- myvm02 shut off
通过配置文件启动虚拟机系统
启动方式不止start一种,也可以通过启动配置文件来开启虚拟机。
[root@kvmserver ~]# virsh create /etc/libvirt/qemu/myvm01.xml
Domain myvm01 created from /etc/libvirt/qemu/myvm01.xml
[root@kvmserver ~]# virsh list --all
Id Name State
----------------------------------------------------
7 myvm01 running
- myvm02 shut off
挂起虚拟机
当虚拟机暂时不使用时,可以通过挂起保存当前的状态。当查看虚拟机的状态是,可以看到虚拟机的状态为被挂起。需要注意的是,挂起时的虚拟机必须为启动状态。
[root@kvmserver ~]# virsh suspend myvm01
Domain myvm01 suspended
[root@kvmserver ~]# virsh list --all
Id Name State
----------------------------------------------------
7 myvm01 paused
- myvm02 shut off
恢复虚拟机
恢复挂起状态下的主机
[root@kvmserver ~]# virsh resume myvm01
Domain myvm01 resumed
[root@kvmserver ~]# virsh list --all
Id Name State
----------------------------------------------------
7 myvm01 running
- myvm02 shut off
设置虚拟机自启
设置虚拟机随宿主机开启而开启,执行创建命令时在/etc/libvirt/qemu/autostart/目录里面创建开机自启的系统文件链接。
[root@kvmserver ~]# virsh autostart myvm01
Domain myvm01 marked as autostarted
[root@kvmserver ~]# cd /etc/libvirt/qemu/autostart/
[root@kvmserver autostart]# ls
myvm01.xml
[root@kvmserver autostart]# virsh list --autostart
Id Name State
----------------------------------------------------
7 myvm01 running
[root@kvmserver autostart]# virsh autostart --disable myvm01
Domain myvm01 unmarked as autostarted
[root@kvmserver autostart]# virsh list --autostart
Id Name State
----------------------------------------------------
导出虚拟机配置
下面命令是备份虚拟机myvm01,路径还是放qemu目录下。
[root@kvmserver ~]# virsh dumpxml myvm01 > /etc/libvirt/qemu/myvm01_bak.xml
删除和导入虚拟机
删除虚拟机前需要先关闭虚拟机,让虚拟机处于关机状态。需要注意的是,上面已经备份了myvm01的虚拟机,如果没有备份,建议先备份,以便后面的导入操作。
[root@kvmserver ~]# virsh shutdown myvm01
Domain myvm01 is being shutdown
[root@kvmserver ~]# virsh undefine myvm01
Domain myvm01 has been undefined
查看删除结果,虽然文件myvm01.xml被删除了,但是不会删除磁盘文件。通过list命令查看已经没有myvm01虚拟机了。
[root@kvmserver ~]# virsh list --all
Id Name State
----------------------------------------------------
- myvm02 shut off
[root@kvmserver ~]# ll /etc/libvirt/qemu
total 8
drwxr-xr-x 2 root root 6 Apr 21 05:04 autostart
-rw-r--r-- 1 root root 4061 Apr 21 05:10 myvm01_bak.xml
-rw------- 1 root root 3325 Apr 20 23:30 myvm02.xml
drwx------. 3 root root 42 Apr 17 04:32 networks
通过备份的配置文件重新定义虚拟机
[root@kvmserver ~]# mv /etc/libvirt/qemu/myvm01_bak.xml /etc/libvirt/qemu/myvm01.xml
[root@kvmserver ~]# virsh define /etc/libvirt/qemu/myvm01.xml
Domain myvm01 defined from /etc/libvirt/qemu/myvm01.xml
[root@kvmserver ~]# virsh list --all
Id Name State
----------------------------------------------------
- myvm01 shut off
- myvm02 shut off
修改虚拟机配置文件
通过vim命令直接对配置文件修改
[root@kvmserver ~]# vim /etc/libvirt/qemu/myvm01.xml
通过edit命令直接对虚拟修改
[root@kvmserver ~]# virsh edit myvm01
查看虚拟机信息
[root@kvmserver ~]# virsh dominfo myvm01
Id: -
Name: myvm01
UUID: 59727769-f3a3-418c-936b-8bf4191c766a
OS Type: hvm
State: shut off
CPU(s): 1
Max memory: 1048576 KiB
Used memory: 1048576 KiB
Persistent: yes
Autostart: disable
Managed save: no
Security model: none
Security DOI: 0
连接虚拟机
进入虚拟机后按 ctrl + ] 退出虚拟机,注意需要先启动虚拟机,等待开机完成,输入用户密码登录即可。
[root@kvmserver ~]# virsh start myvm01
Domain myvm01 started
[root@kvmserver ~]# virsh console myvm01
vm01 login: root
Password:
Last login: Fri Apr 21 14:18:14 on ttyS0
[root@vm01 ~]#
虚拟机克隆
查看虚拟机状态
[root@kvmserver ~]# virsh list --all
Id Name State
----------------------------------------------------
8 myvm01 running
- myvm02 shut off
克隆虚拟机
克隆myvm02的虚拟机,到myvm02_clong
[root@kvmserver ~]# virt-clone -o myvm02 -n myvm02_clong -f /kvm/img/vm02_clong.qcow2
Allocating 'vm02_clong.qcow2' | 8.0 GB 00:00:12
Clone 'myvm02_clong' created successfully.
参数:-o 需要克隆的虚拟机名称;-n 新虚拟机名称; -f 指定克隆到哪个文件目录并命名
查看状态并启动
[root@kvmserver ~]# virsh list --all
Id Name State
----------------------------------------------------
8 myvm01 running
- myvm02 shut off
- myvm02_clong shut off
[root@kvmserver ~]# virsh start myvm02_clong
Domain myvm02_clong started
[root@kvmserver ~]# virsh list --all
Id Name State
----------------------------------------------------
8 myvm01 running
9 myvm02_clong running
- myvm02 shut off
虚拟机快照
快照实际上做的是虚拟机的XML配置文件,默认快照XML文件,在/var/lib/libvirt/qemu/snapshot/虚拟机名/下,快照只支持qcow2磁盘格式的系统。
对虚拟机拍摄快照
拍摄快照有两种方式,第一种是随机生成名称,第二种是指定名称,最后查看虚拟机快照,生成两个虚拟机快照。
[root@kvmserver ~]# virsh list --all
Id Name State
----------------------------------------------------
8 myvm01 running
9 myvm02_clong running
- myvm02 shut off
[root@kvmserver ~]# virsh snapshot-create myvm01
Domain snapshot 1682069915 created
[root@kvmserver ~]# virsh snapshot-create-as myvm01 as1
Domain snapshot as1 created
[root@kvmserver ~]# virsh snapshot-list myvm01
Name Creation Time State
------------------------------------------------------------
1682069915 2023-04-21 05:38:35 -0400 running
as1 2023-04-21 05:39:04 -0400 running
查看快照详细信息
[root@kvmserver ~]# virsh snapshot-current myvm01
<domainsnapshot>
<name>as1</name>
<state>running</state>
<parent>
<name>1682069915</name>
</parent>
<creationTime>1682069944</creationTime>
#省略部分内容
恢复快照
恢复myvm01虚拟机到快照1682069915
[root@kvmserver ~]# virsh snapshot-revert myvm01 1682069915
[root@kvmserver ~]# virsh snapshot-current myvm01
<domainsnapshot>
<name>1682069915</name>
<state>running</state>
<creationTime>1682069915</creationTime> #虚拟机快照版本号
<memory snapshot='internal'/>
#省略部分内容
删除快照
先查看myvm01有哪些快照,删除as1快照后查看是否删除。
[root@kvmserver ~]# virsh snapshot-list myvm01
Name Creation Time State
------------------------------------------------------------
1682069915 2023-04-21 05:38:35 -0400 running
as1 2023-04-21 05:39:04 -0400 running
[root@kvmserver ~]# virsh snapshot-delete myvm01 as1
Domain snapshot as1 deleted
[root@kvmserver ~]# virsh snapshot-list myvm01
Name Creation Time State
------------------------------------------------------------
1682069915 2023-04-21 05:38:35 -0400 running