libvirt 新手指南:從零開始掌握虛擬化管理

引言

在云計算、大數據和邊緣計算的時代,虛擬化技術已成為 IT 基礎設施的核心支柱。它允許我們在單一物理服務器上運行多個虛擬機(Virtual Machine,簡稱 VM),從而實現資源的高效利用、快速部署和靈活擴展。對于新手來說,虛擬化可能聽起來復雜,但實際上,它就像在電腦上運行多個“虛擬電腦”,每個虛擬機可以獨立運行不同的操作系統和應用。

然而,虛擬化并非一蹴而就。底層有各種 hypervisor(如 KVM、QEMU、Xen、VirtualBox 等),每個都有自己的命令和配置方式。這就帶來了管理難題:如何統一操作這些不同的工具?這就是 libvirt 的價值所在。libvirt 是一個開源的虛擬化管理庫和工具集,它提供了一個統一的 API(Application Programming Interface,應用程序接口),讓開發者、管理者和用戶能夠輕松管理多種虛擬化技術,而無需深入每個 hypervisor 的細節。

libvirt 由 Red Hat 等公司主導開發,已成為 Linux 虛擬化的事實標準。它支持 KVM(Kernel-based Virtual Machine,內核虛擬機)、QEMU(Quick Emulator,快速仿真器)、Xen、LXC(Linux Containers,輕量容器)等多種后端。簡單來說,libvirt 就像一個“虛擬化管家”,負責協調資源分配、監控狀態和執行操作。對于新手,libvirt 的優勢在于其簡單易用:通過命令行工具 virsh 或圖形界面 virt-manager,你就能快速上手創建和管理虛擬機。

本文將從基礎概念入手,逐步引導你了解 libvirt 的歷史、架構、安裝、使用和高級功能。預計閱讀后,你能獨立搭建一個 libvirt 環境,并運行第一個虛擬機。讓我們開始吧!


libvirt 的歷史與發展

libvirt 的故事要從 2006 年說起。那時,虛擬化技術正處于爆發前夜。Xen 和 VMware 等商業解決方案主導市場,但開源社區需要一個統一的工具來管理新興的 KVM 和 QEMU。Red Hat 的工程師 Daniel Veillard 和其他貢獻者啟動了 libvirt 項目,旨在創建一個跨平臺的 C 語言 API,用于抽象虛擬化操作。

最初,libvirt 僅支持 Xen,但很快擴展到 KVM/QEMU,這得益于 Linux 內核的快速演進。2007 年,libvirt 1.0 版本發布,引入了 libvirtd 守護進程(daemon),這是一個服務器端組件,負責處理客戶端請求。2010 年,隨著云時代的到來,libvirt 開始支持網絡和存儲管理功能,如虛擬網絡橋接(bridging)和存儲池(storage pools)。

如今,libvirt 已發展到 10.x 版本(截至 2025 年),支持 Windows、macOS 和多種 Linux 發行版。它被廣泛集成到 OpenStack、Proxmox 和 oVirt 等云平臺中。根據官方文檔,libvirt 的社區活躍,定期發布更新,修復安全漏洞并添加新功能。例如,2024 年的更新加強了對 ARM 架構的支持,適應了邊緣計算需求。

為什么 libvirt 如此持久?因為它遵循“一次編寫,到處運行”的原則。開發者可以用 Python、Java 或 C++ 綁定(bindings)來擴展它,而管理員則受益于其穩定性。相比直接使用 QEMU 的復雜命令,libvirt 簡化了 80% 的工作量。對于新手,了解歷史有助于欣賞其演化:從單純的 VM 管理,到全面的資源編排。

libvirt 的核心組件與架構概述

libvirt 的架構設計精巧,采用客戶端-服務器模型,確保安全性和可擴展性。核心是 libvirtd 守護進程,它運行在主機上,監聽本地或遠程連接(如 TCP 或 UNIX 套接字)。客戶端通過 API 調用 libvirtd 來執行操作,避免直接訪問底層 hypervisor,提高了安全性。

