N6000 软路由安装 ESXi 8 直通核显给 Debian / Ubuntu 实现 Plex 硬件转码视频文件

N6000 软路由安装 ESXi 8 直通核显给 Debian / Ubuntu 实现 Plex 硬件转码视频文件

记忆の风
2023-02-27 / 1 评论 / 149 阅读 / 正在检测是否收录...

操作步骤:

一、ESXi 8开启核显直通

自从VMware vSphere(ESXi)升级到7.0以后,改进了一个功能,就是硬件直通以后不需要重启就可以直接添加给虚拟机使用。可是偏偏有不少人会遇到以下情况:直通核显给虚拟机可以正常使用,但是ESXi重启后直通列表里面的核显会变成再次需要直通才能使用,这样的话设置的虚拟机自动启动就无效了。

有人说这是BUG,有人认为这个是ESXi的管理机制:每次ESXi重启后,宿主会直接忽视核显直通然后获得核显的使用权,应该是为了防止在直通核显以后又误将管理口网卡直通出去造成ESXI无法进入管理界面的尴尬。这个可以关掉的:

1、在电脑浏览器打开ESXi,在菜单中开启SSH;

2、在电脑上打开MobaXterm或者Putty等软件,用root账号登录到ESXi的SSH下;

3、输入一条命令(须注意英文的大小写和空格),回车:

esxcli system settings kernel set -s vga -v FALSE

4、重启ESXi生效。
N6000 BIOS 版本 : V5.19
exsi bios.png
N6000 核心显卡的 Device ID : 0x4e71
1677684713645.png

二、安装Debian 11 / Ubuntu 22(推荐Ubuntu)

在ESXi 8里新建一台虚拟机,建议分配4核CPU和2G~4G内存。我这里的启动设置是EFI启动,成功添加直通核显。先不要添加核显,用默认的虚拟显卡安装好Debian 11或者Ubuntu 22.04(推荐安装Ubuntu 22.04,因为不用自己折腾non-free的linux 固件),选择安装组件时不要选择任何GUI图形化桌面(如果安装了图形界面,后面直通核显时大概率死机),仅勾选安装SSH Server和基础组件,Ubuntu 要用 ubuntu-22.04-live-server-amd64.iso这个安装包,选最小化安装,其他组件可以等安装完成后再apt install。
1677504146708.png
我在这里就先预留了所有内存,因为后面直通显卡设备有这个要求。也可以等直通显卡时再修改此项配置。

注意:不要选择任何GUI图形化桌面
1677504172069.png

三、开启Debian 11 / Ubuntu 22 SSH登录

如果安装时没安装SSH服务,请先安装:

apt -y install openssh-server

检查状态:

systemctl status ssh

确认SSH服务是enabled状态,可以开机自启动:
1677504258934.png
修改sshd_config文件允许root用户远程登录:
这一步操作会减弱Debian / Ubuntu主机的安全性,不过家用一般也不用太在意,特别在意的可以设置为SSH公钥/私钥免密登录,具体方法网上有教程,也可以看这里SSH无密码登录及WinSCP和PuTTY设置。

nano /etc/ssh/sshd_config

找到以下几行并去掉前面的注释标记#号,并修改后面的设定值:

PermitRootLogin yes
PasswordAuthentication yes

1677504425104.png

Ubuntu还需要手动为root用户设置密码:

sudo passwd root

重启SSH服务:

systemctl restart ssh

打开MobaXterm或者Putty等软件,用root账号和密码尝试连接运行在Debian / Ubuntu 的IP 22端口上的SSH服务,确定可以正常登录和输入命令。

四、升级Debian 11 / Ubuntu 22 内核到5.18

升级Debian 11 内核到5.18

Debian 11安装好默认是5.10内核,根据Jellyfin中国特供版作者nyanmisaka等各位大佬的研究,想要让N6000核显开启硬件转码需要升级Linux内核到5.17以上,开启低功耗编码HuC和GuC。

到这里下载Debian 5.18内核二进制安装包,手动安装之。

下载已编译的5.18内核二进制安装包,并安装:

mkdir kernel
cd kernel
wget http://ftp.debian.org/debian/pool/main/l/linux-signed-amd64/linux-image-5.18.0-2-amd64_5.18.5-1_amd64.deb
dpkg -i *.deb

查看已安装的内核:

