1. 程式人生 > >kvm虛擬化技術(一)

kvm虛擬化技術(一)

虛擬化技術基礎

李家宜 [email protected]

虛擬化歷史

  • 最早起源於分時系統
  • IBM最早實現在一臺主機上執行多個作業系統
  • 20世紀90年代Vmware實現了X86平臺伺服器下的虛擬化,採用全虛擬化模式
  • 2003年,Xen提出了半虛擬化概念,提升整體效率
  • 虛擬化技術逐漸發展成硬體虛擬化階段
  • 2005年,openVZ出現,在linux平臺上的容器化技術實現
  • 2008年,LXC釋出
  • 2013年,docker釋出

虛擬化技術簡介

隨著計算機硬體技術不斷的發展,資源的容量越來越大,價格也越來越低,資源的浪費變成了一個不可避免的問題。為了充分利用資源,虛擬化技術由此而生。虛擬化實際是為了優化資源而誕生的一種技術,可以有效地動態調配資源,簡化管理。為了充分利用物理資源,在計算元件層和物理資源層中引入了一個虛擬化層,對上提供虛擬的系統資源,對下提供真實物理資源的排程方法。

軟體級虛擬化和硬體級虛擬化

  • 軟體級虛擬化

該方案是用純軟體的方法在現有的物理平臺上實現對物理平臺資源分配呼叫。客戶機的指令並不直接在物理平臺上執行,而是由軟體模擬,通過軟體進行轉譯後由真機執行操作。

優勢:隔離了宿主機和虛擬機器的操作指令集,避免衝突。

劣勢:效能較差。

  • 硬體級虛擬化

物理平臺本身完成了對特殊指令的轉譯工作。一旦虛擬機器想要去訪問物理資源,就會直接被硬體截獲,將控制權交給指令轉譯程式處理。

優勢:簡化了VMM的設計,提升了整體的效能。

劣勢:需要CPU、BIOS、主機板晶片等硬體的支援。

半虛擬化及全虛擬化

  • 半虛擬化

軟體虛擬化相對來說效能較弱,於是產生了一種解決方案,即改動虛擬機器核心,讓其知曉自己在虛擬化環境下工作,從而主動與VMM協同工作。半虛擬化弱化了VMM對於指令集的截獲,變更為主動通知,但是,半虛擬化必須要修改虛擬機器的原始碼來實現。

代表產品:XEN,適用於BSD,linux,等開源作業系統,不適用於windows等閉源作業系統。

  • 全虛擬化

全虛擬化模擬了所有的硬體,包括CPU、記憶體、儲存裝置、鍵盤滑鼠等等,理論上支援任何作業系統的執行。在沒有硬體虛擬化的時代裡,全虛擬化效能很弱,但當有了硬體虛擬化技術之後,全虛擬化效能基本可以和半虛擬化效能持平甚至超越半虛擬化。

基於硬體的全虛擬化,由於靈活、簡易等特徵致使其產品備受好評。

代表產品:Vmware

作業系統級虛擬化、程式語言級虛擬化、程式庫級虛擬化

  • 作業系統級虛擬化

基於寄主機作業系統的虛擬化,在作業系統上通過一個虛擬曾來展現給使用者多個獨立的隔離的機器,客戶機和寄主機保持同樣的作業系統(寄主為linux,則虛擬機器也必須是linux,不限發行商)

代表程式:OpenVZ

  • 程式語言級虛擬化

在應用層上實現新的自定義和指令集,虛擬機器完成自定義指令集到本地指令集的轉換。

代表程式:JVM

  • 程式庫級虛擬化

在應用程式和執行函式庫之間引入中間層,虛擬庫函式API介面為上層軟體提供給不同的API

代表程式:Wine和Cygwin

虛擬機器監視器VMM

vmm全稱為Virtual Machine Monitor,在x86的平臺虛擬化技術中心引入了這個關鍵詞,又可以將vmm稱為Hypervisor。

虛擬機器執行的環境通常我們會稱為客戶機,而真實物理伺服器我們會稱為寄主機。而VMM就是位於主機硬體和操作系之間的一個軟體層,主要負責為虛擬機器提供一個獨立且安全的執行環境,將虛擬機器和寄主機的環境進行隔離。

vmm有三種執行模式

  • 寄主模式(Hosted-based Model)

在該模式下,對於虛擬機器來說,vmm相當於其作業系統的底層硬體,而對於真實物理伺服器來說,vmm相當於其一個應用程式,需要與其他的app競爭資源,相對效能較差。

  • 混合模式(Hydrid model)

