上一部分,我们介绍了自建NAS的硬件配置及相关的虚拟化系统ESXi,这一部分我们在虚拟层之上构建我们的NAS系统群晖及服务器Debian。群晖实际也支持docker以及一些媒体服务如Plex的安装, 但是本着专有的系统做专门的事情,我们使用Debian+docker安装媒体服务,以及通过Debian尝试核显直通硬解码。
黑群晖
黑群晖指在非官方硬件上安装群晖系统。目前这部分比较成熟,有很多教程及工具可以实现,这里我们使用的是arpl工具,地址是https://github.com/fbelavenuto/arpl 。
首先我们从arpl releases中下载最新的镜像,我们使用ESXi,这里选择vmdk-flat
版本。解压下载的压缩包,将压缩包两个文件arpl-flat.vmdk
及arpl.vmdk
上传至ESXi数据存储中。上传成功后数据存储中只显示单个文件,如图
新建虚拟机,操作系统版本注意选择 其他6.x或更高版本Linux(64位) (有些类型在后续选择硬盘直通时无法选择PCI设备)。
选择CPU及内存配置,2核4G,内存配置 预留所有客户机内存
移除默认的硬盘,SCSI控制器以及CD/DVD驱动器。
先添加现有硬盘,选择数据存储中的arpl文件。再添加新标准硬盘。
找到虚拟机选项->引导选项->启用 UEFI 安全引导,禁用该配置
检查最终配置,如图
完成后启动虚拟机,等待arpl加载。加载完成后会出现如下信息
访问提示的地址,进入配置页面,按步骤操作
- Choose a model
- Choose a build number
- Generate a random serial number
- Build the loader
- Wait for downloading DS image
- Boot the loader
- Booting
加载完成后,会显示Connection Closed
,我们访问同IP下的5000端口,会进入群晖设置页面
按步骤操作,最后进入进度条
安装成功后,我们将机器关机,配置硬盘直通(理论上可以在最开始配置)。进入ESXi管理界面,主机-管理-硬件-PCI设备,找到我们的独立存储硬盘,切换直通
最后编辑虚拟机,添加PCI设备,选择直通硬盘
在群晖存储管理器中检测磁盘
至此整个群晖的构建就结束了。后续在群晖的各种设置,可以参考线上资料进行摸索,不再赘述。
Debian
Debian作为主流的Linux发行版,稳定且各个生态支持较好,所以这里尝试用Debian作为媒体服务器等。 Debian的安装这里不再赘述(需要注意的是之后核显也需要在内存配置时勾选 预留所有客户机内存 ), 主要介绍下ESXi+Debian的核显直通能力,然后测试下Jellyfin的硬解码播放视频。
开启核显
下载最新的内核并安装,重启并检测内核版本
mkdir kernel && cd kernel wget http://ftp.debian.org/debian/pool/main/l/linux-signed-amd64/linux-image-6.1.0-7-amd64_6.1.20-1_amd64.deb sudo dpkg -i linux-image-6.1.0-7-amd64_6.1.20-1_amd64.deb sudo reboot # check kernel uname -a # Linux debian 6.1.0-7-amd64 #1 SMP PREEMPT_DYNAMIC Debian 6.1.20-1 (2023-03-19) x86_64 GNU/Linux
关闭ESXi核显占用
ESXi配置主机-操作,开启SSH,SSH进入系统运行如下命令
esxcli system settings kernel set -s vga -v FALSE
,添加PCI核显设备,禁用Debian虚拟显卡
编辑虚拟机配置,虚拟硬件-添加其他设备-PCI设备,选择核显
编辑虚拟机配置,虚拟机选项-高级-配置参数-编辑配置,将
svga.present
值改为FALSE
启动虚拟机,检查核显是否加载,正确加载会看到
renderD128
设备ls -l /dev/dri total 0 drwxr-xr-x 2 root root 80 Mar 27 00:09 by-path crw-rw---- 1 root video 226, 0 Mar 27 00:09 card0 crw-rw---- 1 root render 226, 128 Mar 27 00:09 renderD128
补全缺失的915 guc huc dmc固件
mkdir -p /lib/firmware/i915 && cd /lib/firmware/i915 curl -LO https://git.kernel.org/pub/scm/linux/kernel/git/firmware/linux-firmware.git/plain/i915/ehl_guc_70.1.1.bin curl -LO https://git.kernel.org/pub/scm/linux/kernel/git/firmware/linux-firmware.git/plain/i915/ehl_huc_9.0.0.bin curl -LO https://git.kernel.org/pub/scm/linux/kernel/git/firmware/linux-firmware.git/plain/i915/icl_dmc_ver1_09.bin
开启核显编码,然后重启
echo "options i915 enable_guc=3" > /etc/modprobe.d/i915.conf
重启后验证是否开启成功
journalctl -b -o short-monotonic -k | egrep -i "i915|dmr|dmc|guc|huc"
测试硬解码
至此核显应该开启成功,我们使用Jellyfin播放视频测试下效果。
挂载群晖网络盘
sudo mkdir -p /media/nas/media
sudo mount -t cifs -o rw,vers=3.0,credentials=/root/.smbcredentials,uid=1000,gid=1000 //192.168.50.102/media /media/nas/media
开机自动挂载可以在/etc/fstab
添加如下一行
//192.168.50.102/media /media/nas/media cifs vers=3.0,credentials=/root/.smbcredentials,uid=1000,gid=1000
参考官方文档安装docker服务https://docs.docker.com/engine/install/debian/
。然后启动Jellyfin服务,这里我们使用的是N大的nyanmisaka/jellyfin
镜像,
内置了硬解码相关的依赖和驱动。
docker run \
-d \
--name='jellyfin' \
-e TZ="Asia/Shanghai" \
-p '8096:8096/tcp' \
-p '7359:7359/udp' \
-p '1900:1900/udp' \
-v '/media/nas/':'/media/':'rw' \
-v '/home/tomo/docker/jellyfin':'/config':'rw' \
-v '/home/tomo/cache':'/cache':'rw' \
--device='/dev/dri/' \
--restart=always \
'nyanmisaka/jellyfin:latest'
等待镜像拉取及服务启动,之后我们通过8096端口登录Jellyfin,进行初始化。初始化后,左上角菜单进入控制台,选择播放设置,开启硬解码,我们选择 Intel QuickSync(QSV) 作为硬件加速选项, 完整的配置如下
我们选择一个4K视频尝试硬解效果。(intel_gpu_top命令在该模式下报错,暂时还没找到原因和解决方案, 可以使用htop命令观察CPU占用情况,结合播放的视频信息判断)
可以看到播放信息显示转码,htop命令显示了FFmpeg进程,且CPU占用较为正常。