一文告訴你Linux如何配置KVM虛擬化--安裝篇

来源:https://www.cnblogs.com/udream/archive/2020/06/25/13193187.html
-Advertisement-
Play Games

KVM全稱"Kernel-based Virtual Machine",即基於內核的虛擬機,在linux內啟用kvm需要硬體,內核和軟體(qemu)支持,這篇文章教你如何配置並安裝KVM虛擬機. 檢查硬體和系統的相容性 檢查硬體虛擬化:LC_ALL=C lscpu | grep Virtualiza ...


KVM全稱"Kernel-based Virtual Machine",即基於內核的虛擬機,在linux內啟用kvm需要硬體,內核和軟體(qemu)支持,這篇文章教你如何配置並安裝KVM虛擬機.

  • 檢查硬體和系統的相容性

    • 檢查硬體虛擬化:LC_ALL=C lscpu | grep Virtualization
      這行代碼其中 LC_ALL=C為設置輸出語言用,lscpu輸出CPU信息,在輸出的CPU信息裡面查找“Virtualization”(虛擬化),輸出結果如果有"AMD-V"(AMD CPU) 或者"VT-X"(Intel CPU),則說明你的電腦硬體支持並且已開啟虛擬化,可以下一步
      那如果沒有顯示以上兩種呢,就進入BIOS(或者UEFI)找到虛擬化/virtualization/VT-X/AMD-V一般來說是這四個名字裡面任意一個,當然,如果你的班子BIOS裡面是virtualization裡面有vt-x和vt-d兩個的話,就兩個都開。然後,理論上你就能繼續了,除非,你的硬體 根本不支持虛擬化(除非廠家手動閹割,現在一般不會有這問題,博主的本本一開始買來BIOS裡面就是沒有AMD-V的,後來就是靠BIOS更新加上的)。
      舉個例子:博主linux上的顯示是:Virtualization: AMD-V則證明該電腦支持AMD 的虛擬化技術

    • 檢查系統是否支持lsmod | grep kvm
      這行代碼告訴你系統是否載入了KVM有關模塊,如果有輸出相關模塊,請看kvm配置,否則接著看kvm的安裝(kvm基於內核,需要內核模塊才能正常工作)

  • KVM 安裝過程
    KVM的依賴項除了內核和內核模塊主要有這些:firewalld(防火牆),dnsmasq,ebtables(網路方面),libvirt(虛擬化介面),qemu(虛擬機本體)。另外,使用bridge-utils可以設置網卡橋接。
    知道了需要的包,安裝就好了.
    如果你的系統是Centos(RHEL/Fedora同理)你完全可以在安裝的時候就選擇虛擬化伺服器的,如果要手動安裝,那麼需要跑這樣一條命令(CENTOS8/fedora可能需要把yum替換為dnf):
    sudo yum install -y virt-* libvirt bridge-utils qemu qemu-img qemu-kvm,需不需要操作selinux就看著辦,如果因為selinux的原因導致無法開機,那就改,沒問題就不需要動了(博主不是專業的運維。平時主玩ARCH,對這塊不是特別瞭解)

玩Ubuntu系列(ubuntu/deepin/mate/kali……)的同學安裝kvm的話也類似,不過這包名可能和上面有所不同,代碼如下:
sudo apt install qemu qemu-kvm libvirt-bin bridge-utils

Arch用戶
sudo pacman -S qemu libvirt ebtables dnsmasq firewalld bridge-utils

安裝完軟體包,接下來開啟防火牆和libvirt守護進程
sudo systemctl start firewalld && sudo systemctl start libvirtd需不需要enable看你們自己的需要,如果是虛擬化母機或者經常用到虛擬機的話,那麼建議enable,開機自動把虛擬化服務啟動。

講完了基礎安裝工作,剩下的就是你如何控制kvm的事情了。圖形化/命令行

圖形化控制KVM一般使用virt-manager(中文名:虛擬系統管理器),剩下的就是圖形化設置的工作了。