dpkg --list | grep linux-image

返回:

ii linux-image-5.10.0-16-amd645.10.127-1amd64Linux 5.10 for 64-bit PCs (signed)
ii linux-image-5.18.0-2-amd645.18.5-1amd64Linux 5.18 for 64-bit PCs (signed)
ii linux-image-amd645.10.127-1amd64Linux for 64-bit PCs (meta-package)

重启:

reboot

重启后查看新内核生效了没有:

uname -r

正常情况应该返回:

Linux debian 5.18.0-2-amd64**

升级Ubuntu 22 内核到5.18

Ubuntu 22.04安装好以后是5.15内核,我们把它升级到5.18内核:
下载ubuntu-mainline-kernel脚本:

wget https://raw.githubusercontent.com/pimlie/ubuntu-mainline-kernel.sh/master/ubuntu-mainline-kernel.sh

将脚本放在可执行路径中:

install ubuntu-mainline-kernel.sh /usr/local/bin/

检查当前可以下载安装的内核版本:

ubuntu-mainline-kernel.sh -r

返回:

v5.18.0
v5.18.1
v5.18.2
v5.18.3
v5.18.4
v5.18.5
v5.18.6
v5.18.7
v5.18.8
v5.18.9
v5.18.10
v5.18.11
v5.18.12
v5.18.13
v5.18.14
v5.18.15
v5.18.16
v5.18.17
v5.18.18
v5.18.19

下载安装指定版本内核v5.18.19:

ubuntu-mainline-kernel.sh -i v5.18.19

返回:

Downloading index from kernel.ubuntu.com
Will download 6 files from kernel.ubuntu.com:
Downloading amd64/linux-headers-5.18.19-051819-generic_5.18.19-051819.202208211443_amd64.deb: 100%
Downloading amd64/linux-headers-5.18.19-051819_5.18.19-051819.202208211443_all.deb: 100%
Downloading amd64/linux-image-unsigned-5.18.19-051819-generic_5.18.19-051819.202208211443_amd64.deb: 100%
Downloading amd64/linux-modules-5.18.19-051819-generic_5.18.19-051819.202208211443_amd64.deb: 100%
Downloading amd64/CHECKSUMS: 100%
Downloading amd64/CHECKSUMS.gpg: 100%
Signature of checksum file has been successfully verified
Checksums of deb files have been successfully verified with sha256sum
Installing 4 packages
Cleaning up work folder

查看当前已通过该脚本安装的内核版本:

ubuntu-mainline-kernel.sh -l

返回:

v5.18.19-051819

重启:

reboot

重启后查看新内核生效了没有:

uname -r

返回:

5.18.19-051819-generic

代表新内核成功启用。

五、直通核显到Debian 11 / Ubuntu 22

添加核显PCI设备成为虚拟机硬件

现在关闭Debian 11 / Ubuntu 22 虚拟机,在ESXi 8里将核显PCI设备添加到虚拟机的硬件里:
【虚拟机添加核显图,后续补】

禁用虚拟显卡

然后在虚拟机选项-高级-配置参数-编辑配置里,将svga.present由 TRUE改为 FALSE ,保存并启动虚拟机。
1677505488828.png
开机后虚拟机控制台将一直呈现灰色而不可用,稍等片刻可以尝试SSH连接设置好的静态IP的22端口。如果不出意外,应该可以用root用户直接远程登录继续执行下面的操作。

验证核显是否已经加载:

ls -al /dev/dri
返回
total0表格表格表格表格表格表格表格
drwxr-xr-x3rootroot100Jul1522:07.
drwxr-xr-x17rootroot 3200Jul1522:07..
drwxr-xr-x2rootroot80Jul1522:07by-path
crw-rw----1rootvideo 2260Jul1522:07card0
crw-rw----1rootrender 226128Jul1522:07renderD128

说明核显已经正常识别加载。

(以下内容主要来自 N5105 PVE docker-compose 安装Jellyfin 并实现 硬解码 、 N5015使用心得 、软路由N5105硬解方案归纳、 司波图 / 通用PVE AIO安装教程 和 N5105 jasper lake 开启硬件转码方法) 。

安装缺失固件