硬體上層直接是vmm,佔用資源較少。

  • 獨立監控模式(Stand-alone Hypervisor Model)

由虛擬機器來監控虛擬機器。Xen採用的是該模式。

虛擬機器基本架構

從虛擬機器架構上來看,可以分為型別一和型別二兩種虛擬機器。

型別一

型別一的虛擬機器在系統上電之後,優先載入虛擬機器監控程式,需要對作業系統核心做優化裁剪,虛擬機器監控程式需要能夠實現作業系統的初始化,物力資源的排程等作業系統的職能,這一型別的虛擬機器架空程式一般會提供一個特殊的虛擬機器用來執行管理的操作,提供日常操作和管理所使用的作業系統環境。XEN、VMware ESX/ESXI就屬於該類架構。

型別二

型別二的虛擬化在系統上電之後仍然執行一般意義上的作業系統,虛擬機器監控程式作為特殊的應用程式實現對於作業系統功能的擴充套件,實現起來較為簡潔,但該型別功能容易受到寄主機的限制。VMware workstation及kvm都屬於該型別的虛擬化。

KVM的架構

kvm的全稱為Kernel Virtual Machine,基於核心的虛擬機器,由以色列Qumranet公司開發,後期該公司被redhat收購,並將kvm產品整合至rhel6的作業系統中,替換了el5中的XEN。

kvm是linux原生態的全虛擬化解決方案,屬於型別2的虛擬化解決方案,具有簡潔且容易實現的特徵,不過kvm在實現虛擬化過程中,將其VMM整合在核心當中,通過載入模組的方式使核心本身變成了一個VMM。

目前KVM支援廣泛的作業系統,例如linux,BSD,windows,solaris等。

在KVM中,每個虛擬CPU都會有對應的一個執行緒來維護該CPU的運算,使kvm能夠直接使用linux核心的所有功能。

結構如下圖所示,最底層為硬體,核心中集成了KVM的模組,使核心能夠成為VMM,直接監控虛擬機器的操作,往上為全虛擬化模擬的所有硬體,在虛擬硬體上面跑虛擬作業系統。

這裡寫圖片描述

需要注意的是,kvm本身並不執行任何裝置模擬,裝置模擬的操作通過使用者空間程式QEMU完成。QEMU本身並不是KVM的一部分,本身QEMU就是一個著名的開源虛擬機器軟體。

KVM在QEMU的基礎上進行了修改,虛擬機器執行期間,QEMU會通過KVM模組提供的系統呼叫進入核心,由KVM模組負責將虛擬機器置於處理器的特殊模式執行。

可以說,QEMU使用了KVM模組的虛擬化功能,而KVM的輸入輸出操作,則由QEMU來負責解析和模擬這些裝置。

KVM可以選擇其他的使用者空間程式作為虛擬機器的實現,QEMU也可以選擇其他虛擬化技術來提升整體效能,而目前來看,QEMU和KVM的結合是最為成熟的一套虛擬化解決方案。

總的而言:kvm就是一套基於硬體的全虛擬化產品。

構建KVM執行環境

硬體配置

我們現在知道,kvm屬於一個基於硬體的全虛擬化的方案,首先要求CPU能夠支援VT技術,並且需要在BIOS當中將其虛擬化功能開啟。在BIOS中,我們可以通過Advanced–>Intel(R) Virtualization Tech引數來開啟有硬體虛擬化的支援(不同BIOS設定方式略有不同)。此外,在下圖我們還可以看到一個引數:Intel VT-d引數,該引數也建議開啟,VT-d是對裝置I/O的虛擬化硬體支援。

這裡寫圖片描述

BIOS設定完成之後,儲存退出,系統重啟後生效。

系統啟動完成之後,也可以來看一下當前宿主機是否支援硬體虛擬化

[root@workstation0 ~]# cat /proc/cpuinfo
processor   : 0
vendor_id   : GenuineIntel
cpu family  : 6
model       : 60
model name  : Intel(R) Core(TM) i7-4790 CPU @ 3.60GHz
stepping    : 3
microcode   : 0x1
cpu MHz     : 3600.040
cache size  : 4096 KB
physical id : 0
siblings    : 1
core id     : 0
cpu cores   : 1
apicid      : 0
initial apicid  : 0
fpu     : yes
fpu_exception   : yes
cpuid level : 13
wp      : yes
flags       : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ss syscall nx rdtscp lm constant_tsc arch_perfmon rep_good nopl eagerfpu pni pclmulqdq vmx ssse3 fma cx16 pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand hypervisor lahf_lm abm tpr_shadow vnmi ept fsgsbase tsc_adjust bmi1 avx2 smep bmi2 invpcid xsaveopt
bogomips    : 7200.08
clflush size    : 64
cache_alignment : 64
address sizes   : 42 bits physical, 48 bits virtual
power management:

processor   : 1
vendor_id   : GenuineIntel
cpu family  : 6
model       : 60
model name  : Intel(R) Core(TM) i7-4790 CPU @ 3.60GHz
stepping    : 3
microcode   : 0x1
cpu MHz     : 3600.040
cache size  : 4096 KB
physical id : 1
siblings    : 1
core id     : 0
cpu cores   : 1
apicid      : 1
initial apicid  : 1
fpu     : yes
fpu_exception   : yes
cpuid level : 13
wp      : yes
flags       : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ss syscall nx rdtscp lm constant_tsc arch_perfmon rep_good nopl eagerfpu pni pclmulqdq vmx ssse3 fma cx16 pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand hypervisor lahf_lm abm tpr_shadow vnmi ept fsgsbase tsc_adjust bmi1 avx2 smep bmi2 invpcid xsaveopt
bogomips    : 7200.08
clflush size    : 64
cache_alignment : 64
address sizes   : 42 bits physical, 48 bits virtual
power management:

如果說看到“vmx”或者“svm”的標誌,則意味著當前CPU支援虛擬化。Intel的標誌為vmx,而AMD系列CPU的標誌則為svm。

kvm模組載入

KVM是基於核心的虛擬化技術,我們如果要執行kvm,必須檢查當前核心是否支援KVM。

可以通過以下兩種方案來進行檢視。

1)檢視核心配置檔案中是否有KVM相關引數。

[[email protected] boot]# grep KVM /boot/config-3.10.0-327.el7.x86_64 
CONFIG_KVM_GUEST=y
# CONFIG_KVM_DEBUG_FS is not set
CONFIG_HAVE_KVM=y
CONFIG_HAVE_KVM_IRQCHIP=y
CONFIG_HAVE_KVM_IRQFD=y
CONFIG_HAVE_KVM_IRQ_ROUTING=y
CONFIG_HAVE_KVM_EVENTFD=y
CONFIG_KVM_APIC_ARCHITECTURE=y
CONFIG_KVM_MMIO=y
CONFIG_KVM_ASYNC_PF=y
CONFIG_HAVE_KVM_MSI=y
CONFIG_HAVE_KVM_CPU_RELAX_INTERCEPT=y
CONFIG_KVM_VFIO=y
CONFIG_KVM_GENERIC_DIRTYLOG_READ_PROTECT=y
CONFIG_KVM=m
CONFIG_KVM_INTEL=m
CONFIG_KVM_AMD=m
CONFIG_KVM_MMU_AUDIT=y
# CONFIG_KVM_DEVICE_ASSIGNMENT is not set

2)檢視kvm核心模組是否載入

[root@workstation0 boot]# lsmod | grep kvm
kvm_intel             162153  0 
kvm                   525259  1 kvm_intel

如看到以上引數情況,則代表kvm基礎環境已構建完成。

QEMU的執行工具

qemu安裝的軟體工具如下,qemu-img主要提供I/O裝置的虛擬化,qemu-kvm提供了qemu和kvm的整合。

[[email protected] ~]# rpm -qa | grep qemu
ipxe-roms-qemu-20130517-7.gitc4bce43.el7.noarch
qemu-img-1.5.3-105.el7.x86_64
qemu-kvm-common-1.5.3-105.el7.x86_64
libvirt-daemon-driver-qemu-1.2.17-13.el7.x86_64
qemu-guest-agent-2.3.0-4.el7.x86_64
qemu-kvm-1.5.3-105.el7.x86_64

KVM管理工具libvirt

在簡單瞭解了相關虛擬化技術之後,我們就可以著手開始操作kvm的虛擬機器。在管理KVM虛擬化的工具中,最為出名的就是libvirt工具,libvirt工具會提供一些應用程式介面、守護程序以及管理工具。

libvirt最初是為XEN而設計的一套API,然而目前已經能夠支援多種虛擬化方案,包括QEMU、Xen、KVM、VMware等,尤其是對於QEMU/kvm的支援是非常成熟且穩定的。libvirt也是一個跨平臺的工具,支援微軟的hyper-V虛擬化,在windows上也可以安裝libvirt。

