如何在Linux上设置虚拟化环境如KVM一步步实现?

来源:站长源码作者:湖南程序员头衔:程序员
导读:本期聚焦于小伙伴创作的《如何在Linux上设置虚拟化环境如KVM一步步实现?》,敬请观看详情。把一台Linux物理机变成可运行多个系统的宿主机,核心在于内核虚拟化模块与用户态工具的配合。KVM借助CPU的VT-x或AMD-V指令,让Guest系统指令直接跑在硬件上,性能接近裸机;QEMU负责设备模拟,libvirt提供统一的管理接口。实际配置时,先要确认BIOS已开启虚拟化,再用模块加载与软件包安装打通底层,最后通过虚拟网络与存储池划分资源。不少环境卡在权限与网桥配置,导致虚拟机无法联网或启动失败。理清这三层关系,才能在最小依赖下搭出稳定可用的虚拟化平台。

在Linux系统上搭建虚拟化环境,KVM是目前最主流的开源方案之一。它利用Linux内核自带的虚拟化模块,配合QEMU进行硬件模拟,再通过libvirt工具集统一管理,能够在一台物理服务器上稳定运行多个隔离的虚拟机。相比纯软件虚拟化,KVM因为直接走CPU硬件辅助虚拟化指令,开销更小,兼容性也更好。

如何在Linux上设置虚拟化环境如KVM一步步实现?

一、环境准备与硬件检测

在开始配置之前,必须确认物理机的CPU支持虚拟化扩展。Intel平台需要VT-x,AMD平台需要AMD-V。如果BIOS中关闭了相关选项,系统层面无论如何都无法启用KVM。可以通过读取/proc/cpuinfo中的标志位来快速判断,也可以使用专门工具检测。

除了CPU支持,还要保证系统内核版本较新,并且已经加载了KVM相关内核模块。不同发行版的软件源中,KVM所需的用户态工具名称略有差异,但核心组件基本一致。下面以常见的Debian系和RHEL系为例,展示检测脚本:

# 检查CPU虚拟化支持
grep -E '(vmx|svm)' /proc/cpuinfo

# 若输出中包含vmx(Intel)或svm(AMD)则说明硬件支持
# 检查KVM模块是否已加载
lsmod | grep kvm

# 如果未加载,可手动加载
sudo modprobe kvm
sudo modprobe kvm_intel  # Intel CPU
# sudo modprobe kvm_amd  # AMD CPU

二、安装KVM与libvirt组件

KVM本身只是内核模块,真正易用离不开QEMU和libvirt。QEMU提供对各类网卡、磁盘、显卡的模拟能力;libvirt则封装了创建、启动、暂停、迁移虚拟机的API,并附带命令行工具virsh和图形工具virt-manager。安装时建议一次性装全,避免后续管理时缺组件。

在Ubuntu或Debian上,可以使用如下命令安装核心套件。其中bridge-utils用于网桥配置,使虚拟机能够接入物理网络:

sudo apt update
sudo apt install -y qemu-kvm libvirt-daemon-system libvirt-clients bridge-utils virt-manager

# 将当前用户加入libvirt组,避免每次使用sudo
sudo usermod -aG libvirt $USER
newgrp libvirt

在CentOS或Rocky Linux等RHEL系发行版中,命令稍有不同,但组件对应关系一致:

sudo dnf install -y qemu-kvm libvirt virt-manager bridge-utils
sudo systemctl enable --now libvirtd

三、配置虚拟网络与存储

libvirt默认会创建一个名为default的NAT网络,虚拟机通过它可访问外网,但外部无法直接访问虚拟机。如果希望虚拟机像物理机一样处于局域网,就需要配置Linux网桥。网桥可以把物理网卡和虚拟网卡接到同一个二层网络,实现桥接上网。

以下示例在Ubuntu下通过netplan配置一个桥接网卡br0,将物理网卡enp3s0加入桥中。配置后虚拟机指定桥接网络即可获得与宿主机同段的IP:

network:
  version: 2
  renderer: networkd
  ethernets:
    enp3s0:
      dhcp4: no
  bridges:
    br0:
      interfaces: [enp3s0]
      dhcp4: yes

存储方面,libvirt使用存储池(storage pool)管理磁盘镜像。默认池路径通常为/var/lib/libvirt/images。可以用virsh命令查看和创建池,也可以直接把qcow2文件放进去作为虚拟机磁盘。qcow2格式支持快照和动态扩容,是推荐的选择。

# 查看现有存储池
virsh pool-list --all

# 创建目录类型存储池
virsh pool-define-as mypool dir - - - - /data/kvm_images
virsh pool-build mypool
virsh pool-start mypool
virsh pool-autostart mypool

四、创建并运行虚拟机

当网络和存储就绪后,就能用virt-install命令快速创建虚拟机。该命令会自动调用libvirt接口,指定CPU、内存、磁盘、镜像和网卡类型。下面以桥接模式安装一个Ubuntu Server虚拟机为例:

sudo virt-install 
  --name ubuntu-vm01 
  --ram 2048 
  --vcpus 2 
  --disk path=/data/kvm_images/ubuntu-vm01.qcow2,size=20,format=qcow2 
  --network bridge=br0,model=virtio 
  --os-type linux 
  --os-variant ubuntu22.04 
  --cdrom /iso/ubuntu-22.04-live-server-amd64.iso 
  --graphics none 
  --console pty,target_type=serial

如果习惯图形操作,也可以打开virt-manager,通过向导选择ISO、分配资源并指定桥接网络,过程更直观。创建完成后,用virsh list --all能看到虚拟机状态,virsh start 名称可开机,virsh shutdown 名称可关机。

日常维护中,建议开启虚拟机自动启动,并定期用virsh snapshot-create做快照。这样在系统升级或配置变更出错时,能快速回滚到稳定状态,降低运维风险。

五、常见问题与排查思路

最常见的故障是执行virsh命令时报权限不足,一般是因为当前用户不在libvirt组,或libvirtd服务未运行。另一个高频问题是虚拟机无法联网,多数由于网桥未正确绑定物理网卡,或交换机端口限制了MAC学习。

当虚拟机启动慢或卡在BIOS阶段,可检查宿主机是否开启了嵌套虚拟化,以及磁盘镜像格式是否为高效的qcow2。通过tophtop观察qemu-system进程占用,也能判断是否出现资源争抢。掌握这些基础排查手段,基本可以应对中小规模KVM平台的日常运维。

KVMlibvirtQEMU修改时间:2026-08-01 08:15:31

免责声明:​ 已尽一切努力确保本网站所含信息的准确性。网站内容多为原创整理与精心编撰,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们处理。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。