Debian 11 安装缺失固件
因为开启核显开启HuC和GuC功能需要用到Intel提供的闭源已编译二进制固件,但是Debian默认的安装ISO镜像并不带这些non-free的Linux固件,虽然也可以从Debian官方下载下载包含non-free Linux固件的ISO镜像来进行安装,或者手动下载最新的20220718版non-free Linux固件安装包解压后安装,但经过测试,这两种方式安装的Intel核显i915 GuC固件版本还是偏低,需要到这里下载三个最新版本的固件:

固件文件大小(Byte)下载链接MD5
ehl_guc_69.0.3.bin343360https://git.kernel.org/pub/scm/linux/kernel/git/firmware/linux-firmware.git/plain/i915/ehl_guc_69.0.3.bin83dc91c3b5388066affc7bce49be96d8
ehl_huc_9.0.0.bin498880https://git.kernel.org/pub/scm/linux/kernel/git/firmware/linux-firmware.git/plain/i915/ehl_huc_9.0.0.bin6438c08bef2e784a99837b9d1cb60989
icl_dmc_ver1_09.bin25952https://git.kernel.org/pub/scm/linux/kernel/git/firmware/linux-firmware.git/plain/i915/icl_dmc_ver1_09.bin930d28514a198ca0eb39d9dfb743a194

然后上传到/lib/firmware/i915,如果i915目录不存在就先创建它:

mkdir /lib/firmware/i915

也可以直接在Debian里下载:

mkdir /lib/firmware/i915

cd /lib/firmware/i915

wget https://git.kernel.org/pub/scm/linux/kernel/git/firmware/linux-firmware.git/plain/i915/ehl_guc_69.0.3.bin

wget https://git.kernel.org/pub/scm/linux/kernel/git/firmware/linux-firmware.git/plain/i915/ehl_huc_9.0.0.bin

wget https://git.kernel.org/pub/scm/linux/kernel/git/firmware/linux-firmware.git/plain/i915/icl_dmc_ver1_09.bin

完成后注意核对文件大小和权限:

ls -l /lib/firmware/i915

返回:

-rw-r--r-- 1 root root 343360 Jul 14 21:56 ehl_guc_69.0.3.bin
-rw-r--r-- 1 root root 498880 Jul 14 22:03 ehl_huc_9.0.0.bin
-rw-r--r-- 1 root root 25952 Jul 14 21:55 icl_dmc_ver1_09.bin

在WinSCP里看是这样的:
1677506675196.png

补充:(可选,非必须)如果想安装完整版的最新固件,可以从这里下载(压缩包文件大小达近400MB,解压后更大,浪费硬盘空间,非必要情况不建议下载),以下命令供参考:

mkdir firmware & cd firmware

wget https://git.kernel.org/pub/scm/linux/kernel/git/firmware/linux-firmware.git/snapshot/linux-firmware-20220708.tar.gz

tar -zxf linux-firmware-20220708.tar.gz

mkdir /lib/firmware/i915

