使用QEMU創建虛擬機

QEMU是一款高效而實用的模擬器及虛擬機監管器,本系列博客試圖從最基本的安裝使用開始,逐層深入地介紹QEMU。本篇文章從QEMU最基礎的知識講起,介紹了QEMU的安裝使用、系統模擬的基本原理以及如何利用QEMU來創建和管理虛擬機。

一、QEMU簡介

QEMU是一款開源的模擬器及虛擬機監管器(Virtual Machine Monitor, VMM)。QEMU主要提供兩種功能給用戶使用。一是作爲用戶態模擬器,利用動態代碼翻譯機制來執行不同於主機架構的代碼。二是作爲虛擬機監管器,模擬全系統,利用其他VMM(Xen, KVM, etc)來使用硬件提供的虛擬化支持,創建接近於主機性能的虛擬機。

用戶可以通過不同Linux發行版所帶有的軟件包管理器來安裝QEMU。如在Debian系列的發行版上可以使用下面的命令來安裝:

sudo apt-get install qemu

或者在紅帽系列的發行版上使用如下命令安裝:

sudo yum install qemu -y

除此之外,也可以選擇從源碼安裝。

獲取QEMU源碼

可以從QEMU官網上下載QEMU源碼的tar包,以命令行下載2.0版本的QEMU爲例:

$wget http://wiki.qemu-project.org/download/qemu-2.0.0.tar.bz2
$tar xjvf qemu-2.0.0.tar.bz2

如果需要參與到QEMU的開發中,最好使用Git獲取源碼:

$git clone git://git.qemu-project.org/qemu.git

編譯及安裝

獲取源碼後,可以根據需求來配置和編譯QEMU。

$cd qemu-2.0.0 //如果使用的是git下載的源碼,執行cd qemu
$./configure --enable-kvm --enable-debug --enable-vnc --enable-werror  --target-list="x86_64-softmmu"
$make -j8
$sudo make install

configure腳本用於生成Makefile,其選項可以用./configure --help查看。這裏使用到的選項含義如下:

--enable-kvm:編譯KVM模塊,使QEMU可以利用KVM來訪問硬件提供的虛擬化服務。
--enable-vnc:啓用VNC--enalbe-werror:編譯時,將所有的警告當作錯誤處理。
--target-list:選擇目標機器的架構。默認是將所有的架構都編譯,但爲了更快的完成編譯,指定需要的架構即可。

二、基本原理

QEMU作爲系統模擬器時,會模擬出一臺能夠獨立運行操作系統的虛擬機。如下圖所示,每個虛擬機對應主機(Host)中的一個QEMU進程,而虛擬機的vCPU對應QEMU進程的一個線程。

QEMU結構圖

系統虛擬化最主要是虛擬出CPU、內存及I/O設備。虛擬出的CPU稱之爲vCPU,QEMU爲了提升效率,借用KVM、XEN等虛擬化技術,直接利用硬件對虛擬化的支持,在主機上安全地運行虛擬機代碼(需要硬件支持)。虛擬機vCPU調用KVM的接口來執行任務的流程如下(代碼源自QEMU開發者Stefan的技術博客):

open("/dev/kvm")
ioctl(KVM_CREATE_VM)
ioctl(KVM_CREATE_VCPU)
for (;;) {
     ioctl(KVM_RUN)
     switch (exit_reason) {
     case KVM_EXIT_IO:  /* ... */
     case KVM_EXIT_HLT: /* ... */
     }
}

QEMU發起ioctrl來調用KVM接口,KVM則利用硬件擴展直接將虛擬機代碼運行於主機之上,一旦vCPU需要操作設備寄存器,vCPU將會停止並退回到QEMU,QEMU去模擬出操作結果。

虛擬機內存會被映射到QEMU的進程地址空間,在啓動時分配。在虛擬機看來,QEMU所分配的主機上的虛擬地址空間爲虛擬機的物理地址空間。

