KVM虚拟化:(五)使用virsh命令管理客户机

admin 2022年09月11日 1,064次浏览

1、virsh简介

virsh 是用于管理虚拟化环境中的客户机和 Hypervisor 的命令行工具,与 virt-manager 等工具类似,它也是通过调用 libvirt API 来实现虚拟化的管理的。virsh 是完全在命令行文本模式下运行的用户态工具,它是系统管理员通过脚本程序实现虚拟化自动部署和管理的理想工具之一

在使用 virsh 命令行进行虚拟化管理操作时,可以使用两种工作模式:交互模式和非交互模式。交互模式,是连接到相应的 Hypervisor 上,然后输入一个命令得到一个返回结果,直到用户使用 “quit” 命令退出连接。非交互模式,是直接在命令行中在一个建立连接的 URI 之后添加需要执行的一个或多个命令,执行完成后将命令的输出结果返回到当前终端上,然后自动断开连接

命令使用方式:

# 交互式
[root@kvm ~]# virsh -c qemu+ssh://root@192.168.122.100/system

# 非交互式
[root@kvm ~]# virsh -c qemu+ssh://root@192.168.122.100/system "list"

另外,在某个节点上直接使用 virsh 命令,就默认连接到本节点的 Hypervisor 之上,并且进入 virsh 的命令交互模式。而直接使用 virsh list 命令,就是在连接本节点的 Hypervisor 之后,在使用 virsh 的非交互模式中执行了 list 命令操作

2、virsh常用命令

virsh 这个命令行工具使用 libvirt API 实现了很多命令来管理 Hypervisor、节点和域,实现了qemu 命令行中的大多数参数和 QEMU monitor 中的多数命令

2.1、域管(客户机)理命令

命 令 功能描述
list 获取当前节点上所有域的列表
domstate <ID or Name or UU1D> 获取一个域的运行状态
dominfo <ID> 获取一个域的基本信息
domid <Name or UUID> 根据域的名称或 UUID 返回域的 ID 值
domname <ID or UUID> 根据域的 ID 或 UUID 返回域的名称
dommemstat <ID> 获取一个域的内存使用情况的统计信息
setmem <ID> <mem-size> 设置一个域的内存大小(默认单位为 KB)
vcpuinfo <ID> 获取一个域的 vCPU 的基本信息
vcpupin <ID> <vCPU> <pCPU> 将一个域的 vCPU 绑定到某个物理 CPU 上运行
setvcpus <ID> <vCPU-num> 设置一个域的 vCPU 的个数
vncdisplay <ID> 获取一个域的 VNC 连接 IP 地址和端口
create <dom.xml> 根据域的 XML 配置文件创建并启动一个域(客户机)
define <dom.xml> 定义一个域(但不启动)
start <ID> 启动一个(预定义的)域
autostart <Name> 开机启动一个域
suspend <ID> 暂停一个域名
resume <ID> 唤醒一个域名
shutdown <ID> 让一个域执行关机操作
reboot <ID> 让一个域重启
reset <ID> 强制重启一个域,相当于在物理机器上按 reset 按钮
destroy <ID> 立即销毁一个域,相当于直接拔掉物理机器的电源线
save <ID> <file.img> 保存一个运行中的域的状态到一个文件中
restore <file.img> 从一个被保存的文件中恢复一个域的运行
migrate <ID> <dest_url> 将一个域迁移到另外一个目的地址
dump <ID> <core.file> coredump 一个域保存到一个文件
dumpxml <ID> 以 XML 格式转存岀一个域的信息到标准输出中
attach-device <ID> <device.xml> 向一个域添加 XML 文件中的设备(热插拔)
detach-device <ID> <device.xml> 将 XML 文件中的设备从一个域中移除
console <ID> 连接到一个域的控制台

2.2、宿主机和Hypervisor管理命令

命 令 功能描述
version 显示 libvirt 和 Hypervisor 的版本信息
sysinfo 以 XML 格式打印宿主机系统的信息
nodeinfo 显示该节点的基本信息
uri 显示当前连接的 URI
hostname 显示当前节点(宿主机)的主机名
capabilities 显示该节点宿主机和客户机的架构和特性
freecell 显示当前 MUMA 单元的可用空闲内存
nodememstats <cell> 显示该节点的(某个)内存单元使用情况的统计
connect <URI> 连接到 URI 指示的 Hypervisor
nodecpustats <cpu-num> 显示该节点的(某个)CPU 使用情况的统计
qemu-attach <pid> 根据 PID 添加一个 QEMU 进程到 libvirt 中
qemu-monitor-command domain [-hmp] command 向域的 QEMU monitor 中发送一个命令,一般需要 -hmp 参数,以便直接传入 monitor 中的命令而不需要转换

2.3、网络管理命令

