新建一个硬盘:
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
#在虚拟机的宿主机上可以用以下命令获取虚拟机的ipvirsh 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 文件打包并传出镜像。