centos5.x版本不支持在线调整cpu,内存等, 以下在centos6.x,7.x测试
centos6.x, 7.x平台下,cpu core数只能在线增加,不能在线减小
应注意你想要添加的硬件是临时生效,还是永久生效

查看虚拟机信息

文中使用虚拟机domain为”cos”
虚拟机在线调整配置并不是无限制的调整,而是有相应限制,比如对于cpu,内存这些调整,是根据此虚拟机xml文件中的配置参数有一个调整的上限,而对于添加网卡,磁盘这些的限制,则是看kvm程序最大能够模拟多少个pci设备给虚拟机

可以使用下面的方法预分配cpu,内存的上限值,只是预分配,虚拟机无法使用

virsh dumpxml cos | less	
<memory unit='KiB'>4194304</memory>
<currentMemory unit='KiB'>2097152</currentMemory>

上面可以看到,虚拟机预分配的内存上限值为4G,目前使用2G,因此下文内存最大可以调整到4G,否则需要关闭虚拟机,调整该最大预分配值

<vcpu placement='static' current='2'>8</vcpu>

这里看到虚拟机预分配cpu核数上限为8,目前使用2个core,因此下文cpu在线增加最多到8个core

要使在线添加硬件重启后依然生效,需要在命令上加”–config”,”–live或”–persistent”参数,具体使用virsh attach-disk --help查看

以下操作虚拟机处于运行状态

内存调整

内存增大,减小

能够在线调整的最大内存不能超过为虚拟机分配的最大内存(上面xml文件中设置<memory unit='KiB'>4194304</memory>最大为4G)

临时调整为4G

virsh setmem cos 4G

上面只是临时调整,并未更改xml文件,虚拟机关机后就失效了,调整的同时还需更改xml文件,做到永久调整

virsh setmem cos 2G --config --live
#--config: 设置的同时更改虚拟机xml文件,这样就可以保证虚拟机重启后仍然生效
#–live: 在线调整
#其它添加硬件的命令同样可以使用上面两个参数

永久减小为2G

virsh setmem cos 2G --config --live

virsh setmem domain 4这样的操作会使虚拟机直接挂掉!(OOM),注意调整内存大小需要带单位,默认单位为”K”

virtio-balloon气球内存技术

内存在线调整的原理是利用了virtio-balloon技术,它可以在客户机运行时动态地调整它所占用的宿主机内存资源,而不需要关闭客户机。该技术能够

  • 当宿主机内存紧张时,可以请求客户机回收利用已分配给客户机的部分内存,客户机就会释放部分空闲内存。若其内存空间不足,可能还会回收部分使用中的内存,可能会将部分内存换到交换分区中。
  • 当客户机内存不足时,也可以让客户机的内存气球压缩,释放出内存气球中的部分内存,让客户机使用更多的内存

内存调整过程:

  • KVM 发送请求给 VM 让其归还一定数量的内存给KVM。
  • VM 的 virtio_balloon 驱动接到该请求。
  • VM 的驱动是客户机的内存气球膨胀,气球中的内存就不能被客户机使用。
  • VM 的操作系统归还气球中的内存给VM
  • KVM 可以将得到的内存分配到任何需要的地方。
  • KM 也可以将内存返还到客户机中。
    更多信息:http://www.cnblogs.com/sammyliu/p/4543657.html

cpu调整(只能增大,不能减小)

同样,能够动态调整的最大VCPU个数也不能超过为虚拟机设置的最大VCPU数量

#cpu增大为4 core
virsh setvcpus cos 4 --config --live

#增大为8 core
virsh setvcpus cos 8 --config --live

添加移除硬盘

创建新lv磁盘test-data1

lvcreate -L 20G -n test-data1 CentOS_kvm

添加新lv磁盘

virsh attach-disk cos  /dev/CentOS_kvm/test-data1 vdb --cache none --subdriver raw --persistent
#vdb:新磁盘盘符,若添加第二块磁盘,就是vdc
#–subdriver raw: lv卷也是raw格式,若添加qcow2格式磁盘,要使用–subdriver qcow2 
#--persistent: 重启生效,相当于–config --live

在线移除硬盘

#可以查看虚拟机所有磁盘
virsh domblklist cos
#永久移除vdb磁盘
virsh detach-disk cos vdb --persistent

attach-disk支持很有限的参数,比如当新添加的磁盘是块设备,就没法设置AIO特性。

attach-device才是更通用的添加硬件方法,添加硬件的同时可以配置相应参数,比如我们需要添加/dev/CentOS_kvm/test-data1这块新磁盘

  • 首先配置一份磁盘的xml文件
    配置需要的参数项,比如cache=none,io=native这些,xml如下
[root@centos7 ~]# cat disk.xml
<disk type='block' device='disk'>
<driver name='qemu' type='raw' cache='none' io='native'/>
<source dev='/dev/CentOS_kvm/centos02_lij_data1'/>
<target dev='vdb' bus='virtio'/>
</disk>
  • 然后使用attach-device命令添加
virsh attach-device centos7.2_6_152_lij disk.xml --persistent
#--persistent保证了永久生效 

添加移除网卡

下面给cos这台虚拟机添加网卡,使用virtio类型的网卡,网络模式为桥接

virsh attach-interface --domain cos --type bridge --source br1 --model virtio --persistent
#--type bridge: 虚拟机使用桥接模式
#--source br1 指定使用的网桥

可以查看新添加的网卡,及其mac地址

virsh domiflist cos

根据mac地址移除网卡

virsh detach-interface cos bridge 52:54:00:a2:29:2a --persistent 

上面使用attach-interface方式添加网卡,也可以使用virsh attach-device配合xml文件添加硬件,比如需要添加新网卡eth2

  • 复制一份网卡配置的xml文件
cat eth2-nic.xml
<interface type='bridge'>
<source bridge='br1'/>
<model type='virtio'/
</interface>
  • 永久生效
virsh attach-device cos eth2-nic.xml --persistent

在线添加光盘

在线添加光盘命令比较简单,直接使用下面命令即可,注意vdd应当没有被使用

virsh attach-disk cos /data_lij/iso/CentOS-6.4-x86_64-bin-DVD1.iso vdd