0x01 前言
我的服务器(我的DELL R720服务器)还有一半的资源没有被使用,资源使用率挺低的。最近还想学习open stack与vmware的相关知识,所以需要在KVM中实现虚拟化嵌套。
0x02 准备
首先需要检查服务器是否支持虚拟化技术,我们查看内核模块即可:
[root@server ~]# lsmod | grep kvm kvm_intel 170181 77 kvm 554609 1 kvm_intel irqbypass 13503 23 kvm
我的服务器使用intel Xeon E5 2650,所以虚拟化模块:kvm_intel
然后先安装配置KVM,具体过程请参考:基于centos7的KVM配置
0x03 配置
配置过程很简单,打开以下文件并添加内容即可:
#新建文件 [root@server ~]# vim /etc/modprobe.d/kvm-intel.conf #填入内容 options kvm ignore_msrs=1 options kvm-intel nested=y ept=y
如果你还没有启动KVM,那么可以通过以下命令卸载并重新加载相关模块:
#卸载模块 [root@server ~]# modprobe -r kvm-intel kvm #加载模块 [root@server ~]# modprobe kvm kvm-intel
如果你已经配置并启动了KVM,那推荐重启服务器。而我的情况是有虚拟机在运行,在卸载模块时提示模块正在使用:
[root@server ~]# modprobe -r kvm_intel modprobe: FATAL: Module kvm_intel is in use.
0x04 验证
这里有两种验证方式:
#使用systool [root@server ~]# systool -m kvm_intel -v | grep -i nested nested = "Y" #或直接查看系统文件 [root@server ~]# cat /sys/module/kvm_intel/parameters/nested Y
有些系统并没有安装systool,可以通过以下命令安装:
[root@server ~]# yum install libsysfs
0x05 使用
在安装虚拟机的时候添加以下命令即可:
--cpu host-passthrough
例如:
virt-install --name win7 --memory 4096 --vcpus sockets=1,cores=2,threads=2 --disk device=cdrom,path=/usr/local/kvm/iso/cn_windows_7_ultimate_with_sp1_x64_dvd_u_677408.iso --disk device=cdrom,path=/usr/share/virtio-win/virtio-win.iso --disk path=/disk_2/kvm/image/win7.img,size=50,bus=virtio --network bridge=br0,model=virtio --noautoconsole --accelerate --hvm --graphics vnc,listen=0.0.0.0,port=20004 --video vga --input tablet,bus=usb --cpu host-passthrough
或手动修改虚拟机的XML配置文件:
#修改文件 [root@server ~]# virsh edit openvas #修改cpu模块的相关信息 <cpu mode='host-passthrough'> <topology sockets='1' cores='2' threads='2'/> </cpu>
修改完配置文件后需要关闭虚拟机后重新启动才会生效。验证我的虚拟机:
[root@openvas ~]# lsmod | grep kvm kvm_intel 170181 0 kvm 554609 1 kvm_intel irqbypass 13503 1 kvm
虚拟机中已经含有相关模块,这样我就可以在虚拟机中再诸如XEM、vmware或KVM虚拟化了。
0x06 结语
有一半的系统资源空余真不是什么好事情,毕竟服务器那么贵,买回来必须要物尽其用才行。有资源,那么努力学习是最好的。
KVM嵌套技术可以让我们能最大限度地使用系统资源。但不建议多层嵌套或在生产环境中使用。