ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

从零掌握 virt-manager:基于 KVM 的 Linux 虚拟化实战指南

从零掌握 virt-manager:基于 KVM 的 Linux 虚拟化实战指南 1. 为什么选择 virt-manager 作为你的虚拟化起点如果你正在寻找一个免费、开源、功能强大且易于上手的虚拟机管理工具那么virt-managerVirtual Machine Manager绝对值得你花时间深入了解。尤其是在 VMware Workstation 需要许可证、VirtualBox 在某些场景下性能表现不尽如人意的情况下virt-manager提供了一个基于 Linux 内核原生虚拟化技术KVM的绝佳选择。它不是一个独立的虚拟化引擎而是一个漂亮的前端图形界面后端驱动是强大的libvirt管理库和KVM加速模块。这意味着你获得的是接近物理机的性能以及通过libvirt带来的标准化、可脚本化的管理能力。很多人第一次接触虚拟机都是从 VMware 或 VirtualBox 开始的这很正常因为它们跨平台且安装简单。但当你需要在 Linux 环境下特别是作为开发服务器或追求更高性能与集成度时转向virt-manager会打开一扇新的大门。它让你直接利用 Linux 内核的KVM基于内核的虚拟机模块这是一种硬件辅助的全虚拟化方案在支持 Intel VT-x 或 AMD-V 的 CPU 上其性能损耗可以降到非常低特别适合运行对 I/O 和计算性能敏感的工作负载比如数据库、编译环境甚至另一个 Linux 发行版进行测试。我最初从 VMware 切换到virt-manager是因为需要在 Ubuntu 服务器上稳定地运行多个测试环境并且希望通过命令行也能方便地管理。virt-manager完美地满足了这两点图形化界面让创建和初始配置变得直观而底层的libvirt体系意味着我可以用virsh命令完成所有自动化操作。对于开发者、系统管理员或者任何想在 Linux 上高效使用虚拟机的人来说掌握它是一个性价比极高的技能。接下来我将带你从零开始完成使用virt-manager创建虚拟机的全过程并分享一些只有踩过坑才知道的细节。2. 部署 virt-manager不仅仅是安装一个软件包在开始创建虚拟机之前我们需要一个可用的virt-manager环境。这个过程不仅仅是安装一个叫virt-manager的软件而是要搭建起整个libvirtQEMU/KVM的虚拟化栈。不同的 Linux 发行版包管理工具不同但核心组件是一致的。2.1 系统与环境检查首先最关键的一步是确认你的 CPU 支持硬件虚拟化扩展Intel VT-x 或 AMD-V。这是 KVM 高效运行的基础。打开终端运行以下命令egrep -c (vmx|svm) /proc/cpuinfo如果输出数字大于 0则表示你的 CPU 支持硬件虚拟化。如果输出是 0你需要进入主板的 BIOS/UEFI 设置中找到类似 “Intel Virtualization Technology”、“VT-x”、“AMD-V” 或 “SVM Mode” 的选项并启用它。这是第一个容易忽略的坑很多电脑出厂时默认是关闭虚拟化支持的。接下来检查 KVM 内核模块是否已加载lsmod | grep kvm你应该能看到kvm_intel或kvm_amd以及kvm模块。如果没有它们通常会在安装相关软件包后自动加载。2.2 分步安装与组件解析在基于 Debian/Ubuntu 的系统上安装命令如下sudo apt update sudo apt install -y qemu-kvm libvirt-daemon-system libvirt-clients bridge-utils virtinst virt-manager在基于 RHEL/CentOS/Fedora 的系统上使用sudo dnf install -y qemu-kvm libvirt libvirt-daemon-kvm virt-install virt-manager virt-viewer不要被这一长串包名吓到我们来拆解一下每个组件的作用qemu-kvm这是实际的虚拟化引擎模拟硬件与 KVM 加速内核模块的整合包。QEMU 负责设备模拟KVM 负责利用 CPU 硬件加速。libvirt-daemon-system与libvirtlibvirt是管理虚拟化平台的工具包它提供了一个守护进程libvirtd和一套 API。libvirt-daemon-system包含了守护进程和系统服务文件。libvirt-clients提供了连接和管理libvirt守护进程的客户端工具最著名的就是virsh命令行工具。bridge-utils用于配置网络桥接的工具集。如果你想让你虚拟机的网络看起来像是物理网络中的一台独立主机拥有独立 IP桥接网络是必备的。virt-install一个强大的命令行工具用于从命令行创建新的虚拟机。即使我们主要用图形界面了解它也对理解底层参数有帮助。virt-manager我们主角的图形界面程序。virt-viewer一个轻量级的虚拟机控制台查看器有时比virt-manager内嵌的显示组件更流畅。安装完成后需要将你的用户添加到libvirt组以便无需 root 权限即可管理虚拟机sudo usermod -aG libvirt $(whoami) sudo usermod -aG kvm $(whoami)重要提示修改组后你需要完全注销当前会话并重新登录或者启动一个新的登录 shell例如通过su - $USER或重新打开终端新的组权限才会生效。这是第二个常见的坑忘记重新登录导致权限不足在virt-manager中连接不到本地 QEMU/KVM 会话。最后启动并启用libvirtd服务sudo systemctl start libvirtd sudo systemctl enable libvirtd3. 首次启动与创建虚拟机的核心流程现在你可以在应用程序菜单中找到 “Virtual Machine Manager” 并启动它。首次启动时它会提示你添加连接。默认的 “QEMU/KVM” 用户会话qemu:///session就是正确的选择它使用你的用户权限运行虚拟机存储位置通常在~/.local/share/libvirt/images/管理起来更方便。3.1 创建新虚拟机的详细步骤点击左上角的 “创建新虚拟机” 按钮你会看到一个清晰的向导。我们一步步来并解释每个选择背后的考量。第一步选择安装介质来源这是决定虚拟机如何安装操作系统的关键步骤。virt-manager提供了四种方式本地安装介质ISO 镜像或 CDROM最常用的方式。你需要准备一个系统安装镜像如 Ubuntu、CentOS 或 Windows 的 ISO 文件。网络安装HTTP, HTTPS, FTP直接从网络服务器获取安装文件。适用于需要自动化部署如 PXE的场景或者你不想在本地存储 ISO 文件。网络引导PXE如果你的网络中有配置好的 PXE 服务器虚拟机可以直接从网络启动并安装。导入现有磁盘镜像如果你已经有一个准备好的虚拟磁盘文件如 qcow2 格式可以直接使用。对于新手强烈建议使用第一种方式。点击 “浏览” 选择你下载好的 ISO 文件。virt-manager会自动尝试检测镜像中的操作系统类型和版本这能帮助它应用一些优化的默认配置。第二步配置内存与 CPU这里需要根据宿主机的资源和虚拟机的用途来权衡。内存分配给虚拟机的物理内存。建议至少 2048 MB (2GB) 用于现代 Linux 桌面或 Windows 10/11 的基本运行。对于服务器或开发环境4GB 或更多是更稳妥的选择。记住这部分内存会被虚拟机独占从宿主机中划走。CPU这里配置的是虚拟 CPUvCPU的数量。你可以分配最多与宿主机物理核心数相同的 vCPU。例如你的宿主机是 4 核 8 线程理论上你可以分配最多 8 个 vCPU。一个重要的经验是对于大多数轻量级应用分配 2-4 个 vCPU 足以获得很好的性能过度分配如给一个轻量服务分配 8 vCPU反而可能因为调度开销导致性能下降。下方的 “拓扑” 按钮可以设置 Socket、Core、Thread 的布局模拟真实的 CPU 拓扑结构通常保持默认即可除非你运行的应用对 NUMA 或 CPU 亲和性有特殊要求。第三步创建存储磁盘这是另一个关键决策点。你需要为虚拟机创建一个虚拟硬盘。磁盘大小根据操作系统和用途决定。一个干净的 Ubuntu Desktop 安装大约需要 20-25GBWindows 10/11 则需要 60GB 以上才比较宽裕。建议预留充足空间例如 Linux 服务器分配 40-60GBWindows 桌面分配 80-120GB。存储格式这里有多个选项但qcow2(QEMU 镜像格式) 是默认且最推荐的选择。原因如下稀疏文件它支持“稀疏存储”thin provisioning。如果你创建一个 100GB 的 qcow2 磁盘它最初只占用实际写入数据大小的物理空间可能只有几百MB随着虚拟机内文件增多而动态增长。这极大地节省了宿主机的存储空间。快照qcow2原生支持快照功能你可以在安装软件或配置系统前后创建快照随时一键回滚是测试和开发的利器。后端存储选择 “为虚拟机选择管理或其他现有存储池”。通常使用默认的 “默认” 池位置在~/.local/share/libvirt/images/对于用户会话模式很方便。你也可以提前创建指向其他目录如/var/lib/libvirt/images或一个大容量数据盘的存储池。第四步命名虚拟机并完成网络配置虚拟机名称起一个有意义的名字如 “ubuntu-22-04-dev”、“win11-test”。这个名字会在virt-manager列表和virsh list命令中显示。网络选择网络配置是虚拟机与外界通信的桥梁。默认选项是 “NAT”网络地址转换。NAT默认虚拟网络虚拟机通过宿主机的一个私有网络进行 NAT 转换来访问外网。宿主机可以访问虚拟机但外部网络无法直接访问虚拟机。这是最安全、最简单的模式适合大多数上网、下载的场景。桥接网络虚拟机的网络接口被桥接到宿主机的物理网络接口上就像在宿主机所在的物理网络中直接接入了一台新电脑。虚拟机会从你的家庭/公司路由器获取 IP 地址与宿主机在同一网段可以被网络内其他设备直接访问。这是搭建服务器如 Web 服务器时必须选择的模式。要使用桥接你需要先在宿主机上配置好一个网桥如br0这通常需要额外的系统配置。在最后一步勾选 “在安装前自定义配置”。这是一个非常重要的习惯它允许你在最终创建前对虚拟机的硬件细节进行微调很多优化和避坑操作都在这里。4. 安装前的关键硬件自定义与优化点击 “完成” 前勾选了自定义配置会弹出一个详细的硬件信息窗口。这里才是体现实力的地方。4.1 至关重要的“引导选项”在左侧列表中找到 “引导选项”。确保 “启用引导菜单” 被勾选这让你在虚拟机启动时可以选择从光盘ISO还是硬盘启动。最关键的一点是将 “IDE 或 SATA CDROM 1” 你的安装 ISO拖到启动顺序列表的最前面。这样虚拟机会优先从 ISO 启动进行安装。安装完成后你需要回到这里将 “VirtIO Disk 1”你的虚拟硬盘拖到最前面以便从硬盘正常启动系统。忘记修改启动顺序是导致“虚拟机反复从 ISO 启动进入安装界面”的最常见原因。4.2 磁盘总线类型性能提升的关键点击左侧的 “磁盘 1”查看其详情。默认的磁盘总线可能是 “SATA” 或 “IDE”。为了获得最佳 I/O 性能强烈建议将其改为 “VirtIO”。VirtIO这是一种半虚拟化驱动需要虚拟机内部安装对应的驱动。它能显著降低磁盘和网络 I/O 的虚拟化开销提升性能。对于 Linux 客户机现代发行版内核都已内置 VirtIO 驱动。对于 Windows 客户机你需要在安装开始时手动加载 VirtIO 驱动驱动镜像可从 Fedora 项目网站下载。虽然多了一步但为了性能这是值得的。如果你觉得麻烦对于 Windows 可以先使用 “SATA” 完成安装然后再添加一个 VirtIO 磁盘并安装驱动最后迁移系统。4.3 网络适配器类型同样选择 VirtIO类似地点击 “NIC 1”网络接口卡。将其设备模型也改为 “virtio”。这能大幅提升网络吞吐量降低 CPU 占用。Linux 客户机同样内置驱动Windows 需要额外加载。4.4 图形显示与视频设置点击 “视频” 设置。默认的 “VGA” 或 “QXL” 对于 Linux 控制台或简单桌面足够。但如果你需要在虚拟机内运行 3D 应用或追求更流畅的桌面体验尤其是 Windows可以考虑将型号改为 “VirtIO GPU” 或 “VMVGA”需要安装 SPICE 驱动。对于最常见的场景使用 “Spice 服务器” 配合 “QXL” 视频模型并在客户机内安装spice-vdagent驱动可以实现鼠标无缝切换、动态分辨率调整和剪贴板共享体验非常好。4.5 添加必要的功能组件通道可以添加一个 “spicevmc” 类型的通道并选择 “com.redhat.spice.0” 作为名称。这是为了 SPICE 增强功能如剪贴板共享准备的。USB 重定向如果你需要从宿主机传递 USB 设备如 U 盘、加密狗到虚拟机可以在这里添加 USB 主机控制器如 EHCI/ICH9。 完成所有自定义后点击 “开始安装”。虚拟机就会启动并从 ISO 镜像引导进入熟悉的操作系统安装界面。之后的安装过程就和在物理机上安装一模一样了。5. 安装后配置、日常管理与高级技巧操作系统安装完成后重启虚拟机。记得回到 “引导选项” 中将硬盘设为第一启动项。进入系统后还有几件重要的事情要做。5.1 安装客户机代理与驱动为了让虚拟机和宿主机更好地协作需要安装客户机工具Guest Agent。Linux 客户机在终端内安装qemu-guest-agent和spice-vdagent。# 对于 Debian/Ubuntu sudo apt install -y qemu-guest-agent spice-vdagent sudo systemctl start qemu-guest-agent sudo systemctl enable qemu-guest-agent # 对于 RHEL/CentOS/Fedora sudo dnf install -y qemu-guest-agent spice-vdagent sudo systemctl start qemu-guest-agent sudo systemctl enable qemu-guest-agentqemu-guest-agent用于实现宿主机对客户机的更精细管理如安全关机、获取 IP 信息。spice-vdagent则提供 SPICE 协议的增强功能。Windows 客户机你需要下载 VirtIO 驱动 ISO包含virtio-win驱动和qemu-ga安装程序。在virt-manager中将驱动 ISO 作为第二个光盘插入虚拟机然后运行安装程序安装 VirtIO 存储、网络驱动以及 QEMU Guest Agent。安装并启动 Agent 后你在virt-manager中就可以使用“关闭”按钮正常关闭虚拟机发送关机信号而不是强制断电。5.2 宿主机与虚拟机间的文件共享这是非常高频的需求。有几种方法通过 SPICE 网页客户端拖放如果使用 SPICE 显示协议并安装了spice-webdavd在客户机可以通过浏览器访问 SPICE 客户端进行文件拖放。但配置稍复杂。使用 virtio-fs 或 9p 文件系统这是性能较好的共享方式但需要在客户机内核中启用支持并挂载。最通用简单的方法使用 SSH/SFTP。在虚拟机内开启 SSH 服务然后从宿主机使用scp、sftp命令或FileZilla等图形化工具进行文件传输。对于需要频繁交换文件的开发环境我通常会在虚拟机内搭建一个 Samba 服务将其共享文件夹映射为宿主机的一个网络驱动器这样使用起来就和本地文件夹一样方便。5.3 快照与克隆高效管理的利器virt-manager集成了强大的快照和克隆功能。快照在虚拟机关机或运行时都可以创建快照。它保存了虚拟机在某个时间点的完整状态磁盘、内存、配置。在进行有风险的操作如系统升级、安装新软件前创建一个快照如果出现问题可以瞬间回滚到之前的状态。这对于测试和实验环境是救命的功能。在virt-manager中右键点击虚拟机 - “快照” 即可管理。克隆如果你想快速创建一个与现有虚拟机配置一模一样的新虚拟机可以使用克隆功能。它会创建一个新的磁盘镜像默认是写时复制节省空间和新的配置文件并生成新的 MAC 地址等唯一信息。非常适合快速部署多个相同基础环境的情况。5.4 命令行管理利器virsh虽然virt-manager很直观但virsh命令行工具在自动化、远程管理和脚本化方面无可替代。掌握几个常用命令能极大提升效率virsh list --all列出所有虚拟机包括关闭的。virsh start 虚拟机名启动虚拟机。virsh shutdown 虚拟机名优雅关闭虚拟机。virsh destroy 虚拟机名强制关闭虚拟机相当于拔电源。virsh edit 虚拟机名直接编辑虚拟机的 XML 配置文件功能强大但需谨慎。virsh snapshot-create-as 虚拟机名 快照名创建快照。virsh console 虚拟机名连接到虚拟机的文本控制台需要客户机配置好串口控制台。6. 常见问题排查与性能调优心得即使按照步骤操作也可能会遇到一些问题。这里分享几个我遇到过的典型问题及其解决方法。问题一启动虚拟机时提示 “内部错误未找到任何支持的有效引导设备”这几乎总是启动顺序问题。解决方法在virt-manager中打开虚拟机硬件详情 - “引导选项”确保你的虚拟硬盘通常是 VirtIO Disk 或 SATA Disk位于启动顺序列表中并且顺序在安装 ISO 之前。如果安装后还从此前用的 ISO 启动也会报类似错误此时需要移除或禁用该 ISO 设备的启动项。问题二虚拟机网络无法连接互联网NAT 模式首先在虚拟机内检查是否获取到了 IP 地址如ip addr或ifconfig。如果没有检查宿主机上libvirt的默认 NAT 网络是否激活sudo virsh net-list --all如果default网络处于inactive状态启动它sudo virsh net-start default sudo virsh net-autostart default # 设置开机自启如果虚拟机有 IP 但无法 ping 通外网如 8.8.8.8检查宿主机是否开启了防火墙并阻止了转发或者/etc/resolv.conf中的 DNS 设置是否正确。问题三Windows 虚拟机安装时找不到磁盘这是因为你为磁盘选择了 “VirtIO” 总线类型但 Windows 安装程序没有内置此驱动。解决方法在virt-manager的虚拟机硬件配置中添加一个新的 CDROM 设备指向你下载的virtio-win驱动 ISO 文件。然后在 Windows 安装界面当提示“找不到驱动器”时点击“加载驱动程序”浏览并选择 CDROM 中viostor目录下对应你 Windows 版本的驱动如w10/amd64。加载后你的 VirtIO 磁盘就会出现。问题四虚拟机性能不佳特别是磁盘 I/O 慢除了确保使用 VirtIO 磁盘和网络外还可以检查磁盘缓存模式在磁盘硬件详情中将缓存模式从默认的 “none” 或 “writethrough” 改为“writeback”。这能显著提升写入性能但有一点点数据丢失的风险宿主机突然断电时少量数据可能在缓存中未落盘。对于非关键数据的开发测试机强烈推荐。IO 模式同样在磁盘设置中将 IO 模式改为“native”或 “threads”避免使用 “default”。CPU 模式对于计算密集型任务在 CPU 配置中将 CPU 模式从 “host-passthrough” 将宿主 CPU 指令集完全透传性能最好但可能影响迁移兼容性或 “host-model” 改为“custom”并选择一个与你的物理 CPU 接近的型号可以在性能和兼容性间取得平衡。问题五virt-manager 无法连接或启动虚拟机提示权限错误这通常是因为用户没有在libvirt和kvm组中或者libvirtd服务没有运行。请回顾 2.2 节的步骤确保用户已加入libvirt和kvm组。执行了newgrp libvirt或已重新登录。libvirtd服务正在运行 (sudo systemctl status libvirtd)。检查/var/lib/libvirt目录的权限确保你的用户有访问相关套接字的权限。最后关于性能调优我的个人经验是对于大多数开发测试场景内存给足比 CPU 核心数给多更重要。磁盘性能是瓶颈的高发区因此务必使用VirtIO writeback 缓存的组合。网络如果不需要对外服务NAT 模式最简单如果需要对外服务花点时间配置桥接网络是值得的。定期使用virt-manager或virsh清理不用的快照和镜像可以释放宿主机磁盘空间。
返回列表