一,基础设置及开启硬件直通
偷懒的方法使用pvetools工具
执行命令
进入Proxmox VE系统的SSH,或直接进入PVE管理网页Shell,以下命令操作都是通过Shell执行
rm /etc/apt/sources.list.d/pve-enterprise.list
export LC_ALL=en_US.UTF-8
wget https://gitee.com/ivanhao1984/pvetools/raw/master/pvetools.sh
chmod +x ./pvetools.sh
./pvetools.sh
手动方式
Intel CPU
修改grub
编辑文件/etc/default/grub
修改行“GRUB_CMDLINE_LINUX_DEFAULT=“quiet”
使其为“GRUB_CMDLINE_LINUX_DEFAULT=“quiet intel_iommu=on”
使用update-grub更新
验证其有效性,从命令行运行“dmesg | grep -e DMAR -e IOMMU”。如果没有输出,则出现问题。极有可能是bios设置的问题,需要启动cpu的vt-x支持。
vi /etc/default/grub
找到 GRUB_CMDLINE_LINUX_DEFAULT="quiet"
修改为 GRUB_CMDLINE_LINUX_DEFAULT="quiet amd_iommu=on"
update-grub
dmesg | grep -e DMAR -e IOMMU
AMD CPU
修改grub
编辑文件/etc/default/grub
修改行“GRUB_CMDLINE_LINUX_DEFAULT=“quiet”
使其为“GRUB_CMDLINE_LINUX_DEFAULT=“quiet amd_iommu=on”
使用update-grub更新
验证其有效性,从命令行运行“dmesg | grep -e DMAR -e IOMMU”。如果没有输出,则出现问题。极有可能是bios设置的问题,需要启动cpu的vt-x支持。
新增所需模块
修改文件/etc/modules,加入如下的行
vi /etc/modules
vfio
vfio_iommu_type1
vfio_pci
vfio_virqfd
执行命令来更新initramfs
update-initramfs -u -k all.
命令模式添加网卡
查询网卡信息
lspci | grep -i ethernet
使用命令找到网卡PCI的地址,地址应采用以下形式:01:00.0
打开文件进行手工添加
集群:/etc/pve/nodes/你的集群名称/qemu-server/虚拟机id.conf
PCI:/etc/pve/qemu-server/vmid.conf
PCIE: /etc/pve/qemu-server/.conf
查找网卡ID
lspci | grep net
或者
lspci
添加PCI
vi /etc/pve/qemu-server/vmid.conf
添加一个pci地址:
hostpci0: 01:00.0
添加多个pci地址方式1:
hostpci0: 01:00.0;01:00.1
添加多个pci地址方式2:
hostpci0: 01:00.0
hostpci1: 01:00.1
添加统称所有pci地址,自动传递所有功能:
hostpci0: 01:00
添加PCIE
vi /etc/pve/qemu-server/111.conf
machine: q35
hostpci0: 01:00.0,pcie=1
web页面模式添加
硬件->添加,选择PCI设备->选择,完成
如需更改为PCIE,可设置机器为q35
如果添加了PCI设备开启虚拟机正常使用那后面的就不需要看了
如果添加了PCI设备无法开启虚拟机的话需要允许不安全的中断
先验证IOMMU是否有效
再查看IOMMU是否可以中断重映射
后启用中断重映射,允许不安全的中断
验证IOMMU有效
要让pci passthrough正常工作,您需要为您的pci设备提供专用的iommu组
find / sys / kernel / iommu_groups / -type l
输入命令后有相关东西输出,则表示正常
如果没有则需要进行IOMMU中断重映射,只有每个IOMMU都支持中断重映射,才会启用中断重映射。
IOMMU中断重映射
没有中断重映射就不可能使用PCI passthrough。
对于KVM用户,设备分配将失败,出现’Failed to assign device "[device name]"的错误,即“无法分配设备”[设备名称]“:操作不允许”错误,并且’未找到中断重映射硬件,将设备传递到非特权域是不安全的。
不支持中断重映射的系统:
所有使用AMD处理器和芯片组的系统都支持AMD I / O虚拟化(AMD-Vi)。这种硬件具有中断重映射支持; 但是,上游尚未提供软件支持。
所有使用英特尔处理器和芯片组的系统都支持英特尔定向I / O虚拟化技术(VT-d),但不支持中断重映射。新的处理器和芯片组提供了中断重映射支持。要确定您的系统是否支持中断重映射:
查看中断重映射
运行“dmesg | grep ecap”命令。
在IOMMU行上,“ecap”之后的十六进制值表示是否支持中断重映射。如果该值的最后一个字符是8,9,a,b,c,d,e或f,则支持中断重映射。例如,“ecap 1000”表示没有中断重映射支持。“ecap 10207f”表示中断重映射支持,因为最后一个字符是“f”。
启用中断重映射
官方文档是这个
If your system doesn’t support interrupt remapping,
you can allow unsafe interrupts with:
echo "options vfio_iommu_type1 allow_unsafe_interrupts=1" > /etc/modprobe.d/iommu_unsafe_interrupts.conf
或者添加驱动黑名单
vi /etc/modprobe.d/pve-blacklist.conf
文件里面添加一行
options vfio_iommu_type1 allow_unsafe_interrupts=1
来启用不安全的中断
之后就可以通过图形化界面执行PCIE设备的直通操作了
Proxmox VE 直通硬盘有两种方式
方法一:通过命令映射直通单块硬盘;
方法二:添加 PCI设备,直通 SATA Controller(SATA 控制器)。
方法一:通过命令映射直通单块硬盘
查看磁盘ID
ls -l /dev/disk/by-id/
注:ata、mmc等…表示接口方式,通常有ATA、SATA、SCS、NVME、eMMC和SASI等类型。IDE和SATA接口一般为“ata”,SCSI及SAS接口一般为”scsi“
导入虚拟机
qm set <vm_id> –<disk_type>[n] /dev/disk/by-id/<type>-$brand-$model_$serial_number
<vm_id> : 为创建虚拟机时指定的VM ID。
<disk_type>[n]: 导入后的磁盘的总线类型及其编号,总线类型可以选择IDE、SATA、VirtIO Block和SCSI类型,编号从0开始,最大值根据总线接口类型有所不同,IDE为3,SATA为5,VirTIO Block为15,SCSI为13。 /dev/disk/by-id/-brand-brand−model_$serial_number : 为磁盘ID的具体路径和名称。
按照我硬盘的参数举例: 如上方的硬盘数据 ata-ST4000VX000-2AG166_ZGY163KG 为例,将此硬盘直通给VM ID编号为102的虚拟机下,总线类型接口为sata2(请根据PVE虚拟机下的总线编号设置)
qm set 102 -sata2 /dev/disk/by-id/ata-ST4000VX000-2AG166_ZGY163KG
显示返回信息
update VM 102: -sata2 /dev/disk/by-id/ata-ST4000VX000-2AG166_ZGY163KG
为直通成功
方法二:添加 PCI设备,直通 SATA Controller(SATA 控制器)
PVE系统直通SATA Controller(SATA 控制器),会把整个sata总线全部直通过去,就是直接将南桥或者直接把北桥连接的sata总线直通,那么有些主板sata接口就会全部被直通。
注意:如果您的PVE系统是安装在SATA的硬盘中,会导致PVE系统无法启动,所以在直通 SATA Controller(SATA 控制器),之前请先确认自己的PVE系统安装位置,或者直接将系统安装在 NVMe 硬盘中。
在开始之前请先开启IOMMU硬件直通功能后,执行下一步添加 SATA Controller(SATA 控制器)操作。
1.确认自己的主板CPU是否支持Vt-d功能
不支持就搞不了直通。intel要b75以上芯片组才支持。也就是说intel4代酷睿处理器以上,都支持。amd不明。VT-D是io虚拟化。不是VT-X。
有很多新手,以为主板开启虚拟化功能,就能直通,非也。要开启vt-d才能io虚拟化。AMD平台是iommu,某些OEM主板上叫SRIOV。请注意。
2.开启iommu
#编辑grub,请不要盲目改。根据自己的环境,选择设置
vi /etc/default/grub
#在里面找到:
GRUB_CMDLINE_LINUX_DEFAULT="quiet"
#如果是intel cpu修改为:
GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on iommu=pt"
#如果是amd cpu请改为:
GRUB_CMDLINE_LINUX_DEFAULT="quiet amd_iommu=on iommu=pt"
#如果是需要显卡直通,建议在cmdline再加一句video=vesafb:off video=efifb:off video=simplefb:off,加了之后,pve重启进内核后停留在一个画面,这是正常情况
GRUB_CMDLINE_LINUX_DEFAULT="quiet amd_iommu=on iommu=pt video=vesafb:off video=efifb:off video=simplefb:off"
修改完成之后,直接更新grub
update-grub
注意,如果此方法还不能开启iommu,请修改
/etc/kernel/cmdline文件
并且使用proxmox-boot-tool refresh 更新启动项
3.加载相应的内核模块
echo vfio >> /etc/modules
echo vfio_iommu_type1 >> /etc/modules
echo vfio_pci >> /etc/modules
echo vfio_virqfd >> /etc/modules
#更新内核参数
update-initramfs -k all -u
#重启主机
reboot
4.验证是否开启iommu
重启之后,在终端输入
dmesg | grep iommu
出现如下例子。则代表成功
[ 1.341100] pci 0000:00:00.0: Adding to iommu group 0
[ 1.341116] pci 0000:00:01.0: Adding to iommu group 1
[ 1.341126] pci 0000:00:02.0: Adding to iommu group 2
[ 1.341137] pci 0000:00:14.0: Adding to iommu group 3
[ 1.341146] pci 0000:00:17.0: Adding to iommu group 4
此时输入:
find /sys/kernel/iommu_groups/ -type l
#出现很多直通组,就代表成功了。如果没有任何东西,就是没有开启
选择需要设置的PVE系统,点击 硬件 > 添加 > PCI设备 > 选择 SATA Controller(SATA 控制器),最后点击“添加”把 SATA Controller(SATA 控制器)添加给相应的系统后,完成重启,PVE硬件直通的设置就生效了。
二,用通用脚本换源 GNU/Linux 一键更换系统软件源脚本
执行命令
bash <(curl -sSL https://linuxmirrors.cn/main.sh)
LinuxMirrors: GNU/Linux 一键更换系统软件源脚本 (gitee.com)
Docker 一键安装(额外脚本)
bash <(curl -sSL https://linuxmirrors.cn/docker.sh)