新建一个硬盘:

qemu-img create -f qcow2 /kvm/source/Centos7.5.qcow2 40G

新建一个虚拟机:

virt-install --virt-type kvm --name CentOS7.5 --ram 1024 --cdrom=/iso/CentOS-7-x86_64-DVD-1804.iso --network bridge=br0 --graphics vnc,listen=0.0.0.0 --noautoconsole --os-type=liunx --os-variant=rhel7 --disk path=/kvm/source/CentOS7.5.qcow2

注:网络如果是采用默认的nat方式的,修改为 –network network=default,因为这里网络采用的是桥接模式,所以设置为网桥。

用vnc连接服务器地址,第一个正在运行的虚拟机连接端口为5900,假如有第二个正在运行的虚拟机,端口就为5901,第三个就是5902.。。。确保服务器的防火墙关闭或防火墙开启的需要添加例外:

#添加单个端口例外
firewall-cmd --zone=public --add-port=5900/tcp --permanent

#添加多个端口例外
firewall-cmd --zone=public --add-port=5900-5920/tcp --permanent

#重新载入
firewall-cmd --reload

查看虚拟机:

#只查看正在运行的虚拟机:
virsh list

#查看所有安装好的虚拟机:
virsh list --all

#查看虚拟机资源占用情况:
安装:yum install virt-top -y
查看:virt-top

#清理克隆镜像的一些信息
安装:yum -y install libguestfs-tools
清理:virt-sysprep -d centos(镜像名)

启动关闭虚拟机

#启动
virsh start CentOS7.5

#软关闭
virsh shutdown CentOS7.5

#硬关闭,相当于物理主机的断电
virsh destroy CentOS7.5

虚拟机配置:

#查看虚拟机配置信息:
virsh dominfo CentOS7.5

#增大内存或增加cpu个数,虚拟机需要处于关闭状态:
-编辑
virsh edit CentOS7.5
-修改配置后重载配置文件启动虚拟机
virsh create /etc/libvirt/qemu/CentOS7.5.xml

#调小内存虚拟机可以在线调整,如下(建议还是关闭虚拟机后再调整):
virsh setmem CentOS7.5 1048576

#设置虚拟机自启动:
virsh autostart CentOS7.5

#关闭虚拟机自启动
virsh autostart --disable CentOS7.5

克隆虚拟机:

1、导出虚拟机配置文件,如下kvm-base.xml为新的虚拟机配置文件
virsh dumpxml CentOS7.5 >/etc/libvirt/qemu/kvm-base.xml
2、复制虚拟硬盘镜像,kvm-base.qcow2为新虚拟机的硬盘:
cp /kvm/source/CentOS7.5.qcow2 /kvm/kvm-base.qcow2
3、修改配置文件,把UUID和mac地址那一行删除,并修改配置文件里的如下内容:

<name>kvm-base</name>
<source file='/kvm/kvm-base.qcow2'/>

4、把xml文件定义进来
virsh define /etc/libvirt/qemu/kvm-base.xml
5、查看并启动新的虚拟机

virsh list --all
virsh start kvm-base.xml

删除虚拟机:

#关闭虚拟机
virsh destroy kvm-base

#取消定义
virsh undefine kvm-base

#删除镜像
rm -rf /kvm/kvm-base.qcow2

快照管理:

#创建kvm-base这个虚拟机的快照
virsh snapshot-create-as kvm-base kvm-base-ori

#查看这个虚拟机的快照
virsh snapshot-list kvm-base

#恢复快照
-先关闭虚拟机
virsh shutdown kvm-base
-再恢复快照
virsh snapshot-revert kvm-base kvm-base-ori

#删除快照
virsh snapshot-delete kvm-base kvm-base-ori

在虚拟机里安装qemu-guest-agent

yum install qemu-guest-agent
systemctl start qemu-guest-agent
systemctl enable qemu-guest-agent

#在虚拟机的宿主机上可以用以下命令获取虚拟机的ip
virsh domifaddr kvm-base --source agent

启动虚拟机报错

1、CPU mode ‘custom’ for x86_64 kvm domain on x86_64 host is not supported by hypervisor

vim /etc/libvirt/qemu.conf
...
#user = "root"
user = "root"
...
#group = "root"
group = "root"
...
:wq
root@debian:~# systemctl restart libvirtd

迁移虚拟机报错

报错如下图:

有几种情况会出现这个错误,一个是修改seliunx导致的,这里就详细展开。下面是针对磁盘UUID变动导致这个错误的解决办法:
1、安装guestfish管理套件,你会发现这个套件管理kvm超级方便

注意: 使用guestfish管理套件命令时,被管理的kvm虚拟机要处于关机状态。

yum -y install  libguestfs-tools
#安装完之后你会发现超级多管理命令
[root@kvm01 ~]# virt-
virt-alignment-scan  virt-df              virt-inspector       virt-rescue          virt-win-reg
virt-builder         virt-diff            virt-install         virt-resize          virt-xml
virt-cat             virt-edit            virt-log             virt-sparsify        virt-xml-validate
virt-clone           virt-filesystems     virt-ls              virt-sysprep
virt-copy-in         virt-format          virt-make-fs         virt-tar-in
virt-copy-out        virt-host-validate   virt-manager         virt-tar-out
virt-customize       virt-index-validate  virt-pki-validate    virt-what

1、进入kvm虚拟机的救援模式:

virt-rescue -d ci(虚拟机镜像名)