QEMU在主機用戶態模擬虛擬機的硬件設備,vCPU對硬件的操作結果會在用戶態進行模擬,如虛擬機需要將數據寫入硬盤,實際結果是將數據寫入到了主機中的一個鏡像文件中。

三、創建及使用虛擬機

命令行創建及啓動虛擬機

成功安裝QEMU之後便可創建自己的虛擬機。具體步驟如下:

1, 使用qemu-img創建虛擬機鏡像。虛擬機鏡像用來模擬虛擬機的硬盤,在啓動虛擬機之前需要創建鏡像文件。

[kelvin@kelvin tmp]$ qemu-img create -f qcow2 fedora.img 10G
Formatting 'fedora.img', fmt=qcow2 size=10737418240 encryption=off cluster_size=65536 lazy_refcounts=off 
[kelvin@kelvin tmp]$ ls
fedora.img

-f選項用於指定鏡像的格式,qcow2格式是QEMU最常用的鏡像格式,採用寫時複製技術來優化性能。fedora.img是鏡像文件的名字,10G是鏡像文件大小。鏡像文件創建完成後,可使用qemu-system-x86來啓動x86架構的虛擬機:

qemu-system-x86_64 fedora.img

此時會彈出一個窗口來作爲虛擬機的顯示器,顯示內容如下:

QEMU虛擬機顯示器輸出

因爲fedora.img中並未給虛擬機安裝操作系統,所以會提示“No bootable device”,無可啓動設備。

2, 準備操作系統鏡像。

可以從不同Linux發行版的官方網站上獲取安裝鏡像,以fedora20爲例:

[kelvin@kelvin tmp]$ wget http://ftp6.sjtu.edu.cn/fedora/linux/releases/20/Live/x86_64/Fedora-Live-Desktop-x86_64-20-1.iso

3, 檢查KVM是否可用。

QEMU使用KVM來提升虛擬機性能,如果不啓用KVM會導致性能損失。要使用KVM,首先要檢查硬件是否有虛擬化支持:

[kelvin@kelvin ~]$ grep -E 'vmx|svm' /proc/cpuinfo

如果有輸出則表示硬件有虛擬化支持。其次要檢查kvm模塊是否已經加載:

[kelvin@kelvin ~]$ lsmod | grep kvm
kvm_intel             142999  0 
kvm                   444314  1 kvm_intel

如果kvm_intel/kvm_amd、kvm模塊被顯示出來,則kvm模塊已經加載。最後要確保qemu在編譯的時候使能了KVM,即在執行configure腳本的時候加入了–enable-kvm選項。

4, 啓動虛擬機安裝操作系統。

執行下面的命令啓動帶有cdrom的虛擬機:

[kelvin@kelvin tmp]$ qemu-system-x86_64 -m 2048 -enable-kvm fedora.img -cdrom ./Fedora-Live-Desktop-x86_64-20-1.iso

-m 指定虛擬機內存大小,默認單位是MB, -enable-kvm使用KVM進行加速,-cdrom添加fedora的安裝鏡像。可在彈出的窗口中操作虛擬機,安裝操作系統,安裝完成後重起虛擬機便會從硬盤(fedora.img)啓動。之後再啓動虛擬機只需要執行:

[kelvin@kelvin tmp]$ qemu-system-x86_64 -m 2048 -enable-kvm fedora.img

即可。

圖形界面創建及啓動虛擬機

命令行啓動虛擬機比較繁瑣,適合開發者,但對於普通用戶來說,採用圖形界面管理虛擬機則更爲方便。採用圖形界面管理QEMU虛擬機需要安裝virt-manager,紅帽系列的發行版只需要執行命令:

$sudo yum install virt-manager -y

安裝完成後用root用戶啓動virt-manager:

$su -
#virt-manager

啓動後的界面如下圖所示:

virt-manager界面

點擊左上角電腦圖標即可創建虛擬機。按照步驟操作即可完成對虛擬機的創建。

發佈了24 篇原創文章 · 獲贊 53 · 訪問量 100萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章