【KVM虚拟化】· virsh管理命令

简介: 【KVM虚拟化】· virsh管理命令

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/目录中

1. [root@localhost ~]# ll /etc/libvirt/qemu
2. total 8
3. -rw-------  1 root root 3325 Apr 20 23:29 myvm01.xml
4. -rw-------  1 root root 3325 Apr 20 23:30 myvm02.xml
5. 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。它有两种工作模式:

立即模式

1. [root@localhost ~]# virsh list --all
2.  Id    Name                           State
3. ----------------------------------------------------
4.  3     myvm02                         running
5.  4     myvm01                         running

交互模式

1. [root@localhost ~]# virsh
2. Welcome to virsh, the virtualization interactive terminal.
3. 
4. Type:  'help' for help with commands
5.       'quit' to quit
6. 
7. virsh # list --all
8.  Id    Name                           State
9. ----------------------------------------------------
10.  3     myvm02                         running
11.  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的配置文件存放目录

1. [root@kvmserver ~]# ll /etc/libvirt/qemu
2. total 8
3. -rw-------  1 root root 3325 Apr 20 23:29 myvm01.xml
4. -rw-------  1 root root 3325 Apr 20 23:30 myvm02.xml
5. drwx------. 3 root root   42 Apr 17 04:32 networks

查看虚拟机状态

list只能查看启动状态下的虚拟机,加参数--all可以查看全部虚拟机,但未启动的虚拟机不会有id。

1. [root@kvmserver ~]# virsh list --all
2.  Id    Name                           State
3. ----------------------------------------------------
4.  5     myvm01                         running
5.  -     myvm02                         shut off

虚拟机关机与开机

通过上面查看的虚拟机状态,这里把myvm01关闭,myvm02开启。

1. [root@kvmserver ~]# virsh shutdown myvm01
2. Domain myvm01 is being shutdown
3. 
4. [root@kvmserver ~]# virsh start myvm02
5. Domain myvm02 started

强制虚拟机系统关闭电源

       当虚拟机出现故障,通过上面温柔的关机方式,无法关闭时。这时你就需要用到暴力(拔电源)关机了,这种方式关机速度快,但是不推荐!!!

1. [root@kvmserver ~]# virsh list --all
2.  Id    Name                           State
3. ----------------------------------------------------
4.  6     myvm02                         running
5.  -     myvm01                         shut off
6. 
7. [root@kvmserver ~]# virsh destroy myvm02
8. Domain myvm02 destroyed
9. 
10. [root@kvmserver ~]# virsh list --all
11.  Id    Name                           State
12. ----------------------------------------------------
13.  -     myvm01                         shut off
14.  -     myvm02                         shut off

通过配置文件启动虚拟机系统

启动方式不止start一种,也可以通过启动配置文件来开启虚拟机。

1. [root@kvmserver ~]# virsh create /etc/libvirt/qemu/myvm01.xml
2. Domain myvm01 created from /etc/libvirt/qemu/myvm01.xml
3. 
4. [root@kvmserver ~]# virsh list --all
5.  Id    Name                           State
6. ----------------------------------------------------
7.  7     myvm01                         running
8.  -     myvm02                         shut off

挂起虚拟机

       当虚拟机暂时不使用时,可以通过挂起保存当前的状态。当查看虚拟机的状态是,可以看到虚拟机的状态为被挂起。需要注意的是,挂起时的虚拟机必须为启动状态。

1. [root@kvmserver ~]# virsh suspend myvm01
2. Domain myvm01 suspended
3. 
4. [root@kvmserver ~]# virsh list --all
5.  Id    Name                           State
6. ----------------------------------------------------
7.  7     myvm01                         paused
8.  -     myvm02                         shut off

恢复虚拟机

恢复挂起状态下的主机

1. [root@kvmserver ~]# virsh resume myvm01
2. Domain myvm01 resumed
3. 
4. [root@kvmserver ~]# virsh list --all
5.  Id    Name                           State
6. ----------------------------------------------------
7.  7     myvm01                         running
8.  -     myvm02                         shut off

设置虚拟机自启

       设置虚拟机随宿主机开启而开启,执行创建命令时在/etc/libvirt/qemu/autostart/目录里面创建开机自启的系统文件链接。

1. [root@kvmserver ~]# virsh autostart myvm01
2. Domain myvm01 marked as autostarted
3. 
4. [root@kvmserver ~]# cd /etc/libvirt/qemu/autostart/
5. [root@kvmserver autostart]# ls
6. myvm01.xml
7. [root@kvmserver autostart]# virsh list --autostart
8.  Id    Name                           State
9. ----------------------------------------------------
10.  7     myvm01                         running
11. 
12. [root@kvmserver autostart]# virsh autostart --disable myvm01
13. Domain myvm01 unmarked as autostarted
14. 
15. [root@kvmserver autostart]# virsh list --autostart
16.  Id    Name                           State
17. ----------------------------------------------------

