网站建设公司伟置国家企业信用信息系统公示查询官网
目录
🍁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 --allId    Name                           State
----------------------------------------------------3     myvm02                         running4     myvm01                         running 
交互模式
[root@localhost ~]# virsh
Welcome to virsh, the virtualization interactive terminal.
Type:  'help' for help with commands'quit' to quit
virsh # list --allId    Name                           State
----------------------------------------------------3     myvm02                         running4     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 --allId    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 --allId    Name                           State
----------------------------------------------------6     myvm02                         running-     myvm01                         shut off[root@kvmserver ~]# virsh destroy myvm02
Domain myvm02 destroyed[root@kvmserver ~]# virsh list --allId    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 --allId    Name                           State
----------------------------------------------------7     myvm01                         running-     myvm02                         shut off 
挂起虚拟机
当虚拟机暂时不使用时,可以通过挂起保存当前的状态。当查看虚拟机的状态是,可以看到虚拟机的状态为被挂起。需要注意的是,挂起时的虚拟机必须为启动状态。
[root@kvmserver ~]# virsh suspend myvm01
Domain myvm01 suspended[root@kvmserver ~]# virsh list --allId    Name                           State
----------------------------------------------------7     myvm01                         paused-     myvm02                         shut off 
恢复虚拟机
恢复挂起状态下的主机
[root@kvmserver ~]# virsh resume myvm01
Domain myvm01 resumed[root@kvmserver ~]# virsh list --allId    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 --autostartId    Name                           State
----------------------------------------------------7     myvm01                         running[root@kvmserver autostart]# virsh autostart --disable myvm01
Domain myvm01 unmarked as autostarted[root@kvmserver autostart]# virsh list --autostartId    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 --allId    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 --allId    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 myvm01vm01 login: root
Password: 
Last login: Fri Apr 21 14:18:14 on ttyS0
[root@vm01 ~]#  
虚拟机克隆
查看虚拟机状态
[root@kvmserver ~]# virsh list --allId    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 --allId    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 --allId    Name                           State
----------------------------------------------------8     myvm01                         running9     myvm02_clong                   running-     myvm02                         shut off 
虚拟机快照
快照实际上做的是虚拟机的XML配置文件,默认快照XML文件,在/var/lib/libvirt/qemu/snapshot/虚拟机名/下,快照只支持qcow2磁盘格式的系统。
对虚拟机拍摄快照
拍摄快照有两种方式,第一种是随机生成名称,第二种是指定名称,最后查看虚拟机快照,生成两个虚拟机快照。
[root@kvmserver ~]# virsh list --allId    Name                           State
----------------------------------------------------8     myvm01                         running9     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 myvm01Name                 Creation Time             State
------------------------------------------------------------1682069915           2023-04-21 05:38:35 -0400 runningas1                  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 myvm01Name                 Creation Time             State
------------------------------------------------------------1682069915           2023-04-21 05:38:35 -0400 runningas1                  2023-04-21 05:39:04 -0400 running[root@kvmserver ~]# virsh snapshot-delete myvm01 as1
Domain snapshot as1 deleted[root@kvmserver ~]# virsh snapshot-list myvm01Name                 Creation Time             State
------------------------------------------------------------1682069915           2023-04-21 05:38:35 -0400 running
