KVM虚拟机:修订间差异

无编辑摘要
 
(未显示同一用户的4个中间版本)
第69行: 第69行:
| https://ubuntu.com/openstack/what-is-openstack
| https://ubuntu.com/openstack/what-is-openstack
|}
|}
==快照==
{| class="wikitable" style="width:100%; text-align:center;"
! 对比项
! 内部快照
! 外部快照
|-
! 存储方式
| 存储在原始qcow2文件的'''内部'''结构体中 || 存储为独立的'''qcow2快照文件'''(通过backing chain关联)
|-
! 磁盘格式要求
| 仅支持'''qcow2'''格式 || 任意QEMU支持的镜像格式(推荐qcow2)
|-
! 创建方式
| <code>virsh snapshot-create-as</code><br>(需指定<code>--disk-only</code>和内存状态参数) || <code>virsh snapshot-create-as --disk-only --atomic</code>
|-
! 是否影响在线状态
| 影响(通常需要'''暂停或停机'''虚拟机) || '''不影响'''(在线创建<ref name="online">创建磁盘外部快照时虚拟机无需停机,但创建内存快照(<code>--memspec</code>)时建议暂停。</ref>)
|-
! 内存状态保存
| 支持(保存CPU/内存/设备状态) || 支持(需单独指定<code>--memspec</code>参数)
|-
! 回滚能力
| 完整回滚(磁盘+内存状态一次性恢复) || 仅支持磁盘回滚,内存状态需额外处理
|-
! 删除操作
| 简单(<code>virsh snapshot-delete</code>)<br>无需额外操作 || 复杂,Blockcommit或blockpull合并链,然后手动删除文件
|-
! 链式快照支持
| 不支持(libvirt禁止内部快照嵌套) || 支持(可创建多级backing chain)
|-
! 性能开销
| 创建快照时较高(需遍历磁盘结构) || 创建时极低(仅创建COW文件)
|-
! 磁盘空间释放
| 删除快照后自动释放 || 需手动执行blockcommit合并后才释放
|-
! 官方推荐度
| 不推荐 || 推荐,企业环境标准快照方案
|-
! 使用场景
| 单文件测试环境<br>快速开发调试 || 生产环境备份<br>虚拟机克隆<br>持续集成环境<br>ARM/UEFI虚拟机
|-
! 支持的架构限制
| 所有架构(但UEFI启动不支持内存快照) || 所有架构(ARM/aarch64环境唯一可用方案)
|-
! 最大数量限制
| 无硬性限制(但嵌套快照会失败) || 最多199个外部磁盘快照,实际限制取决于宿主机文件系统inode数量和qemu支持。
|}
===内部快照===
===外部快照===
==备份==
===快照备份===
===复制备份===
复制备份:
* 配置文件:/etc/libvirt/qemu/<虚拟机名>.xml
* VirtIO磁盘:/path/to/xx.qcow2
* 快照配置文件:/var/lib/libvirt/qemu/snapshot/<虚拟机名>/
恢复:
* 如果有配置文件,可以注册虚拟机: virsh define /path/to/你的虚拟机配置文件.xml ,修改磁盘映像qcow2位置。
* 没有配置文件,直接点击新建虚拟机,导入磁盘映像,修改一些其他配置。
===软件备份===


== 配置桥接网路 ==
== 配置桥接网路 ==
第171行: 第253行:
* https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/archive-virtio/
* https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/archive-virtio/
* https://pve.proxmox.com/wiki/Windows_VirtIO_Drivers
* https://pve.proxmox.com/wiki/Windows_VirtIO_Drivers
==显卡直通==
要实现KVM显卡直通,核心在于启用IOMMU、配置VFIO-PCI隔离显卡,并使用Libvirt绑定。。主要步骤包括:在GRUB中加入intel_iommu=on或amd_iommu=on,通过dracut或initramfs强制在启动初期加载VFIO驱动,将显卡的PCI ID绑定给vfio-pci,并在Virt-Manager中将显卡及音讯设备添加至虚拟机。
以Ubuntu 26.04的集显和独显主机为例,显示器接主板显示接口上。
* 启用 IOMMU
<syntaxhighlight lang="bash" >
# 编辑 GRUB 配置
sudo nano /etc/default/grub
# 修改 GRUB_CMDLINE_LINUX_DEFAULT 行(Intel CPU 示例):
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash intel_iommu=on iommu=pt"
# 更新 GRUB
sudo update-grub
sudo reboot
</syntaxhighlight>
* 配置 VFIO 隔离显卡,在 Ubuntu 26.04 以后版本中,可能需要使用 dracut 而非旧的 initramfs-tools。
<syntaxhighlight lang="bash" >
# 查找显卡硬件ID
lspci -nn | grep -i nvidia
# 创建 VFIO 配置文件
echo 'force_drivers+=" vfio_pci vfio vfio_iommu_type1 "' | sudo tee /etc/dracut.conf.d/10-vfio.conf
echo 'options vfio-pci ids=10de:2d04,10de:22eb' | sudo tee /etc/modprobe.d/vfio.conf
# 更新 initramfs
sudo update-initramfs -u -k all
</syntaxhighlight>
* 检查是否绑定成功
重启动宿主机,执行 lspci -nnk | grep -A 3 "VGA",确保显卡显示 Kernel driver in use: vfio-pci。
* 在Virt-Manager中添加
打开 Virt-Manager,新建虚拟机,概况中固件选UEFI(支持新的独立显卡),选择“添加硬件” -> “PCI 主机设备”。选择显卡的 VGA 设备和 Audio 设备,如PCI 0000:02:00.0和0000:02:00.1。安装[[ubuntu]]系统时,勾选安装显卡驱动,系统安装好后显卡驱动也安装好了,也可以安装系统后安装显卡驱动。


