每天5分钟复习OpenStack(四) virsh 常用命令
在上一章节中,我们拉起了第一台虚拟机,但是执行
virsh shutdown
关机是无法关机的,需要使用virsh destroy
强制断电的命令来关机。为什么会这样了?
这里我们介绍下 QGA的概念 ,通过 QGA 的引入我们来熟悉下 virsh 命令。
1 什么是 QGA ?
-
QEMU Guest Agent 是运行在虚拟机内部的一个守护程序(qemu-guest-agent),用它来辅助Hypervisor实现对Guest 虚拟机的管理。
-
QEMU 为宿主机和虚拟机提供了一个数据通道(channel),这个通道的两端分别是在虚拟机内看到的串口和在宿主机上看到的unix socket文件。
-
宿主机与虚拟机内的 qga 通讯就扩展了对虚拟机的控制能力,例如在宿主机上获取虚拟机的 ip 地址等。
-
libvrit 提供了专门的 virDomainQemuAgentCommand API(对应
virsh qemu-agent-command
命令)来和qemu-guest-agent
通讯,另外 libvirt 内置 api 也可以支持 qga,例如 reboot、shutdown 等。
一句话总结: QGA 是一个守护进程,连通虚拟机的串口和物理机的 unix socket 的两头。
默认镜像已经配置 channel,我们通过命令 来验证一下已经配置了 channel
virsh dumpxml test
如果虚拟机没有咋办?
如下步骤来添加既可 。
- 通过
virsh edit
来编辑 xml 文件
<channel type='unix'>
<source mode='bind' path='/var/lib/libvirt/qemu/org.qemu.guest_agent.0'/>
<target type='virtio' name='org.qemu.guest_agent.0'/>
</channel>
- 重启虚拟机
virsh destroy test
virsh start test
- Linux 虚拟机安装 qemu-guest-agent
yum install qemu-guest-agent
setenforce 0
systemctl restart qemu-guest-agent.service && systemctl enable qemu-guest-agent.service
- 宿主机安装 qemu-guest-agent
yum install qemu-guest-agent
- 验证部分
#1 关机
virsh shutdown
查看虚拟机对应的网络的 IP 地址
修改虚拟机密码
virsh set-user-password domain --user 用户 --password 密码
virsh set-user-password test --user root --password 123456
2 kvm 虚拟机批量复制
第一台虚拟机已经通过光盘安装好了系统,能否将虚拟机做为一个模块,之后的虚拟机以该虚拟机为模板来批量复制了?
virt-clone
命令将实现你的需求。
1 转换raw 格式为qcow2 格式
qemu-img convert -f raw -O qcow2 kvm001.raw test.qcow2
2 克隆虚拟机
#克隆之前需要先关机 virsh shutdown test
virt-clone –o 原虚拟机 –n 新虚拟机 –f 新虚拟机存放的路径
virt-clone -o test -n test2 -f test2.qcow2
修复 virsh console
登录失败问题咋办
-
通过 vnc 登录虚拟机 test2
-
修改 /etc/default/grub 文件中
-
重新生成 grub 文件
grub2-mkconfig -o /boot/grub2/grub.cfg
, -
reboot
重启后就ok了.
virsh console
登录了
virsh console test2 #登录虚拟机,修复完成console 等问题后,我们以该虚拟机做为模板文件,以后的虚拟机都按这个模块来生成 。
# 克隆虚拟机
virt-clone -o test2 -n template-vm -f template-vm.qcow2
#启动虚拟机验证
virsh start template-vm
[root@192-168-48-11 images]# virsh list
Id Name State
----------------------------------------------------
6 template-vm running
#修改虚拟机IP为 192.168.122.12/24
#重启网络
systemctl restart network
#拉起原先的test 虚拟机
virsh start test
#ssh 登录test
#ssh 192.168.122.11 来测试连通 192.168.122.12
现在我们查看所有的虚拟机
test2 和 test02 我们都不想要了,怎么删除了?
1 删除虚拟机定义
virsh undefine test02
virsh undefine test2
2 删除虚拟机的磁盘文件,本环境的路径在
[root@192-168-48-11 images]# pwd
/data/images
[root@192-168-48-11 images]# ls
kvm001.raw template-vm.qcow2 test2.qcow2 test.qcow2
#删除文件
rm -rf test.qcow2 test2.qcow2
命令总结:
1 查看虚拟机xml文件
virsh dumpxml
2 编辑虚拟机的xml 文件
virsh edit
3 关闭虚拟机
virsh shutdown #正常关机
virsh destroy #强制断电
4 启动虚拟机
virsh start
5 删除虚拟机
virsh undefine
6 修改虚拟机密码
virsh set-user-password