PVE8.2-NAS-AIO(群晖+DG2显卡直通+Jellyfin硬解+hdmi输出)
Abaddon超级侧卫
2024年05月10日 22:35

参考文章 https://blog.kkk.rs/archives/28 网页链接​

整体架构拓朴图,画的不好轻喷

硬件汇总

机箱:MS04

主板:雲星B250

CPU:I9-9900T

内存:光威32G*2

数据硬盘:希捷酷鹰ST4000VX016  4T*3 + WD HC550 16T*1 

PVE硬盘:SN550 1T + PM991A 512G

PVE系统盘:小黄鱼MLC U盘

电源:益衡7650B 500W

显卡:蓝戟A380单槽刀卡(DG2)

其他:主路由为小米路由器BE7000

外网访问架构: 1,光猫拨号设置主路由为DMZ区,内部服务通过端口转发到达DMZ区域,通过DDNS域名+端口来到达指定服务

2,通过部署的VPN,使用OpenVPN客户端连接到内网,直接通过内网IP+端口达到指定服务


能解决什么需求?

1,存储需求,内部群晖直通Lan2口与机械硬盘,从而达到最高使用效率,群晖对外暴露WebDAV(Windows)/SMB(电视机)/NFS(PVE镜像存储)/ISCSI(PVE客户机磁盘)来满足内外网设备的存储需求

2,下载、PT需求,群晖下载站套件和迅雷套件可以满足大部分下载场景,PT通过QB套件来进行下载和存储

3,内外网的影视库需求,依赖Jellyfin服务对外提供影视服务,内网设备也可通过SMB串流来播放,外网设备可以通过Jellyfin手机端等来实现转码播放

4,魔法需求,本质上clash docker可以部署在任意环境,复杂场景比如xbox可以通过部署的openwrt旁路由来实现

5,虚拟机输出到电视机的需求,部署的Ubuntu桌面可以观看直播等

6,虚拟机测试远程桌面需求,工作需要,Windows桌面可以通过RPD远程桌面来访问,Linux桌面可以通过spice远程工具来进行访问

7,其他项目和服务的测试和部署,通过PVE来实现

8,arm模拟需求由于QEMU的特性,我们可以使用PVE来进行简单的arm模拟需求(解决有无的问题),但效率偏低


部署架构细节:

PVE部署群晖,直通网口、机械硬盘、核显HD630给群晖(只做人脸识别用),群晖对外暴露服务

PVE部署ubuntu24,ubuntu部署docker,docker部署n大jellyfin,直通DG2显卡给jellyfin硬解,系统通过内网网桥来SMB挂载群晖内影视文件夹(不占用物理交换机资源),jellyfin识别并建立媒体库

PVE部署windows、Linux、openvpn、openwrt等其他服务,按需连接内网网桥和外网网桥


下文的所有部署内容只介绍我清楚的有把握的地方,并且介绍思路为主

主板和BIOS设置

DG2需要主板打开Resizable BAR和Above 4G以获取更高性能

PVE直通需要打开VT-D,这个很关键,不要忘

如果有SR-IOV设备记得打开这个选项

CPU睿频记得开

其他如果有特殊配置的按照店家发你的手册来进行操作即可

PVE部署

因为不想浪费主板正面的USB2.0接口(本来是群晖引导专用),我把PVE系统部署在了这个接口上的一个小黄鱼买来的DIY MLC U盘,有风险,千万不要学我

PVE部署和大多常规系统一样,没什么特殊的,下载镜像后通过工具写盘即可,下载地址如下

https://www.proxmox.com/en/downloads

写盘工具比如rufus,软碟通都行,引导盘和系统盘分清楚,不部署在USB内也可以部署在内置的NVME硬盘内,如果PVE内安装路径找不到硬盘,可以先把盘取下来格式化一下

如果不能理解,直接B站内找播放量比较高的安装视频即可,PVE使用什么版本看你自己,我倾向于保持最新,如果你怕不稳可以用7x的环境。

PVE直通和其他配置

去除订阅提示,添加CPU温度等信息可以使用类似pve_source 或pvetools-master等工具实现,可以自行搜索