==常见问题==
==常见问题==

2026年5月6日 (三) 16:15的最新版本

KVM的全称是Kernel-based Virtual Machine(基于内核的虚拟机),是一种内建于Linux中的开源虚拟化技术。Linux内核 2.6.20 及更新版包含 KVM。

简介

时间轴

  • 2006年,Avi Kivity 在Qumranet初创公司开始了KVM的研发工作。
  • 2006年10月19日,Avi Kivity 首次公布KVM。
  • 2007年2月5日,KVM被包含到Linux 2.6.20核心中。
  • 2008年,红帽公司(Red Hat)收购Qumranet公司。

了解更多 >> 维基百科:基于内核的虚拟机#历史 lwn.net:KVM 十周年


安装

Ubuntu安装为例:

# 确保你的 CPU 支持虚拟化(Intel VT-x 或 AMD-V)
# 输出大于 0 表示支持。
# 确认 BIOS/UEFI 中已启用虚拟化(通常叫 Intel VT-x / AMD-V)。
egrep -c '(vmx|svm)' /proc/cpuinfo

# 安装需要的软件包
sudo apt update  # 更新软件源
sudo apt install qemu-kvm libvirt-daemon-system libvirt-clients bridge-utils virt-manager virtinst
  • qemu-kvm:提供 KVM 虚拟化后端
  • libvirt-*:管理虚拟机的守护进程和工具
  • virt-manager:图形化虚拟机管理器(可选但推荐)
  • virtinst:命令行创建虚拟机工具(如 virt-install)

将当前用户加入相关组(避免每次用 sudo):

sudo usermod -aG libvirt $USER
sudo usermod -aG kvm $USER

了解更多 >> Ubuntu 博客:Tytus Kurek - KVM 虚拟机管理程序:初学者指南 Ubuntu 服务器文档:虚拟化


安装系统

图形化界面

  • 官网下载系统镜像,如Windows 11 ISO。
  • 启动 Virtual Machine Manager
  • 点击左上角 “新建虚拟机”(Create a new virtual machine)
  • 选择 “本地安装介质(ISO)”,点击“前进”

虚拟化管理软件

为了方便管理操作,需要安装一个图形化虚拟化管理软件。

名称 描述 网站
virt-manager virt-manager应用程序是一个桌面用户界面,用于通过 libvirt 管理虚拟机。不同系统安装命令:
yum install virt-manager (Fedora)
apt-get install virt-manager (Debian)
emerge virt-manager (Gentoo)
pkg_add virt-manager (OpenBSD)
https://virt-manager.org/
Multipass Ubuntu 发行商 Canonical 推出的虚拟机管理工具。 https://multipass.run
OpenStack https://ubuntu.com/openstack/what-is-openstack

快照

