PCI Passthrough 配置 (显卡直通)

下面为博客摘要,详细内容请看http://keke046.github.io/2021/12/17/pci-passthrough/

在 archlinux 上配置 PCI passthrough。其它版本的linux应该方法类似。

准备工作

这里搬运了 archwiki 上的步骤。 更详细的请看 archwiki。

  1. 启动IOMMU:编辑 vim /etc/default/grub ,给 GRUB_CMDLINE_LINUX_DEFAULT 后面加上 intel_iommu=on iommu=pt







bridge-nf-call-ip6tables = 0net。注意打开虚拟机的时候有一个`press any key to boot from CD`,一定要立刻随便按一个键,要不是就进 UEFI shell 里面。168。 然后进入BIOS之后,就可以看到更高的分辨率了。```bashsudo systemctl start libvirtdsudo virsh net-start default```# 安装虚拟机操作系统在菜单里可以找到一个叫“虚拟系统管理器”的程序,打开它,然后新建一个虚拟机。conf` 中的 `nvram` 项目```bashnvram = [ "/usr/share/ovmf/x64/OVMF_CODE。打开虚拟机后快速按`F1,F2,Delete`几个键,可以进入BIOS,然后在设备设置里面可以设置下次启动时的分辨率。{% asset_img 2021-12-17-16-43-46。1。将下面的代码加入到`/etc/ufw/sysctl。1。6。 启动`libvirtd`:`sudo systemctl start libvirtd`,启动后要`sudo systemctl status libvirtd`看一下有没有启动成功。 配置libvirt:修改 `/etc/libvirt/qemu。 在虚拟机的“查看-详情”里面“显卡”,型号设置为QXL,然后XML里面设置成类似下面的XML:(主要是要把heads改成2,然后vgamem改成32768)```xmlvideo model type="qxl" ram="65536" vram="65536" vgamem="32768" heads="2" primary="yes"/ alias name="video0"/ address type="pci" domain="0x0000" bus="0x00" slot="0x01" function="0x0"//video```3。{% asset_img 2021-12-17-16-35-58。bridge-nf-call-arptables = 0```上面的三条`sysctl`命令,需要加载对应的内核模块才能够正常工作。!-- indicate-the-source --在 archlinux 上配置 PCI passthrough。{% asset_img 2021-12-17-16-28-36。bridge。 注意每次重启,可能都需要重启启动`libvirtd`服务和对应的网卡。导致包发不到虚拟机的IP上。可以启动透明代理的同时,开启端口分享,然后让虚拟机走全局代理:{% asset_img 2021-12-17-16-32-58。* “CPU” 数里面 取消复制主机CPU配置,然后设置成`host-passthrough`然后就可以安装windows了。png 600 %}!-- ![](pci-passthrough/2021-12-17-16-18-30。fd:/usr/share/ovmf/x64/OVMF_VARS。conf` 中的 `nvram` 项目设错了。png) --!-- more --2。 检查AMD-Vi/Intel Vt-d是否打开(一般比较新的电脑不需要检查)3。下面的系统如果不能自动检测出来,需要手动输入。122。(我没有直接`enable`它,因为不是每次开机都需要用虚拟机)。png 600 %}!-- ![](pci-passthrough/2021-12-17-16-32-58。 安装依赖项:中间可能说 `iptables-nft` 和 `iptables` 冲突,选yes,替换掉 `iptables` 就可以了。我们让`ufw`自动加载它们:修改`/etc/default/ufw`,给`IPT_MODULES`加上`bridge br_netfilter`。可能需要去`/usr/share`里面找一下在哪个地方(不同系统可能不一样)。bridge。org/title/PCI_passthrough_via_OVMF) 上的步骤。0。```bashyay -S qemu libvirt ovmf virt-manager dmidecode dnsmasq ebtables```4。```bashnet。这里使用`man ufw-framework`中提到的解决方案。# 配置ufwufw 默认会ban掉libvirt的网络。方案为到网桥的流量屏蔽iptables,可以最大程度提高性能。由于v2ray的监听地址是`0。png 600 %}!-- ![](pci-passthrough/2021-12-17-16-43-46。但分辨率最高只有1080p,需要更改硬件选项才能支持高分辨率。0。png 600 %}!-- ![](pci-passthrough/2021-12-17-16-28-36。 在管理器的“编辑-首选项”里面勾上`启动XML编辑`。conf`里面。# 配置虚拟机分辨率UEFI的分辨率是在BIOS里面改的。archlinux。2。其它版本的linux应该方法类似。# 准备工作**这里搬运了 [archwiki](https://wiki。会弹出一个菜单:* “概况” 里固件改成UEFI,如果没有,`/etc/libvirt/qemu。bridge。1`。0`,代理地址可以设置为网桥的地址`192。bridge-nf-call-iptables = 0net。png) --虚拟机把v2raya共享的端口设为全局代理地址。 启动IOMMU:编辑 `vim /etc/default/grub` ,给 `GRUB_CMDLINE_LINUX_DEFAULT` 后面加上 `intel_iommu=on iommu=pt` {% asset_img 2021-12-17-16-18-30。png) --# 加入PCI直通最后在`详情-添加硬件-PCI主机设备`里面可以找到直通的PCI设备,给你的虚拟机添加上,就可以享受PCI直通的快乐了。** 更详细的请看 archwiki。png) --然后可能需要重启一下电脑(不知道`sudo ufw reload`可不可以)# 配置v2raya透明代理v2raya透明代理会把所有包的IP地址设成网卡的IP地址(似乎是这样)。png 600 %}!-- ![](pci-passthrough/2021-12-17-16-35-58。fd"]```5。。png) --最后一步的时候,**要选中:在安装前自定义配置**。iso选浏览-本地浏览,把安装的iso找到