命 令 功能描述
iface-list 显示出物理主机的网络接口列表
iface-mac <if-name > 根据网络接口名称査询其对应的 MAC 地址
iface-name <MAC> 根据 MAC 地址查询其对应的网络接口名称
iface-edit <if-name-or-uuid> 编辑一个物理主机的网络接口的 XML 配置文件
iface-dumpxml <if-name-or-uuid> 以 XML 格式转存出一个网络接口的状态信息
iface-destroy <if-name-or-uuid> 关闭宿主机上一个物理网络接口
net-list 列出 libvirt 管理的虚拟网络
net-info <net-name-or-uuid> 根据名称査询一个虚拟网络的基本信息
net-uuid <net-name> 根据名称查询一个虚拟网络的 UUID
net-name <net-UUID> 根据 UUID 査询一个虚拟网络的名称
net-create <net.xml> 根据一个网络 XML 配置文件创建一个虚拟网络
net-edit <net-name-or-uuid> 编译一个虚拟网络的 XML 配置文件
net-dumpxml <net-name-or-uuid> 转存出一个虚拟网络的 XML 格式化的配置信息
net-destroy <net-name-or-uuid> 销毁一个虚拟网络

2.4、快照管理命令

命令 功能描述
snapshot-create 使用 XML 生成快照
snapshot-current 获取或者设定当前快照
snapshot-delete 删除域快照
snapshot-dumpxml 为域快照转储 XML
snapshot-edit 编辑快照 XML
snapshot-info 快照信息
snapshot-list 为域列出快照
snapshot-parent 获取快照的上级快照名称
snapshot-revert 将域转换为快照

2.5、存储池和存储卷管理命令

命 令 功能描述
pool-list 显示libvirt管理的存储池
find-storage-pool-sources <type> 发现潜在存储池源
pool-autostart <pool> 自动启动某个池
pool-build <pool> 建立存储池
pool-info <pool-name> 根据一个存储池名称查询其基本信息
pool-uuid <pool-name> 根据存储池名称査询其 UUID
pool-create <pool.xml> 根据 XML 配置文件的信息创建一个存储池
pool-edit <pool-name-or-uuid> 编辑一个存储池的 XML 配置文件
pool-destroy <pool-name-or-uuid> 关闭一个存储池(在 libvirt 可见范围内)
pool-delete <pool-name-or-uuid> 删除一个存储池(不可恢复)
vol-list <pool-name-or-uuid> 査询一个存储池中的存储卷的列表
vol-name < vol-key-or-path> 査询一个存储卷的名称
vol-path --pool <pool> <vol-name-or-key> 查询一个存储卷的路径
vol-create <vol.xml> 根据 XML 配置文件创建一个存储池
vol-resize <vol> <capacity> 调整卷大小
vol-info <vol> 存储卷信息
vol-clone <vol-name-path> <name> 克隆一个存储卷
vol-delete <vol-name-or-key-or-path> 删除一个存储卷

更多命令,请使用:virsh --help 命令查询

3、常用命令使用示例

3.1、客户机管理命令

3.1.1、根据 xml 文件定义一个客户机,但是不启动

root@kvm user]# virsh define --file /etc/libvirt/qemu/centos7.xml
定义域 centos7(从 /etc/libvirt/qemu/centos7.xml)

3.1.2、启动、重启、关闭一个客户机

# 启动
[root@kvm user]# virsh start --domain centos7
域 centos7 已开始

# 重启
[root@kvm user]# virsh reboot --domain centos7
域 centos7 正在被重新启动

# 关机
[root@kvm user]# virsh shutdown --domain centos7
域 centos7 被关闭

# 开机自启动域
[root@kvm user]# virsh autostart --domain centos7
域 centos7标记为自动开始

# 禁止开机自启动域
[root@kvm user]# virsh autostart --domain centos7 --disable
域 centos7取消标记为自动开始

3.1.3、查看当前节点上所有客户机

[root@kvm user]# virsh list
 Id    名称                         状态
----------------------------------------------------
 1     centos7                        running

3.1.4、查看客户机运行状态

[root@kvm user]# virsh domstate centos7
running

3.1.5、获取一个客户机基础信息

[root@kvm user]# virsh dominfo --domain centos7
Id:             1
名称:       centos7
UUID:           2f6260bf-1283-4933-aaef-fa82148537ba
OS 类型:    hvm
状态:       running
CPU:          2
CPU 时间:   20.7s
最大内存: 2097152 KiB
使用的内存: 2097152 KiB
持久:       是
自动启动: 禁用
管理的保存: 否
安全性模式: selinux
安全性 DOI: 0
安全性标签: system_u:system_r:svirt_t:s0:c466,c703 (enforcing)

3.1.6、根据 xml 文件创建并启动一个客户机

[root@kvm user]# virsh create --file /etc/libvirt/qemu/centos7.xml
域 centos7 被创建(从 /etc/libvirt/qemu/centos7.xml)

