资讯详情

超聚变服务器 KVM 虚拟机与 SR-IOV VF (PCI直通) 全流程实战指南-KVM1

📅 2026/10/28 2:03:44 | 华诺云谱 👁 阅读
超聚变服务器 KVM 虚拟机与 SR-IOV VF (PCI直通) 全流程实战指南-KVM1
前言在超聚变 V7/V8 服务器上部署虚拟化环境时为了追求极致的网络性能通常会将 Intel E810 网卡通过 SR-IOV 技术虚拟出多个 VFVirtual Function并直接直通Passthrough给 KVM 虚拟机。本文基于Ubuntu Server 22.04 LTS宿主机和Ubuntu 22.04 Desktop客户机详细记录了从 BIOS 设置、系统安装、网卡驱动填坑到 VF 直通与虚拟机克隆的完整流程。环境说明硬件平台超聚变 V7/V8 服务器网卡型号Intel E810-XXV (25G双口)宿主机Ubuntu Server 22.04 LTS (纯命令行内核自带ice驱动-使用windterm工具远程)客户机Ubuntu 22.04.3 Desktop (使用ubuntu-22.04.3-desktop-amd64.iso)虚拟化组件KVM libvirt QEMU第一阶段宿主机环境与权限准备1.1 BIOS 硬件底层设置首次操作超聚变服务器开机按F2进入 BIOS完成以下关键设置后保存重启Intel VT-d或 AMD IOMMUEnabled开启 IOMMUPCI 直通的前提SR-IOV SupportEnabled开启网卡 SR-IOV 功能Secure BootDisabled关闭安全启动避免内核模块签名拦截注意如果是 E810 网卡建议将 BIOS 中的Transmit Balancing设为Disabled否则可能导致驱动进入安全模式无法开启 SR-IOV。1.2 宿主机依赖安装登录 Ubuntu 宿主机root执行# 1. 验证 IOMMU 是否生效输出大于 0 即成功 ls /sys/kernel/iommu_groups/ | wc -l # 2. 安装 KVM 及依赖 apt update apt install -y qemu-kvm libvirt-daemon-system libvirt-clients virtinst bridge-utils ufw # 3. 启动服务与默认 NAT 网络 systemctl enable --now libvirtd virsh net-start default 2/dev/null || true virsh net-autostart default1.3 镜像准备与权限修复避坑重点QEMU 在 Ubuntu 下默认以libvirt-qemu用户运行必须修复镜像目录的权限否则读取 ISO 会报Permission denied。# 准备目录并上传镜像 mkdir -p /var/lib/libvirt/images cp /你的路径/ubuntu-22.04.3-desktop-amd64.iso /var/lib/libvirt/images/ # 修复权限 chown -R libvirt-qemu:kvm /var/lib/libvirt/images/ chmod 644 /var/lib/libvirt/images/*.iso第二阶段第一台虚拟机 (vm-ubuntu-1) 创建与安装2.1 创建系统虚拟磁盘qemu-img create -f qcow2 /var/lib/libvirt/images/vm-ubuntu-1.qcow2 40G chown libvirt-qemu:kvm /var/lib/libvirt/images/vm-ubuntu-1.qcow22.2 编写 XML 配置文件将以下完整配置保存为/tmp/vm-ubuntu-1.xml光盘位于第一启动项以便安装domain typekvm namevm-ubuntu-1/name memory unitKiB8388608/memory currentMemory unitKiB8388608/currentMemory vcpu placementstatic4/vcpu os type archx86_64 machineq35hvm/type boot devcdrom/ boot devhd/ /os featuresacpi/apic//features cpu modehost-passthrough checknone/ clock offsetutc/ devices emulator/usr/bin/qemu-system-x86_64/emulator disk typefile devicedisk driver nameqemu typeqcow2 cachewriteback/ source file/var/lib/libvirt/images/vm-ubuntu-1.qcow2/ target devvda busvirtio/ /disk disk typefile devicecdrom driver nameqemu typeraw/ source file/var/lib/libvirt/images/ubuntu-22.04.3-desktop-amd64.iso/ target devsda bussata/ readonly/ /disk interface typenetwork source networkdefault/ model typevirtio/ /interface graphics typevnc port-1 autoportyes listen0.0.0.0 listen typeaddress address0.0.0.0/ /graphics videomodel typevirtio heads1 primaryyes//video input typetablet bususb/ input typemouse bususb/ input typekeyboard bususb/ /devices /domain2.3 启动并完成系统安装virsh define /tmp/vm-ubuntu-1.xml virsh start vm-ubuntu-1 virsh vncdisplay vm-ubuntu-1假设输出:0宿主机放行端口ufw allow 5900:5910/tcp。使用 VNC 客户端连接宿主机IP:5900按向导完成 Ubuntu 安装选择Erase disk抹除虚拟盘。安装完成提示重启时系统会再次进入 Live 安装界面这是正常的进行下一步。2.4 安装后收尾安全弹出光驱⚠️ 避坑不要手贱去 XML 里乱删disk代码极易误删系统盘导致No bootable device。在宿主机终端执行# 1. 强制关闭虚拟机 virsh destroy vm-ubuntu-1 # 2. 弹出光驱拔出 ISO 镜像 virsh change-media vm-ubuntu-1 sda --eject # 3. 重新启动 virsh start vm-ubuntu-1此时再用 VNC 连接即可正常进入 Ubuntu 登录界面。2.5 安装 SSH 服务方便后续终端操作在 VNC 界面中打开终端执行sudo apt update sudo apt install -y openssh-server sudo systemctl enable --now ssh sudo ufw allow 22/tcp回到宿主机终端即可直接通过ssh 用户名192.168.122.x免 VNC 丝滑操作。第三阶段SR-IOV VF 创建与持久化 (E810 驱动避坑)3.1 识别网卡并解决驱动安全模式使用ip a找到 E810 网卡的 PF 名称例如eno80或enp59s0f0。 核心踩坑预警如果你执行echo 4 /sys/class/net/eno80/device/sriov_numvfs报Operation not supported多半是因为内核自带的ice驱动与网卡固件不兼容导致进入了安全模式Safe Mode。请检查dmesg | grep -i safe mode。解决办法去 Intel 官网或发行版仓库下载最新版的ice驱动并编译安装或者更换更高版本的内核重启后安全模式解除即可继续。3.2 创建 VF# 在 PF 上创建 4 个 VF echo 4 /sys/class/net/eno80/device/sriov_numvfs # 验证 VF 生成 ip -o link show | grep eno80v3.3 开机自动创建 VF (Systemd 持久化)创建服务文件vi /etc/systemd/system/sriov-vf.service写入[Unit] DescriptionCreate SR-IOV VFs Afternetwork-pre.target Beforelibvirtd.service [Service] Typeoneshot ExecStart/bin/bash -c echo 4 /sys/class/net/eno80/device/sriov_numvfs RemainAfterExityes [Install] WantedBymulti-user.target激活服务systemctl daemon-reload systemctl enable --now sriov-vf.service第四阶段VF 映射到虚拟机 (PCI Hostdev 直通)我们采用 PCI 直通模式hostdev获取 VF 的 PCI 地址lspci | grep -i eth # 找到对应的 VF 地址例如 0000:41:01.04.1 挂载 VF 网卡到虚拟机# 1. 先关机 virsh shutdown vm-ubuntu-1 # 2. 将 PCI 设备直通给虚拟机--config 为持久化生效 virsh attach-interface vm-ubuntu-1 hostdev --source 0000:41:01.0 --model virtio --managed --config # 3. 启动虚拟机 virsh start vm-ubuntu-1注千万不要对关机状态的虚拟机使用--live参数会报domain is not running。4.2 客户机 (Ubuntu) 内部网络配置进入 VNC在 Ubuntu 终端中配置 VF 网卡的 IP# 查看连接名 (通常新增的为 Wired connection 2) nmcli connection show # 配置静态 IP (必须加 sudo否则会报 Not authorized 错误) sudo nmcli connection modify Wired connection 2 ipv4.method manual ipv4.addresses 192.168.5.60/24 ipv4.gateway 192.168.5.1 ipv4.dns 8.8.8.8 # 启用连接 sudo nmcli connection up Wired connection 2第五阶段克隆第二台虚拟机 (vm-ubuntu-2)5.1 克隆第一台虚拟机virsh shutdown vm-ubuntu-1virt-clone --original vm-ubuntu-1 --name vm-ubuntu-2 --file /var/lib/libvirt/images/vm-ubuntu-2.qcow25.2 修改第二台虚拟机配置防冲突复制磁盘文件sudo cp /var/lib/libvirt/images/vm-ubuntu-1.qcow2 /var/lib/libvirt/images/vm-ubuntu-2.qcow2 sudo chown libvirt-qemu:kvm /var/lib/libvirt/images/vm-ubuntu-2.qcow2导出原虚拟机 XML 并修改sudo virsh dumpxml vm-ubuntu-1 /tmp/vm-ubuntu-2.xml sudo vi /tmp/vm-ubuntu-2.xml在 XML 文件中修改以下关键项1.namevm-ubuntu-1 → vm-ubuntu-22.删除 uuid 标签行让 libvirt 自动生成新 UUID3.将所有 vm-ubuntu-1.qcow2 路径改为 vm-ubuntu-2.qcow24.修改所有 mac address.../确保 MAC 地址不重复5.如果使用了 PCI 直通hostdev将 PCI 地址改为其他未使用的 VF 地址如 0000:41:01.1定义并启动新虚拟机sudo virsh define /tmp/vm-ubuntu-2.xml sudo virsh start vm-ubuntu-2 sudo virsh vncdisplay vm-ubuntu-2 #放行端口 firewall-cmd --permanent --add-port5901/tcp firewall-cmd --reload #VNC连接附录日常运维避坑速查VNC 复制粘贴不进去在 Linux 终端里粘贴的快捷键不是CtrlV而是Shift Insert或鼠标中键。强烈建议配通 SSH 后用 SSH 终端操作彻底告别 VNC 折磨。开机自启virsh autostart vm-ubuntu-1优雅关机virsh shutdown vm-ubuntu-1彻底删除虚拟机连同磁盘一起删除virsh destroy vm-ubuntu-1 virsh undefine vm-ubuntu-1 --remove-all-storage
📝

华诺云谱内容团队

资深建站顾问 · 行业研究员

10年+企业数字化服务经验,专注智能建站、SEO优化与品牌营销,持续输出建站技巧、行业洞察与营销干货,已帮助5000+企业实现数字化增长。

你可能需要的服务

订阅华诺云谱资讯周报

每周一封,精选建站技巧、SEO与营销干货,直达邮箱。已有 8,000+ 企业主订阅,助你少走弯路。

↑