KVM on KVM 嵌套虛擬化的實現
本實驗系統環境為:Mac OS X El Capitan 10.11.6 15G1217
使用的虛擬機系統為:Parallels Desktop 12
虛擬化技術:Nested 虛擬化技術 + PMU虛擬化技術
L0: Ubuntu 16.04.1 Xenial LTS Desktop
L1: CentOS 6.4 Desktop
L2: Cirros Linux 0.3.5
首先,若要準備L2級虛擬機的系統鏡像,可參考Ubuntu官網提供的cloud-images,鏈接為:https://cloud-images.ubuntu.com/?_ga=1.222879259.1831544656.1487263184
首先可以在物理機使用scp命令將L2級虛擬機所需img鏡像文件傳輸至L0,命令及效果圖如圖所示:
- scp xenial-server-cloudimg-amd64-disk1.img fa1c0n@10.211.55.6:~/
若當前虛擬機不存在網橋,則需要配置網橋才可使虛擬機聯網。由于之前的實驗已完成配置,此處只寫出相關命令:
- #root@master:~# brctl addbr br0 #增加一個虛擬網橋br0
- #root@master:~# brctl addif br0 enp0s5 #在br0中添加一個接口eth0
- #root@master:~# brctl stp br0 on #打開STP協議,否則可能造成環路
- #root@master:~# ifconfig enp0s5 0 #將eth0的IP設置為0
- #root@master:~# dhclient br0 #設置動態給br0配置ip、route等
- #root@master:~# route #顯示路由表信息
- #root@master:~# brctl show #檢查br0狀態
效果圖如下
同樣,由于已完成之前的實驗,qemu_ifup啟動腳本為在啟動時創建和打開指定的TAP接口以供虛擬機連接使用。啟動腳本見主要算法和程序清單。
接下來,即可開啟L1虛擬機,命令如下:
- qemu-system-x86_64 –cpu qemu64,+vmx -m 1024 -smp 4 -boot order=d -hda rhel-6.4.img -net nic -net tap
啟動虛擬機后,如圖所示:
如圖可以看到已成功在L0上運行L1
首先開始安裝qemu,kvm,libvirt,libvirt-python,命令如下:
- yum install qemu-kvm libvirt libvirt-python virt-manager python-virtinst libvirt-client
安裝完成后,運行如下命令確認kvm是否安裝成功:
- lsmod | grep kvm && stat /dev/kvm
如上圖所示,即為安裝成功。安裝成功后,需要配置L1的網橋才可使L1創建的L2虛擬機可上網。命令同上:
- #root@master:~# brctl addbr br0 #增加一個虛擬網橋br0
- #root@master:~# brctl addif br0 enp0s5 #在br0中添加一個接口eth0
- #root@master:~# brctl stp br0 on #打開STP協議,否則可能造成環路
- #root@master:~# ifconfig enp0s5 0 #將eth0的IP設置為0
- #root@master:~# dhclient br0 #設置動態給br0配置ip、route等
- #root@master:~# route #顯示路由表信息
- #root@master:~# brctl show #檢查br0狀態
接下來,將鏡像文件從L0拷貝至L1中,使用命令:
- scp cirros-0.3.5-x86_64-disk.img root@10.211.55.9:~/
傳輸完成后如圖所示:
接下來即可在L1中啟動L2虛擬機。命令如下:
- qemu-system-x86_64 -smp 4 -m 256 -boot order=d -hda cirros-0.3.5-x86_64-disk.img -net nic -net tap -enable-kvm
啟動成功后,可以看到已成功啟動L2虛擬機。且L2虛擬機可ping通百度,可以上網。至此,KVM on KVM嵌套虛擬化的實現已完成。
在CentOS 6.4下,啟動虛擬機時,遇到libdevmapper庫錯誤問題,錯誤提示如下:
libvirtd: relocation error: libvirtd: symbol dmtaskgetinfowithdeferredremove, version Base not defined in file libdevmapper.so.1.02 with link time reference
解決方案:yum -y upgrade device-mapper-libs
若啟動虛擬機時遇到如下問題,問題描述為:
error: internal error: unable to execute QEMU command 'cont': Resetting the Virtual Machine is required
檢查系統是否有vmx:cat /proc/cpuinfo | grep vmx
若沒有vmx,則需要開啟-enable-kvm選項。
若有vmx,則重新開啟虛擬機即可。