KVM 的全称是 Kernel-based Virtual Machine,也就是“基于内核的虚拟机”。它是 Linux 内核内置的虚拟化技术,可以让一台物理电脑同时运行多台虚拟机。
简单来说,装好 KVM 后,你的 Ubuntu 主机就能用来运行 Linux 等受支持的操作系统,而每台虚拟机都拥有自己的虚拟 CPU、内存和磁盘。下面我们按照步骤,在 Ubuntu 26.04 上安装 KVM,并创建一台 Rocky Linux 虚拟机。
一、开始之前需要准备什么?
请确认满足以下条件:
- 已安装 Ubuntu 26.04 Server 或 Desktop。
- 有一个可以使用
sudo的本地用户。 - 能正常连接互联网。
- CPU 支持硬件虚拟化,且已经在 BIOS/UEFI 中启用 Intel VT-x 或 AMD-V。
注意:如果硬件虚拟化没有开启,需要进入电脑的 BIOS/UEFI 设置中启用它。
在终端中执行下面的命令,检查 CPU 是否具备虚拟化扩展:
egrep -c '(vmx|svm)' /proc/cpuinfo
如果输出大于 0,说明系统能看到 CPU 的虚拟化扩展。其中,vmx 对应 Intel,svm 对应 AMD。
译者注:如果 Ubuntu 本身运行在虚拟机里,还需要外层虚拟化平台允许嵌套虚拟化。仅凭这个数字不能确认所有 KVM 功能都已经可用。

二、更新系统
安装 KVM 之前,建议先更新软件包列表,并安装可用的系统更新:
sudo apt update && sudo apt upgrade -y
译者注:
-y表示自动确认安装。生产服务器应先检查更新内容,并安排合适的维护时间;如果更新了内核,请按需要重启后再继续。
三、安装 KVM 和管理工具
原文所需的软件包可以从 Ubuntu 默认的 APT 软件源安装:
sudo apt install qemu-system-x86 libvirt-daemon-system libvirt-clients bridge-utils virt-manager -y
这条命令会安装 QEMU、libvirt、virt-manager,以及相关的虚拟机管理工具。
为了更容易理解,可以把这些组件看作一个分工明确的工具组合:
- KVM:提供 Linux 内核中的硬件虚拟化能力。
- QEMU:为虚拟机提供虚拟硬件,并配合 KVM 运行客户机。
- libvirt:统一管理虚拟机、网络和存储。
- virt-manager:提供图形界面,让创建和管理虚拟机更加方便。

四、启动 libvirtd 服务
软件包安装完成后,启动 libvirtd,并设置为开机自动启动:
sudo systemctl enable --now libvirtd
接着检查服务状态:
sudo systemctl status libvirtd
看到 active (running),说明 libvirt 守护进程已经正常运行。
译者注:原文未单独列出状态检查命令,这里予以补全。如果你的环境采用拆分后的 libvirt 守护进程或 socket 激活方式,应检查对应的服务与 socket,不要仅因没有名为
libvirtd的服务就认定安装失败。

五、把当前用户加入 libvirt 和 kvm 用户组
如果希望使用普通用户管理虚拟机,而不是每次都以 root 身份操作,需要把该用户加入 libvirt 和 kvm 组:
sudo usermod -aG libvirt,kvm "$USER"
执行后,退出登录并重新登录,让用户组变更生效。如果通过 SSH 连接服务器,断开后重新连接即可。
译者注:这里的
-aG表示追加附属用户组,不会替换已有的组。加入这些组会授予虚拟化相关的管理权限,只应添加可信用户。

六、使用 Netplan 配置网络桥接
1. 为什么需要桥接?
默认情况下,libvirt 通常会创建名为 virbr0 的虚拟网桥,通过 NAT 为虚拟机提供网络连接。
这种方式可以让虚拟机访问外部网络,但虚拟机通常不会作为一台独立设备,直接出现在外部局域网中。如果希望局域网里的其他设备直接访问虚拟机,可以把虚拟机连接到宿主机的桥接网络。
桥接的效果可以理解为:让虚拟机像接入同一台交换机的独立电脑一样参与局域网通信。实际能否获得地址、访问其他设备,还取决于局域网的 DHCP、VLAN 和访问控制配置。
译者注:如果只需要虚拟机上网,可以继续使用默认 NAT 网络,不一定要配置桥接。以下示例面向有线网卡;普通 Wi-Fi 客户端模式通常不能直接套用这种桥接方法。
2. 找到 Netplan 配置文件
进入 /etc/netplan/ 目录,查看现有配置:
cd /etc/netplan/
ls
原文示例中的文件名为:
00-installer-config.yaml
你的文件名可能不同,但通常以 .yaml 结尾。请编辑与你的实际环境对应的文件:
sudo vi 00-installer-config.yaml
译者注:修改前请备份现有配置。如果正通过 SSH 管理服务器,网络变更可能让连接中断,建议准备本地控制台或远程带外管理方式。
3. 配置网桥 br0
下面保留原文的示例网卡、IP、MAC 地址和 DNS 地址,同时修正 YAML 的缩进。所有这些值都只是示例,必须按你的网络环境修改。
# 由 subiquity 安装程序生成的网络配置示例
network:
version: 2
renderer: networkd
ethernets:
enp0s3:
dhcp4: false
dhcp6: false
bridges:
br0:
interfaces:
- enp0s3
dhcp4: false
dhcp6: false
addresses:
- 192.168.1.35/24
macaddress: "08:00:27:16:df:dc"
routes:
- to: default
via: 192.168.1.1
metric: 100
nameservers:
addresses:
- 4.2.2.2
parameters:
stp: false
各项含义如下:
| 配置项 | 含义 |
|---|---|
enp0s3 |
宿主机的物理网卡名称,需要替换为实际名称 |
br0 |
新建的网桥名称 |
192.168.1.35/24 |
分配给宿主机网桥的静态 IP 和网络前缀,不是虚拟机的 IP |
192.168.1.1 |
默认网关 |
4.2.2.2 |
示例 DNS 服务器,应替换为适合你环境的地址 |
macaddress |
示例网桥 MAC 地址,不要在不同主机上机械复制同一个值 |
stp: false |
关闭生成树协议;有二层环路风险的环境需重新评估 |
保存并关闭文件。
译者注:原文中
bridges、物理网卡的dhcp4/dhcp6,以及路由的via/metric缩进不正确,直接复制可能导致 Netplan 配置失败。上面的代码已经修正:bridges位于network下,via和metric与同一路由条目的to对齐。
Netplan 的网络后端也要与系统实际情况一致:
- Ubuntu Server 常用
renderer: networkd。 - Ubuntu Desktop 常用
renderer: NetworkManager。
应用配置之前,确保选择的网络后端已经安装并正常运行。