#查看UUID
><rescue> ls -l /dev/disk/by-uuid/
total 0
lrwxrwxrwx 1 root root  9 Mar 20 10:42 06c60de3-3723-483a-8be7-512bd7a9921d -> ../../sdb
lrwxrwxrwx 1 root root 10 Mar 20 10:42 26c94e38-975e-49e7-99f4-942d6071501c -> ../../sda3
lrwxrwxrwx 1 root root 10 Mar 20 10:42 412a9290-aeb4-4c41-bbf9-c0a7ca8ef637 -> ../../sda1
lrwxrwxrwx 1 root root 10 Mar 20 10:42 9ab8d192-8aa7-494b-9683-3f81c8ec8b4d -> ../../sda2
><rescue>fdisk -l        #列出的信息可以看到sda3和sad1分别是/ 和 /boot分区

#重新生成这两个分区的UUID
><rescue> tune2fs -U random /dev/sda3   #生成/分区的UUID
tune2fs 1.42.9 (28-Dec-2013)
><rescue> tune2fs -l /dev/sda3|grep UUID
Filesystem UUID:          df6a28ef-c12b-4cce-b634-6cd331f33c19
><rescue> tune2fs -U random /dev/sda1   #生成/boot分区的UUID
tune2fs 1.42.9 (28-Dec-2013)
><rescue> tune2fs -l /dev/sda1|grep UUID
Filesystem UUID:          5656e8d8-8d3d-4d26-b995-877956758506
><rescue> ls -l /dev/disk/by-uuid/
total 0
lrwxrwxrwx 1 root root  9 Mar 20 10:42 06c60de3-3723-483a-8be7-512bd7a9921d -> ../../sdb
lrwxrwxrwx 1 root root 10 Mar 20 10:45 5656e8d8-8d3d-4d26-b995-877956758506 -> ../../sda1
lrwxrwxrwx 1 root root 10 Mar 20 10:42 9ab8d192-8aa7-494b-9683-3f81c8ec8b4d -> ../../sda2
lrwxrwxrwx 1 root root 10 Mar 20 10:44 df6a28ef-c12b-4cce-b634-6cd331f33c19 -> ../../sda3
#把上面重新生成的UUID拷贝出来,后面要用到。退出救援模式

2、修改kvm镜像的UUID为上面救援模式重新生成的UUID

virt-edit -d ci /etc/fstab
UUID=df6a28ef-c12b-4cce-b634-6cd331f33c19 /                       ext4    defaults        1 1
UUID=5656e8d8-8d3d-4d26-b995-877956758506 /boot                   ext4    defaults        1 2
UUID=9ab8d192-8aa7-494b-9683-3f81c8ec8b4d swap                    swap    defaults        0 0

virt-edit -d ci /etc/grub.conf        #注意了,下面的root的UUID为/分区的UUID
default=0
timeout=5
splashimage=(hd0,0)/grub/splash.xpm.gz
hiddenmenu
title CentOS (2.6.32-504.23.4.el6.x86_64)
        root (hd0,0)
        kernel /vmlinuz-2.6.32-504.23.4.el6.x86_64 ro root=UUID=df6a28ef-c12b-4cce-b634-6cd331f33c19 rd_NO_LUKS rd_NO_LVM LANG=en_US.UTF-8 rd_DM_UUID=ddf1_UBOX rd_NO_MD SYSFONT=latarcyrheb-sun16 crashkernel=auto  KEYBOARDTYPE=pc KEYTABLE=us rhgb quiet
        initrd /initramfs-2.6.32-504.23.4.el6.x86_64.img

3、重新启动系统:virsh start ci

guestfish套件命令相关功能注释
virt-alignment-scan 镜像块对齐扫描。

virt-builder ― quick image builder 快速镜像创建。

virt-cat(1) ― display a file 显示镜像中文件内容。

virt-copy-in(1) ― copy files and directories into a VM 拷贝文件到镜像内部。

virt-copy-out(1) ― copy files and directories out of a VM 拷贝镜像文件出来。

virt-customize(1) ― customize virtual machines 定制虚拟机镜像

virt-df(1) ― free space 查看虚拟机镜像空间使用情况。

virt-diff(1) ― differences 不启动虚拟机的情况下,比较虚拟机内部两份文件差别。

virt-edit(1) ― edit a file 编辑虚拟机内部文件。

virt-filesystems(1) ― display information about filesystems, devices, LVM 显示镜像文件系统信息。

virt-format(1) ― erase and make blank disks 格式化镜像内部磁盘。

virt-inspector(1) ― inspect VM images 镜像信息测试。

virt-log(1) ― display log files 显示镜像日志。

virt-ls(1) ― list files 列出镜像文件。

virt-make-fs(1) ― make a filesystem 镜像中创建文件系统。

virt-rescue(1) ― rescue shell 进去虚拟机救援模式。

virt-resize(1) ― resize virtual machines 虚拟机分区大小修改。

virt-sparsify(1) ― make virtual machines sparse (thin-provisioned) 镜像稀疏空洞消除。

virt-sysprep(1) ― unconfigure a virtual machine before cloning 镜像初始化。

virt-tar(1) ― archive and upload files 文件打包并传入传出镜像。

virt-tar-in(1) ― archive and upload files 文件打包并传入镜像。

virt-tar-out(1) ― archive and download files 文件打包并传出镜像。
文档更新时间: 2020-03-20 19:50   作者:子木