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嵌套技术可以让我们能最大限度地使用系统资源。但不建议多层嵌套或在生产环境中使用。