kvm單獨編譯教程
『壹』 KVM、QEMU和KQemu有什麼區別
1、KVM是一套虛擬機管理系統,包括內核虛擬構架和處理器相關模塊,其借用了 QEMU其它一些組件,KVM的非內核部分是由QEMU實現的;載入了模塊後,才能進一步通過其他工具創建虛擬機。
2、QEMU是另外的一套虛擬機管理系統,Kqemu是QEMU的加速器,可以認為是QEMU的一個插件;QEMU可以虛擬出不同架構的虛擬機,如在x86平台上可以虛擬出power機器。
3、KVM負責cpu虛擬化+內存虛擬化,實現了cpu和內存的虛擬化,但KVM不能模擬其他設備。QEMU是模擬IO設備(網卡,磁碟),KVM加上QEMU之後就能實現真正意義上伺服器虛擬化。因為用到了上面兩個東西,所以一般都稱之為QEMU-KVM。
(1)kvm單獨編譯教程擴展閱讀:
1、KVM 技術已經從最初的基礎SOHO辦公型,發展成為企業 IT 基礎機房設施管理系統。可以從kvm 客戶端管理軟體輕松的直接訪問位於多個遠程位置的伺服器和設備。
2、QEMU在GNU/linux平台上使用廣泛。具有高速度及跨平台的特性,通過KQEMU這個閉源的加速器,QEMU能模擬至接近真實電腦的速度。
3、KQEMU現可運行在基於x86或x86_64的Linux2.4或Linux 2.6主機上。
『貳』 KVM實例總結
{% note success %} poetry
<center style="box-sizing: border-box; margin-top: 0px; margin-bottom: 0px;">往事越千年,魏武揮鞭,東臨碣石有遺篇。蕭瑟秋風今又是,換了帆旅人間。 {% endnote %}</center>
kvm創建虛擬機的根本在於這樣一條命令, virsh define vm-template.xml ,這條命令的核心就是創建一個虛擬機,之後或者之前的內容都是圍繞著這條命令和這個虛擬機的。
所以,virsh define vm-template.xml 其本質是在安全可靠的前提下,將母機的資漏轎彎源通過kvm虛擬化的形式分配給子機。
所以主要考慮方向有兩個
1、保障母機和子機的安全可靠,包括系統安全和網路安全
2、進行資源分配,包括網路資源、存儲資源、計算資源等
該腳本考慮了母機分配資源不會超過母機承受范圍的資源安全,其他系統層面和網路層面的安全問題還需考慮
完成過程
[0]
剛開始考慮當母機資源超過一定比例則程序退出,比如磁碟使用超過2/3,後來覺得這樣不夠靈活,改用百分比,默認50%
在設置百分比的時候有幾點小問題
1、浮點數運算保留小數
使用scale可以准確保留小數,echo "scale=2;62/3" | bc 結果 20.66
使用printf可以保留小數位,補零填充 printf %.2f 結果20.00
2、浮點數運算不保留小數
echo "123.123"|sed "s/.. //g"
代表0到多個,所以第一個命令中. 只能替換掉小數點變成空
..代表了小數點之後的1到多個
3、除法
echo "2 / 3" | bc 這個結果會顯示為0
echo "scale=2 ;2 / 3" | bc 這個結果會顯示為.66
printf "%.2f" echo "scale=2;2/3" | bc 這個結果會顯示為0.66
[1]
剛開始的時候選擇將subvm_configuration.sh這個腳本cat進內存,然後用expect登錄到子機的時候echo到文件,然後執行。後來發現expect輸出的時候會把subvm_configuration.sh腳本里的內容先執行一遍,而且還存在其他一些問題,比如說echo到文件的時候殘缺不全、不換行、文件為空等。
後來採用磁碟共享的方式,在宿主機上創建一塊磁碟,然後掛載到/tmp/share/這個目錄,再將subvm_configuration.sh腳本和ipinfo配置文件復制到該目錄,之後在子機的XML文件中添加一塊disk(vdc),登錄進子機後,掛載vdc,此時就可以看到母機上/tmp/share/下的內容了。直接執行腳本即可。
磁碟共享也有一個缺點,就是文件內容不能實時刷新,比如在母機上改了ipinfo,只有子機重啟後,子機上的ipinfo才可以刷新,鑒於/tmp/share/這個目錄每個子機一生只有一次用到,所以這個問題暫時不需要解決。
[2]
創建子機
1、if ( vlanid != 0 &&返悶 xenbrx not in brctl show ) 會報錯網卡未找到導致虛擬機啟動失敗
2、vm-template模板不正確,包括<emulator>/usr/local/bin/qemu-system-x86_64</emulator>路徑不正確,會導致虛擬機無法啟動
3、disk的slot卡槽相同會導致虛擬機無法啟動
4、需要注意的是,virsh define vm-template 這條命令的執行路徑是/usr/local/etc/libvirt/qemu/vm-template,最後會在/usr/local/etc/libvirt/qemu/下生成vm$ipfmt.xml的配置文件。
[3]
expect會有很多問題
1、命令不按順序執行
2、傳入的變數為空,且傳入的變數下標是從0開始的;shell傳入變數下標從1開始,0代表自身文件
3、set timeout $time 設置的時間不一定準確,設置了300秒延時,但未到300s,程序還是退出了,可以考慮直接設置 timeout 為-1
4、expect有多種寫法,有expect << EOF ; expect eof ; 最正常的是上面用的
5、expect文件用的解釋器是/usr/bin/expect,這里將login.sh使用cat寫在了單獨的文件中
[4]
1、subvm_configuration.sh配置了兩張網卡,格式化vdb數據盤,配置ssh
2、eth0為連接外網的網卡,使用tunnel,eth1為內網網卡,使用vlan
xenbrX為隧道入口,母機收到從xenbr361口收到的報文,就發給另一端隧道,從而實現連接外網
tunnel network ---- host(default router: subhost -> netowrk , throught interface & sh vlan.sh ) ---- subhost
母機收到vlan的報文,就在指定vlan的廣播域內進行路由(不一定是母機進行路由)
vlan network ---- host(broadcast router: subhost ---> broadcast/vlanid throught 802.1Q ) ---- subhost
expect合理用法
『叄』 KVM之四:內存balloon的奇妙
玩轉KVM: 內存balloon的奇妙
上篇介紹了kvm的KSM內存合並技術,了解KSM的應用場景。下面進一步KVM的內存氣球balloon。
balloon技術應用場景
下面總結了一下內存氣球使用時候的伏枝扒情況:
Ballooning在節約內存和靈活分配內存方面有明顯的優勢,其好處有如下三點。
①因為能夠控制和監控ballooning,所以ballooning能夠潛在地節約大量的內存。它不同於內存頁共享技術(KSM是內核自發完成的、不可控),VM系統的內存只有在通過命令行調整balloon時才會隨之改變,所以能夠監控系統內存並驗證ballooning引起的變化。
②Ballooning對內存的調節很靈活,既可以精細的請求少量內存,又可以粗獷的請求大量的內存。
③hypervisor使用ballooning讓VM歸還部分內存,從而可以緩解其內存壓力。而且從氣球中回收的內存也不要求一定要被分配給另外某個進程(或另外的VM)。
從另一方面來說,KVM中ballooning的使用不方便、不完善的地方也是存在的,其缺點也有如下幾個。
①Ballooning需要VM操作系統載入virtio_balloon驅動,然而並非每個VM系統都有該驅動(如windows需要自己安裝該驅動)。
②如果有大量內存從VM系統中回收,Ballooning可能會降低VM操作系統運行的性能。一方面,內存的減少,可能會讓VM中作為磁碟數據緩存的內搭慎存被放到氣球中,從而VM中的磁碟I/O訪問會增加;另一方面,如果處理機制不夠好,也可能讓VM中正在運行的進程由於內存不足而執行失敗。
③目前沒有比較方便的、自動化的機制來管理ballooning,一般都是採用在QEMU monitor中執行balloon命令來實現ballooning的。沒有對VM的有效監控,沒有自動化的ballooning機缺昌制,這可能會讓生產環境中實現大規模自動化部署並不很方便。
④內存的動態增加或減少,可能會使內存被過度碎片化,從而降低內存使用時的性能。另外,內存的變化會影響到VM內核對內存使用的優化,比如:內核起初根據目前狀態對內存的分配採取了某個策略,而突然由於balloon的效果讓可用內存減少了很多,這時起初的內存策略可能就不是太優化的了。
KVM中的Ballooning是通過宿主機和VM協同來實現的,在宿主機中應該使用2.6.27及以上版本的Linux內核(包括KVM模塊),使用較新的qemu-kvm(如0.13版本以上),在VM中也使用2.6.27及以上內核且將「CONFIG_VIRTIO_BALLOON」配置為模塊或編譯到內核。在很多Linux發行版中都已經配置有「CONFIG_VIRTIO_BALLOON=m」,所以用較新的Linux作為VM系統,一般不需要額外配置virtio_balloon驅動,使用默認內核配置即可。
我在windows2008R2和centos7下面完成balloon的應用操作。
VM查看balloon狀態:
在vm中,可以通過內核,模塊載入,pci設備等查看balloon是否正常運行。
根據上面輸出可知,VM中virtio_balloon模塊已經載入,有一個叫做「Red Hat, Inc Virtio memory balloon」的PCI設備,它使用了virtio_pci驅動。如果是WindowsVM,則可以在「設備管理器」看到使用VirtIO Balloon設備,稍後可以檢驗一下。
在宿主機查看並設置balloon:
我通過virsh工具,
設置balloon
virsh # qemu-monitor-command centos7.0 --hmp --cmd balloon 2046
或者
virsh # setmem centos7.0 2Gib # --size默認是Kib
如果沒有使用Balloon設備,則monitor中用「info balloon」命令查看會得到「Device 'balloon' has not been activated」的警告提示。而「balloon 2046」命令將VM內存設置為2046MB。
(4)設置了VM內存為512 MB後,再到VM中檢查,如下所示。
[root@kvm-guest ~]# free -m
如果是WindowsVM(如Win7),當balloon使其可用內存從2GB降低到512MB時,在其「任務管理器」中看到的內存總數依然是2GB,但是看到它的內存已使用量會增大1536MB(如從其原來使用量350MB,變為1886MB),這里佔用的1536MB正是Balloon設備佔用的,WindowsVM系統其他程序已不能使用這1636 MB內存,這時宿主機系統就可以再次分配這里的1536MB內存用於其他用途。
另外,值得注意的是,當通過「balloon」命令讓VM內存增加時,其最大值不能超過QEMU命令行啟動時設置的內存,例如:命令行中內存設置為2048MB,如果在Monitor中執行「balloon 4096」則設置的4096MB內存不會生效,其值將會被設置為啟動命令行中的最大值(即2048MB)。
『肆』 linux 下 KVM怎麼裝
KVM在kernel里,所以你只要編譯內核時注意一下就好發現。我猜你一定沒有編譯咐穗過,所以才不知道。
KVM要硬體虛舉昌擬化支持,就算你CPU支持,你的BIOS也不一定默認打開。要注衡答卜意!
還有qemu很難搞!
『伍』 如何在Linux發行版上安裝和配置KVM和Open vSwitch
將Open vSwitch安裝在Ubuntu或Debian上
雖然OVS以程序包的方式出現在Ubuntu或Debian上,但我在此還是通過源代碼來構建OVS,這將擁有最新的功能特性和修正版。鋒彎
首先,安裝用於構建OVS的依賴項。
$ sudo apt-get install build-essential libssl-dev linux-headers-$(uname -r)
通過源代碼來構建OVS,如下所示。下列步驟將構建OVS內核模塊以及OVS用戶空間工具。
$ wget http://openvswitch.org/releases/openvswitch-1.9.3.tar.gz
$ tar xvfvz openvswitch-1.9.3.tar.gz
$ cd openvswitch-1.9.3
$ ./configure --with-linux=/lib/moles/`uname -r`/build
$ make
接下來,繼續在/usr/local/share/下安裝OVS用戶空間組件:
$ sudo make install
下一步是,測試OVS內核模塊(安裝該模塊之前)。為此,先在內核中裝入內核模塊。
$ sudo insmod ./datapath/linux/openvswitch.ko
證實OVS內核模塊已成功裝入。
$ lsmod | grep openvswitch
openvswitch 97934 0
一旦你證實openvswitch.ko已成功裝入到內核中,繼續安裝內核模塊,如下所示。
$ sudo make moles_install
配置和啟動Open vSwitch
創建一個框架式OVS配置資料庫。
$ sudo mkdir /etc/openvswitch
$ sudo ovsdb-tool create /etc/openvswitch/conf.db ./vswit
chd/vswitch.ovsschema
啟動OVS資料庫伺服器。
$ sudo ovsdb-server --remote=punix:/usr/local/var/run/ope
nvswitch/db.sock - remote=db:Open_vSwitch,manager_options
--pidfile --detach
OVS配置資料庫初始化。
$ sudo ovs-vsctl --no-wait init
最後,啟動OVS守護程序。
$ sudo ovs-vswitchd --pidfile --detach
將KVM安裝在Ubuntu或Debian上
使用apt-get命令,安裝KVM和必要的用戶空間工具。
$ sudo apt-get install qemu-kvm libvirt-bin bridge-utils
virt-manager
將一個普通的非根用戶(如alice)添加到libvirtd群組銀跡悶,那樣該用戶不需要根用戶許可權,就能啟動虛擬機。
$ sudo adser alice libvirtd
退出,重新以該用戶身份登錄,讓群組成員的變更生效。
運行下面這個命令。如果你看到空空如也的虛擬機列表,這意味著KVM已成功設置完畢。
$ virsh -c qemu:///system list
Id Name State
為KVM配置Open vSwitch
現在是時候創建OVS網橋啟動腳本了,那樣啟動或終止虛擬機時,OVS就能自動配置。
安裝依賴項(用戶模式Linux實用工具),這些依賴項將用於處理Linux網州鏈橋模式。
$ sudo apt-get install uml-utilities
創建網橋啟動腳本,如下所示。
$ sudo vi /etc/openvswitch/ovs-ifup
#!/bin/sh
switch='br0'
/sbin/ifconfig $1 0.0.0.0 up
ovs-vsctl add-port ${switch} $1
$ sudo vi /etc/openvswitch/ovs-ifdown
#!/bin/sh
switch='br0'
/sbin/ifconfig $1 0.0.0.0 down
ovs-vsctl del-port ${switch} $1
$ sudo chmod +x /etc/openvswitch/ovs-if*
然後,創建一個默認的網橋br0,並添加一個物理網路介面,虛擬機將通過這個介面與外部網路進行聯系。在該教程中,我假設這類網路介面是eth5。
$ sudo ovs-vsctl add-br br0
$ sudo ovs-vsctl add-port br0 eth5
藉助KVM啟動虛擬機
現在你可以准備啟動訪客虛擬機了。
我假設,你已經准備好了一個訪客虛擬機映像(比如ubuntu-client.img)。使用下面這個命令,啟動訪客虛擬機。
$ sudo kvm -m 1024 -net nic,macaddr=11:11:11:EE:EE:EE -ne
t tap,script=/etc/openvswitch/ovs-ifup,downscript=/etc/op
envswitch/ovs-ifdown -vnc :1 -drive file=/home/dev/images
/ubuntu-client.img,boot=on
這會創建並啟動一個訪客虛擬機;一旦訪客虛擬機啟動,其虛擬介面就自動添加到OVS網橋br0。
『陸』 華為mate40pro開啟kvm
1、進入華為手機軟體應用界面,選擇「EMUI」切換界面,在EMUI界面頂端的菜單欄中選擇「下載御好」進入。2、切換界面後,點擊右側「刷機解鎖」按鈕,在彈出的對話框中的刷機解鎖後點擊「打開」,然缺好後登陸華為手機賬號,根據提示添加信息申請解鎖密碼,然後點擊「提交」。3、申請完成後,可以根據獲取的解鎖碼,通過華為手機解鎖教程完成華為手機的解鎖操作。成功完成華為手機解鎖操作後,打開USB調試(打開方法:設置--關於手機--多次點擊版本號至開啟開發者選項--重新進入設置--開發者選項--開啟USB調試),運行強力一鍵root軟體識別手機設備。4、接著根據向導提示點擊「安裝APP」,進入強力一鍵伏拆鉛root手機版安裝狀態,請耐心等待軟體成功安裝到手機上。軟體安裝完成後,在手機界面中點擊「立即體驗」--「一鍵ROOT」即可完成華為手機root操作,獲取手機root許可權。
『柒』 手機刷 kvm 硬體虛擬化
"您好,官網沒有提供刷機軟體。由於刷機存在風險,如因自行刷機後導致的手機問題,還有可能會影響包修,因此我們不建議您自行刷機。
若手機因系統故障無法正常使用或自行刷機後導致手機出現問題,建議您將機器送到售後服務中心,由工程師幫助檢查處理。"
『捌』 kvm跨系統原理
KVM源代碼分析1:基本工作原理 下了很大決心挖這個坑,雖然之前對kvm有些了解,但紙上得來終覺淺,只有深入到代碼層面,才能擯棄皮毛,看到血肉,看到真相。作為挖坑的奠基石,准備寫上幾篇:kvm基本工作原理、CPU
調度原理、KVM內存管理、KVM存儲管理、KVM設備管理。挖好之後進入正題。 所有的虛擬化都是兩部分組成:虛擬機和宿主(HOST),虛擬機內運行正常的業務程序,HOST則正常運行虛擬機,此處的虛擬機則是KVM,負責在HOST裡面虛擬化出獨立的OS環境。 KVM屬於完全虛擬化,功能組件上由兩部分組成,KVM Driver(內核態)和Qemu(用戶態)。KVM Driver負責模擬虛擬機的CPU運行,內存管理,設備管理等;Qemu則模擬虛擬機的IO設備介面以及用戶態控制介面。 kvm-oenhan 如上圖所示,Qemu在最上層,將虛擬機的整體呈現到host用戶上,可以理解成客戶模式;Qemu通過中間層libkvm或者ioctl等控制/dev/kvm設備介面,從而掌握內核態中kvm
驅動進行的資源分配,即用戶態模式;kvm驅動接收用戶態操作指令,控制虛擬機在內核態的資源分配,稱之為內核模式。在HOST裡面,客戶模式的體現就是一個虛擬機內部環境,用戶態則是虛擬機進程。
oenhan_kvm 上圖是一個執行過程圖,首先啟動一個虛擬化管理軟體,開始啟動一個虛擬機,通過ioctl等系統調用向內核中申請指定的資源,搭建好虛擬環境,啟動虛擬機內的系統,虛擬機內的系統向內核反饋相關資源申請處理,如果是io請求,則提交給用戶模式下的qemu處理,非io請求則將處理結果反饋給客戶模式。 libkvm是qemu自己使用的用戶態介面,可以把qemu源代碼解開,裡面有libkvm的函數庫,不過並不對外呈現,虛擬機編程介面一般使用libvirt。
KVM的思想是在Linux內個的基礎上添加虛擬機管理模塊,重用Linux內核中已經完善的進程調度,內存管理,IO管理等部分,因此KVM並不是一個完整的模擬器,而只是一個提供虛擬化功能的內核插件,具體的模擬器工作是藉助QEMU來完成的. 在Xen的體系結構中,Xen Hypervisor運行於硬體之上,並且將系統資源進行了虛擬化,將虛擬化的資源分配給上層的虛擬機(VM),然後通過虛擬機VM來運行相應的客戶機操作系統. 在KVM中,一個虛擬機就是一個傳統的Linux中的線程,擁有自己的PID號,也可以被kill系統調用直接殺死(在這種情況下,虛擬機的行為表現為"突然斷電").在一個Linux系統中,有多少個VM,就有多少個進程.如: 以上VM進程信息是通過qemu-kvm來進行的,相關的控制開關作為命名行參數輸入,如虛擬映像對應的磁碟,虛擬網卡,VNC設置,顯卡設置和IO設置等. KVM的API是通過/dev/kvm設備進行訪問的./dev/kvm是一個字元型設備. 1 root@ubuntu:~# ls -l /dev/kvm 2 crw-rw---- 1 root kvm 10, 232 Mar 14 14:20 /dev/kvm kvm僅僅是Linux內核的一個模塊,管理和創建完整的KVM虛擬機,需要更多的輔助工具. 1.qemu-Kvm:僅有KVM模塊是遠遠不夠的,因為用戶無法直接控制內核模塊去做事情,還必須有一個用戶空間的工具。關於用戶空間的工具,KVM 的開發者選擇了已經成型的開源虛擬化軟體 QEMU.QEMU 是一個強大的虛擬化軟體,它可以虛擬不同的 CPU 構架. 運行在內核態的KVM模塊通過/dev/kvm字元設備文件向外提供操作介面.KVM通過提供libkvm這個操作庫,將/dev/kvm這一層面的ioctl類型的API轉化成為通常意義上的函數API調用,提供給QEMU的相應適配層. 比如說在x86 的CPU上虛擬一個Power的CPU,並利用它編譯出可運行在 Power上
『玖』 如何在Debian或Ubuntu上編譯virt-manager
眼下有幾種不同的方法可以管理在KVM虛擬機管理程序上運行的虛擬機。比如說,virt-manager就是一種廣受歡迎的基於圖形用戶界面(GUI)的前端工具,可用來管理虛擬機。不過,如果你想在無外設伺服器上使用KVM,那麼基於GUI的解決方案並非理想方案。這時候,virsh就派得上用場。virsh是一種命令行工具,可用於管理來賓虛擬機(guest
VM)。就其底層而言,virsh依賴libvirtd服務,該服務可以控制幾種不同的虛擬機管理程序,其中包括KVM、Xen、QEMU、LXC和OpenVZ。
如果你想讓虛擬機的配置和管理實現自動化,virsh等命令行管理界面也大有用處。此外,virsh支持多種虛擬機管理程序,這就意味著你可以通過同一個virsh界面,管理不同的虛擬機管理程序。
我在本教程中將演示如何在Debian或Ubuntu上使用virsh,從命令行運行KVM。
第一步:證實主機支持硬體虛擬化
作為第一步,證實主機的處理器配備硬體虛擬化擴展機制(比如英特爾VT或AMD-V),KVM需要這樣的機制。下面這個命令就能證實一點。
$
egrep '(vmx|svm)' --color /proc/cpuinfo flags : fpu vme de
pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts
mmx fxsr sse sse2
ss syscall nx rdtscp lm constant_tsc up arch_perfmon pebs bts nopl
xtopology tsc_reliable nonstop_tsc aperfmperf pni pclmulqdq vmx ssse3
cx16 pcid sse4_1 sse4_2 x2apic popcnt aes xsave avx f16c rdrand
hypervisor lahf_lm ida arat epb xsaveopt pln pts dtherm tpr_shadow vnmi
ept vpid fsgsbase smep
如果輸出結果並不含有vmx或svm標記,這意味著主機的處理器沒有支持硬體虛擬化的功能。因而,你就無法在主機上使用KVM。證實了主機處理器隨帶vmx或svm後,接下來繼續安裝KVM。
第二步:安裝KVM
使用apt-get,安裝KVM及相關的用戶空間工具。
$ sudo apt-get install qemu-kvm libvirt-bin
下一步,將你的用戶ID添加到libvirt群組,那樣你就能以非root普通用戶的身份,管理虛擬機了。作為上面安裝KVM的一部分,必須創建libvirt群組。
$ sudo adser [youruserID] libvirt
重新裝入更新後的群組成員信息,如下所示。看到要求輸入密碼的提示後,輸入你的登錄密碼。
$ exec su -l $USER
這時候,你應該能夠以普通用戶的身份運行virsh了。為了測試一下,不妨試一試下面這個命令,它會列出可用的虛擬機(目前沒有一個虛擬機)。要是你沒有遇到許可權錯誤,這意味著到目前為止,一切正常。
$ virsh --connect qemu:///system list Id Name State