主要組件

  1. API 層:libvirt 的心臟,提供 C 語言接口,支持枚舉資源(如 CPU、內存)、創建/銷毀域(domains,即 VMs)、管理網絡和存儲。API 是 hypervisor 獨立的,你可以用它編寫腳本自動化任務。例如,virDomainCreateXML() 函數可以從 XML 配置啟動一個 VM。

  2. 守護進程 (libvirtd):服務器端,處理 API 請求。它加載驅動(drivers)來與具體 hypervisor 交互,如 KVM 驅動使用 /dev/kvm 設備。libvirtd 支持模塊化設計,你可以啟用/禁用特定驅動。

  3. 工具集

    • virsh:命令行工具,類似于“虛擬機 shell”。新手常用它來交互式管理 VM。
    • virt-manager:圖形界面,基于 Python 的 GTK 應用,適合可視化操作。
    • virt-install:用于從命令行快速安裝 VM,支持 ISO 鏡像導入。
    • virt-viewer:遠程查看 VM 控制臺。
  4. 驅動與后端:libvirt 支持多種 hypervisor:

    • KVM/QEMU:最流行,用于全虛擬化。
    • Xen:支持 paravirtualization(半虛擬化)。
    • LXC:容器管理。
    • 其他:VMware、Hyper-V(通過遠程驅動)。

架構流程

當你運行 virsh list 時,客戶端發送請求到 libvirtd,后者查詢 KVM 驅動,獲取 VM 列表,然后返回結果。XML 配置是關鍵:每個 VM、網絡或存儲都用 XML 描述,便于版本控制和遷移。

對于新手,記住:libvirt 不直接運行 VM,而是“指揮” hypervisor。架構的優點是可移植性強,例如,你可以用相同的 virsh 命令管理本地 KVM 或遠程 Xen 主機。

安全方面,libvirt 使用 AppArmor/SELinux 沙箱隔離操作,防止 VM 逃逸(escape)。遠程訪問需配置 SASL 或 TLS 認證。

libvirt 的安裝指南

安裝 libvirt 是新手的第一步。我們以 Ubuntu 24.04 LTS 為例(其他發行版類似),假設你有 root 權限。整個過程只需幾分鐘。

準備工作

確保系統支持虛擬化:

  • 檢查 CPU:運行 egrep -c '(vmx|svm)' /proc/cpuinfo,如果 >0,則支持。
  • 啟用 KVM 模塊:sudo modprobe kvm(Intel 用 kvm_intel,AMD 用 kvm_amd)。
  • 安裝依賴:sudo apt update && sudo apt install qemu-kvm libvirt-clients libvirt-daemon-system bridge-utils virtinst virt-manager

這些包包括:

  • qemu-kvm:hypervisor。
  • libvirt-clients/daemons:核心庫。
  • bridge-utils:網絡橋接。
  • virtinst:安裝工具。
  • virt-manager:GUI。

對于 Red Hat/CentOS:sudo yum install libvirt qemu-kvm virt-manager 或使用 dnf。

Windows 用戶:從 https://libvirt.org/windows.html 下載 MSI 安裝包,但功能有限,主要用于開發。

macOS:通過 Homebrew brew install libvirt,但需額外配置 QEMU。

安裝后,啟動服務:

sudo systemctl start libvirtd
sudo systemctl enable libvirtd
sudo systemctl status libvirtd

如果出錯,檢查日志:journalctl -u libvirtd

添加用戶到 libvirt 組:sudo usermod -aG libvirt $USER,然后注銷重登錄,避免 sudo。

驗證安裝

運行 virsh version,輸出類似:

Compiled against library: libvirt 10.0.0
Using library: libvirt 10.0.0
Using API: QEMU 10.0.0
Running hypervisor: QEMU 8.2.0

恭喜!你已準備好。

對于 Fedora/openSUSE,過程相似,但包管理器不同。記住,安裝后配置防火墻:sudo ufw allow from 192.168.122.0/24(默認 NAT 網絡)。

基本配置與 libvirtd 管理

安裝后,需要基本配置。libvirtd 的配置文件在 /etc/libvirt/libvirtd.conf。