libvirt的安裝

在這裡我們可以通過yum的方式安裝libvirt所需要的軟體包。在當前環境下,我們總共安裝了以下的軟體包。

[[email protected] ~]# rpm -qa | grep libvirt
libvirt-client-1.2.17-13.el7.x86_64
libvirt-glib-0.1.9-1.el7.x86_64
libvirt-daemon-kvm-1.2.17-13.el7.x86_64
libvirt-daemon-driver-interface-1.2.17-13.el7.x86_64
libvirt-daemon-driver-network-1.2.17-13.el7.x86_64
libvirt-daemon-driver-nodedev-1.2.17-13.el7.x86_64
libvirt-daemon-config-nwfilter-1.2.17-13.el7.x86_64
libvirt-daemon-driver-qemu-1.2.17-13.el7.x86_64
libvirt-gconfig-0.1.9-1.el7.x86_64
libvirt-daemon-driver-nwfilter-1.2.17-13.el7.x86_64
libvirt-daemon-driver-secret-1.2.17-13.el7.x86_64
libvirt-daemon-driver-lxc-1.2.17-13.el7.x86_64
libvirt-daemon-driver-storage-1.2.17-13.el7.x86_64
libvirt-1.2.17-13.el7.x86_64
libvirt-daemon-config-network-1.2.17-13.el7.x86_64
libvirt-python-1.2.17-2.el7.x86_64
libvirt-daemon-1.2.17-13.el7.x86_64
libvirt-gobject-0.1.9-1.el7.x86_64

libvirt的使用

要使用libvirt工具進行管理,首先先要將libvirtd服務起來。

libvirt常用工具如下:

工具 作用
virsh 用以管理配置虛擬化環境中guestOS的命令列工具
virt-manager 用於管理配置虛擬化環境中guestOS的圖形化介面工具
virt-install 用以安裝虛擬機器的命令列工具
virt-top 用以展示虛擬化客戶機執行狀態的工具
virt-viewer 用以開啟guestOS的控制檯。

一. 安裝虛擬機器

可以通過virt-install命令列工具或者virt-manager工具來進行安裝

二. virsh指令

virsh指令使用libvirt API實現了很多功能來管理hypervisor、guestOS,實現了多數對於qemu的調配,可以通過man virsh來檢視virsh能夠使用的引數。

下表列舉了virsh指令常用的一些引數:

命令 功能描述
list 獲取當前節點上所有虛擬機器的列表
dominfo 檢視某虛擬機器的狀態資訊
vcpuinfo 檢視某虛擬機器vcpu狀態資訊
setvcpu 設定一個虛擬機器的vcpu個數
suspend 暫停一個虛擬機器
resume 恢復一個虛擬機器
shutdown 正常關閉虛擬機器
reboot 重啟虛擬機器
reset 強制重啟虛擬機器(類似於按下物理機電源上的reset按鍵)
destroy 給虛擬機器斷電
save 儲存虛擬機器狀態至一個檔案中
restore 從檔案中恢復虛擬機器的執行狀態
net-list 列出libvirt管理的虛擬網路
net-create 根據xml檔案建立一個網路
net-edit 編輯一個虛擬網路的xml配置檔案
net-destroy 銷燬一個虛擬網路
define 根據xml檔案定義一個虛擬機器配置
undefine 銷燬一個虛擬機器配置
dumpxml 以xml格式轉存一個虛擬機器的資訊至標準輸出
pool-list 查詢libvirt管理的儲存池
pool-info 查詢儲存池資訊
pool-create 建立一個儲存池
pool-destroy 關閉一個儲存池
pool-delete 刪除一個儲存池
vol-list 查詢一個儲存池中儲存卷的列表。
vol-create 根據xml配置建立一個儲存卷
vol-clone 克隆一個儲存卷
vol-delete 刪除一個儲存卷
migrate 遷移虛擬機器
help 檢視幫助資訊

三. 使用libvirt配置虛擬機器

在我們上述使用virsh指令過程中,就可以看到,很對地方的配置都是通過xml方式來完成的,包括虛擬機器的定義配置檔案,包括網路、儲存、等等都是通過xml來進行配置。那麼到底該如何定義我們的xml配置檔案呢?

我們先來檢視一個虛擬機器的配置檔案:在這個配置檔案中,”\“的符號都為註釋字元,我們下面會一一來分析每一個欄位的作用。

