日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【KVM系列01】KVM简介及安装

發布時間:2025/3/20 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【KVM系列01】KVM简介及安装 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??


? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?第一章 KVM簡介及安裝


1. KVM 介紹

1.0 虛擬化簡史

1.1 KVM 架構

2. KVM 的功能列表

3. KVM 工具集合

4. RedHat Linux KVM 安裝

4.1 在安裝??RedHat Linux 時安裝 KVM

4.2 在已有的 RedHat Linux 中安裝 KVM

4.3 QEMU/KVM 代碼下載編譯安裝

5. 創建 KVM 虛機的幾種方式

5.1 使用?virt-install 命令

5.2 使用?virt-manager 工具

5.3 使用 qemu-img 和 qemu-kvm 命令行方式安裝

5.4 通過 OpenStack Nova 使用 libvirt API 通過編程方式來創建虛機 (后面會介紹)


?

【KVM系列文章】https://blog.csdn.net/baidu_37107022/article/details/88812463

?

1. KVM 介紹

1.0 虛擬化簡史

其中,KVM 全稱是 基于內核的虛擬機(Kernel-based Virtual Machine),它是一個 Linux 的一個內核模塊,該內核模塊使得 Linux 變成了一個 Hypervisor:

  • 它由?Quramnet 開發,該公司于 2008年被?Red Hat 收購。
  • 它支持?x86 (32 and 64 位), s390, Powerpc 等 CPU。
  • 它從 Linux 2.6.20 起就作為一模塊被包含在 Linux 內核中。
  • 它需要支持虛擬化擴展的 CPU。
  • 它是完全開源的。官網。

本文介紹的是基于 X86 CPU 的 KVM。

1.1 KVM 架構

? KVM 是基于虛擬化擴展(Intel VT 或者 AMD-V)的 X86 硬件的開源的 Linux 原生的全虛擬化解決方案。KVM 中,虛擬機被實現為常規的?Linux 進程,由標準?Linux 調度程序進行調度;虛機的每個虛擬 CPU 被實現為一個常規的 Linux 進程。這使得 KMV 能夠使用 Linux 內核的已有功能。

? 但是,KVM 本身不執行任何硬件模擬,需要客戶空間程序通過?/dev/kvm 接口設置一個客戶機虛擬服務器的地址空間,向它提供模擬的 I/O,并將它的視頻顯示映射回宿主的顯示屏。目前這個應用程序是 QEMU。

Linux 上的用戶空間、內核空間和虛機:

? ? ? ? ? ? ? ? ??

  • Guest:客戶機系統,包括CPU(vCPU)、內存、驅動(Console、網卡、I/O 設備驅動等),被 KVM 置于一種受限制的 CPU 模式下運行。
  • KVM:運行在內核空間,提供CPU 和內存的虛級化,以及客戶機的 I/O 攔截。Guest 的 I/O 被 KVM 攔截后,交給 QEMU 處理。
  • QEMU:修改過的為 KVM 虛機使用的 QEMU 代碼,運行在用戶空間,提供硬件 I/O 虛擬化,通過 IOCTL /dev/kvm 設備和 KVM 交互。

KVM 是實現攔截虛機的 I/O 請求的原理:

? ? 現代 CPU 本身了對特殊指令的截獲和重定向的硬件支持,甚至新的硬件會提供額外的資源來幫助軟件實現對關鍵硬件資源的虛擬化從而提高性能。以 X86 平臺為例,支持虛擬化技術的 CPU ?帶有特別優化過的指令集來控制虛擬化過程。通過這些指令集,VMM 很容易將客戶機置于一種受限制的模式下運行,一旦客戶機視圖訪問物理資源,硬件會暫??蛻魴C的運行,將控制權交回給 VMM?處理。VMM?還可以利用硬件的虛級化增強機制,將客戶機在受限模式下對一些特定資源的訪問,完全由硬件重定向到 VMM 指定的虛擬資源,整個過程不需要暫??蛻魴C的運行和 VMM 的參與。由于虛擬化硬件提供全新的架構,支持操作系統直接在上面運行,無需進行二進制轉換,減少了相關的性能開銷,極大簡化了VMM的設計,使得VMM性能更加強大。從 2005 年開始,Intel 在其處理器產品線中推廣 Intel Virtualization Technology 即?IntelVT 技術。