關鍵配置項

  • URI(Uniform Resource Identifier):指定連接方式。默認是 qemu:///system(系統級,root 權限)。用戶級是 qemu:///session(無特權)。
    編輯:sudo nano /etc/libvirt/libvirtd.conf,設置 listen_tcp = 1 啟用遠程(需重啟)。

  • 網絡:默認啟用 NAT 網絡(virbr0 接口,192.168.122.0/24)。運行 virsh net-list --all 查看。
    啟動默認網絡:virsh net-start defaultvirsh net-autostart default

  • 存儲:默認池 /var/lib/libvirt/images。創建新池:virsh pool-define-as mypool dir --target /path/to/storage

  • 安全:啟用 TLS:生成證書,或用 SASL。初學者可忽略,但生產環境必備。

重啟 libvirtd:sudo systemctl restart libvirtd

常見問題:如果 “Permission denied”,檢查用戶組或 URI。日志在 /var/log/libvirt/qemu/。

配置好后,你的環境已就緒。接下來,學習如何管理 VM。

使用 virsh 管理虛擬機:從創建到運行

virsh 是 libvirt 的瑞士軍刀。新手從交互模式開始:virsh 進入 shell,quit 退出。所有命令也可非交互式運行。

基本概念

  • 域(Domain):VM 的抽象,包括 QEMU 進程。狀態:shut off(關機)、running(運行)、paused(暫停)。
  • 列表命令virsh list --all 顯示所有域。
  • 信息查詢virsh dominfo <domain> 查看 CPU、內存等。

創建虛擬機

方式一:用 virt-install(推薦新手)。

virt-install \--name myvm \--ram 2048 \--vcpus 2 \--disk path=/var/lib/libvirt/images/myvm.qcow2,size=20 \--os-variant ubuntu24.04 \--network network=default \--graphics vnc,port=5900 \--location http://archive.ubuntu.com/ubuntu/dists/jammy/main/installer-amd64/

這會啟動安裝過程。–os-variant 來自 osinfo-query os 列表。

方式二:XML 配置。
創建 XML 文件 myvm.xml:

<domain type='kvm'><name>myvm</name><memory unit='KiB'>2097152</memory><vcpu>2</vcpu><os><type arch='x86_64' machine='pc'>hvm</type><boot dev='hd'/></os><devices><disk type='file' device='disk'><source file='/var/lib/libvirt/images/myvm.qcow2'/><target dev='vda' bus='virtio'/></disk><interface type='network'><source network='default'/></interface><graphics type='vnc' port='5900'/></devices>
</domain>

然后:virsh define myvm.xml 定義,virsh start myvm 啟動。

管理命令

  • 啟動/停止:virsh start myvmvirsh shutdown myvm(優雅關機)、virsh destroy myvm(強制)。
  • 重啟:virsh reboot myvm
  • 暫停/恢復:virsh suspend myvmvirsh resume myvm
  • 控制臺:virsh console myvm(文本控制臺,Ctrl+] 退出)。
  • 編輯:virsh edit myvm 修改 XML。
  • 刪除:virsh undefine myvmvirsh destroy myvm

連接 VNC:用 vncviewer 192.168.122.1:5900(主機 IP)。

示例:創建一個最小 VM 并運行 Ubuntu。

  1. 下載 ISO:wget https://releases.ubuntu.com/24.04/ubuntu-24.04-live-server-amd64.iso
  2. 用 virt-install 安裝。
  3. 運行 virsh list,看到 running 狀態。
  4. 用 virt-viewer myvm 查看圖形界面。

新手提示:總是用 --dry-run 測試命令。監控資源:virsh domstats myvm

網絡與存儲管理

虛擬化離不開網絡和存儲。libvirt 提供抽象層簡化配置。

網絡管理

libvirt 支持 NAT、橋接、路由等模式。

  • 默認 NAT:VM 通過主機 NAT 訪問外網。編輯 /etc/libvirt/qemu.conf 調整。
  • 橋接網絡:VM 直接連物理網。創建橋接 XML:
    <network><name>br0</name><forward mode='bridge'/><bridge name='br0'/>
    </network>
    
    virsh net-define br0.xmlvirsh net-start br0
    在 VM XML 中:。

