下载

proxmox

安装

安装流程

配置

安装完成后需要做一些配置

修改镜像源

修改中科大镜像源

  • 首先

    nano /etc/apt/sources.list
    注释掉所有原来的官方源 复制进以下内容

    1
    2
    3
    4
    deb https://mirrors.ustc.edu.cn/debian/ bookworm main contrib non-free non-free-firmware
    deb https://mirrors.ustc.edu.cn/debian/ bookworm-updates main contrib non-free non-free-firmware
    deb https://mirrors.ustc.edu.cn/debian/ bookworm-backports main contrib non-free non-free-firmware
    deb https://mirrors.ustc.edu.cn/debian-security bookworm-security main

    ctrl+x 按Y 回车保存

  • 然后
    nano /etc/apt/sources.list.d/ceph.list
    注释掉原来的 复制进以下内容
    deb https://mirrors.ustc.edu.cn/proxmox/debian/ceph-quincy bookworm no-subscription
    ctrl+x 按Y 回车保存

  • 然后
    nano /etc/apt/sources.list.d/pve-enterprise.list
    注释掉原来的 复制进以下内容
    deb https://mirrors.ustc.edu.cn/proxmox/debian bookworm pve-no-subscription
    ctrl+x 按Y 回车保存

  • 更新
    apt update

  • 然后解决公钥问题
    wget https://mirrors.ustc.edu.cn/proxmox/debian/proxmox-release-bookworm.gpg -O /etc/apt/trusted.gpg.d/proxmox-release-bookworm.gpg

开启硬件直通

硬盘直通

进入shell命令

执行命令ls /dev/disk/by-id | grep ata | grep -v part获取自己磁盘对应的不带part的名字(这里会显示所有的磁盘,注意不要选错了)
ata

直通到对应的虚拟机上qm set 102 -sata2 /dev/disk/by-id/ata-HGST_HUH728080ALE604_VKHPV1GX
其中102这里填写自己的虚拟机ID -sata? 这里填写自己要挂载到虚拟机的几号,比如我需要挂载一块新的至2号位置
ata-直通到对应的虚拟机上

挂载完成后硬件栏里面就多了一个磁盘了
磁盘

非硬盘直通

开启IOMMU

引用

  • 第一步:确认自己的主板CPU是否支持Vt-d功能

不支持就搞不了直通。intel要b75以上芯片组才支持。也就是说intel4代酷睿处理器以上,都支持。amd不明。
VT-D是io虚拟化。不是VT-X,具体请参考文章
有很多新手,以为主板开启虚拟化功能,就能直通了,其实不是!要开启vt-d才能io虚拟化。AMD平台是iommu,某些OEM主板上叫SRIOV。请注意。

  • 第二步:开启iommu
1
2
3
4
5
6
7
8
9
10
11
12
13
#编辑grub,请不要盲目改。根据自己的环境,选择设置
nano /etc/default/grub

#------------------------------------------
#在里面找到:
GRUB_CMDLINE_LINUX_DEFAULT="quiet"
#然后修改为:
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 intel_iommu=on iommu=pt video=vesafb:off video=efifb:off video=simplefb:off"
#-------------------------------------------

修改完成之后,直接更新grub

update-grub

  • 第三步 加载相应的内核模块

nano /etc/modules

1
2
3
4
vfio
vfio_iommu_type1
vfio_pci
vfio_virqfd

使用update-initramfs -k all -u命令更新内核参数
update-initramfs -k all -u

重启主机reboot

  • 第四步 验证是否开启iommu

重启之后,在终端输入

dmesg | grep iommu

出现如下例子。则代表成功