对比项 内部快照 外部快照
存储方式 存储在原始qcow2文件的内部结构体中 存储为独立的qcow2快照文件(通过backing chain关联)
磁盘格式要求 仅支持qcow2格式 任意QEMU支持的镜像格式(推荐qcow2)
创建方式 virsh snapshot-create-as
(需指定--disk-only和内存状态参数)
virsh snapshot-create-as --disk-only --atomic
是否影响在线状态 影响(通常需要暂停或停机虚拟机) 不影响(在线创建<ref name="online">创建磁盘外部快照时虚拟机无需停机,但创建内存快照(--memspec)时建议暂停。</ref>)
内存状态保存 支持(保存CPU/内存/设备状态) 支持(需单独指定--memspec参数)
回滚能力 完整回滚(磁盘+内存状态一次性恢复) 仅支持磁盘回滚,内存状态需额外处理
删除操作 简单(virsh snapshot-delete
无需额外操作
复杂,Blockcommit或blockpull合并链,然后手动删除文件
链式快照支持 不支持(libvirt禁止内部快照嵌套) 支持(可创建多级backing chain)
性能开销 创建快照时较高(需遍历磁盘结构) 创建时极低(仅创建COW文件)
磁盘空间释放 删除快照后自动释放 需手动执行blockcommit合并后才释放
官方推荐度 不推荐 推荐,企业环境标准快照方案
使用场景 单文件测试环境
快速开发调试
生产环境备份
虚拟机克隆
持续集成环境
ARM/UEFI虚拟机
支持的架构限制 所有架构(但UEFI启动不支持内存快照) 所有架构(ARM/aarch64环境唯一可用方案)
最大数量限制 无硬性限制(但嵌套快照会失败) 最多199个外部磁盘快照,实际限制取决于宿主机文件系统inode数量和qemu支持。

内部快照

外部快照

备份

快照备份

复制备份

复制备份:

  • 配置文件:/etc/libvirt/qemu/<虚拟机名>.xml
  • VirtIO磁盘:/path/to/xx.qcow2
  • 快照配置文件:/var/lib/libvirt/qemu/snapshot/<虚拟机名>/

恢复:

  • 如果有配置文件,可以注册虚拟机: virsh define /path/to/你的虚拟机配置文件.xml ,修改磁盘映像qcow2位置。
  • 没有配置文件,直接点击新建虚拟机,导入磁盘映像,修改一些其他配置。

软件备份

配置桥接网路

KVM虚拟机的默认网络NAT,共享主机ip上网,对外部网络不可见。而网络桥接(bridge)可以让虚拟机(VM)像物理主机一样直接接入外部网络,从主机外访问虚拟机。 示例,主机Ubuntu创建网桥,配置虚拟机windows使用网桥:

  • 主机创建网桥接口

Ubuntu24.04桌面版,使用NetworkManager管理网络,使用 NetworkManager 的命令行工具 nmcli 来直接创建和管理网桥,不用手动修改 Netplan 文件。

# 查看是否NetworkManager管理,物理网卡会显示connected。
nmcli device status
nmcli con show

# 创建网桥接口(br0)
sudo nmcli con add ifname br0 type bridge con-name br0

# 将物理接口(enp5s0)添加为网桥的从接口
sudo nmcli con add type bridge-slave ifname enp5s0 master br0

# 禁用 STP(生成树协议,以减少延迟;可选但推荐)
sudo nmcli con mod br0 bridge.stp no

# 配置网桥使用 DHCP
sudo nmcli con mod br0 ipv4.method auto ipv6.method ignore

# 关闭原物理连接(防止冲突)
sudo nmcli con down "netplan-enp5s0"

# 激活网桥
sudo nmcli con up br0

# 现在,运行 ip addr show 或 nmcli device show 检查:br0 应该有 IP 地址(从 DHCP 获取),enp5s0 应该显示为 br0 的从接口,无独立 IP。

方法2,修改netplan配置文件。

# 查看当前网络接口
# 假设你的主网卡是 enp3s0(有线)或 eth0
ip a 

# 编辑 Netplan 配置文件
# 通常位于 /etc/netplan/,如
# 可以先备份一个配置文件,便于恢复。
sudo cp /etc/netplan/01-netcfg.yaml /etc/netplan/01-netcfg.yaml.bak
sudo vim /etc/netplan/01-netcfg.yaml

# 配置文件添加或修改内容为:
# 注意缩进!YAML 对格式敏感。
network:
  version: 2
  renderer: networkd     # 或 NetworkManager,根据系统选择
  ethernets:
    enp0s3:  # 替换为您的物理接口
      dhcp4: no
  bridges:
    br0:
      interfaces: [enp0s3]  # 替换为您的物理接口
      dhcp4: yes  # 或手动配置:addresses: [192.168.1.100/24], gateway4: 192.168.1.1
      parameters:
        stp: false  # 可选,关闭生成树协议以减少延迟

# 应用配置
sudo netplan generate
sudo netplan apply

# 验证
ip a show br0

方法3,创建临时网桥,测试用,重启失效。

# 使用 ip 命令临时创建网桥(名为 br0)
sudo ip link add name br0 type bridge
sudo ip link set dev br0 up

# 将物理接口添加到网桥
sudo ip addr flush dev enp0s3  # 移除物理接口上的 IP 配置
sudo ip link set dev enp0s3 master br0
sudo ip link set dev enp0s3 up

# 将原物理接口的 IP 配置转移到 br0 上。例如,如果原 IP 是 192.168.1.100/24:
sudo ip addr add 192.168.1.100/24 dev br0
sudo ip route add default via 192.168.1.1 dev br0  # 替换为您的网关

# 方案2
sudo ip link add name br0 type bridge
sudo ip link set enp3s0 master br0
sudo dhclient br0
sudo ip link set br0 up
  • 配置虚拟机,使用网桥

方法1,使用virt-manager界面配置。创建或编辑虚拟机,在网络设置中选择:Source mode选Bridge,Network source选一个,Device name填br0。

Windows VirtIO 驱动程序

安装windows虚拟机,使用有点卡,可以安装Windows VirtIO 驱动程序,类似VMware Tools,还支持拖拽传文件。绝大多数现代 Linux 发行版的“内核”已经自带了完整的 VirtIO 驱动,所以当你创建 Linux 虚拟机时,只要在配置时将磁盘和网卡的类型选择为 VirtIO,系统通常就能直接识别和使用它们。


在https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/archive-virtio/ 页面选择最新版本下载,选择一种即可:

  • virtio-win.iso: 在宿主机上下载,挂载到虚拟机,再安装。
  • virtio-win-gt-x64.msi:直接在虚拟机里面下载安装,仅包含核心驱动(如网卡、磁盘、内存 balloon 驱动等)
  • virtio-win-guest-tools.exe:直接在虚拟机里面下载安装,包含核心驱动和EMU Guest Agent。

显卡直通

要实现KVM显卡直通,核心在于启用IOMMU、配置VFIO-PCI隔离显卡,并使用Libvirt绑定。。主要步骤包括:在GRUB中加入intel_iommu=on或amd_iommu=on,通过dracut或initramfs强制在启动初期加载VFIO驱动,将显卡的PCI ID绑定给vfio-pci,并在Virt-Manager中将显卡及音讯设备添加至虚拟机。

以Ubuntu 26.04的集显和独显主机为例,显示器接主板显示接口上。

  • 启用 IOMMU
# 编辑 GRUB 配置
sudo nano /etc/default/grub

# 修改 GRUB_CMDLINE_LINUX_DEFAULT 行(Intel CPU 示例):
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash intel_iommu=on iommu=pt"

# 更新 GRUB
sudo update-grub
sudo reboot
  • 配置 VFIO 隔离显卡,在 Ubuntu 26.04 以后版本中,可能需要使用 dracut 而非旧的 initramfs-tools。
# 查找显卡硬件ID
lspci -nn | grep -i nvidia

# 创建 VFIO 配置文件
echo 'force_drivers+=" vfio_pci vfio vfio_iommu_type1 "' | sudo tee /etc/dracut.conf.d/10-vfio.conf
echo 'options vfio-pci ids=10de:2d04,10de:22eb' | sudo tee /etc/modprobe.d/vfio.conf

# 更新 initramfs
sudo update-initramfs -u -k all
  • 检查是否绑定成功

重启动宿主机,执行 lspci -nnk | grep -A 3 "VGA",确保显卡显示 Kernel driver in use: vfio-pci。

  • 在Virt-Manager中添加

打开 Virt-Manager,新建虚拟机,概况中固件选UEFI(支持新的独立显卡),选择“添加硬件” -> “PCI 主机设备”。选择显卡的 VGA 设备和 Audio 设备,如PCI 0000:02:00.0和0000:02:00.1。安装ubuntu系统时,勾选安装显卡驱动,系统安装好后显卡驱动也安装好了,也可以安装系统后安装显卡驱动。

常见问题

权限问题

挂载某个分区,如/run/media/xxx 通常 是由 udisks 自动挂载的,默认 ACL 只允许 xxx 用户访问,可以修改权限,或挂载到其他地方。

# 查看分区信息,
sudo blkid | grep nvme1n1p4
lsblk -f /dev/nvme1n1p4

# 创建专用目录用于虚拟机存储
sudo mkdir -p /var/lib/libvirt/kvm-storage
# 卸载当前挂载
sudo umount /run/media/xxx/xxxx
# 重新挂载到新位置
sudo mount /dev/nvme1n1p4 /var/lib/libvirt/kvm-storage
# 设置正确的所有者和权限
sudo chown libvirt-qemu:kvm /var/lib/libvirt/kvm-storage
sudo chmod 755 /var/lib/libvirt/kvm-storage

#设置开机自动挂载(可选)
# 获取分区的 UUID
sudo blkid /dev/nvme1n1p4
# 编辑 fstab
sudo nano /etc/fstab
# fstab中添加类似这样的行(用实际的 UUID 替换)
/dev/disk/by-uuid/xxxx / ext4 defaults 0 0

资源

官网

教程

相关文章