命令:virsh net-listvirsh net-dumpxml defaultvirsh net-destroy default

高級:VLAN 或 SR-IOV 通過 XML 配置。

存儲管理

存儲池是邏輯分組,如目錄、LVM、iSCSI。

  • 默認池:/var/lib/libvirt/images,格式 qcow2(可變大小)。
  • 創建池:virsh pool-create-as mypool dir /mnt/storage
  • 卷(volume):virsh vol-create-as mypool mydisk.qcow2 10G
  • 列表:virsh pool-list --allvirsh vol-list mypool

克隆卷:virsh vol-clone source target。快照:virsh snapshot-create-as myvm snap1

對于新手,qcow2 是首選:支持快照和壓縮。備份:virsh vol-backup mypool mydisk.qcow2

常見問題:權限錯誤,用 chown libvirt-qemu /path。

GUI 工具:virt-manager 的使用

命令行強大,但新手更愛圖形界面。virt-manager 是 libvirt 的“可視化儀表盤”。

安裝后運行 virt-manager(需 X11 或 Wayland)。

界面概述

  • 左側:連接列表(QEMU/KVM),主機和 VM。
  • 主機視圖:CPU、內存使用。
  • VM 創建:點擊“創建新 VM”,選擇本地安裝、ISO 或導入。
    步驟:分配 CPU/內存、選擇存儲、配置網絡、啟動安裝。

日常操作

  • 控制 VM:啟動、暫停、關機、克隆。
  • 控制臺:集成 VNC/SPICE,實時查看。
  • 編輯硬件:添加 USB、網卡、GPU 直通(PCI passthrough)。
  • 快照管理:創建/回滾狀態。

例如,創建 VM:

  1. 選擇“本地安裝媒體 (ISO)”。
  2. 選 ISO 文件,設置 RAM 2GB、CPU 2 核。
  3. 存儲:20GB qcow2。
  4. 網絡:默認。
  5. 完成,啟動安裝。

virt-manager 適合實驗,支持截圖和日志查看。遠程連接:文件 > 添加連接 > QEMU/KVM > 遠程主機。

高級主題:快照、遷移與監控

掌握基礎后,探索高級功能。

快照

快照保存 VM 狀態,便于測試。內部快照(qcow2):virsh snapshot-create-as myvm snap1 --disk-only。外部:用 vol-snapshot-create。

列表:virsh snapshot-list myvm。回滾:virsh snapshot-revert myvm snap1

遷移

libvirt 支持熱遷移(live migration):VM 無中斷移動到另一主機。
前提:共享存儲、相同網絡。
命令:virsh migrate --live myvm qemu+ssh://remote-host/system

監控與自動化

  • 事件:virsh event --all --loop 監聽變化。
  • 鉤子(hooks):/etc/libvirt/hooks/ 腳本,在 VM 啟動時運行。
  • 綁定:用 Python libvirt 庫編寫腳本,例如:
    import libvirt
    conn = libvirt.open('qemu:///system')
    doms = conn.listAllDomains()
    for dom in doms:print(dom.name(), dom.isActive())
    conn.close()
    

集成 Prometheus 監控 VM 指標。


結論

libvirt 已從一個簡單 API 成長為虛擬化生態的基石。它簡化了復雜性,讓新手也能高效管理資源。在容器時代(Docker/Kubernetes),libvirt 仍不可或缺,尤其在混合云環境中。

下一步:實踐!搭建一個測試環境,創建多個 VM,實驗網絡隔離。閱讀官方文檔 https://libvirt.org/docs.html,加入社區貢獻。

通過這篇指南,你已掌握 libvirt 精髓。虛擬化之旅才剛開始,享受探索吧!

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/921770.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/921770.shtml
英文地址,請注明出處:http://en.pswp.cn/news/921770.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

OpenLayers數據源集成 -- 章節三:矢量要素圖層詳解

前言在前面的文章中&#xff0c;我們學習了OpenLayers的瓦片圖層&#xff08;TileLayer&#xff09;技術。本文將深入探討OpenLayers中的矢量要素圖層&#xff08;VectorFeatureLayer&#xff09;功能&#xff0c;這是WebGIS開發中處理矢量數據、實現交互式地圖的核心技術。矢量…