cp linux-firmware-20220708/i915/* /lib/firmware/i915/

rm -rf linux-firmware-20220708/

Ubuntu 22 检查固件

相比之下,Ubuntu 22.04就省事多了,已安装的固件包比较全,已经包含最新的i915固件,可以列一下看看:

ls -l /lib/firmware/i915/ehl_guc_69*
ls -l /lib/firmware/i915/ehl_huc_9*
ls -l /lib/firmware/i915/icl_dmc_ver1_09*

返回:

-rw-r--r-- 1 root root 343360 May 13 11:44 /lib/firmware/i915/ehl_guc_69.0.3.bin
-rw-r--r-- 1 root root 498880 May 13 11:44 /lib/firmware/i915/ehl_huc_9.0.0.bin
-rw-r--r-- 1 root root 25952 May 13 11:44 /lib/firmware/i915/icl_dmc_ver1_09.bin

开启核显低功耗编码 HuC 和 GuC

编辑grub配置文件,强制开启 HuC 和 GuC:

nano /etc/default/grub
找到并修改 GRUB_CMDLINE_LINUX_DEFAULT="" 为:
GRUB_CMDLINE_LINUX_DEFAULT="intel_iommu=on i915.enable_guc=3 quiet"

然后更新grub菜单:

update-grub

或者:

grub-mkconfig -o /boot/grub/grub.cfg

重启:

reboot

补充说明:guc引导项不同的参数不同的作用,具体如下:

i915.enable_guc=1 ## 启用GuC提交和电源管理
i915.enable_guc=2 ## 只启用HuC认证
i915.enable_guc=3 ## 将两个功能结合在一起

在内核4.16之前,HuC认证是通过设置:

i915.enable_guc_loading=1 ##4.16之前使用此参数开启huc认证
经过测试,如果/etc/default/grub这里设置i915.enable_guc=2,GuC submission会是disabled,不确定是否会影响硬件转码,就还是设置为3吧。

至此,核显设置就安装完成了。

重启后,验证低功耗编码HuC和GuC是否开启:

journalctl -b -o short-monotonic -k | egrep -i "i915|dmr|dmc|guc|huc"

返回:

[ 0.000000] debian kernel: Command line: BOOT_IMAGE=/boot/vmlinuz-5.18.0-2-amd64 root=UUID=1ac9bedb-49b8-4a86-b4e5-72b33eb78abd ro intel_iommu=on i915.enable_guc=3 quiet
[ 0.043744] debian kernel: Kernel command line: BOOT_IMAGE=/boot/vmlinuz-5.18.0-2-amd64 root=UUID=1ac9bedb-49b8-4a86-b4e5-72b33eb78abd ro intel_iommu=on i915.enable_guc=3 quiet
[ 3.509988] debian kernel: Setting dangerous option enable_guc - tainting kernel
[ 3.509991] debian kernel: Setting dangerous option enable_guc - tainting kernel
[ 3.511534] debian kernel: i915 0000:0b:00.0: [drm] VT-d active for gfx access
[ 3.511543] debian kernel: i915 0000:0b:00.0: vgaarb: deactivate vga console
[ 3.511906] debian kernel: i915 0000:0b:00.0: [drm] Transparent Hugepage mode 'huge=within_size'
[ 3.514195] debian kernel: i915 0000:0b:00.0: Invalid PCI ROM header signature: expecting 0xaa55, got 0xffff
[ 3.514202] debian kernel: i915 0000:0b:00.0: [drm] Failed to find VBIOS tables (VBT)
[ 3.514250] debian kernel: i915 0000:0b:00.0: [drm] ERROR VBT claims to have both internal and external displays on PHY A. Configuring for internal.
[ 3.525794] debian kernel: i915 0000:0b:00.0: [drm] ERROR VBT claims to have both internal and external displays on PHY A. Configuring for internal.
[ 3.525952] debian kernel: i915 0000:0b:00.0: vgaarb: changed VGA decodes: olddecodes=io+mem,decodes=io+mem:owns=io+mem
[ 3.527603] debian kernel: i915 0000:0b:00.0: firmware: direct-loading firmware i915/icl_dmc_ver1_09.bin
[ 3.528081] debian kernel: i915 0000:0b:00.0: [drm] Finished loading DMC firmware i915/icl_dmc_ver1_09.bin (v1.9)
[ 4.531068] debian kernel: i915 0000:0b:00.0: [drm] failed to retrieve link info, disabling eDP
[ 4.532486] debian kernel: i915 0000:0b:00.0: firmware: direct-loading firmware i915/ehl_guc_69.0.3.bin
[ 4.533796] debian kernel: i915 0000:0b:00.0: firmware: direct-loading firmware i915/ehl_huc_9.0.0.bin
[ 4.695205] debian kernel: i915 0000:0b:00.0: [drm] GuC firmware i915/ehl_guc_69.0.3.bin version 69.0
[ 4.695214] debian kernel: i915 0000:0b:00.0: [drm] HuC firmware i915/ehl_huc_9.0.0.bin version 9.0
[ 4.709613] debian kernel: i915 0000:0b:00.0: [drm] HuC authenticated
[ 4.709763] debian kernel: i915 0000:0b:00.0: [drm] GuC submission enabled
[ 4.709766] debian kernel: i915 0000:0b:00.0: [drm] GuC SLPC disabled
[ 4.712512] debian kernel: [drm] Initialized i915 1.6.0 20201103 for 0000:0b:00.0 on minor 0
[ 6.089740] debian kernel: i915 0000:0b:00.0: [drm] Cannot find any crtc or sizes
[ 6.090267] debian kernel: i915 0000:0b:00.0: [drm] ERROR VBT claims to have both internal and external displays on PHY A. Configuring for internal.
[ 7.459136] debian kernel: i915 0000:0b:00.0: [drm] Cannot find any crtc or sizes
[ 7.459592] debian kernel: i915 0000:0b:00.0: [drm] ERROR VBT claims to have both internal and external displays on PHY A. Configuring for internal.
[ 8.863108] debian kernel: i915 0000:0b:00.0: [drm] Cannot find any crtc or sizes
[ 21.078282] debian kernel: i915 0000:0b:00.0: [drm] ERROR VBT claims to have both internal and external displays on PHY A. Configuring for internal.
[ 21.078426] debian kernel: i915 0000:0b:00.0: [drm] ERROR VBT claims to have both internal and external displays on PHY A. Configuring for internal.
[ 31.311088] debian kernel: i915 0000:0b:00.0: [drm] ERROR VBT claims to have both internal and external displays on PHY A. Configuring for internal.
[ 31.314778] debian kernel: i915 0000:0b:00.0: [drm] ERROR VBT claims to have both internal and external displays on PHY A. Configuring for internal.
[ 32.698143] debian kernel: i915 0000:0b:00.0: [drm] ERROR VBT claims to have both internal and external displays on PHY A. Configuring for internal.

因为之前并没有在虚拟机里手动导入核显的VBios(这是另外一个复杂的工程),所以有一堆的和VBT有关的ERROR,这可能就是虚拟机不能开启图形界面的原因,会导致虚拟机系统进入图形界面时直接卡死。还好我们只是把核显用来解码和编码,最关心的HuC和GuC都成功开启了:

[ 4.532486] debian kernel: i915 0000:0b:00.0: firmware: direct-loading firmware i915/ehl_guc_69.0.3.bin
[ 4.533796] debian kernel: i915 0000:0b:00.0: firmware: direct-loading firmware i915/ehl_huc_9.0.0.bin
[ 4.695205] debian kernel: i915 0000:0b:00.0: [drm] GuC firmware i915/ehl_guc_69.0.3.bin version 69.0
[ 4.695214] debian kernel: i915 0000:0b:00.0: [drm] HuC firmware i915/ehl_huc_9.0.0.bin version 9.0
[ 4.709613] debian kernel: i915 0000:0b:00.0: [drm] HuC authenticated
[ 4.709763] debian kernel: i915 0000:0b:00.0: [drm] GuC submission enabled

特别提示:如果上面的日志里有错误提示加载某个固件.bin不成功,请仔细核对一下文件路径、文件名、文件大小和文件权限,按照日志里的提示到相应的地址下载对应的固件文件,上传到/lib/firmware/i915并设置好文件权限即可。

六、安装PLEX服务端
默认情况下,Plex 在 Ubuntu 22.04 基础存储库中不可用。现在运行以下命令将 Plex 存储库添加到您的 Ubuntu 系统:

echo deb https://downloads.plex.tv/repo/deb public main | sudo tee /etc/apt/sources.list.d/plexmediaserver.list

接下来,导入 GPG 密钥:

curl https://downloads.plex.tv/plex-keys/PlexSign.key | sudo apt-key add -

启用存储库后,现在使用以下命令安装最新版本的 Sublime Text:

sudo apt update
sudo apt install plexmediaserver

成功安装后,启用 Plex(系统启动时自动启动)、启动并使用以下命令验证状态:

sudo systemctl enable plexmediaserver
sudo systemctl start plexmediaserver
sudo systemctl status plexmediaserver

成功安装后,打开您的 Web 浏览器并使用 URL 访问 Plex Web 界面。您将被重定向到以下页面:http://your-IP-address:32400/web
1677507550944.png

PLEX更新版本的方法

下载最新安装包

wget https://downloads.plex.tv/plex-media-server-new/1.31.1.6733-bc0674160/debian/plexmediaserver_1.31.1.6733-bc0674160_amd64.deb

安装更新包

apt install /root/plexmediaserver_1.31.1.6733-bc0674160_amd64.deb

用root用户运行这个命令就可以将最新的文件更新到系统,而且不需要停止服务或者重启服务。

文件名可以是当前目录的文件名,也可以加上路径

运行后会询问是否更新,输入y就可以了。

plex重启命令

systemctl restart plexmediaserver
0

评论 (1)

取消
  1. 头像
    xwrdsstzsw
    Windows 10 · Google Chrome

    看的我热血沸腾啊https://www.237fa.com/

    回复