上次討論了如何在 VMware ESXi 虛擬機上運行 KVM 問題,前不久有讀者想 「在 kvm 上面建立個虛擬機安裝 rackspace 的 openstack」 問到 「如何開啓虛擬機上的 CPU VT 功能以便在 KVM 上運行 KVM」,又是一個嵌套應用虛擬機的問題:在 KVM 虛擬機上運行 KVM 虛擬機。如下步驟在 Ubuntu Server 12.04 LTS 64 bit 上測試經過。code
首先檢查 KVM host(母機)上是否打開了嵌套虛擬機功能(默認是開啓的):server
# modinfo kvm_intel | grep nested parm: nested:bool # cat /sys/module/kvm_intel/parameters/nested Y
若是上面的顯示結果不是 Y 的話須要開啓 nested:
# modprobe -r kvm-intel # modprobe kvm-intel nested=1 # cat /sys/module/kvm_intel/parameters/nested Y
而後在 KVM guest(虛擬機)的 xml 配置文件中加入 vmx 選項,並啓動虛擬機(這裏用的是 Ubuntu 官方發佈的 Ubuntu KVM 鏡像 ubuntu-12.04-server-cloudimg-amd64-disk1.img):
# vi nestedvm.xml ... <cpu match='exact'/> <model>core2duo</model/> <feature policy='require' name='vmx'//> </cpu/> ... # virsh create nestedvm.xml
啓動虛擬機後登錄並安裝 KVM,執行 kvm-ok 和 modinfo 均出現錯誤:
# apt-get install ubuntu-virt-server # kvm-ok INFO: /dev/kvm does not exist HINT: sudo modprobe kvm_intel INFO: Your CPU supports KVM extensions KVM acceleration can be used # modinfo kvm_intel ERROR: modinfo: could not find module kvm_intel
這是由於咱們使用的是 ubuntu-12.04-server-cloudimg-amd64-disk1.img 這個官方虛擬機鏡像,這個鏡像使用的是 linux 3.2.0-23-virtual 內核,缺乏 KVM 模塊(kvm-intel.ko),因此咱們須要改成 generic 內核:
# uname -a Linux test 3.2.0-23-virtual #36-Ubuntu SMP Tue Apr 10 22:29:03 UTC 2012 x86_64 x86_64 x86_64 GNU/Linux # apt-get install linux-generic
重啓後進入虛擬機執行 kvm-ok 和 modinfo 均成功:
# kvm-ok INFO: /dev/kvm exists KVM acceleration can be used # modinfo kvm_intel filename: /lib/modules/3.2.0-30-generic/kernel/arch/x86/kvm/kvm-intel.ko license: GPL author: Qumranet srcversion: 3BAF54F96ECD4B02292CAA0 depends: kvm intree: Y vermagic: 3.2.0-30-generic SMP mod_unload modversions parm: vpid:bool parm: flexpriority:bool parm: ept:bool parm: unrestricted_guest:bool parm: emulate_invalid_guest_state:bool parm: vmm_exclusive:bool parm: yield_on_hlt:bool parm: fasteoi:bool parm: nested:bool parm: ple_gap:int parm: ple_window:int
如今應該能夠在這個虛擬機上建立另外一個虛擬機了。
這個博客不錯:http://www.vpsee.com/,介紹可不少虛擬化和雲計算的實際操做,有時間能夠好好看看。