<!--
WARNING: THIS IS AN AUTO-GENERATED FILE. CHANGES TO IT ARE LIKELY TO BE
OVERWRITTEN AND LOST. Changes to this xml configuration should be made using:
  virsh edit workstationa
or other application using the libvirt API.
-->

<domain type='kvm'>
  <name>workstationa</name>
  <uuid>e4725575-cc0d-4063-beae-f6286a6f8868</uuid>
  <memory unit='KiB'>3145728</memory>
  <currentMemory unit='KiB'>3145728</currentMemory>
  <vcpu placement='static'>2</vcpu>
  <os>
    <type arch='x86_64' machine='pc-i440fx-rhel7.0.0'>hvm</type>
    <boot dev='hd'/>
    <boot dev='cdrom'/>
    <bootmenu enable='no'/>
  </os>
  <features>
    <acpi/>
    <apic/>
    <pae/>
  </features>
  <cpu mode='host-passthrough'/>
  <clock offset='utc'/>
  <on_poweroff>destroy</on_poweroff>
  <on_reboot>restart</on_reboot>
  <on_crash>restart</on_crash>
  <devices>
    <emulator>/usr/libexec/qemu-kvm</emulator>
    <disk type='file' device='disk'>
      <driver name='qemu' type='qcow2'/>
      <source file='/var/lib/libvirt/images/up320-workstationa-vda.ovl'/>
      <target dev='vda' bus='virtio'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x0'/>
    </disk>
    <disk type='file' device='disk'>
      <driver name='qemu' type='qcow2'/>
      <source file='/var/lib/libvirt/images/up320-workstationa-vdb.ovl'/>
      <target dev='vdb' bus='virtio'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x06' function='0x0'/>
    </disk>
    <controller type='usb' index='0'>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x2'/>
    </controller>
    <controller type='pci' index='0' model='pci-root'/>
    <interface type='bridge'>
      <mac address='52:54:00:00:00:0a'/>
      <source bridge='br0'/>
      <model type='virtio'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
    </interface>
    <interface type='bridge'>
      <mac address='52:54:00:01:00:0a'/>
      <source bridge='virbr1'/>
      <model type='virtio'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x0'/>
    </interface>
    <serial type='pty'>
      <target port='0'/>
    </serial>
    <console type='pty'>
      <target type='serial' port='0'/>
    </console>
    <input type='mouse' bus='ps2'/>
    <input type='keyboard' bus='ps2'/>
    <graphics type='spice' autoport='yes' listen='127.0.0.1'>
      <listen type='address' address='127.0.0.1'/>
    </graphics>
    <video>
      <model type='qxl' ram='65536' vram='65536' vgamem='16384' heads='1'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/>
    </video>
    <memballoon model='virtio'>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x07' function='0x0'/>
    </memballoon>
  </devices>
</domain>
1. 基礎虛擬機器資訊的配置
<domain>
    ....
  <name>workstationa</name>  <!-- 虛擬機器的名字 -->
  <uuid>e4725575-cc0d-4063-beae-f6286a6f8868</uuid> <!-- 虛擬機器唯一的uuid,16進位制的識別符號號 -->
    ....
</domain>
2. cpu的配置
<domain>
  ....
  <vcpu placement='static'>2</vcpu>  <!--表示vcpu的個數-->
  <features>    <!-- 表示開啟硬體的部分特性,這裡代表打開了acpi,apic,pae等特性-->
    <acpi/>
    <apic/>
    <pae/>
  </features>
  <cpu mode='host-passthrough'/>  <!--該引數代表直接將物理CPU暴露給虛擬機器去使用,如果要實現巢狀虛擬化,需設定此引數 -->
  ....
</domain>
1) vcpu的設定:

在上述配置欄位中,vcpu的個數設定為2個,對於vcpu的設定,其實可以有更細化的配置引數

<vcpu placement='static' cpuset"1-3,^2,5" current="1">2</vcpu>

這句話代表著vcpu允許到哪些物理cpu上執行,這代表vcpu允許被排程到1,3,5號cpu上執行,current代表啟動客戶機只給一個cpu,最多可以增加使用到兩個。

2)cpu的模式:

也可以有多種,上述配置中我們設定的為host-passthrough,代表將物理CPU直接暴露給虛擬機器。

cpu配置的模式可以有以下幾種:

① custom 自定義cpu引數