译者注:配图来自原文,仅作界面参考;配置请以上面修正后的代码块为准。
4. 应用配置并验证
原文使用以下命令应用网络配置:
sudo netplan apply
译者注:远程操作时,建议先运行
sudo netplan generate检查配置能否生成,再考虑使用sudo netplan try临时应用并确认。不要把自动回退当作绝对保障,网桥等虚拟设备的变更仍应准备控制台恢复手段。
然后查看地址和路由:
ip addr show
ip route show
如果配置正确,应该能看到名为 br0 的网桥,以及配置给它的静态 IP。物理接口 enp0s3 则成为网桥的成员。

七、创建虚拟机
方法一:使用 virt-manager 图形界面
virt-manager 提供直观的图形界面,适合在有桌面环境的系统上管理虚拟机。
- 打开 Virtual Machine Manager。
- 点击 Create a New Virtual Machine(创建新虚拟机)。
- 按向导选择安装源,例如系统 ISO 镜像。
- 设置虚拟机的磁盘空间、内存和 CPU 数量。
- 完成创建,并启动虚拟机进行系统安装。

方法二:使用 virt-install 命令行
如果 Ubuntu 服务器没有桌面环境,可以使用 virt-install 从命令行创建虚拟机。
原文给出的示例如下。这不是可以直接照抄的通用命令,请先按下方说明调整镜像路径和操作系统标识。
sudo virt-install \
--name RockyLinuxVM \
--ram 2048 \
--vcpus 2 \
--disk path=/var/lib/libvirt/images/rockylinuxvm.img,size=20 \
--os-variant rocky9 \
--network bridge=br0 \
--graphics vnc,listen=127.0.0.1 \
--cdrom /var/lib/libvirt/images/Rocky-10.2-x86_64-minimal.iso
主要参数含义:
| 参数 | 说明 |
|---|---|
--name RockyLinuxVM |
虚拟机名称 |
--ram 2048 |
分配 2048 MiB 内存 |
--vcpus 2 |
分配 2 个虚拟 CPU |
--disk ...,size=20 |
创建虚拟磁盘,大小为 20 GiB |
--os-variant rocky9 |
为客户机选择操作系统配置模板 |
--network bridge=br0 |
把虚拟机接入前面创建的网桥 |
--graphics vnc,listen=127.0.0.1 |
启用 VNC,但仅监听宿主机本机地址 |
--cdrom ... |
指定安装 ISO 镜像的位置 |
译者注:原文将
--os-variant rocky9与 Rocky Linux 10.2 的镜像文件名搭配使用,版本并不一致。请根据实际 ISO 选择本机 libosinfo 支持的、与客户机版本相匹配的操作系统标识。镜像文件必须已经存在,名称也应以实际下载的文件为准。译者注:如果没有
virt-install命令,可以安装virtinst软件包:sudo apt install virtinst -y。

连接 VNC 控制台
原文建议打开 VNC 客户端,并连接到宿主机的 5900 端口。
这里需要特别注意:上面的命令设置了 listen=127.0.0.1,所以不能从另一台电脑直接连接宿主机的局域网 IP。
译者注:如果 VNC 客户端运行在宿主机上,可以连接本机地址;如果从另一台电脑连接,建议通过 SSH 隧道转发,不要为了方便直接把 VNC 暴露到公网。
先在宿主机确认虚拟机使用的 VNC display:
sudo virsh vncdisplay RockyLinuxVM
例如,输出为 127.0.0.1:0 或 :0 时,对应 VNC 端口通常为 5900;display 为 :1 时则对应 5901。不要假设每台虚拟机都固定使用 5900。
假设实际端口为 5900,在运行 VNC 客户端的电脑上建立 SSH 隧道:
ssh -N -L 15900:127.0.0.1:5900 your_user@your_ubuntu_host
把 your_user 和 your_ubuntu_host 替换为实际用户名及宿主机地址。保持 SSH 会话运行,再让 VNC 客户端连接 127.0.0.1,端口 15900。不同 VNC 客户端的地址输入格式可能不同,应在对应的主机和端口字段中填写。

进入虚拟机控制台后,按屏幕提示完成 Rocky Linux 的安装即可。
总结
至此,我们完成了 Ubuntu 26.04 上的 KVM 环境安装,启动了 libvirt 服务,为普通用户配置了管理权限,并介绍了桥接网络、图形界面及命令行创建虚拟机的方法。
这套流程的核心是:先让宿主机具备虚拟化能力,再根据需求选择 NAT 或桥接网络,最后创建虚拟机并安装客户机系统。遇到问题时,可以依次检查 CPU 虚拟化支持、服务状态、用户组权限、网络配置,以及镜像路径和客户机参数。
如果你在配置过程中遇到问题,欢迎在评论区交流。