直通参考这个网页链接​

PVE直通打开IOMMU,我这里只贴我的关键参数

代码块
Shell
自动换行
复制代码
root@flanker:/etc/modprobe.d# cat /etc/default/grub
# If you change this file, run 'update-grub' afterwards to update
# /boot/grub/grub.cfg.
# For full documentation of the options in this file, see:
#   info -f grub -n 'Simple configuration'

GRUB_DEFAULT=0
GRUB_TIMEOUT=5
GRUB_DISTRIBUTOR=`lsb_release -i -s 2> /dev/null || echo Debian`
GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on iommu=pt spectre_v2=off spectre_v1=off"
GRUB_CMDLINE_LINUX=""

-------------------------------------------
quiet intel_iommu=on iommu=pt 直通需要用
spectre_v2=off spectre_v1=off 解释和出处如下
https://blog.kkk.rs/archives/28
复制成功

 关于IOMMU分组:我没开,不知道是为了解决啥场景的,欢迎大家跟我说说。。。

代码块
JavaScript
自动换行
复制代码
root@flanker:/etc/modprobe.d# cat pve-blacklist.conf 
# nvidiafb see bugreport https://bugzilla.proxmox.com/show_bug.cgi?id=701
#block AMD driver
blacklist radeon
blacklist amdgpu
#block NVIDIA driver
blacklist nouveau
blacklist nvidia
blacklist nvidiafb
#intel
blacklist i915
blacklist snd_hda_intel
blacklist snd_hda_codec_hdmi
#attach
options vfio_iommu_type1 allow_unsafe_interrupts=1
复制成功

群晖部署

直接用最新的RR就行,我用的是SA6400,这个太多了就不展开了,找现成教程就行,我贴一下我的配置吧,没什么特殊的,HD630在最新的RR SA6400可以直接驱动

代码块
Shell
自动换行
复制代码
root@flanker:/etc/pve/qemu-server# cat 101.conf 
agent: 1
balloon: 4096
bios: ovmf
boot: order=sata1
cores: 4
cpu: host
hookscript: local:snippets/hooks-igpupt.pl
hostpci0: 0000:08:00,pcie=1 #网口
hostpci1: 0000:00:02,pcie=1,x-vga=1 #HD630核显
hostpci2: 0000:00:17,pcie=1 #SATA控制器
machine: q35
memory: 8192
meta: creation-qemu=8.0.2,ctime=1696955655
name: DSMService
net1: virtio=BC:24:11:09:28:1C,bridge=vmbr1,firewall=1
numa: 0
ostype: l26
sata0: CoreDataBase:vm-101-disk-0,discard=on,size=115G,ssd=1
sata1: CoreDataBase:vm-101-disk-1,discard=on,size=3585M,ssd=1
scsihw: virtio-scsi-single
serial0: socket
smbios1: uuid=ab732b2c-55b0-42b9-a8c7-26d5cc211e4f
sockets: 1
tags: core;dsm
vga: none
vmgenid: 4607f454-b7ca-41bf-97a4-969c1ffab742
root@flanker:/etc/pve/qemu-server# 
复制成功

Ubuntu24 desktop部署,这个也很简单,配置没什么特殊的,见配置

#ubuntu-24.04下,A380显卡可以实现开箱即用

代码块
Shell
自动换行
复制代码
root@flanker:/etc/pve/qemu-server# cat 104.conf 
agent: 1
args: -spice 'tls-port=60020,port=60021,addr=192.168.31.68,tls-ciphers=HIGH,seamless-migration=on,streaming-video=all,password-secret=test' -object 'secret,id=test,data=******'
balloon: 4096
boot:  
cores: 4
cpu: host
hostpci0: 0000:03:00,pcie=1,x-vga=1 #DG2
hostpci1: 0000:04:00,pcie=1 #DG2 声卡
ide2: ISO:iso/ubuntu-24.04-desktop-amd64.iso,media=cdrom,size=5971344K
machine: q35
memory: 8192
meta: creation-qemu=8.1.5,ctime=1715165938
name: Ubuntu
net0: virtio=BC:24:11:06:24:2F,bridge=vmbr0,firewall=1
net1: virtio=BC:24:11:A0:38:B8,bridge=vmbr1,firewall=1
numa: 0
ostype: l26
parent: perfect
scsi0: CoreDataBase:vm-104-disk-0,discard=on,iothread=1,size=100G,ssd=1
scsihw: virtio-scsi-single
serial0: socket
smbios1: uuid=15416d6c-39c9-4b9e-8229-2202c815df3b
sockets: 1
spice_enhancements: videostreaming=all
usb0: host=1-3
usb1: host=1-4
usb2: host=10d7:b012
vga: none
vmgenid: e72c0369-335f-42a0-a3e9-2c22cdac882a