從“能說話”到“會做事”:AI Agent如何重構日常工作流?

從“能說話”到“會做事”&#xff1a;AI Agent如何重構日常工作流&#xff1f;在人工智能飛速發展的當下&#xff0c;AI已從最初簡單的語音交互、信息檢索進化到了具備自主決策與行動能力的新階段&#xff0c;其中AI Agent的出現堪稱關鍵轉折點。從只能機械“說話”回答問題&a…

隨身wifi到底有沒有用?

不用繞彎子&#xff0c;直接說清隨身WiFi怎么回事&#xff0c;對比完家用WiFi和手機熱點&#xff0c;再避坑&#xff5e;一、先明白&#xff1a;隨身WiFi到底是啥&#xff1f; 1、簡單講就是「能揣兜里的WiFi發射器」——要么插張物聯卡&#xff0c;要么內置流量&#xff0c;能…

MySQL問題8

MySQL深度分頁優化思路 常見的3種優化思路如下&#xff1a; 1. 子查詢優化方式 示例改寫前&#xff1a; SELECT * FROM words WHERE name oee ORDER BY id LIMIT 99999990, 10;這個寫法會導致 MySQL 掃描并丟棄前面 99999990 行&#xff0c;效率極低。 示例改寫后&#xff…

洛谷 P1249 最大乘積-普及/提高-

P1249 最大乘積 題目描述 一個正整數一般可以分為幾個互不相同的自然數的和&#xff0c;如 312312312&#xff0c;413413413&#xff0c;514235142351423&#xff0c;615246152461524。 現在你的任務是將指定的正整數 nnn 分解成若干個互不相同的自然數&#xff08;也可以不分解…

大學地理信息科學該如何學習才能好就業

一、明確專業特點與就業方向地理信息科學是一門交叉性強、實踐性強的學科&#xff0c;融合了地理學、計算機科學、測繪、遙感等多個領域&#xff0c;廣泛應用于自然資源管理、城市規劃、交通、環境、農業、水利、智慧城市等行業。主要就業方向包括&#xff1a;政府部門/事業單位…

【git】Git 大文件推送失敗問題及解決方案

Git 大文件推送失敗問題及解決方案 在日常開發中&#xff0c;我們經常會遇到這樣的問題&#xff1a; Remote: File [xxx.exe] size 188.156MB, exceeds quota 100MB Remote: Please remove the file[s] from history and try again這是因為 Gitee/GitHub 等平臺對單個文件大小有…

國產銀河麒麟三維數字沙盤大數據可視化研訓推演模擬仿真地理信息系統

國產銀河麒麟三維數字沙盤大數據可視化研訓推演模擬仿真地理信息系統獨立自主知識產權和原創源代碼級地理信息系統平臺&#xff0c;核心引擎與算法實現全棧國產化&#xff0c;提供從數據采集、處理到可視化分析的全鏈條自主可控解決方案&#xff0c; 1.2支持國產操作系統&…

GPT Server 文檔

目錄配置文件的詳細說明&#xff08;后續持續完善&#xff09;openai_api_server配置控制器(controller)配置模型(worker)配置模型配置大語言模型 示例&#xff1a;QwenEmbedding模型 示例&#xff1a;Conan-embedding-v1TTS文本轉語音模型 示例: Spark-TTST2I 文生圖模型示例:…

中國移動云電腦一體機-創維LB2004_瑞芯微RK3566_2G+32G_開啟ADB ROOT安卓固件-方法3

中國移動云電腦一體機-創維LB2004_瑞芯微RK3566_2G32G_開啟ADB ROOT安卓固件-方法3 聲明&#xff0c;這個安卓固件root一旦恢復出廠設置&#xff0c;會變回原樣&#xff0c;雖然root&#xff0c;但也無法自行操作。 建議按照&#xff1a;中國移動云電腦一體機-創維LB2004_瑞芯微…

設計模式(策略,觀察者,單例,工廠方法)