② host-model 根據物理CPU的特性,選擇一個最靠近標準的CPU,預設採用的是該策略。

③ host-passthrough 暴露物理CPU給虛擬機器去使用。

3. 記憶體的配置

在xml檔案中,記憶體配置欄位如下

<memory unit='KiB'>3145728</memory>
<currentMemory unit='KiB'>3145728</currentMemory>

單位為K。可以看到,我們現在記憶體設定的大小為3145728,約3G左右,memory表示最大可用記憶體,而currentmemory標籤中是啟動時分配給虛擬機器的記憶體大小,一般這兩者的值會設定成一致。

4. 儲存的配置

儲存的xml定義欄位如下:

 <disk type='file' device='disk'>
      <driver name='qemu' type='qcow2'/>
      <source file='/var/lib/libvirt/images/up320-workstationa-vda.ovl'/>  <!--指定檔案型別及路徑-->
      <target dev='vda' bus='virtio'/>    <!--指定模擬方式,採用virtio-->
      <address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x0'/>  <!--定義介面情況-->
    </disk>
    <disk type='file' device='disk'>
      <driver name='qemu' type='qcow2'/>
      <source file='/var/lib/libvirt/images/up320-workstationa-vdb.ovl'/>
      <target dev='vdb' bus='virtio'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x06' function='0x0'/>
    </disk>

在kvm儲存環境中,我們是以檔案的方式來模擬硬碟,分配給虛擬機器相應的使用空間,常用的檔案格式主要有兩種,一種是raw格式,另外一種是qcow2格式。

1)raw格式

raw格式我們又可以將其稱為原始映象格式,在可移植性上有一定優勢。預設的qemu-img命令(之後詳解)建立的raw格式檔案其實屬於非預佔模式的檔案格式,也就是說使用多少空間,才會佔用多少空間。當然,raw格式的檔案也可以由dd命令來建立,只是用dd命令建立的raw格式檔案屬於預佔模式的檔案。

建立raw格式磁碟檔案的指令如下

[root@workstation0 images]# qemu-img create -f raw test.raw 1G
Formatting 'test.raw', fmt=raw size=1073741824 
[root@workstation0 images]# qemu-img info test.raw
image: test.raw
file format: raw
virtual size: 1.0G (1073741824 bytes)
disk size: 0

或者通過dd命令來建立:

[root@workstation0 images]# dd if=/dev/zero of=./test1.raw bs=1M count=1024
1024+0 records in
1024+0 records out
1073741824 bytes (1.1 GB) copied, 8.60973 s, 125 MB/s
[root@workstation0 images]# qemu-img info test1.raw
image: test1.raw
file format: raw
virtual size: 1.0G (1073741824 bytes)
disk size: 1.0G

調整raw格式檔案大小,通過qemu-img resize指令即可完成

[root@workstation0 images]# qemu-img resize test.raw +1G
Image resized.
[root@workstation0 images]# qemu-img info test.raw
image: test.raw
file format: raw
virtual size: 2.0G (2147483648 bytes)
disk size: 0
[root@workstation0 images]# qemu-img resize test.raw -1G
Image resized.
[root@workstation0 images]# qemu-img info test.raw
image: test.raw
file format: raw
virtual size: 1.0G (1073741824 bytes)
disk size: 0
2)qcow2格式

qcow2是目前推薦的一種檔案格式,能夠支援較多的功能,比如快照、壓縮等等,並且支援非預佔模式,以節省空間。

建立方式如下:

[root@workstation0 images]# qemu-img create -f qcow2  test2.qcow2 1G
Formatting 'test2.qcow2', fmt=qcow2 size=1073741824 encryption=off cluster_size=65536 lazy_refcounts=off 
[root@workstation0 images]# qemu-img info test2.qcow2 
image: test2.qcow2
file format: qcow2
virtual size: 1.0G (1073741824 bytes)
disk size: 196K
cluster_size: 65536
Format specific information:
    compat: 1.1
    lazy refcounts: false

調整qcow2檔案大小,注意,qcow2格式支援擴大,但並不支援縮小。

[root@workstation0 images]# qemu-img resize test2.qcow2 +1G
Image resized.
[root@workstation0 images]# qemu-img info test2.qcow2 
image: test2.qcow2
file format: qcow2
virtual size: 2.0G (2147483648 bytes)
disk size: 260K
cluster_size: 65536
Format specific information:
    compat: 1.1
    lazy refcounts: false
