日常管理概述
接着上一篇,这篇博客主要描述kvm日常管理中使用的一些方法和命令。
kvm的管理主要有以下几个方面:
- kvm状态和配置管理:包括kvm虚拟机的开启、关闭、挂起、恢复,配置文件的导出导入和编辑,还有虚拟机重命名等
- 磁盘管理:包括虚拟机磁盘的创建、信息查看、格式转换、容量更改以及格式化、挂载使用
- kvm的console连接
- kvm开机自启动
- kvm快照和克隆
- 另外,网络模式更改和热添加技术在下一篇描述
kvm状态管理
开启、关闭和查看
- 状态查看
[root@kvm1 opt]# virsh list Id Name State ---------------------------------------------------- 2 Centos7 running [root@kvm1 opt]# virsh list --all Id Name State ---------------------------------------------------- 2 Centos7 running
参数说明:加上--all参数可以显示所有虚拟机,如果不加,就不能显示处于关闭状态的虚拟机了。这个在下面关闭虚拟机的例子中演示
- 关闭
[root@kvm1 opt]# virsh shutdown Centos7 Domain Centos7 is being shutdown [root@kvm1 opt]# virsh list Id Name State ---------------------------------------------------- [root@kvm1 opt]# virsh list --all Id Name State ---------------------------------------------------- - Centos7 shut off##还有一种方法,是强制关闭,效果如同拔电源[root@timmy ~]# virsh destroy Centos7
- 开启
[root@kvm1 opt]# virsh start Centos7 Domain Centos7 started [root@kvm1 opt]# virsh list Id Name State ---------------------------------------------------- 3 Centos7 running
- 挂起
[root@kvm1 opt]# virsh suspend Centos7 Domain Centos7 suspended [root@kvm1 opt]# virsh list Id Name State ---------------------------------------------------- 3 Centos7 paused
- 恢复
[root@kvm1 opt]# virsh resume Centos7 Domain Centos7 resumed [root@kvm1 opt]# virsh list Id Name State ---------------------------------------------------- 3 Centos7 running
-
重启
[root@kvm1 opt]# virsh reboot Centos7
kvm配置导出、导入
首先,一个kvm虚拟机其实只包含了两个文件,一个是磁盘文件,另一个就是配置文件,只要有这两个文件,就可以把虚拟机迁移到别的宿主机上。
在本文所用环境中,磁盘文件是构建kvm时生成的,路径也是那时指定的,就在/opt目录下,那么磁盘文件的路径呢?
[root@kvm1 opt]# ll /opt/*.raw -rw------- 1 qemu qemu 10737418240 Feb 3 10:43 /opt/centos2.raw [root@kvm1 opt]# ll /etc/libvirt/qemu/*.xml -rw------- 1 root root 4075 Feb 3 09:50 /etc/libvirt/qemu/Centos7.xml
如上就是磁盘文件和配置文件存放的路径。需要说明的是,配置的导入导出不是简单copy文件,而必须使用相应命令。
- 配置文件导出
[root@kvm1 opt]# virsh dumpxml Centos7 >Centos7.xml##当前目录会生成导出的xml配置文件 [root@kvm1 opt]# ls centos2.raw CentOS-7-x86_64-Minimal-1804.iso Centos7.xml rh
- 配置文件导入
###首先要关闭、删除虚拟机 [root@kvm1 opt]# virsh list --all Id Name State ---------------------------------------------------- 3 Centos7 running [root@kvm1 opt]# virsh destroy Centos7 Domain Centos7 destroyed ##删除虚拟机 [root@kvm1 opt]# virsh undefine Centos7 Domain Centos7 has been undefined ##查看虚拟机状态,确认配置文件和虚拟机都已经被删除 [root@kvm1 opt]# ls /etc/libvirt/qemu/ networks [root@kvm1 opt]# virsh list --all Id Name State ---------------------------------------------------- ##导入配置文件,开启虚拟机 [root@kvm1 opt]# virsh define Centos7.xml Domain Centos7 defined from Centos7.xml ##查看虚拟机状态,确认虚拟机和配置文件都存在 [root@kvm1 opt]# virsh define Centos7.xml Domain Centos7 defined from Centos7.xml [root@kvm1 opt]# virsh list --all Id Name State ---------------------------------------------------- - Centos7 shut off [root@kvm1 opt]# ls /etc/libvirt/qemu/ Centos7.xml networks
当然,最好开启虚拟机并确认运行状态,这里就不贴了
- 编辑配置文件
这个我们通过一种模拟场景来说明:
如果我们修改了磁盘文件的名称,这时启动虚拟机就会发生错误。这时当然可以通过把磁盘名字改回去,但这就是要吵架的节奏了,能这么干我还要拿这个场景来做什么啊?
那既然问题是因为磁盘真实名称和配置文件名称不一样造成的,那就修改配置文件呗。
配置文件可以使用vim直接修改,也可以使用专业的修改命令,后者包含了语法检查,所以我们使用后者。
这个场景的整体模拟如下:
###修改磁盘名称,然后启动kvm报错(找不到磁盘文件) [root@kvm1 opt]# mv centos2.raw centos.raw [root@kvm1 opt]# virsh start Centos7 error: Failed to start domain Centos7 error: Cannot access storage file '/opt/centos2.raw': No such file or directory ###修改配置文件,可以和vim一样使用/disk或者/device定位到下面区域 [root@kvm1 opt]# virsh edit Centos7 <disk type='file' device='disk'> <driver name='qemu' type='raw'/> <source file='/opt/centos.raw'/> ###这里修改磁盘名字 <target dev='vda' bus='virtio'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x06' function='0x0'/> </disk> ###修改后就可以正常启动kvm了 [root@kvm1 opt]# virsh start Centos7 Domain Centos7 started [root@kvm1 opt]# virsh list --all Id Name State ---------------------------------------------------- 5 Centos7 running
- 虚拟机重命名
这里有两点要说明:一、需要关闭虚拟机后操作;二、早期版本可能不支持重命名,但可以通过修改配置文件来实现
##开机状态下修改会报错(无法重命名开机状态的虚拟机) [root@kvm1 opt]# virsh domrename Centos7 web01 error: Requested operation is not valid: cannot rename active domain ##关机后可以正常重命名 [root@kvm1 opt]# virsh destroy Centos7 Domain Centos7 destroyed [root@kvm1 opt]# virsh domrename Centos7 web01 Domain successfully renamed ##确认状态,虚拟机和配置文件都被重命名了 [root@kvm1 opt]# virsh list --all Id Name State ---------------------------------------------------- - web01 shut off [root@kvm1 opt]# ls /etc/libvirt/qemu networks web01.xml
- 查询vnc端口
##显示的是简明方式,在上一篇中有过描述 [root@kvm1 opt]# virsh vncdisplay web01 :0
kvm虚拟机的开机自启动
实现目标:宿主机开机的时候,目标虚拟机自启动。
虚拟机的自启动过程描述:一、设置libvirtd自启动,宿主机开机后自动启用libvirtd服务;二、libvirtd服务自动启用模板kvm虚拟机
实现方式:一、设置libvirtd自启动;二、设置目标kvm虚拟机自启动
过程如下(其中描述了实现libvirtd自动启用kvm虚拟机的原理):
##libvirtd服务自启动 [root@kvm1 opt]# systemctl is-enabled libvirtd.service enabled ##设置kvm虚拟机自启动 [root@kvm1 opt]# virsh autostart web01 Domain web01 marked as autostarted ##虚拟机自启动的原理是创建了如下目录(autostart)和软连接文件 [root@kvm1 opt]# ls /etc/libvirt/qemu autostart networks web01.xml [root@kvm1 opt]# ll /etc/libvirt/qemu/autostart/ total 0 lrwxrwxrwx 1 root root 27 Feb 3 11:24 web01.xml -> /etc/libvirt/qemu/web01.xml
重启宿主机,,观察kvm虚拟机自启动效果
这里有个点要注意:
经过验证,关闭libvirtd服务,不会影响已经开启的kvm虚拟机
验证方式:vnc连接虚拟机,关闭libvirtd服务后,vnc还可以正常连接并进行操作
配置console连接
这个需要到kvm虚拟机中去配置内核参数,我们目前有两种方式连接到web01(就是正在使用的kvm虚拟机,之前重命名的章节为web01了):一、vnc;二、到vnc找到ip,然后从宿主机ssh过去。
因为第二种方法可以复制粘贴,我选择第二种,由vnc查找ip的过程就不描述了,直接ssh然后修改,这个过程中顺便把kvm虚拟机的hostname改为web01,方便管理
##ssh然后修改,顺便修改虚拟机的hostname [root@kvm1 ~]# ssh 192.168.122.67 ###...输入密码后就可以登入,登入后修改hostname [root@localhost ~]# hostnamectl set-hostname web01 [root@localhost ~]# hostname web01 ###首先备份配置文件 [root@localhost ~]# cp /boot/grub2/grub.cfg /tmp/ ##修改内核参数,使支持console连接 [root@localhost ~]# grubby --update-kernel=ALL --args="console=ttyS0,115200n8" ###有兴趣的话可以对比修改前后的文件,看看都改了些什么 [root@localhost ~]# diff /boot/grub2/grub.cfg /tmp/grub.cfg 100c100 < linux16 /vmlinuz-3.10.0-862.el7.x86_64 root=/dev/mapper/centos-root ro rd.lvm.lv=centos/root rhgb quiet LANG=en_US.UTF-8 console=ttyS0,115200n8 --- > linux16 /vmlinuz-3.10.0-862.el7.x86_64 root=/dev/mapper/centos-root ro rd.lvm.lv=centos/root rhgb quiet LANG=en_US.UTF-8 114c114 < linux16 /vmlinuz-0-rescue-8b69bd3010d14697b7c01af64f5842f0 root=/dev/mapper/centos-root ro rd.lvm.lv=centos/root rhgb quiet console=ttyS0,115200n8 --- > linux16 /vmlinuz-0-rescue-8b69bd3010d14697b7c01af64f5842f0 root=/dev/mapper/centos-root ro rd.lvm.lv=centos/root rhgb quiet ###回到宿主机,重启虚拟机 [root@kvm1 ~]# virsh reboot web01 Domain web01 is being rebooted ###重启后验证效果 [root@kvm1 ~]# virsh console web01 Connected to domain web01 Escape character is ^] CentOS Linux 7 (Core) Kernel 3.10.0-862.el7.x86_64 on an x86_64 web01 login: root Password: Last login: Sun Feb 3 11:41:18 from gateway [root@web01 ~]# [root@web01 ~]# ##如上,连接成功,按ctrl+]组合键就可以回到宿主机的命令行界面
磁盘管理
磁盘管理其实就是qemu-img命令的一系列使用,下面描述比较重要的一些选项。
创建磁盘并使用
- 创建磁盘
[root@kvm1 opt]# qemu-img create /opt/timmy.raw 10G ##默认的格式是raw,如果要创建qcow2格式的磁盘,需要-f参数指定,后面会有描述;10G指定磁盘容量 Formatting '/opt/timmy.raw', fmt=raw size=10737418240
- 查看磁盘信息
[root@kvm1 opt]# ll *.raw -rw------- 1 qemu qemu 10737418240 Feb 3 12:03 centos.raw -rw-r--r-- 1 root root 10737418240 Feb 3 11:59 timmy.raw [root@kvm1 opt]# qemu-img info timmy.raw image: timmy.raw file format: raw virtual size: 10G (10737418240 bytes) disk size: 0 ###可以看到,磁盘的容量是10G,但目前size是0
- 格式化磁盘
[root@kvm1 opt]# mkfs.xfs /opt/timmy.raw
- 挂载
[root@kvm1 opt]# mkdir /timmy [root@kvm1 opt]# df -h|grep timmy /dev/loop0 10G 33M 10G 1% /timmy
- 验证磁盘可用性
[root@kvm1 ~]# cd /timmy/ [root@kvm1 timmy]# echo "my name is tim duncan">name.txt [root@kvm1 timmy]# cat name.txt my name is tim duncan
创建qcow2格式的磁盘
大体过程和raw磁盘一样,只是需要指定格式
[root@kvm1 opt]# qemu-img create -f qcow2 /opt/timmy.qcow2 10G [root@kvm1 opt]# ll -h *.qcow2 -rw-r--r-- 1 root root 193K Feb 3 12:11 timmy.qcow2 [root@kvm1 opt]# qemu-img info /opt/timmy.qcow2 image: /opt/timmy.qcow2 file format: qcow2 virtual size: 10G (10737418240 bytes) disk size: 196K cluster_size: 65536 Format specific information: compat: 1.1 lazy refcounts: false
改变磁盘容量
有两种方式:一、直接给定容量值;二、在当前容量基础上增加或减少
对于第二种方式,qcow2格式的磁盘只支持扩容,不支持缩容,原因可能与其存储原理有关(非连续性)
要注意的是:生产环境中,就算用的是raw格式,也不要做缩容
这里我修改的是上面创建的timmy.qcow2文件
[root@kvm1 opt]# qemu-img resize /opt/timmy.qcow2 +5G Image resized. [root@kvm1 opt]# qemu-img info /opt/timmy.qcow2 image: /opt/timmy.qcow2 file format: qcow2 virtual size: 15G (16106127360 bytes) disk size: 260K cluster_size: 65536 Format specific information: compat: 1.1 lazy refcounts: false
磁盘格式转换
首先需要说明:这里的转换是生成了一个新文件,源文件依然存在,并保持原来的格式。操作过程如下
[root@kvm1 opt]# ll -h *.raw *.qcow2 -rw------- 1 qemu qemu 10G Feb 3 12:26 centos.raw -rw-r--r-- 1 root root 257K Feb 3 12:25 timmy.qcow2 -rw-r--r-- 1 root root 10G Feb 3 12:09 timmy.raw ##格式转换命令 [root@kvm1 opt]# qemu-img convert -f raw -O qcow2 timmy.raw timmy.raw.qcow2 ##查看新生成的磁盘文件 [root@kvm1 opt]# ll -h *.raw *.qcow2 -rw------- 1 qemu qemu 10G Feb 3 12:26 centos.raw -rw-r--r-- 1 root root 257K Feb 3 12:25 timmy.qcow2 -rw-r--r-- 1 root root 10G Feb 3 12:09 timmy.raw -rw-r--r-- 1 root root 2.9M Feb 3 12:29 timmy.raw.qcow2 [root@kvm1 opt]# qemu-img info timmy.raw.qcow2 image: timmy.raw.qcow2 file format: qcow2 virtual size: 10G (10737418240 bytes) disk size: 3.0M cluster_size: 65536 Format specific information: compat: 1.1 lazy refcounts: false
修改虚拟机web01的磁盘格式为qcow2
注意:修改磁盘格式后,磁盘文件的名字和格式都改变了,就如同之前磁盘重命名一样,需要修改配置文件,否则启动时会报错。
- 修改磁盘格式
[root@kvm1 opt]# qemu-img convert -f raw -O qcow2 centos.raw centos.qcow2 [root@kvm1 opt]# ll -h *.raw *.qcow2 -rw-r--r-- 1 root root 1.3G Feb 3 12:34 centos.qcow2 -rw------- 1 qemu qemu 10G Feb 3 12:34 centos.raw -rw-r--r-- 1 root root 257K Feb 3 12:25 timmy.qcow2 -rw-r--r-- 1 root root 10G Feb 3 12:09 timmy.raw -rw-r--r-- 1 root root 2.9M Feb 3 12:29 timmy.raw.qcow2 [root@kvm1 opt]# qemu-img info centos.qcow2 image: centos.qcow2 file format: qcow2 virtual size: 10G (10737418240 bytes) disk size: 2.0G cluster_size: 65536 Format specific information: compat: 1.1 lazy refcounts: false
- 修改虚拟机配置文件
[root@kvm1 opt]# virsh edit web01 <disk type='file' device='disk'> <driver name='qemu' type='qcow2'/> ###这里修改磁盘格式 <source file='/opt/centos.qcow2'/> ###这里修改磁盘文件路径 <target dev='vda' bus='virtio'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x06' function='0x0'/> </disk>
- 重启生效
这里有个问题,是后来做快照的时候发现的:我初次重启使用的是virsh reboot,做快找报错显示不能为raw格式的存储设备做快照;随后用destroy关机再重启就可以了
- 这里补充一下,也可以在初始构建虚拟机的时候指定磁盘格式
virt-install --virt-type kvm --os-type=linux --os-variant rhel7 --name Centos7 --memory 1024 --vcpus 1 --disk /opt/timmy.qcow2,format=qcow2,size=10 --cdrom /opt/CentOS-7-x86_64-Minimal-1804.iso --network network=default --graphics vnc,listen=0.0.0.0 --noautoconsole
kvm快照
创建快照
几点需要说明:
raw格式的磁盘不支持快照
kvm虚拟机开启和关闭的时候都可以创建快照
创建快照后,ll -h查看,磁盘占用空间变大了;但删除快照后查看,磁盘占用空间不会变小,这个就不再单独贴上来了
[root@kvm1 opt]# virsh snapshot-create web01 error: unsupported configuration: internal snapshot for disk vda unsupported for storage type raw ##以上报错,这是web01的磁盘还是raw格式,destroy并重新启动后就可以了 [root@kvm1 opt]# virsh destroy web01 Domain web01 destroyed [root@kvm1 opt]# virsh start web01 Domain web01 started ##进入virsh交互操作界面 [root@kvm1 opt]# virsh Welcome to virsh, the virtualization interactive terminal. Type: 'help' for help with commands 'quit' to quit ##创建快照 virsh # snapshot-create web01 Domain snapshot 1549169536 created ##查看快照 virsh # snapshot-list web01 Name Creation Time State ------------------------------------------------------------ 1549169536 2019-02-03 12:52:16 +0800 running
删除快照
virsh # snapshot-create web01 Domain snapshot 1549169814 created virsh # snapshot-list web01 Name Creation Time State ------------------------------------------------------------ 1549169536 2019-02-03 12:52:16 +0800 running 1549169814 2019-02-03 12:56:54 +0800 running ##删除快照 virsh # snapshot-delete web01 --snapshotname 1549169814 Domain snapshot 1549169814 deleted ##删除后查看快照列表 virsh # snapshot-list web01 Name Creation Time State ------------------------------------------------------------ 1549169536 2019-02-03 12:52:16 +0800 running
恢复快照
进行这个操作前可以进入web01,对其做一些修改,作为恢复快照后的比照。我就是在家目录创建了一个文件,恢复快照后这个文件没有了。这个过程就不贴了。
恢复快照的命令如下:
virsh # snapshot-revert web01 --snapshotname 1549169536
kvm克隆
kvm的克隆和VMware虚拟机一样,分完整克隆和链接克隆,这里不再详细描述。
有几点说明:
克隆操作要求虚拟机处于挂起或者关闭状态
克隆不包含快照,所以克隆后的磁盘文件可能比源磁盘文件小
完整克隆
##提示必须在关机或者挂起的状态下克隆 [root@kvm1 opt]# virt-clone --auto-clone -o web01 -n web02 ERROR Domain with devices to clone must be paused or shutoff. ##挂起虚拟机 [root@kvm1 opt]# virsh suspend web01 Domain web01 suspended ##完整克隆 [root@kvm1 opt]# virt-clone --auto-clone -o web01 -n web02 WARNING Setting the graphics device port to autoport, in order to avoid conflicting. Allocating 'centos-clone.qcow2' | 10 GB 00:00:14 ##查看可伶后的状态,发现虚拟机web02和配置文件都存在 Clone 'web02' created successfully. [root@kvm1 opt]# virsh list --all Id Name State ---------------------------------------------------- 2 web01 paused - web02 shut off [root@kvm1 opt]# ls /etc/libvirt/qemu autostart networks web01.xml web02.xml
克隆完毕后可以打开虚拟机查看运行状态,这里不再粘贴。
链接克隆
链接克隆有两种方式,其中一种比较麻烦,现在也不多使用,可以参考https://www.qstack.com.cn/archives/230.html。
我们使用另外一种,简单说就是在源虚拟机的磁盘基础上,创建一个新的磁盘,然后用这个新的磁盘来构建虚拟机,过程如下
[root@kvm1 opt]# qemu-img create -f qcow2 -b centos.qcow2 web03.qcow2 Formatting 'web03.qcow2', fmt=qcow2 size=10737418240 backing_file='centos.qcow2' encryption=off cluster_size=65536 lazy_refcounts=off ##构建虚拟机,与之前的构建命令做区别,可以理解就是pc机安装完系统后,不再设置从光驱启动,而是直接从硬盘启动了 [root@kvm1 opt]# virt-install --virt-type kvm --os-type=linux --os-variant rhel7 --name web03 --memory 1024 --vcpus 1 --disk /opt/web03.qcow2 --boot hd --network network=default --graphics vnc,listen=0.0.0.0 --noautoconsole ##连接克隆后查看状态,确认web03虚拟机运行状态,也可以看看配置文件,当然最好进入系统去看看虚拟机是否可以正常使用 [root@kvm1 opt]# virsh list --all Id Name State ---------------------------------------------------- 2 web01 paused 3 web02 running 4 web03 running [root@kvm1 opt]# ls /etc/libvirt/qemu autostart networks web01.xml web02.xml web03.xml
这篇就到这里,剩下的网卡模式和kvm的热添加技术在下一篇中描述。
来源:https://www.cnblogs.com/Go-Spurs-Go/p/10350244.html