文章目錄1. 設計模式核心概念與C語言實現基礎2. 常用設計模式詳解模式一&#xff1a;策略模式&#xff08;Strategy Pattern&#xff09;模式二&#xff1a;觀察者模式&#xff08;Observer Pattern&#xff09;模式三&#xff1a;單例模式&#xff08;Singleton Pattern&#…

terraform入門

一、概念 1、Terraform 的“基礎設施即代碼”是什么 基礎設施即代碼 (IaC) 工具允許您使用配置文件而非圖形用戶界面來管理基礎設施。通過定義可版本控制、可重用和可共享的資源配置&#xff0c;IaC 允許您以安全、一致且可重復的方式構建、更改和管理您的基礎設施。 Terraform…

ARM 體系結構與存儲器

一、RAM 分類SRAM (Static RAM)用 觸發器/晶體管 存儲 0/1。特點&#xff1a;速度快、功耗低&#xff08;靜態保持&#xff09;&#xff0c;但成本高、容量小。應用&#xff1a;片上緩存、寄存器文件、單片機內存。DRAM (Dynamic RAM)用 電容充放電 存儲 0/1。特點&#xff1a;…

Jenkins運維之路(初識流水線)

1.初次使用流水線前面我們用自由風格的流水線進行了項目部署&#xff0c;但是自由風格的流水線只能應付一些簡單且項目規模不是很大的部署。為了讓流水線能夠靈活、通用、邏輯清晰且更加容易維護&#xff0c;現在一般企業都是采取使用了Pipeline的方式來對流水線進行構建&#…

【智能協同云圖庫】基于統一接口架構構建多維度分析功能、結合 ECharts 可視化與權限校驗實現用戶 / 管理員圖庫統計、通過 SQL 優化與流式處理提升數據

摘要&#xff1a;本節圍繞提升空間圖庫管理分析能力&#xff0c;先分用戶與管理員兩類梳理資源使用、分類、標簽等 6 大分析需求&#xff0c;再設計統一實現流程與接口方案&#xff0c;最后通過分層開發完成各需求后端功能&#xff0c;覆蓋權限校驗、數據處理與接口編寫。 本節…

HTML第八課:HTML4和HTML5的區別

HTML第八課&#xff1a;HTML4和HTML5的區別html4 與 html 5的區別快速學習平臺html4 與 html 5的區別 示例圖 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Title</title> </head> &…

CS336——1. Overview

文章目錄1. CS336介紹2. 概覽2.1 為什么會有這門課程2.1.1 LLM的參數和訓練成本2.2.2 小語言模型和LLM的區別2.2 你可以學到什么&#xff1f;2.2.1 Intuitions2.2.2 The bitter lesson3. 全景圖(current landscape)/發展歷史4. 可執行的課件說明5. 課程設計6. 課程內容6. 1 bas…

ncnn-Android-mediapipe_hand 踩坑部署實錄

目錄 同時有 nanodet 和yolox,可以做到10fps 沒測試:yolox hand ncnn-Android-mediapipe_hand hand 關鍵點21個模型: ncnn版本: 跑通后,手部關鍵點集中在圖像左上角,經過排查,原因是ncnn版本不對。 CMakeLists.txt 同時有 nanodet 和yolox,可以做到10fps 無訓練…

OSPF實驗:外部路由引入

OSPF外部路由引入實驗目的&#xff1a;除了內部通信外&#xff0c;企業還需要與外部網絡進行通信&#xff0c;不同企業網絡之間存在互訪需求。假設A公司網絡部署OSPF協議實現內部通信&#xff0c;因業務發展&#xff0c;需要訪問B公司的一臺WEB服務器。網絡拓撲圖&#xff1a;公…

網絡上那些在線 PDF 轉換工具安全嗎?轉換 PDF 需要注意什么

PDF 格式憑借跨設備兼容、格式穩定的優勢&#xff0c;早已成為個人辦公、企業協作中不可或缺的文件格式。無論是壓縮 PDF 以滿足郵件附件大小限制&#xff0c;還是將 Word 文檔轉成 PDF 確保排版不變&#xff0c;我們總能遇到需要 PDF 工具的場景。也正因如此&#xff0c;網上涌…