嗯,沒錯,就是這個東西,創建虛擬機的話,只需要點創建虛擬機按鈕就好了(就是圖上那個亮著的按鈕)。

然後,連接這裡選擇QEMU/KVM,就是使用KVM虛擬機創建.

    番外內容:[有的同學可能先裝了libvirt和virt-manager後裝qemu的,就會出現沒有連接或者連接裡面沒有KVM的,那麼,在確保kvm服務開啟的狀態下,點擊文件,添加連接。
        ![](https://img2020.cnblogs.com/blog/2045563/202006/2045563-20200625211926555-1690702968.png)
    出來這個頁面,這裡不用動,直接確定,不出意外,你就能導入KVM的連接了,需要知道的是,如果你之前使用virsh或者qemu命令行管理的話,你能夠在這裡導入kvm連接,但是,並不能接管原來創建的虛擬機。]

至於以何種方式創建虛擬機,就看你需要,不過一般使用第一項使用ISO安裝系統,如果你之前有kvm/qemu的磁碟鏡像(qcow2),你也可以用第四個(導入現有磁碟鏡像).

這裡選擇需要使用的ISO鏡像文件.
點擊瀏覽彈出這個視窗

然後本地瀏覽選擇鏡像

選擇CPU/運行記憶體資源

然後創建虛擬硬碟,這裡如果你有現成的qcow2/row鏡像,你也可以直接拿來用。
番外內容:[需要註意這點:通過libvirt 創建qemu鏡像的大小是固定的,就是分多少它馬上就吃多少的,不像vmware這樣會動態擴展,當然,也可以實現,需要參考下麵使用代碼創建虛擬機]
然後沒有什麼問題了,就直接點完成,開始安裝系統,安裝系統過程,這裡就不贅述了,至於基礎的管理工作,進去虛擬機的視窗,點擊那個管理按鈕,會進入類似於vmware虛擬機設置的頁面,在裡面可以進行操作(部分操作需要關機)。

下麵是代碼創建虛擬機的介紹(高級玩法可能需要手動修改XML文件,這裡就暫時不介紹了)

  • 首先,你需要使用virsh這個命令來管理虛擬機,先創建存儲捲(磁碟鏡像)
    virsh vol-create-as poolname volumename 10GiB --format aw|bochs|raw|qcow|qcow2|vmdk
    一般QEMU/KVM支持的鏡像為qcow/qcow2/row
    或者使用qemu-img來創建鏡像
    敲黑板:qemu-img除了可以創建鏡像以外,也和virsh一樣支持鏡像修改,另外,qemu-img創建鏡像可以選擇預分配模式,從而解決上面使用圖形化鏡像過大的問題.
    qemu-img create -f 'qcow2' -o preallocation=off /home/udream/test.qcow2 10G 這樣就可以創建一個10G大小的,關閉預分配的qcow2鏡像,這個鏡像文件沒安裝系統之前的大小是192.2Kb,預設直接創建的大小為10G
    然後,有了磁碟鏡像,就可以創建虛擬機了
    舉例代碼如下:
             virt-install  \
  -        --name test \
           --memory 4096             \
           --vcpus=2,maxvcpus=4      \
           --cpu host                \
           --cdrom $HOME/test.iso \
           --disk  /home/udream/test.qcow2,size=10GiB  \
           --network user            \
           --virt-type kvm   

這段代碼指定了虛擬機名字test,記憶體1g,CPU最少2核最大4核,安裝盤位置:$HOME/test.iso,盤的大小,網路類型,虛擬化介面KVM,使用之前創建的虛擬盤 /home/udream/test.qcow2 大小 10G

  創建完成虛擬機以後使用```virsh start 虛擬機名字```啟動虛擬機
  關閉虛擬機把start改為shutdown,強制關機為destory,重啟是reboot
  管理虛擬網路,使用virsh net-後面跟操作(start/destory/create……)
  當然,還有pool設置存儲池,vol設置存儲捲,snapshot設置快照,具體的,因為字數原因(怕某些同學太長不看),就不一個個碼了,你可以敲virsh --help查看具體幫助信息,不過。這幾個最常用的也就是create/start/stop/destory/list了,
  這裡舉個例子,啟動虛擬網路:```virsh net-start 虛擬網路名``` 創建存儲池```virsh pool-create XML描述文件名```,其他的命令可以按照這樣的方式操作,下一篇是virsh命令的具體玩(配)法(制)介紹。

這次就講到這裡了,本次內容原創純手碼,部分命令為了確認正確性,參考了arch wiki,測試環境為ARCHLINUX 5.7.4-arch1-1 桌面環境kde plasma。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
一周排行
    -Advertisement-
    Play Games
  • 前言 在我們開發過程中基本上不可或缺的用到一些敏感機密數據,比如SQL伺服器的連接串或者是OAuth2的Secret等,這些敏感數據在代碼中是不太安全的,我們不應該在源代碼中存儲密碼和其他的敏感數據,一種推薦的方式是通過Asp.Net Core的機密管理器。 機密管理器 在 ASP.NET Core ...
  • 新改進提供的Taurus Rpc 功能,可以簡化微服務間的調用,同時可以不用再手動輸出模塊名稱,或調用路徑,包括負載均衡,這一切,由框架實現並提供了。新的Taurus Rpc 功能,將使得服務間的調用,更加輕鬆、簡約、高效。 ...
  • 順序棧的介面程式 目錄順序棧的介面程式頭文件創建順序棧入棧出棧利用棧將10進位轉16進位數驗證 頭文件 #include <stdio.h> #include <stdbool.h> #include <stdlib.h> 創建順序棧 // 指的是順序棧中的元素的數據類型,用戶可以根據需要進行修改 ...
  • 前言 整理這個官方翻譯的系列,原因是網上大部分的 tomcat 版本比較舊,此版本為 v11 最新的版本。 開源項目 從零手寫實現 tomcat minicat 別稱【嗅虎】心有猛虎,輕嗅薔薇。 系列文章 web server apache tomcat11-01-官方文檔入門介紹 web serv ...
  • C總結與剖析:關鍵字篇 -- <<C語言深度解剖>> 目錄C總結與剖析:關鍵字篇 -- <<C語言深度解剖>>程式的本質:二進位文件變數1.變數:記憶體上的某個位置開闢的空間2.變數的初始化3.為什麼要有變數4.局部變數與全局變數5.變數的大小由類型決定6.任何一個變數,記憶體賦值都是從低地址開始往高地 ...
  • 如果讓你來做一個有狀態流式應用的故障恢復,你會如何來做呢? 單機和多機會遇到什麼不同的問題? Flink Checkpoint 是做什麼用的?原理是什麼? ...
  • C++ 多級繼承 多級繼承是一種面向對象編程(OOP)特性,允許一個類從多個基類繼承屬性和方法。它使代碼更易於組織和維護,並促進代碼重用。 多級繼承的語法 在 C++ 中,使用 : 符號來指定繼承關係。多級繼承的語法如下: class DerivedClass : public BaseClass1 ...
  • 前言 什麼是SpringCloud? Spring Cloud 是一系列框架的有序集合,它利用 Spring Boot 的開發便利性簡化了分散式系統的開發,比如服務註冊、服務發現、網關、路由、鏈路追蹤等。Spring Cloud 並不是重覆造輪子,而是將市面上開發得比較好的模塊集成進去,進行封裝,從 ...
  • class_template 類模板和函數模板的定義和使用類似,我們已經進行了介紹。有時,有兩個或多個類,其功能是相同的,僅僅是數據類型不同。類模板用於實現類所需數據的類型參數化 template<class NameType, class AgeType> class Person { publi ...
  • 目錄system v IPC簡介共用記憶體需要用到的函數介面shmget函數--獲取對象IDshmat函數--獲得映射空間shmctl函數--釋放資源共用記憶體實現思路註意 system v IPC簡介 消息隊列、共用記憶體和信號量統稱為system v IPC(進程間通信機制),V是羅馬數字5,是UNI ...