上一部分,我们介绍了自建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数据存储中。上传成功后数据存储中只显示单个文件,如图
![arpl upload arpl upload](/posts/nas/part-two/images/part2-arpl-upload_hub109f1e7f6bb6778fd5a249a28d5e8c2_93181_640x0_resize_q75_bgffffff_box_3.jpg)
新建虚拟机,操作系统版本注意选择 其他6.x或更高版本Linux(64位) (有些类型在后续选择硬盘直通时无法选择PCI设备)。
![create vm create vm](/posts/nas/part-two/images/part2-create-vm_hu2950f6e545d4cdd013f61476e3e0a237_156276_640x0_resize_q75_bgffffff_box_3.jpg)
选择CPU及内存配置,2核4G,内存配置 预留所有客户机内存
![vm cpu mem vm cpu mem](/posts/nas/part-two/images/part2-vm-cpu-mem_hucd4411975e20eaeddfc879daae99d2c5_297808_640x0_resize_q75_bgffffff_box_3.jpg)
移除默认的硬盘,SCSI控制器以及CD/DVD驱动器。
![remove disk scsi and cd/dvd remove disk scsi and cd/dvd](/posts/nas/part-two/images/part2-remove-disk-etc_hu0a6816991316f723a57f682080a5388a_144229_640x0_resize_q75_bgffffff_box_3.jpg)
先添加现有硬盘,选择数据存储中的arpl文件。再添加新标准硬盘。
![add disk add disk](/posts/nas/part-two/images/part2-add-disk_hu4579a1293ba881b23e4c265dea039c44_500910_640x0_resize_q75_bgffffff_box_3.jpg)
找到虚拟机选项->引导选项->启用 UEFI 安全引导,禁用该配置
![disable uefi security disable uefi security](/posts/nas/part-two/images/part2-disable-uefi-security_hu8c93cedd65c59956ab8c1f0ee8659d73_205671_640x0_resize_q75_bgffffff_box_3.jpg)
检查最终配置,如图
![check config check config](/posts/nas/part-two/images/part2-check-config_hu5611b0e9aa5c719afb8c4760ca92c5b3_578381_640x0_resize_q75_bgffffff_box_3.jpg)
完成后启动虚拟机,等待arpl加载。加载完成后会出现如下信息
![arpl load arpl load](/posts/nas/part-two/images/part2-arpl-load_hu02741d2d09a8be7e67382a3827d7e6d8_46884_640x0_resize_q75_bgffffff_box_3.jpg)
访问提示的地址,进入配置页面,按步骤操作
- 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端口,会进入群晖设置页面
![config ds config ds](/posts/nas/part-two/images/part2-ds-setup_hua4b554187cf9314cc601acf21e6b37e3_210105_640x0_resize_q75_bgffffff_box_3.jpg)
按步骤操作,最后进入进度条
![install ds install ds](/posts/nas/part-two/images/part2-ds-install-progress_hu99d5995aea3fa9d55a466606a7b998a1_71935_640x0_resize_q75_bgffffff_box_3.jpg)
安装成功后,我们将机器关机,配置硬盘直通(理论上可以在最开始配置)。进入ESXi管理界面,主机-管理-硬件-PCI设备,找到我们的独立存储硬盘,切换直通
![toggle passthrough toggle passthrough](/posts/nas/part-two/images/part2-esxi-toggle-passthrough_hu96804e13f126529636e7eaee8e393b1e_246446_640x0_resize_q75_bgffffff_box_3.jpg)
最后编辑虚拟机,添加PCI设备,选择直通硬盘
![vm add pci device vm add pci device](/posts/nas/part-two/images/part2-vm-add-pci-device_huc0ae24bb54732d0236bcdd062bc2d5d0_158316_640x0_resize_q75_bgffffff_box_3.jpg)
在群晖存储管理器中检测磁盘
![ds check storage ds check storage](/posts/nas/part-two/images/part2-ds-storage_huc27795712bd97b3d6e43f4d7abb1e3de_117596_640x0_resize_q75_bgffffff_box_3.jpg)
至此整个群晖的构建就结束了。后续在群晖的各种设置,可以参考线上资料进行摸索,不再赘述。
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) 作为硬件加速选项, 完整的配置如下
![jellyfin hardware acceleration jellyfin hardware acceleration](/posts/nas/part-two/images/part2-jellyfin-hardware-acceleration_hud9c6075adf02718cb25f152a00452920_1494161_640x0_resize_q75_bgffffff_box_3.jpg)
我们选择一个4K视频尝试硬解效果。(intel_gpu_top命令在该模式下报错,暂时还没找到原因和解决方案, 可以使用htop命令观察CPU占用情况,结合播放的视频信息判断)
![jellyfin play info jellyfin play info](/posts/nas/part-two/images/part2-jellyfin-play-info_hu0713f518e709b86a86a5ee6b0f9961f8_331404_640x0_resize_q75_bgffffff_box_3.jpg)
可以看到播放信息显示转码,htop命令显示了FFmpeg进程,且CPU占用较为正常。
![jellyfin play htop jellyfin play htop](/posts/nas/part-two/images/part2-jellyfin-play-htop_hue95d26f54b75639b4e251691f8322b84_424599_640x0_resize_q75_bgffffff_box_3.jpg)