1
2
3
4
5
[ 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
出现很多直通组,就代表成功了。如果没有任何东西,就是没有开启

IOMMU 强制分组

引用

有的时候几个设备在一组里面,如多张网卡,但是多个网卡想单独分给不同的虚拟机,不进行强制分组则会导致全部直通给对应的虚拟机,若是PVE系统也在其中的话则会失联
因此需要强制分组到不同的组里
注意:即使不同的设备也可能分到同一组,如我的 PCIE网卡和主板自带的网卡,就分到了一组里面去了

同组

如果你不存在一个组分到不同虚拟机里的话就不需要这个

  1. 查看Kernel内核
    uname -a我用的pve8.0.2,显示结果是6.2.16-3-pve,
    Linux pve 6.2.16-3-pve #1 SMP PREEMPT_DYNAMIC PVE 6.2.16-3 (2023-06-17T05:58Z) x86_64 GNU/Linux

  2. 构件新内核…… 我构建失败了,搞不了,有兴趣的可以去看构件内核
    我直接下载的别人的成品(某评论区,找不到来源了,抱歉了原著作者) (现在在自己的阿里云盘中,目前也拷贝不出来,记录一下吧)

  3. 重命名为iso上传至PVE中,然后解压

    1
    2
    3
    4
    cp /var/lib/vz/template/iso/deb-6.5.11-4-pev.tar.gz.iso  ./
    mv deb-6.5.11-4-pev.tar.gz.iso deb-6.5.11-4-pev.tar.gz
    tar xzvf deb-6.5.11-4-pev.tar.gz
    cd deb-6.5.11-4-pev/
  4. 执行内核刷新
    解压,cd到文件夹中,执行dpkg -i *.deb

  5. 修改grub nano /etc/default/grub
    在原来GRUB_CMDLINE_LINUX_DEFAULT属性基础上加上pcie_acs_override=downstream,multifunction
    GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on iommu=pt pcie_acs_override=downstream video=vesafb:off video=efifb:off video=simplefb:off"

  6. 重启reboot

  7. 查看是否直通成功dmesg | grep iommu

网卡直通

直接添加PCIE设备即可,如果需要iommu强制分组,则需要看另外一个

显卡直通

理论上AMD RADEON 5xxx, 6xxx, 7xxx, Navi 5XXX(XT), NVIDIA GEFORCE 7, 8, GTX 4xx, 5xx, 6xx, 7xx, 9xx, 10xx and RTX 16xx/20xx/30xx都可以成功直通。

但是对于NVIDIA显卡,建议使用9代以上中端卡直通,且使用最新的驱动。

对于AMD的APU3/5系列核显/RX4XX/5XX/6XXX均无法完美直通。无法使用本文提供的教程直通,请注意,有其他的教程,但由于我没有卡,无法撰写教程

  1. 直接屏蔽显卡驱动

    • 直通INTEL核显,请使用下面命令,注意!如果使用Gvt-G,请不要使用下面的命令
    1
    2
    3
    echo "blacklist snd_hda_intel" >> /etc/modprobe.d/blacklist.conf 
    echo "blacklist snd_hda_codec_hdmi" >> /etc/modprobe.d/blacklist.conf
    echo "blacklist i915" >> /etc/modprobe.d/blacklist.conf
    • 直通AMD显卡,请使用下面命令
    1
    2
    echo "blacklist radeon" >> /etc/modprobe.d/blacklist.conf 
    echo "blacklist amdgpu" >> /etc/modprobe.d/blacklist.conf
    • 直通NVIDIA显卡,请使用下面命令
    1
    2
    3
    echo "blacklist nouveau" >> /etc/modprobe.d/blacklist.conf 
    echo "blacklist nvidia" >> /etc/modprobe.d/blacklist.conf
    echo "blacklist nvidiafb" >> /etc/modprobe.d/blacklist.conf
  2. 把显卡绑定到vfio-pci
    使用lspci 查看自己的显卡PCI地址,如02:00

    1
    2
    00:00.0 Host bridge: Intel Corporation Celeron N3350/Pentium N4200/Atom E3900 Series Host Bridge (rev 0b)
    00:02.0 VGA compatible controller: Intel Corporation HD Graphics 500 (rev 0b)

    使用lspci -n 查看显卡的did和vid。我这边是02:00,可以看到下面输出

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    root@pve1:~# lspci -n
    00:00.0 0600: 8086:5af0 (rev 0b)
    00:02.0 0300: 8086:5a85 (rev 0b)

    00:14.0 0c03: 8086:a12f (rev 31)
    00:17.0 0106: 8086:a102 (rev 31)
    00:1c.0 0604: 8086:a114 (rev f1)
    00:1d.0 0604: 8086:a118 (rev f1)
    00:1d.2 0604: 8086:a11a (rev f1)
    00:1d.3 0604: 8086:a11b (rev f1)
    00:1f.0 0601: 8086:a148 (rev 31)
    00:1f.2 0580: 8086:a121 (rev 31)
    00:1f.3 0403: 8086:a170 (rev 31)
    00:1f.4 0c05: 8086:a123 (rev 31)
    00:1f.6 0200: 8086:15b8 (rev 31)
    01:00.0 0200: 15b3:1003
    02:00.0 0100: 10de:1381 (rev 03)
    02:00.1 0100: 10de:0fbc (rev 03)
    03:00.0 0108: 8086:f1a6 (rev 03)
    04:00.0 0604: 1b21:1080 (rev 04)

    如果你的几个设备是在一个组里面,例如:02:00.0 02:00.1一个是GPU,一个是声卡,两者都要一起直通,所以通过命令,把2者都绑定到vfio-pci上。
    echo "options vfio-pci ids=10de:1381,10de:0fbc" > /etc/modprobe.d/vfio.conf
    上面这条命令,ids=后面跟直通组的所有设备。中间以英文逗号隔开。自己的设备自己替换。
    上述操作完成之后,再检查一下,是否将例子内容替换成自己的。使用以下命令查看。

    我的是00:02.0是显卡且没有同一个分组的,则执行echo "options vfio-pci ids=8086:5a85" > /etc/modprobe.d/vfio.conf

    cat /etc/modprobe.d/blacklist.conf
    cat /etc/modprobe.d/vfio.conf

  3. 更新内核
    对于nvidia显卡,需要执行echo "options kvm ignore_msrs=1" > /etc/modprobe.d/kvm.conf
    其余直接执行更新update-initramfs -k all -u
    随后重启reboot

  4. 开始直通
    新建的虚拟机,选择ovmf或者seabios,通常来说两者对独显直通没有影响,建议nvidia 9系以上选择OVMF,其他选择seabios。
    如下图,添加PCIE设备,然后选择原始设备,设备中找到显卡选择,注意!!!不要勾选主GPU!。如果不能勾选PCIE,那么一定要把虚拟机改成Q35类型。
    pcie
    随后开机,如果能正常启动,nviia那么就安装NVIDIA最新驱动。
    提示:由于某些消费级主板PCI的设计问题,你可能只能直通第一个PCIe x16槽的显卡。

这里还有一种方案,以后再看https://www.ainas.cc:88/?p=1527

注意:本文只测试了Intel核心显卡HD600是有效的