KVM虚拟机:修订间差异
无编辑摘要 |
(→显卡直通) |
||
| 第273行: | 第273行: | ||
* 在Virt-Manager中添加 | * 在Virt-Manager中添加 | ||
打开 Virt- | 打开 Virt-Manager,新建虚拟机,概况中固件选UEFI(支持新的独立显卡),选择“添加硬件” -> “PCI 主机设备”。选择显卡的 VGA 设备和 Audio 设备,如PCI 0000:02:00.0和0000:02:00.1。安装[[ubuntu]]系统时,勾选安装显卡驱动,系统安装好后显卡驱动也安装好了,也可以安装系统后安装显卡驱动。 | ||
==常见问题== | ==常见问题== | ||
2026年5月6日 (三) 15:55的版本
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
安装系统
图形化界面
- 官网下载系统镜像,如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支持。 |
内部快照
外部快照
配置桥接网路
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。
- https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/archive-virtio/
- 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
# 编辑 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 -nns | grep 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