
最近对自己的服务器进行了升级,直接上E5-2660v3 内存为4条DDR4REGECC 16G内存,机箱使用的是3U16盘热插拔机箱,主板是海鲜市场买的惠普ML110 gen9 主板,ilo已经升级为最新,调试方便,显卡为英伟达专业卡P400,功耗30W,算是支持4k转码里最低档的专业卡,显卡转码有线程限制,P400是3条,具体以官方文档为主。主板测试安装了PVE和EXSI,只有对EXSI兼容最好,PVE直通硬件就会报错,还没有找到解决办法,如果有人看到这篇文章,知道方法,给这个方向。
布置思路是直通独显给虚拟机ubuntu-server20.04,为了管理方便用docker安装jellyfin,然后把显卡直通给docker里的jellyfin,挂载群辉共享到ubuntu里,让jellyfin读取这个共享。这里有几点需要注意,首先是给ubuntu要安装英伟达驱动和对应版本的cuda,然后直通英伟达显卡给docker里的虚拟机,这里和英特尔集显直通不太一样,英伟达专门开发了插件,按照英伟达官方文档安装即可,docker安装jellyfin只要添加相应参数即可。
软件环境:EXSI:7.0.3 ubuntu-server:20.04 docker:20.10.22 NVIDIA-Driver-Version: 525.60.11 CUDA-Version: 12.0 jellyfin:nyanmisaka/jellyfin:latest
以下为安装步骤(命令都是在root账户下运行)
EXSI安装步骤略过(问度娘)
ubuntu-server虚拟机安装步骤略过(问度娘)
ubuntu共享挂载,开机自动要把群辉中video文件夹映射到服务器的media文件夹
chmod 777 /lib/systemd/system/rc-local.service
nano /lib/systemd/system/rc-local.service
在文件最后添加如下内容
#自启动开启
[Install]
WantedBy=multi-user.target
Alias=rc-local.service
编辑启动文件夹
nano /etc/rc.local
输入以下内容实现开机自动挂载共享文件夹
#!/bin/sh
mount -t cifs -o vers=2.0,username=共享用户名,password=共享密码,iocharset=utf8 //群辉IP/video /media
exit 0
设置权限
chmod +x /etc/rc.local
设置软连接
ln -s /lib/systemd/system/rc-local.service /etc/systemd/system/
重启
reboot
安装英伟达驱动
首先下载驱动和对应cuda略过(问度娘)
屏蔽nouveau步骤
chmod -R 777 /etc/modprobe.d/blacklist.conf
nano /etc/modprobe.d/blacklist.conf
在文件末尾添加下面两行
blacklist nouveau
options nouveau modset=0
更新initramfs
update-initramfs -u
重启ubuntu
验证nouveau有没有屏蔽
lspci | grep nouveau
没有输出就是已经屏蔽
安装gcc和make
apt install gcc make -y
卸载旧的英伟达驱动
apt remove --purge nvidia*
给要安装的驱动程序文件添加所有权限
chmod -R 777 *.run
安装驱动
./NVIDIA-Linux-x86_64-525.60.11.run -no-opengl-files
x32选no 其他都选yes
安装环境
apt-get install freeglut3-dev build-essential libx11-dev libxmu-dev libxi-dev libgl1-mesa-glx libglu1-mesa libglu1-mesa-dev -y
安装cuda
./cuda_12.0.0_525.60.13_linux.run
只安装cuda toolkit,其他都不选
先卸载旧版docker
apt-get remove docker docker-engine docker.io containerd runc
安装环境
apt-get install ca-certificates curl gnupg lsb-release
docker安装
mkdir -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | gpg --dearmor -o /etc/apt/keyrings/docker.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) stable" | tee /etc/apt/sources.list.d/docker.list > /dev/null
apt-get update
apt-get install docker-ce docker-ce-cli containerd.io docker-compose-plugin
安装英伟达直通docker插件
distribution=$(. /etc/os-release;echo $ID$VERSION_ID) && curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg && curl -s -L https://nvidia.github.io/libnvidia-container/$distribution/libnvidia-container.list | sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' | tee /etc/apt/sources.list.d/nvidia-container-toolkit.list
apt-get update
apt-get install -y nvidia-container-toolkit (这里很重要,容器支持英伟达显卡插件)
systemctl restart docker
运行一个容器验证
docker run --name test1 -it --gpus all nvidia/cuda:10.0-base
运行nvidia-smi有如下输出及成功

安装jellyfin
docker run -d --volume /本地配置地址:/config --volume /缓存文件地址:/cache --volume /media:/media --net=host --restart=always --name="jellyfin" --gpus all nyanmisaka/jellyfin:latest
这里的本地配置地址和缓存文件地址需要自己新建 --gpus all 参数就是直通显卡
jellyfin设置略过(问度娘)
硬件转码设置如下
转码成功如下

播放转码成功如下

文章中方法来源于互联网,也是经过验证的,如果谁有别的方法,可以留言一起交流。