[perfect]
agent: 1
args: -spice 'tls-port=60020,port=60021,addr=192.168.31.68,tls-ciphers=HIGH,seamless-migration=on,streaming-video=all,password-secret=test' -object 'secret,id=test,data=******'
boot:  
cores: 8
cpu: host
hostpci0: 0000:03:00,pcie=1,x-vga=1
hostpci1: 0000:04:00,pcie=1
ide2: ISO:iso/ubuntu-24.04-desktop-amd64.iso,media=cdrom,size=5971344K
machine: q35
memory: 8192
meta: creation-qemu=8.1.5,ctime=1715165938
name: Ubuntu
net0: virtio=BC:24:11:06:24:2F,bridge=vmbr0,firewall=1
net1: virtio=BC:24:11:A0:38:B8,bridge=vmbr1,firewall=1
numa: 0
ostype: l26
runningcpu: host,kvm=off,+kvm_pv_eoi,+kvm_pv_unhalt
runningmachine: pc-q35-8.1+pve0
scsi0: CoreDataBase:vm-104-disk-0,discard=on,iothread=1,size=100G,ssd=1
scsihw: virtio-scsi-single
serial0: socket
smbios1: uuid=15416d6c-39c9-4b9e-8229-2202c815df3b
snaptime: 1715267057
sockets: 1
spice_enhancements: videostreaming=all
usb0: host=1-3
usb1: host=1-4
usb2: host=10d7:b012
vga: none
vmgenid: e72c0369-335f-42a0-a3e9-2c22cdac882a
vmstate: CoreDataBase:vm-104-state-perfect
复制成功

docker 的部署与版本

见官网https://docs.docker.com/engine/install/ubuntu/

代码块
Shell
自动换行
复制代码
# Add Docker's official GPG key:
sudo apt-get update
sudo apt-get install ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc

# Add the repository to Apt sources:
echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \
  $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
  sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update
复制成功

代码块
Shell
自动换行
复制代码
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
复制成功

代码块
Shell
自动换行
复制代码
root@flanker:~# docker -v
Docker version 26.1.2, build 211e74b
复制成功

Jellyfin yml文件

代码块
Shell
自动换行
复制代码
root@flanker:/home/flanker/docker/jellyfin# cat docker-compose.yml 
version: '3.8'
services:
  jellyfin:
    image: nyanmisaka/jellyfin
    container_name: jellyfin
    user: 0:0
    network_mode: 'host'

    devices:
      - /dev/dri:/dev/dri #显卡
    volumes:
      - /home/flanker/docker/jellyfin/config:/config
      - /home/flanker/docker/jellyfin/cache:/cache
      - /home/flanker/docker/jellyfin/media:/media
    restart: 'unless-stopped'
    # Optional - alternative address used for autodiscovery
    environment:
      - JELLYFIN_PublishedServerUrl=http://example.com #不知道 自带的
      - http_proxy=http://192.168.10.233:7890 #代理
      - https_proxy=http://192.168.10.233:7890 #代理
      - no_proxy=localhost,127.0.0.1 #代理
    # Optional - may be necessary for docker healthcheck to pass if running in host network mode
    extra_hosts:
      - 'host.docker.internal:host-gateway'
      - 'image.tmdb.org:143.244.49.177' #hosts
      - 'api.themoviedb.org:18.164.124.55'#hosts
复制成功

转码截图

啥?你问我为啥不直接用HD630?那不是DG2强嘛!

结束