没事学些KVM(三)虚拟机基础管理
创建完成虚拟机后,需要对虚拟机进行基础管理学习
virsh list #查看虚拟机列表 改命令只能查看正在运行或挂起的虚拟机
如果需要查看所有的虚拟机需要添加--all 参数
virsh start XXXX #开启虚拟机
virsh shutdown XXX #关闭虚拟机,这属于正常关机;
virsh destory XXX #关闭虚拟机,非正常关机;类似于拔电源;
一个磁盘文件,一个配置文件就可以完整表示一个虚机,根据创建虚机时的命令可知,磁盘文件存放在/opt下,配置文件保存于/etc/libvirt/qemu/路径下
[root@KVM03-10 opt]# cd /etc/libvirt/qemu/
[root@KVM03-10 qemu]# ll
total 8
-rw-------. 1 root root 4229 Aug 26 11:18 centos7.3.xml #配置文件
drwx------. 3 root root 42 Aug 26 09:58 networks
[root@KVM03-10 qemu]# cd /opt/
[root@KVM03-10 opt]# ll
total 5509500
-rw-------. 1 root root 10737418240 Aug 26 22:36 centos2.1.raw #磁盘文件
-rw-r--r--. 1 qemu qemu 4379901952 Apr 27 20:56 CentOS-7.3-x86_64-DVD-1611.iso
[root@KVM03-10 opt]#
备份配置文件的命令 virsh dumpxml XXX #配置文件格式是xml,直接用该命令讲会把该命令打印到屏幕,可追加到指定文件 >> /tmp/centos7.3
<domain type='kvm'> <name>centos7.3</name> <uuid>a9c5fb0f-9f5f-4f0b-87ca-06f4b6dfc62c</uuid> <memory unit='KiB'>1048576</memory> <currentMemory unit='KiB'>1048576</currentMemory> <vcpu placement='static'>1</vcpu> <os> <type arch='x86_64' machine='pc-i440fx-rhel7.0.0'>hvm</type> <boot dev='hd'/> </os> <features> <acpi/> <apic/> </features> <cpu mode='custom' match='exact' check='partial'> <model fallback='allow'>Broadwell-noTSX-IBRS</model> <feature policy='require' name='md-clear'/> <feature policy='require' name='spec-ctrl'/> <feature policy='require' name='ssbd'/> </cpu> <clock offset='utc'> <timer name='rtc' tickpolicy='catchup'/> <timer name='pit' tickpolicy='delay'/> <timer name='hpet' present='no'/> </clock> <on_poweroff>destroy</on_poweroff> <on_reboot>restart</on_reboot> <on_crash>destroy</on_crash> <pm> <suspend-to-mem enabled='no'/> <suspend-to-disk enabled='no'/> </pm> <devices> <emulator>/usr/libexec/qemu-kvm</emulator> <disk type='file' device='disk'> <driver name='qemu' type='raw'/> <source file='/opt/centos2.1.raw'/> <target dev='vda' bus='virtio'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x06' function='0x0'/> </disk> <disk type='file' device='cdrom'> <driver name='qemu' type='raw'/> <target dev='hda' bus='ide'/> <readonly/> <address type='drive' controller='0' bus='0' target='0' unit='0'/> </disk> <controller type='usb' index='0' model='ich9-ehci1'> <address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x7'/> </controller> <controller type='usb' index='0' model='ich9-uhci1'> <master startport='0'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x0' multifunction='on'/> </controller> <controller type='usb' index='0' model='ich9-uhci2'> <master startport='2'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x1'/> </controller> <controller type='usb' index='0' model='ich9-uhci3'> <master startport='4'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x2'/> </controller> <controller type='pci' index='0' model='pci-root'/> <controller type='ide' index='0'> <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x1'/> </controller> <controller type='virtio-serial' index='0'> <address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x0'/> </controller> <interface type='network'> <mac address='52:54:00:db:81:f8'/> <source network='default'/> <model type='virtio'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/> </interface> <serial type='pty'> <target type='isa-serial' port='0'> <model name='isa-serial'/> </target> </serial> <console type='pty'> <target type='serial' port='0'/> </console> <channel type='unix'> <target type='virtio' name='org.qemu.guest_agent.0'/> <address type='virtio-serial' controller='0' bus='0' port='1'/> </channel> <input type='tablet' bus='usb'> <address type='usb' bus='0' port='1'/> </input> <input type='mouse' bus='ps2'/> <input type='keyboard' bus='ps2'/> <graphics type='vnc' port='-1' autoport='yes' listen='0.0.0.0'> <listen type='address' address='0.0.0.0'/> </graphics> <video> <model type='cirrus' vram='16384' heads='1' primary='yes'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/> </video> <memballoon model='virtio'> <address type='pci' domain='0x0000' bus='0x00' slot='0x07' function='0x0'/> </memballoon> <rng model='virtio'> <backend model='random'>/dev/urandom</backend> <address type='pci' domain='0x0000' bus='0x00' slot='0x08' function='0x0'/> </rng> </devices> </domain>
通过配置文件和磁盘文件就可以实现虚机在另一处启动,这个过程就与在共享存储的情况下,虚机迁移的过程类似。换句话说,虚机迁移的时候只要保证这两个文件一致就可以实现迁移,只不过问题在与如何这两个文件的快速生效,也就关乎着虚机热迁移过程中的丢包情况。
virsh undefine XXX #首先删除某一虚拟机,然后将利用之前的虚机配置文件回复虚拟机。删除虚拟机必须在关机情况下进行,这过程与vmware workstation上虚机的工作流程类似,不允许在开机状态下对虚机进行销毁操作。
在磁盘文件中会定义该虚机的配置文件存放位置,如果位置不一致,将导致虚机恢复失败;
[root@KVM03-10 opt]# cat /tmp/centos7.3.xml | grep centos <name>centos7.3</name> <source file='/opt/centos2.1.raw'/> [root@KVM03-10 opt]#
导入命令:virsh define XXX.xml
[root@KVM03-10 opt]# virsh define /tmp/centos7.3.xml Domain centos7.3 defined from /tmp/centos7.3.xml [root@KVM03-10 opt]#
执行undefine命令后会将/etc/libvirt/qemu/centos7.3.xml的配置文件删除,重新创建的时候又会在libvirt服务中增加对应配置文件。该文件不能手动导入,必须用命令!
[root@KVM03-10 opt]# ll /etc/libvirt/qemu/ total 8 -rw-------. 1 root root 4229 Aug 26 23:13 centos7.3.xml drwx------. 3 root root 42 Aug 26 09:58 networks [root@KVM03-10 opt]#
但是在很多情况下,导入的虚机可能会存在存放路径不一致、配置文件名称更改、磁盘文件移动位置等情况,如我把磁盘文件名称修改为centos.raw,重新导入就会报错。
[root@KVM03-10 opt]# mv centos2.1.raw centos.raw [root@KVM03-10 opt]# ll total 5509500 -rw-r--r--. 1 qemu qemu 4379901952 Apr 27 20:56 CentOS-7.3-x86_64-DVD-1611.iso -rw-------. 1 root root 10737418240 Aug 26 22:36 centos.raw [root@KVM03-10 opt]# virsh list --all Id Name State ---------------------------------------------------- - centos7.3 shut off [root@KVM03-10 opt]# virsh undefine centos7.3 Domain centos7.3 has been undefined [root@KVM03-10 opt]# virsh list --all Id Name State ---------------------------------------------------- [root@KVM03-10 opt]# cat /tmp/centos7.3.xml | grep centos <name>centos7.3</name> <source file='/opt/centos2.1.raw'/> [root@KVM03-10 opt]# ll -h total 5.3G -rw-r--r--. 1 qemu qemu 4.1G Apr 27 20:56 CentOS-7.3-x86_64-DVD-1611.iso -rw-------. 1 root root 10G Aug 26 22:36 centos.raw [root@KVM03-10 opt]# virsh define centos7.3 error: Failed to open file 'centos7.3': No such file or directory [root@KVM03-10 opt]#
这个时候的修复方法有两种:
第一种:因为知道该虚机的配置文件在哪,/etc/libvirt/qemu/centos7.3.xml,所以可以通过将通过vim 的形式直接去修改配置文件
[root@KVM03-10 opt]# vi /etc/libvirt/qemu/centos7.3.xml </clock> <on_poweroff>destroy</on_poweroff> <on_reboot>restart</on_reboot> <on_crash>destroy</on_crash> <pm> <suspend-to-mem enabled='no'/> <suspend-to-disk enabled='no'/> </pm> <devices> <emulator>/usr/libexec/qemu-kvm</emulator> <disk type='file' device='disk'> <driver name='qemu' type='raw'/> <source file='/opt/centos2.1.raw'/>
……………………
第二种:通过virsh edit XXX命令修改。推荐使用该方法,该命令自带检查buff,
[root@KVM03-10 opt]# virsh edit centos7.3 error: XML document failed to validate against schema: Unable to validate doc against /usr/share/libvirt/schemas/domain.rng Element domain failed to validate attributes Failed. Try again? [y,n,i,f,?]: #yes no ignore force help
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 记一次.NET内存居高不下排查解决与启示