在 Ubuntu 26.04 上安装 KVM:从环境准备到创建虚拟机

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 功能都已经可用。

检查 CPU 的虚拟化支持

二、更新系统

安装 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:提供图形界面,让创建和管理虚拟机更加方便。

安装 KVM 相关软件包

四、启动 libvirtd 服务

软件包安装完成后,启动 libvirtd,并设置为开机自动启动:

sudo systemctl enable --now libvirtd

接着检查服务状态:

sudo systemctl status libvirtd

看到 active (running),说明 libvirt 守护进程已经正常运行。

译者注:原文未单独列出状态检查命令,这里予以补全。如果你的环境采用拆分后的 libvirt 守护进程或 socket 激活方式,应检查对应的服务与 socket,不要仅因没有名为 libvirtd 的服务就认定安装失败。

启动 libvirtd 并检查状态

五、把当前用户加入 libvirt 和 kvm 用户组

如果希望使用普通用户管理虚拟机,而不是每次都以 root 身份操作,需要把该用户加入 libvirt 和 kvm 组:

sudo usermod -aG libvirt,kvm "$USER"

执行后,退出登录并重新登录,让用户组变更生效。如果通过 SSH 连接服务器,断开后重新连接即可。

译者注:这里的 -aG 表示追加附属用户组,不会替换已有的组。加入这些组会授予虚拟化相关的管理权限,只应添加可信用户。

把用户加入 libvirt 和 kvm 用户组

六、使用 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。

应用配置之前,确保选择的网络后端已经安装并正常运行。

原文中的 Netplan 桥接配置截图

译者注:配图来自原文,仅作界面参考;配置请以上面修正后的代码块为准。

4. 应用配置并验证

原文使用以下命令应用网络配置:

sudo netplan apply

译者注:远程操作时,建议先运行 sudo netplan generate 检查配置能否生成,再考虑使用 sudo netplan try 临时应用并确认。不要把自动回退当作绝对保障,网桥等虚拟设备的变更仍应准备控制台恢复手段。

然后查看地址和路由:

ip addr show
ip route show

如果配置正确,应该能看到名为 br0 的网桥,以及配置给它的静态 IP。物理接口 enp0s3 则成为网桥的成员。

检查网桥的 IP 地址和路由

七、创建虚拟机

方法一:使用 virt-manager 图形界面

virt-manager 提供直观的图形界面,适合在有桌面环境的系统上管理虚拟机。

  1. 打开 Virtual Machine Manager。
  2. 点击 Create a New Virtual Machine(创建新虚拟机)。
  3. 按向导选择安装源,例如系统 ISO 镜像。
  4. 设置虚拟机的磁盘空间、内存和 CPU 数量。
  5. 完成创建,并启动虚拟机进行系统安装。

使用 virt-manager 创建虚拟机

方法二:使用 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。

使用 virt-install 创建虚拟机

连接 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 客户端的地址输入格式可能不同,应在对应的主机和端口字段中填写。

原文中的 VNC 客户端连接示例

进入虚拟机控制台后,按屏幕提示完成 Rocky Linux 的安装即可。

总结

至此,我们完成了 Ubuntu 26.04 上的 KVM 环境安装,启动了 libvirt 服务,为普通用户配置了管理权限,并介绍了桥接网络、图形界面及命令行创建虚拟机的方法。

这套流程的核心是:先让宿主机具备虚拟化能力,再根据需求选择 NAT 或桥接网络,最后创建虚拟机并安装客户机系统。遇到问题时,可以依次检查 CPU 虚拟化支持、服务状态、用户组权限、网络配置,以及镜像路径和客户机参数。

如果你在配置过程中遇到问题,欢迎在评论区交流。

Avatar photo

关于 木子

Email: muzi@vip.rockylinux.cn 微信:VebinLee QQ: 2306867585
Founder of the Rocky Linux Chinese community, MVP、VMware vExpert、TVP, advocate for cloud native technologies, with over ten years of experience in site reliability engineering (SRE) and the DevOps field. Passionate about Cloud Computing、Microservices、CI&CD、DevOps、Kubernetes, currently dedicated to promoting and implementing Rocky Linux in Chinese-speaking regions.
用一杯咖啡支持我们,我们的每一篇[文档]都经过实际操作和精心打磨,而不是简单地从网上复制粘贴。期间投入了大量心血,只为能够真正帮助到您。
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