引言

在云计算、大数据和边缘计算的时代,虚拟化技术已成为 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;网上涌…