导出虚拟机配置

下面命令是备份虚拟机myvm01,路径还是放qemu目录下。

[root@kvmserver ~]# virsh dumpxml myvm01 > /etc/libvirt/qemu/myvm01_bak.xml

删除和导入虚拟机

       删除虚拟机前需要先关闭虚拟机,让虚拟机处于关机状态。需要注意的是,上面已经备份了myvm01的虚拟机,如果没有备份,建议先备份,以便后面的导入操作。

1. [root@kvmserver ~]# virsh shutdown myvm01
2. Domain myvm01 is being shutdown
3. 
4. [root@kvmserver ~]# virsh undefine myvm01
5. Domain myvm01 has been undefined

       查看删除结果,虽然文件myvm01.xml被删除了,但是不会删除磁盘文件。通过list命令查看已经没有myvm01虚拟机了。

1. [root@kvmserver ~]# virsh list --all
2.  Id    Name                           State
3. ----------------------------------------------------
4.  -     myvm02                         shut off
5. 
6. [root@kvmserver ~]# ll /etc/libvirt/qemu
7. total 8
8. drwxr-xr-x  2 root root    6 Apr 21 05:04 autostart
9. -rw-r--r--  1 root root 4061 Apr 21 05:10 myvm01_bak.xml
10. -rw-------  1 root root 3325 Apr 20 23:30 myvm02.xml
11. drwx------. 3 root root   42 Apr 17 04:32 networks

通过备份的配置文件重新定义虚拟机

1. [root@kvmserver ~]# mv /etc/libvirt/qemu/myvm01_bak.xml /etc/libvirt/qemu/myvm01.xml
2. [root@kvmserver ~]# virsh define /etc/libvirt/qemu/myvm01.xml 
3. Domain myvm01 defined from /etc/libvirt/qemu/myvm01.xml
4. 
5. [root@kvmserver ~]# virsh list --all
6.  Id    Name                           State
7. ----------------------------------------------------
8.  -     myvm01                         shut off
9.  -     myvm02                         shut off

修改虚拟机配置文件

1. 通过vim命令直接对配置文件修改
2. [root@kvmserver ~]# vim /etc/libvirt/qemu/myvm01.xml
3. 通过edit命令直接对虚拟修改
4. [root@kvmserver ~]# virsh edit myvm01

查看虚拟机信息

1. [root@kvmserver ~]# virsh dominfo myvm01 
2. Id:             -
3. Name:           myvm01
4. UUID:           59727769-f3a3-418c-936b-8bf4191c766a
5. OS Type:        hvm
6. State:          shut off
7. CPU(s):         1
8. Max memory:     1048576 KiB
9. Used memory:    1048576 KiB
10. Persistent:     yes
11. Autostart:      disable
12. Managed save:   no
13. Security model: none
14. Security DOI:   0

连接虚拟机

进入虚拟机后按 ctrl + ] 退出虚拟机,注意需要先启动虚拟机,等待开机完成,输入用户密码登录即可。

1. [root@kvmserver ~]# virsh start myvm01
2. Domain myvm01 started
3. 
4. [root@kvmserver ~]# virsh console myvm01
5. 
6. vm01 login: root
7. Password: 
8. Last login: Fri Apr 21 14:18:14 on ttyS0
9. [root@vm01 ~]#

虚拟机克隆

查看虚拟机状态

1. [root@kvmserver ~]# virsh list --all
2.  Id    Name                           State
3. ----------------------------------------------------
4.  8     myvm01                         running
5.  -     myvm02                         shut off

克隆虚拟机

克隆myvm02的虚拟机,到myvm02_clong

1. [root@kvmserver ~]# virt-clone -o myvm02 -n myvm02_clong -f /kvm/img/vm02_clong.qcow2 
2. Allocating 'vm02_clong.qcow2'                                     | 8.0 GB  00:00:12     
3. 
4. Clone 'myvm02_clong' created successfully.

参数:-o 需要克隆的虚拟机名称;-n 新虚拟机名称; -f 指定克隆到哪个文件目录并命名

查看状态并启动

1. [root@kvmserver ~]# virsh list --all
2.  Id    Name                           State
3. ----------------------------------------------------
4.  8     myvm01                         running
5.  -     myvm02                         shut off
6.  -     myvm02_clong                   shut off
7. 
8. [root@kvmserver ~]# virsh start myvm02_clong 
9. Domain myvm02_clong started
10. 
11. [root@kvmserver ~]# virsh list --all
12.  Id    Name                           State
13. ----------------------------------------------------
14.  8     myvm01                         running
15.  9     myvm02_clong                   running
16.  -     myvm02                         shut off

虚拟机快照

       快照实际上做的是虚拟机的XML配置文件,默认快照XML文件,在/var/lib/libvirt/qemu/snapshot/虚拟机名/下,快照只支持qcow2磁盘格式的系统。

