2021-05-12 14:32:11
CentOS 下 KVM QEMU 虛擬機器 安裝 設定 詳解
一,什麼是KVM
KVM包括很多部件:首先,它是一個Linux核心模組(現在包括在主線中)用於轉換處理器到一種新的使用者 (guset) 模式。使用者模式有自己的ring狀態集合,但是特權ring0的指令會陷入到管理器(hypervisor)的程式碼。由於這是一個新的處理器執行模型,程式碼不需要任何的改動。
除了處理器狀態轉換,這個核心模組同樣處理很小一部分低層次的模擬,比如MMU註冊(用於管理VM)和一部分PCI模擬的硬體。
在可預見的未來,Qemu團隊專注於硬體模擬和可移植性,同時KVM團隊專注於核心模組(如果某些部分確實有效能提升的話,KVM會將一小部分模擬程式碼移進來)和與剩下的使用者空間程式碼的互動。
kvm-qemu可執行程式像普通Qemu一樣:分配RAM,載入程式碼,不同於重新編譯或者呼叫calling KQemu,它建立了一個執行緒(這個很重要);這個執行緒呼叫KVM核心模組去切換到使用者模式,並且去執行VM程式碼。當遇到一個特權指令,它從新切換會KVM核心模組,該核心模組在需要的時候,像Qemu執行緒發信號去處理大部分的硬體模擬。
這個體系結構一個比較巧妙的一個地方就是客戶程式碼被模擬在一個posix執行緒,這允許你使用通常Linux工具管理。如果你需要一個有2或者4核的虛擬機器,kvm-qemu建立2或者4個執行緒,每個執行緒呼叫KVM核心模組並開始執行。並行性(若果你有足夠多的真實核)或者排程(如果你不管)是被通用的Linux排程器,這個使得KVM程式碼量十分的小
當一起工作的時候,KVM管理CPU和MEM的存取,QEMU模擬硬體資源(硬碟,音效卡,USB,等等)當QEMU單獨執行時,QEMU同時模擬CPU和硬體。
二,安裝設定KVM
# yum -y install kvm Python-virtinst libvirt bridge-utils
virt-manager qemu-kvm-tools virt-viewer virt-v2v qemu-kvm tunctl
[root@localhost ~]#vim /etc/sysconfig/selinux //關閉selinux
SELINUX=disabled
[root@localhost ~]#reboot
[root@localhost ~]# cat /etc/RedHat-release
CentOS release 6.5 (Final) //centos 6.5
三,啟動libvirtd
[root@localhost ~]# /etc/init.d/libvirtd start //啟動
[root@localhost ~]# ps -e|grep libvirtd //檢視是否啟動
19458 ? 00:00:01 libvirtd
四,檢視kvm模組是否正確載入
[root@localhost ~]# lsmod |grep kvm
kvm_intel 54285 0
kvm 333172 1 kvm_intel
五,設定網路橋接
[root@localhost network-scripts]# cat ifcfg-eth0 |awk '{if($0 !~ /^$/ && $0 !~ /^#/) {print $0}}'
DEVICE=eth0
TYPE=Ethernet
ONBOOT=yes
BOOTPROTO=none
BRIDGE=br0
IPV6INIT=no
HWADDR=F8:BC:12:60:99:86
[root@localhost network-scripts]# cat ifcfg-br0 |awk '{if($0 !~ /^$/ && $0 !~ /^#/) {print $0}}'
DEVICE=br0
TYPE=Bridge
ONBOOT=yes
BOOTPROTO=static
IPADDR=192.168.10.103
GATEWAY=192.168.10.1
NETMASK=255.255.255.0
DNS1=192.168.10.1
IPV6INIT=no
DELAY=0
重新啟動網路,發現報以下錯誤:
[root@localhost network-scripts]# /etc/init.d/network start
彈出環回介面: [確定]
彈出介面 eth0: 錯誤:啟用連線失敗:Master connection not found or invalid
[失敗]
彈出介面 br0: 錯誤:啟用連線失敗:Failed to determine connection's virtual interface name
[失敗]
RTNETLINK answers: File exists
RTNETLINK answers: File exists
RTNETLINK answers: File exists
解決辦法:
[root@localhost rules.d]# service NetworkManager stop //這個關閉掉就行
停止 NetworkManager 守護行程: [確定]
[root@localhost rules.d]# service network restart
正在關閉介面 br0: [確定]
正在關閉介面 eth0: [確定]
關閉環迴介面: [確定]
彈出環回介面: [確定]
彈出介面 eth0: [確定]
彈出介面 br0: Determining if ip address 192.168.10.103 is already in use for device br0...
[確定]
如果以下內容就說明設定成功了:
[root@localhost network-scripts]# ifconfig
br0 Link encap:Ethernet HWaddr F8:BC:12:60:99:86 //有這個就OK
inet addr:192.168.10.103 Bcast:192.168.10.255 Mask:255.255.255.0
inet6 addr: fe80::fabc:12ff:fe60:9986/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:36416 errors:0 dropped:0 overruns:0 frame:0
TX packets:28648 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:13151508 (12.5 MiB) TX bytes:5962449 (5.6 MiB)
eth0 Link encap:Ethernet HWaddr F8:BC:12:60:99:86
inet6 addr: fe80::fabc:12ff:fe60:9986/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:1360857 errors:0 dropped:0 overruns:0 frame:0
TX packets:902173 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:1913592871 (1.7 GiB) TX bytes:72387220 (69.0 MiB)
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:16436 Metric:1
RX packets:176842 errors:0 dropped:0 overruns:0 frame:0
TX packets:176842 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:880282316 (839.5 MiB) TX bytes:880282316 (839.5 MiB)
virbr0 Link encap:Ethernet HWaddr 52:54:00:1A:B6:F1
inet addr:192.168.122.1 Bcast:192.168.122.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:37 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:0 (0.0 b) TX bytes:4651 (4.5 KiB)
[root@localhost network-scripts]# brctl show
bridge name bridge id STP enabled interfaces
br0 8000.f8bc12609986 no eth0 //有這個就OK
virbr0 8000.5254001ab6f1 yes virbr0-nic
六,用virt-install生成.img檔案
# virt-install --name=Ubuntu1
--ram 1024 --vcpus=1
--disk path=/root/ubuntu1.img,size=10
--accelerate --cdrom /root/ubuntu-14.04-desktop-amd64.iso
--graphics vnc,port=5920 --network bridge=br0
如果報以下錯誤:
could not open disk image : Permission denied
解決方法:
[root@localhost ~]# cat /etc/libvirt/qemu.conf |awk '{if($0 !~ /^$/ && $0 !~ /^#/) {print $0}}'
vnc_listen = "0.0.0.0"
user = "root" //去掉註釋
group = "root" //去掉註釋
dynamic_ownership = 0 //去掉註釋,把1改為0
dynamic_ownership = 0 //去掉註釋,把1改為0
這一步做完,系統檔案就好了。
七,啟動虛擬機器
如果報以下錯誤
[root@localhost ~]# virsh start ubuntu1
錯誤:域已經活躍
解決辦法:
[root@localhost ~]# pkill qemu-kvm
[root@localhost ~]# virsh start ubuntu1
域 ubuntu1 已開始
[root@localhost ~]# virt-viewer ubuntu1 //進入圖形介面
Linux入門學習教學:虛擬機器體驗之QEMU篇 http://www.linuxidc.com/Linux/2015-03/114461.htm
Ubuntu 12.04之找不到Qemu命令 http://www.linuxidc.com/Linux/2012-11/73419.htm
Arch Linux上安裝QEMU+EFI BIOS http://www.linuxidc.com/Linux/2013-02/79560.htm
QEMU的翻譯框架及偵錯工具 http://www.linuxidc.com/Linux/2012-09/71211.htm
QEMU 程式碼分析:BIOS 的載入過程 http://www.linuxidc.com/Linux/2014-12/110472.htm
相關文章