當前位置:首頁 » 編程軟體 » kvm單獨編譯教程

kvm單獨編譯教程

發布時間: 2023-05-20 08:03:35

『壹』 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

熱點內容
64位access資料庫 發布:2025-07-17 05:35:58 瀏覽:374
php文件的相對路徑 發布:2025-07-17 05:34:22 瀏覽:711
矢量的叉乘運演算法則 發布:2025-07-17 05:29:41 瀏覽:661
dell雲存儲伺服器 發布:2025-07-17 05:21:06 瀏覽:255
銑床怎麼編程 發布:2025-07-17 05:20:29 瀏覽:776
sql11oracle 發布:2025-07-17 05:15:39 瀏覽:744
全國各地移動dns伺服器ip地址 發布:2025-07-17 05:07:47 瀏覽:312
sdvn加密 發布:2025-07-17 05:01:36 瀏覽:739
怎麼提取電腦緩存中的音樂 發布:2025-07-17 04:53:14 瀏覽:27
網路主根伺服器是什麼 發布:2025-07-17 04:44:31 瀏覽:350