对虚拟机拍摄快照

       拍摄快照有两种方式,第一种是随机生成名称,第二种是指定名称,最后查看虚拟机快照,生成两个虚拟机快照。

1. [root@kvmserver ~]# virsh list --all
2.  Id    Name                           State
3. ----------------------------------------------------
4.  8     myvm01                         running
5.  9     myvm02_clong                   running
6.  -     myvm02                         shut off
7. 
8. [root@kvmserver ~]# virsh snapshot-create myvm01
9. Domain snapshot 1682069915 created
10. [root@kvmserver ~]# virsh snapshot-create-as myvm01 as1
11. Domain snapshot as1 created
12. [root@kvmserver ~]# virsh snapshot-list myvm01
13.  Name                 Creation Time             State
14. ------------------------------------------------------------
15.  1682069915           2023-04-21 05:38:35 -0400 running
16.  as1                  2023-04-21 05:39:04 -0400 running

查看快照详细信息

1. [root@kvmserver ~]# virsh snapshot-current myvm01
2. <domainsnapshot>
3.   <name>as1</name>
4.   <state>running</state>
5.   <parent>
6.     <name>1682069915</name>
7.   </parent>
8.   <creationTime>1682069944</creationTime>
9. #省略部分内容

恢复快照

恢复myvm01虚拟机到快照1682069915

1. [root@kvmserver ~]# virsh snapshot-revert myvm01 1682069915
2. 
3. [root@kvmserver ~]# virsh snapshot-current myvm01 
4. <domainsnapshot>
5.   <name>1682069915</name>
6.   <state>running</state>
7.   <creationTime>1682069915</creationTime>      #虚拟机快照版本号
8.   <memory snapshot='internal'/>
9. #省略部分内容

删除快照

先查看myvm01有哪些快照,删除as1快照后查看是否删除。

1. [root@kvmserver ~]# virsh snapshot-list myvm01
2.  Name                 Creation Time             State
3. ------------------------------------------------------------
4.  1682069915           2023-04-21 05:38:35 -0400 running
5.  as1                  2023-04-21 05:39:04 -0400 running
6. 
7. [root@kvmserver ~]# virsh snapshot-delete myvm01 as1
8. Domain snapshot as1 deleted
9. 
10. [root@kvmserver ~]# virsh snapshot-list myvm01
11.  Name                 Creation Time             State
12. ------------------------------------------------------------
13.  1682069915           2023-04-21 05:38:35 -0400 running


相关文章
|
16天前
|
KVM 虚拟化
虚拟化技术概述及KVM环境安装
关于虚拟化技术概述及KVM环境安装的教程,涵盖了虚拟化的定义、分类、管理工具,以及KVM的系统需求、安装步骤和使用指南。
41 11
虚拟化技术概述及KVM环境安装
|
27天前
|
存储 Linux 调度
KVM 虚拟化的功能特性
【8月更文挑战第24天】虚拟化技术创建实体资源的虚拟版本,提升资源利用率。KVM(Kernel-based Virtual Machine)作为全虚拟化解决方案,借助Linux内核实现Hypervisor功能,通过模块化方式提供高效的虚拟化环境。
|
30天前
|
Linux KVM 虚拟化
在Linux中,KVM和Docker在Linux虚拟化中的区别是什么?
在Linux中,KVM和Docker在Linux虚拟化中的区别是什么?
|
3月前
|
虚拟化 芯片
minos 2.3 中断虚拟化——GICv2 管理
硬件肯定需要软件配合,这一节就来实战 GICv2 首先准备好 GICv2 手册:https://developer.arm.com/documentation/ihi0048/bb/?lang=en,对于硬件的管理,最底层的操作就是读写硬件的寄存器,所以这里准备好手册,随时查阅手册
61 5
minos 2.3 中断虚拟化——GICv2 管理
|
4月前
|
存储 Linux KVM
虚拟化技术之KVM安装与使用
虚拟化技术之KVM安装与使用
|
4月前
|
大数据 Linux KVM
【云计算与大数据技术】虚拟化技术、开源技术Xen、KVM、OpenVZ的讲解(图文解释 超详细)
【云计算与大数据技术】虚拟化技术、开源技术Xen、KVM、OpenVZ的讲解(图文解释 超详细)
172 0
|
27天前
|
存储 Linux 调度
OpenStack如何支持虚拟化技术?
【8月更文挑战第21天】
88 0
|
1月前
|
存储 运维 虚拟化
Docker技术概论(1):Docker与虚拟化技术比较
Docker技术概论(1):Docker与虚拟化技术比较
81 17
Docker技术概论(1):Docker与虚拟化技术比较
|
28天前
|
存储 监控 Linux
在Linux中,如何进行虚拟化技术的应用?
在Linux中,如何进行虚拟化技术的应用?
|
2月前
|
网络虚拟化 数据中心 虚拟化