QEMU-KVM:

? 其實 QEMU 原本不是 KVM 的一部分,它自己就是一個純軟件實現的虛擬化系統,所以其性能低下。但是,QEMU 代碼中包含整套的虛擬機實現,包括處理器虛擬化,內存虛擬化,以及 KVM需要使用到的虛擬設備模擬(網卡、顯卡、存儲控制器和硬盤等)。

? 為了簡化代碼,KVM 在 QEMU 的基礎上做了修改。VM 運行期間,QEMU 會通過 KVM 模塊提供的系統調用進入內核,由 KVM 負責將虛擬機置于處理的特殊模式運行。遇到虛機進行 I/O 操作,KVM 會從上次的系統調用出口處返回?QEMU,由 QEMU 來負責解析和模擬這些設備。

從 QEMU 的角度看,也可以說是 QEMU 使用了 KVM 模塊的虛擬化功能,為自己的虛機提供了硬件虛擬化加速。除此以外,虛機的配置和創建、虛機運行說依賴的虛擬設備、虛機運行時的用戶環境和交互,以及一些虛機的特定技術比如動態遷移,都是 QEMU 自己實現的。

KVM:

? ? KVM 內核模塊在運行時按需加載進入內核空間運行。KVM 本身不執行任何設備模擬,需要 QEMU 通過 /dev/kvm 接口設置一個 GUEST OS 的地址空間,向它提供模擬的 I/O 設備,并將它的視頻顯示映射回宿主機的顯示屏。它是KVM 虛機的核心部分,其主要功能是初始化?CPU 硬件,打開虛擬化模式,然后將虛擬客戶機運行在虛擬機模式下,并對虛機的運行提供一定的支持。以在 Intel 上運行為例,KVM 模塊被加載的時候,它:

  • 首先初始化內部的數據結構;
  • 做好準備后,KVM 模塊檢測當前的 CPU,然后打開 CPU 控制及存取 CR4 的虛擬化模式開關,并通過執行 VMXON 指令將宿主操作系統置于虛擬化模式的根模式;
  • 最后,KVM 模塊創建特殊設備文件 /dev/kvm 并等待來自用戶空間的指令。
  • ? ? 接下來的虛機的創建和運行將是?QEMU 和 KVM 相互配合的過程。兩者的通信接口主要是一系列針對特殊設備文件 dev/kvm?的?IOCTL 調用。其中最重要的是創建虛機。它可以理解成KVM 為了某個特定的虛機創建對應的內核數據結構,同時,KVM 返回一個文件句柄來代表所創建的虛機。

    ? ? 針對該句柄的調用可以對虛機做相應地管理,比如創建用戶空間虛擬地址和客戶機物理地址、真實物理地址之間的映射關系,再比如創建多個?vCPU。KVM 為每一個?vCPU 生成對應的文件句柄,對其相應地 IOCTL 調用,就可以對vCPU進行管理。其中最重要的就是“執行虛擬處理器”。通過它,虛機在 KVM 的支持下,被置于虛擬化模式的非根模式下,開始執行二進制指令。在非根模式下,所有敏感的二進制指令都被CPU捕捉到,CPU 在保存現場之后自動切換到根模式,由?KVM 決定如何處理。

    ? ? 除了 CPU 的虛擬化,內存虛擬化也由?KVM 實現。實際上,內存虛擬化往往是一個虛機實現中最復雜的部分。CPU 中的內存管理單元 MMU 是通過頁表的形式將程序運行的虛擬地址轉換成實際物理地址。在虛擬機模式下,MMU 的頁表則必須在一次查詢的時候完成兩次地址轉換。因為除了將客戶機程序的虛擬地址轉換了客戶機的物理地址外,還要將客戶機物理地址轉化成真實物理地址。?

    2. KVM 的功能列表

    KVM 所支持的功能包括:

    • 支持CPU 和 memory 超分(Overcommit)
    • 支持半虛擬化I/O (virtio)
    • 支持熱插拔 (cpu,塊設備、網絡設備等)
    • 支持對稱多處理(Symmetric Multi-Processing,縮寫為?SMP )
    • 支持實時遷移(Live Migration)
    • 支持 PCI 設備直接分配和?單根I/O 虛擬化 (SR-IOV)
    • 支持 內核同頁合并 (KSM?)
    • 支持 NUMA (Non-Uniform Memory Access,非一致存儲訪問結構 )

    3. KVM 工具集合

    • libvirt:操作和管理KVM虛機的虛擬化 API,使用 C 語言編寫,可以由?Python,Ruby, Perl, PHP, Java 等語言調用。可以操作包括 KVM,vmware,XEN,Hyper-v, LXC 等 Hypervisor。
    • Virsh:基于 libvirt 的 命令行工具 (CLI)
    • Virt-Manager:基于 libvirt 的 GUI 工具
    • virt-v2v:虛機格式遷移工具
    • virt-* 工具:包括 Virt-install (創建KVM虛機的命令行工具),?Virt-viewer (連接到虛機屏幕的工具),Virt-clone(虛機克隆工具),virt-top 等
    • sVirt:安全工具

    4. RedHat Linux KVM 安裝

    RedHat 有兩款產品提供 KVM 虛擬化:

    1.?Red Hat Enterprise Linux:適用于小的環境,提供數目較少的KVM虛機。最新的版本包括 6.5 和 7.0.

    2. Red Hat Enterprise Virtualization?(RHEV):提供企業規模的KVM虛擬化環境,包括更簡單的管理、HA,性能優化和其它高級功能。最新的版本是 3.0.

    ?RedHat Linux KVM:

    • KVM 由 libvirt API 和基于該 API的一組工具進行管理和控制。
    • KVM 支持系統資源超分,包括內存和CPU的超分。RedHat Linux 最多支持物理 CPU 內核總數的10倍數目的虛擬CPU,但是不支持在一個虛機上分配超過物理CPU內核總數的虛擬CPU。
    • 支持 KSM (Kenerl Same-page Merging 內核同頁合并)

    ?RedHat Linux KVM 有如下兩種安裝方式:

    4.1 在安裝??RedHat Linux 時安裝 KVM

    選擇安裝類型為 Virtualizaiton Host :

    可以選擇具體的 KVM 客戶端、平臺和工具:

    4.2 在已有的 RedHat Linux 中安裝 KVM

    這種安裝方式要求該系統已經被注冊,否則會報錯:

    [root@rh65 ~]# yum install qemu-kvm qemu-imgLoaded plugins: product-id, refresh-packagekit, security, subscription-managerThis system is not registered to Red Hat Subscription Management. You can use subscription-manager to register.Setting up Install ProcessNothing to do

    你至少需要安裝?qemu-kvm qemu-img 這兩個包。

    # yum install qemu-kvm qemu-img

    你還可以安裝其它工具包:

    # yum install virt-manager libvirt libvirt-python python-virtinst libvirt-client

    4.3 QEMU/KVM 代碼下載編譯安裝

    4.3.1 QEMU/KVM 的代碼結構

    QEMU/KVM 的代碼包括幾個部分:

    (1)KVM 內核模塊是 Linux 內核的一部分。通常 Linux 比較新的發行版(2.6.20+)都包含了 KVM 內核,也可以從這里得到。比如在我的RedHat 6.5 上:

    [root@rh65 isoimages]# uname -r 2.6.32-431.el6.x86_64[root@rh65 isoimages]# modprobe -l | grep kvmkernel/arch/x86/kvm/kvm.kokernel/arch/x86/kvm/kvm-intel.kokernel/arch/x86/kvm/kvm-amd.ko

    (2)用戶空間的工具即 qemu-kvm。qemu-kvm 是 KVM 項目從 QEMU 新拉出的一個分支(看這篇文章)。在 QEMU 1.3 版本之前,QEMU 和 QEMU-KVM 是有區別的,但是從 2012 年底 GA 的 QEMU 1.3 版本開始,兩者就完全一樣了。

    (3)Linux Guest OS virtio 驅動,也是較新的Linux 內核的一部分了。

    (4)Windows Guest OS virtio 驅動,可以從這里下載。

    4.3.2 安裝 QEMU

    RedHat 6.5 上自帶的 QEMU 太老,0.12.0 版本,最新版本都到了 2.* 了。

    (1). 參考?這篇文章,將 RedHat 6.5 的 ISO 文件當作本地源

    mount -o loop soft/rhel-server-6.4-x86_64-dvd.iso /mnt/rhel6/vim /etc/fstab=> /root/isoimages/soft/RHEL6.5-20131111.0-Server-x86_64-DVD1.iso /mnt/rhel6 iso9660 ro,loop

    [root@rh65 qemu-2.3.0]# cat /etc/yum.repos.d/local.repo
    [local]
    name=local
    baseurl=file:///mnt/rhel6/
    enabled=1
    gpgcjeck=0

    1

    yum clean all
    yum update

    (2). 安裝依賴包包???????

    yum install gccyum install autoconfyum install autoconf automake libtoolyum install -y glib* yum install zlib*

    (3).?從?http://wiki.qemu.org/Download?下載代碼,上傳到我的編譯環境 RedHat 6.5.

    tar -jzvf qemu-2.3.0.tar.bz2cd qemu-2.3.0 ./configuremake -j 4 make install

    (4). 安裝完成

    [root@rh65 qemu-2.3.0]# /usr/local/bin/qemu-x86_64 -versionqemu-x86_64 version 2.3.0, Copyright (c) 2003-2008 Fabrice Bellard

    (5). 為方便起見,創建一個link

    ln -s /usr/bin/qemu-system-x86_64 /usr/bin/qemu-kvm

    4.3.3 安裝 libvirt

    可以從?libvirt 官網下載安裝包。最新的版本是 0.10.2.?

    5. 創建 KVM 虛機的幾種方式

    5.1 使用?virt-install 命令

    virt-install \ --name=guest1-rhel5-64 \ --file=/var/lib/libvirt/images/guest1-rhel5-64.dsk \ --file-size=8 \ --nonsparse --graphics spice \ --vcpus=2 --ram=2048 \ --location=http://example1.com/installation_tree/RHEL5.6-Serverx86_64/os \ --network bridge=br0 \ --os-type=linux \ --os-variant=rhel5.4

    5.2 使用?virt-manager 工具

    使用 VMM GUI 創建的虛機的xml 定義文件在?/etc/libvirt/qemu/ 目錄中。

    5.3 使用 qemu-img 和 qemu-kvm 命令行方式安裝

    (1)創建一個空的qcow2格式的鏡像文件

    qemu-img create -f qcow2 windows-master.qcow2 10G

    (2)啟動一個虛機,將系統安裝盤掛到 cdrom,安裝操作系統

    qemu-kvm -hda windows-master.qcow2 -m 512 -boot d -cdrom /home/user/isos/en_winxp_pro_with_sp2.iso

    (3)現在你就擁有了一個帶操作系統的鏡像文件。你可以以它為模板創建新的鏡像文件。使用模板的好處是,它會被設置為只讀所以可以免于破壞。

    qemu-img create -b windows-master.qcow2 -f qcow2 windows-clone.qcow2

    (4)你可以在新的鏡像文件上啟動虛機了

    qemu-kvm -hda windows-clone.qcow2 -m 400

    5.4 通過 OpenStack Nova 使用 libvirt API 通過編程方式來創建虛機 (后面會介紹)

    《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀

    總結

    以上是生活随笔為你收集整理的【KVM系列01】KVM简介及安装的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。