[root@workstation0 images]# qemu-img resize test2.qcow2 -1G
qemu-img: qcow2 doesn't support shrinking images yet
qemu-img: This image does not support resize
5.kvm的網路配置

kvm的網路配置方案有三種,分別是Bridge、NAT以及HOST模式。其中bridge和NAT較為常用,HOST模式在這裡不做詳解。

1)NAT模式

使用NAT模式,能夠讓guestOS藉助hostOS的NAT(網路地址轉換)功能,通過宿主機器所在的網路來訪問外部環境,也就是說,使用NAT模式可以實現在虛擬系統裡訪問網際網路。

2)Bridge模式

使用bridge模式,即虛擬網橋的網路連線方式,可以使虛擬機器成為網路中具有獨立IP的主機。這種方式最簡單,直接將虛擬網絡卡橋接到一個物理網絡卡上面,和linux下一個網絡卡繫結兩個不同地址類似,實際上是將網絡卡設定為混雜模式,從而達到偵聽多個IP的能力。

6.剩餘配置項概覽

剩餘配置項自行閱讀,不做重點

  <input type='mouse' bus='ps2'/>  <!--輸入裝置-->
  <input type='keyboard' bus='ps2'/> 
   <graphics type='spice' autoport='yes'>  <!--圖形-->
      <image compression='off'/>
    </graphics>
    <sound model='ich6'>  <!--音效卡-->
      <address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x0'/>
    </sound>
    <video>   <!--顯示卡-->
      <model type='qxl' ram='65536' vram='65536' vgamem='16384' heads='1'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/>
    </video>
    <serial type='pty'>  <!--串列埠和控制檯-->
      <target port='0'/>
    </serial>
    <console type='pty'>
      <target type='serial' port='0'/>
    </console>
   <controller type='usb' index='0' model='ich9-uhci1'>  <!--pci控制器-->
      <master startport='0'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x06' function='0x0' multifunction='on'/>
    </controller>

相關推薦

kvm虛擬化技術

虛擬化技術基礎 李家宜 [email protected] 虛擬化歷史 最早起源於分時系統 IBM最早實現在一臺主機上執行多個作業系統 20世紀90年代Vmware實現了X86平臺伺服器下的虛擬化,採用全虛擬化模式 2003年,

KVM虛擬化技術

LinuxKVMvirt-instaKVM虛擬化技術(二)===============================================================================概述:============================================

KVM虛擬化實踐

KVMKVM虛擬化環境搭建:環境介紹:CentOS 7.4 一臺 IP:10.10.10.135/24 hostname:node1 1>查看系統版本信息(建議CentOS 7)[root@node1 ~]# cat /etc/redhat-releaseCentOS Linux release 7.4

網路虛擬化技術 Cisco VSS

VSS(Virtual Switch System)Cisco將兩臺物理Catalyst 6500系列交換機虛擬成一臺邏輯交換機的虛擬化技術叫做VSS(虛擬交換系統)。VSS優勢1、實現跨機箱的埠聚合(MEC)2、單臺交換機頻寬容量720Gbps,通過VSS虛擬後頻寬容量擴充

【原創】Linux虛擬化KVM-Qemu分析

# 背景 - `Read the fucking source code!` --By 魯迅 - `A picture is worth a thousand words.` --By 高爾基 說明: 1. KVM版本:5.9.1 2. QEMU版本:5.0.0 3. 工具:Source Insight

【問底】夏俊:深入站點服務端技術——站點並發的問題

而是 思路 臨時 系統負載 表現 json article 不能 情況 摘要:本文來自擁有十年IT從業經驗、擅長站點架構設計、Web前端技術以及Java企業級開發的夏俊,此文也是《關於大型站點技術演進的思考》系列文章的最新出爐內容。首發於CSDN,各位技術人員不

10.1-全棧Java筆記:最全面的IO技術

javaIO技術對於任何程序設計語言而言,輸入輸出(Input/Output)系統都是非常核心的功能。程序運行需要數據,數據的獲取往往需要跟外部系統進行通信,外部系統可能是文件、數據庫、其他程序、網絡、IO設備等等。外部系統比較復雜多變,那麽我們有必要通過某種手段進行抽象、屏蔽外部的差異,從而實現更加便捷的編

Java加密技術——BASE64與單向加密算法MD5&SHA&MAC

sha256 integer 被人 sent 發現 Coding design 如果 targe http://snowolf.iteye.com/blog/379860 加密解密,曾經是我一個畢業設計的重要組件。在工作了多年以後回想當時那個加密、解密算法,實在是太單