[root@kvm user]# virsh list
 Id    名称                         状态
----------------------------------------------------
 2     centos7                        running

3.1.7、查看客户机 IP 地址

[root@kvm user]# virsh domifaddr --domain centos7
 名称     MAC 地址           Protocol     Address
-------------------------------------------------------------------------------
 vnet0      52:54:00:32:7d:f6    ipv4         192.168.122.37/24

3.1.8、添加、卸载设备(热插拔)

# 查看客户机现有硬盘
[root@localhost ~]# lsblk
NAME            MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda               8:0    0  50G  0 disk
├─sda1            8:1    0   1G  0 part /boot
└─sda2            8:2    0  49G  0 part
  ├─centos-root 253:0    0  47G  0 lvm  /
  └─centos-swap 253:1    0   2G  0 lvm  [SWAP]

# 新创建一块硬盘
[root@kvm user]# qemu-img create -f raw disk_01.img 5G
Formatting 'disk_01.img', fmt=raw size=5368709120

# 在线将硬盘添加到主机
[root@kvm user]# virsh attach-device --file /etc/libvirt/qemu/devices/disk01.xml --domain centos7 --live
成功附加设备

# 查看客户机硬盘
[root@localhost ~]# lsblk
NAME            MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda               8:0    0  50G  0 disk
├─sda1            8:1    0   1G  0 part /boot
└─sda2            8:2    0  49G  0 part
  ├─centos-root 253:0    0  47G  0 lvm  /
  └─centos-swap 253:1    0   2G  0 lvm  [SWAP]
sdb               8:16   0   5G  0 disk

# 从客户机卸载硬盘
[root@kvm user]# virsh detach-device --domain centos7 --file /etc/libvirt/qemu/devices/disk01.xml --live
成功分离设备

# 再次查看客户机硬盘
[root@localhost ~]# lsblk
NAME            MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda               8:0    0  50G  0 disk
├─sda1            8:1    0   1G  0 part /boot
└─sda2            8:2    0  49G  0 part
  ├─centos-root 253:0    0  47G  0 lvm  /
  └─centos-swap 253:1    0   2G  0 lvm  [SWAP]

参数说明

–live:在线添加(热插拔)

–config:永久有效

–current:只影响当前状态

3.1.9、客户机迁移

# 在多节点环境下使用,此处做语法介绍
 virsh migrate <客户机> <目标地址> <参数>

常用参数

–live:热迁移
–offline:离线迁移
–p2p:点对点迁移
–direct:直接迁移

3.1.10、编辑客户机配置文件

[root@kvm user]# virsh edit --domain centos7 --skip-validate
编辑了域 centos7 XML 配置。

参数说明:

–skip-validate:跳过对架构的 XML 验证

3.2、客户机快照管理

3.2.1、创建快照

raw 格式的硬盘文件不支持快照功能,可以使用 qemu-img convert 命令转换硬盘文件格式,具体语法: qemu-img convert -f 源文件格式 -O 目的文件格式 源硬盘文件 目标硬盘文件

[root@kvm user]# virsh snapshot-create --domain centos7
已生成域快照 1662905224

常用选项

–domain: :域名称、ID、UUID
–xmlfile <string> : 域快照 XML
–redefine:重新定义现有快照元数据
–current:使用 redefice 设定当前快照
–no-metadata:提取快照但不生成元数据
–halt:生成快照后停止域
–disk-only:捕获磁盘状态而不是 vm 状态
–reuse-external:重新使用任意现有外部文件
–quiesce:静默虚拟机的文件系统
–atomic:需要自动操作
–live:提取实时快照

3.2.2、查看当前快照

[root@kvm user]# virsh snapshot-current --domain centos7
<domainsnapshot>
  <name>1662905224</name>
  <state>running</state>
  <creationTime>1662905224</creationTime>
  <memory snapshot='internal'/>
  <disks>
    <disk name='vda' snapshot='internal'/>
  </disks>
  <domain type='kvm'>
    <name>centos7</name>
    <uuid>2f6260bf-1283-4933-aaef-fa82148537ba</uuid>
    <memory unit='KiB'>2097152</memory>
    <currentMemory unit='KiB'>2097152</currentMemory>
    <vcpu placement='static'>2</vcpu>
    <resource>
      <partition>/machine</partition>
    </resource>
    (... 其余部分省略 ...)
</domainsnapshot>

3.2.3、查看指定客户机快照列表

[root@kvm user]# virsh snapshot-list --domain centos7
 名称               生成时间              状态
------------------------------------------------------------
 1662905224           2022-09-11 22:07:04 +0800 running

3.2.4、查看快照信息

[root@kvm user]# virsh snapshot-info --domain centos7 --current
名称:       1662905224
域:          centos7
当前:       是
状态:       running
位置:       内部
上级:       -
下级:       0
降序:       0
元数据:    是