淺談存儲重刪壓縮技術

emc 將他 壓力測試 處理方式 比對 公眾號 center str 今天 淺談重刪壓縮技術(一) <喜歡更多內容可以關註微信公眾號“圍爐煮酒論IT”>作為一個做企業存儲市場的存儲人,最近兩年我不斷被重刪壓縮撩撥著。對於重刪壓縮這個技術的好壞,真實需求還是偽需求

asp.net core 擁抱 docker 技術 概覽

測試 docker 架構 swa ima 進程 基於 概念 registry 這是一個huge 坑慢慢填吧。這裏只是一個目錄 或總覽。 docker 是什麽? docker可以看做一種虛擬機技術,但沒有傳統虛擬機那麽復雜,是基於進程的虛擬,就是讓一個一個進程,認為自己處於一

KVM虛擬化實踐

KVM 虛擬化 實踐 KVM的日常應用管理 1>虛擬機查看#查看當前正在運行中的虛擬機#查看當前物理機的所有虛擬機//也可以在物理機進程上查看 2>虛擬機的開關關閉虛擬機[root@node1 ~]# virsh shutdown CentOS-7.4-x86_64(主機名)關閉虛擬機

Hibernate 核心技術

配置 color lac 持久 relation 實體 true obj 輕量級 簡介 Hibernate是一個開源的對象關系映射(ORM)框架。對JDBC進行了非常輕量級的對象封裝。 將對象和數據庫表建立映射關系,Hibernate框架使用在數據持久化層(da

Android Native Hook技術

數組 chef protect 獲取 通過 防止 example tile ofo 原理分析 ADBI是一個著名的安卓平臺hook框架,基於 動態庫註入 與 inline hook 技術實現。該框架主要由2個模塊構成:1)hijack負責將so註入到目標進程空間,2)lib

Docker核心技術

Docker核心技術 1.Docker的簡介 1)前提知識和課程定位 2)什麼是Docker 3)Docker能幹什麼? (1)之前的虛擬機器技術 (2)容器虛擬化技術 (3)開發/運維(DevOp

解讀服務機器人關鍵技術

幾年前就曾有人預言“機器人終將取代人類工作”,隨著AI產業化、商業化落地實現,機器人取代人類完成高頻重複的工作正加速前進中,而技術問題是目前面臨的主要難題。 服務機器人實際上是多種技術的融合和實現,包括定位導航、語音互動、運動控制、後臺排程管理、多感測器融合、通訊等多領域的技術。要讓產品理想落地及商用,這些

PDF技術-Java實現Office系列檔案轉PDF檔案

最近,公司要求做個檔案轉pdf的調研報告,於是在網上找了一些實現方法,現在將這些方法做個對比,並記錄下來,以後或許有用呢,哈哈。 首先說一下需求,產品要求不能使用第三方軟體實現,因為這種實現方式效率不高,所以需要使用“純Java程式碼”實現。同時也對跨平臺有要求,系統需要執行在linux系統

大資料的架構及配置技術

大資料 Hadoop Hadoop安裝與配置 HDFS 一、大資料 大資料的定義 — 大資料是指無法在一定時間範圍內用常規軟體工具進行捕捉、管理和處理的資料集合,需要新處理模式才能具有更強的決策力。洞察發現力和流程優化能力的海量、高增長率和

資料庫查詢優化技術:資料庫與關係代數

資料庫查詢優化技術 學習筆記(一)   我是看李海翔的《資料庫技術叢書·資料庫查詢優化器的藝術:原理解析與SQL效能優化》這本書的視訊講解學習的,因為資料庫的知識學的不多,直接看優化有些吃力,慢慢補吧。現在要用一些優化的知識只能先看著了。   本文大概內容:

從零開始學習音視訊程式設計技術 視訊格式講解學習筆記

/*  該型別部落格為學習時載錄筆記,加上自己對一些不理解部分自己的理解。會涉及其他博主的博文的摘錄,會標註出處  */ ==========================================================================

計算機網路資料通訊交換技術

在多個站點間,要引用資料通訊交換技術才能實現資訊的有效傳遞。計算機網路資料通訊交換技術主要有:電路交換技術(本章);報文交換技術(本章);幀中繼繼協交換(本章);光交換技術;分組交換技術。以下探索一下計算機網路資料通訊交換及技術的應用內容。 電路交換技術 主要是在原站點和目的站點間