我从2017年开始使用Plex作为家里的媒体服务已经挺长时间了,一开始用的闲置笔记本,尝试了一阵子后决定给它配个专门的主机,于是年底买了台Nuc7作为Plex服务,装了Windows10作为操作系统,在当时主流片源大都1080P、上传带宽30mbps封顶的前提下,同时转码4、5路播放还是能很轻松的满足日常的媒体播放需求。

随着时间慢慢前进,4k、HDR、杜比视界这些新技术慢慢普及,在Windows限制下,Plex转码带有HDR内容的片源无法调用GPU,只能靠CPU来处理HDR转SDR的色彩映射,这就造成了CPU会一直高居100%,无论是其他播放体验还是远程管理都明显感到延迟和卡顿。

随着新一代技术的来临,各方媒体测试Intel的N100性能似乎证明了在linux下这款CPU是完美的Plex服务器首选处理器,观摩了同好北京土著的实机效果后,我决定给家里的主机升级换代。

目标:在保留现有数据库的前提下,把Plex服务器从Windows中迁移到Linux(Ubuntu)

首先,决定网络架构,现有的Windows主机上除了Plex之外我还有一些其他的服务比如alist、komga不能停,Windows用USB连接了2台世特力的5盘位硬盘盒。现在就要将这10个盘作为NFS服务提供给N100主机挂载。

配置Windows10内的NFS服务,列举重点操作

  • https://hanewin.net/nfs-e.htm 这里下载NFS服务软件及语言文件

  • 安装软件,把中文语言文件复制到安装目录的语言文件夹

  • 启动软件,切换成中文

  • 注册软件,不小心在网上搜到了共享出来的注册信息

    点击查看

    name:astray.cn

    key:FBLZ9467C95EEB4B

  • 打开应用切换到输出,点击编辑输出表文件

  • 编辑共享路径,设置仅限指定ip(N100主机)访问

    示例
    E:\ -alldirs -name:HDD-E -maproot:0 -range 192.168.1.80
    F:\ -alldirs -name:HDD-F -maproot:0 -range 192.168.1.80
    G:\ -alldirs -name:HDD-G -maproot:0 -range 192.168.1.80
  • 确认服务器选项卡中的“将客户根目录映射到根目录”已勾选

以上操作结束,Windows这边的准备工作就全部完成了


接下来在畅网N100的工控主机上安装Ubuntu20.04.3 LTS

1、小白,全部选默认安装,安装好进到桌面

2、开启root用户

sudo passwd root

输入root用户的密码,回车
再次输入root用户的密码,回车
提示下面信息表示设置成功

passwd: password updated successfully

3、开启ssh模式root用户登录,打开编辑配置文件

sudo vi /etc/ssh/sshd_config

找到#Authentication行,将 PermitRootLogin no改成yes,并确认行首没有#号注释
找到#Authentication行,将 PasswordAuthentication no改成yes,并确认行首没有#号注释,没有的话可以直接添加此行
esc退出编辑模式后:wq保存退出

4、重新启动ssh服务

service sshd restart

5、开启GUI模式root用户登录,打开编辑配置文件

sudo vi /etc/gdm/gdm.conf

找到 AllowRoot=false,更改为 AllowRoot=ture
esc退出编辑模式后:wq保存退出

6、安装防火墙GUI界面

sudo apt-get update
sudo apt-get upgrade
sudo apt-get install gufw

7、安装intel核显工具

sudo apt-get update
sudo apt-get upgrade
sudo apt-get install intel-gpu-tools -y

8、查看核显状态

ls -l /dev/dri

9、启用GuC和HuC,打开grub文件编辑

sudo vi /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_STYLE=hidden
GRUB_TIMEOUT=0
GRUB_DISTRIBUTOR=`lsb_release -i -s 2> /dev/null || echo Debian`
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"
GRUB_CMDLINE_LINUX="intel_iommu=on i915.enble_guc=7 quiet"

# Uncomment to enable BadRAM filtering, modify to suit your needs
# This works with Linux (no patch required) and with any kernel that obtains
# the memory map information from GRUB (GNU Mach, kernel of FreeBSD ...)
#GRUB_BADRAM="0x01234567,0xfefefefe,0x89abcdef,0xefefefef"

# Uncomment to disable graphical terminal (grub-pc only)
#GRUB_TERMINAL=console

# The resolution used on graphical terminal
# note that you can use only modes which your graphic card supports via VBE
# you can see them in real GRUB with the command `vbeinfo'
#GRUB_GFXMODE=640x480

# Uncomment if you don't want GRUB to pass "root=UUID=xxx" parameter to Linux
#GRUB_DISABLE_LINUX_UUID=true

# Uncomment to disable generation of recovery mode menu entries
#GRUB_DISABLE_RECOVERY="true"

# Uncomment to get a beep at grub start
#GRUB_INIT_TUNE="480 440 1"

找到 # GRUB_CMDLINE_LINUX_DEFAULT="quiet"
把原先的这行注释掉在下面新建一行
GRUB_CMDLINE_LINUX_DEFAULT="intel_iommu=on i915.enable_guc=7 quiet"

10、重启ubuntu

sudo reboot

11、查看显卡信息

intel_gpu_top

以上内容可以参考北京土著的wiki,链接跳转后有虚拟机方面更详细的步骤


12、在Ubuntu上建立挂载目录(上面Windows已经打开NFS服务)

示例
sudo mkdir /mnt/nuc/win-e
sudo mkdir /mnt/nuc/win-f
sudo mkdir /mnt/nuc/win-g

13、配置fstab增加挂载命令,打开编辑配置文件

sudo vi /etc/fstab

14、在最下面增加挂载命令

示例
192.168.1.150:/e /mnt/media/win-e nfs ro,sync,soft,nolock,_netdev 0 0
192.168.1.150:/f /mnt/media/win-f nfs ro,sync,soft,nolock,_netdev 0 0
192.168.1.150:/g /mnt/media/win-g nfs ro,sync,soft,nolock,_netdev 0 0

15、配置开机自动运行服务(代码为北京土著大佬手搓)

根目录建立文件夹amount

sudo mkdir amount

16、在目录中新建amount.sh文件

sudo touch amount.sh

17、打开编辑内容

sudo vi /amount/amount.sh

18、复制粘贴进下面内容,ip段更改为挂载的目标主机(我这里是Windows主机ip)

#!/bin/bash
# 检测网络链接畅通
function network() {
    # 目标 IP
    local target=192.168.1.150
    # ping 命令检测网络
    if ping -c 1 ${target} &> /dev/null
    then
        # 网络畅通
        return 1
    else
        # 网络不畅通
        return 0
    fi
}

# 循环检测网络,直到网络畅通
while true; do
    network
    if [ $? -eq 1 ];then
        echo "网络畅通,开始执行 mount -a 命令"
        sudo mount -a
        exit 0
    else
        echo "网络不畅通,继续检测..."
        sleep 5
    fi
done

:wq保存退出

19、在目录中增加install.sh文件

sudo touch install.sh

20、打开编辑内容

vi /amount/install.sh

21、复制粘贴进下面内容

#!/bin/bash

# 创建服务文件
cat << EOF > /etc/systemd/system/amount.service
[Unit]
Description=Check Network Connectivity

[Service]
ExecStart=/amount/amount.sh

Restart=always

[Install]
WantedBy=multi-user.target
EOF

# 重新加载 systemd,使其读取新的服务文件
systemctl daemon-reload

# 启动服务
systemctl start amount

# 设置服务在开机时自动启动
systemctl enable amount

:wq保存退出

22、给上面两个文件增加权限

chmod +x amount.sh
chmod +x install.sh

23、运行脚本

./install.sh

24、重启后输入df -h命令可以查看挂载是否生效

sudo df -h
文件系统          大小  已用  可用 已用% 挂载点
tmpfs             1.6G  2.9M  1.6G    1% /run
/dev/nvme0n1p2    916G  111G  759G   13% /
tmpfs             7.7G  4.0K  7.7G    1% /dev/shm
tmpfs             5.0M  4.0K  5.0M    1% /run/lock
efivarfs          192K   86K  102K   46% /sys/firmware/efi/efivars
/dev/nvme0n1p1    511M  6.1M  505M    2% /boot/efi
192.168.1.150:/e  9.1T  9.0T  144G   99% /mnt/nuc/hdd-e
192.168.1.150:/f  9.1T  9.0T  163G   99% /mnt/nuc/hdd-f
192.168.1.150:/g  9.1T  8.9T  234G   98% /mnt/nuc/hdd-g
tmpfs             1.6G  128K  1.6G    1% /run/user/0

到这里两个服务器的连接就已经打通了,接下来安装Plex到新的Ubuntu服务器中


  • 首先安装CURL
sudo apt-get install apt-transport-https curl
  • 添加 GPG 密钥
curl https://downloads.plex.tv/plex-keys/PlexSign.key | gpg --dearmor | sudo tee /usr/share/keyrings/plexserver.gpg > /dev/null
  • 添加存储库
echo deb [arch=amd64 signed-by=/usr/share/keyrings/plexserver.gpg] https://downloads.plex.tv/repo/deb public main | sudo tee /etc/apt/sources.list.d/plexmediaserver.list
  • 运行系统更新
sudo apt-get update
sudo apt-get upgrade
  • 安装 Plex 媒体服务
sudo apt install plexmediaserver

当它要求更新 Plex Media 配置文件时,按Y并按Enter键

  • 检查Plex服务状态
systemctl status plexmediaserver
  • 如果它未激活,则使用给定的命令启动并启用它
systemctl enable --now plexmediaserver
  • 常用的Plex命令
启动服务
systemctl start plexmediaserver
停止服务
systemctl stop plexmediaserver
重新启动 
systemctl restart plexmediaserver
  • 浏览器中打开Plex管理页面
http://localhost:32400/web
  • 全新服务器一路下一步即可,设置完毕后记得认领。

到这里,新Plex服务就已经部署完毕,接下来把Windows服务器中的现有库迁移到新服务器中


1、在Plex安装目录删除掉media、metadata、plug-in support、plug-ins四个文件夹

Plex安装目录
/var/lib/plexmediaserver/Library/Application Support/Plex Media Server/

2、停止Windows中的plex服务
3、从Windows以下路径中
复制media、metadata、plug-in support、plug-ins四个文件夹全部内容到第一步的ubuntu目录

%localappdata%\plex media server

库比较大的话建议先做个压缩包,复制到位后解压缩再删除压缩包,所需时间要比几十GB碎文件来回Copy要省很多

4、复制完毕后启动Ubuntu中的Plex服务

systemctl start plexmediaserver

5、浏览器中打开Plex管理页面

http://localhost:32400/web
或者
https://app.plex.tv/

这时可以看到Windows的库已经在新的服务器上显示了,但因为路径变更了,点击播放会报错

6、关闭Plex设置中自动扫描功能,关闭扫描后清理垃圾功能,关闭删除功能

7、点击任意库的编辑-添加文件夹,在里面增加新的挂载路径,注意先不要删除旧Windows路径

8、添加新路径后保存修改,Plex会自动扫描,完毕后删掉旧的Windows路径

9、重复上面步骤把所有库的路径更新

10、现在可以开启Plex设置中自动扫描功能、扫描后清理垃圾和删除功能了

以上步骤参考自 https://www.youtube.com/watch?v=ggzlBVIwyDk

注意一点,建议更新资料库连接的时候,同时关闭片头片尾检测和缩略图生成,能节省大量时间,全部设置完毕后可以再开启,以后不论是手动添加还是自动计划任务均可

2024-04-15 如果Window重启,挂载的句柄会失效,需要用命令umount -a卸载旧的挂载句柄,然后再次mount-a挂载即可。

任务完成!撒花!
Mission completed!


写在最后:
这次迁移对我这种Linux零认知的小白来说学到了不少东西,从啥也不会到最后成功,绕了不少弯路,但也证明了凡事最重要的是走出第一步,一旦行动了,后来自然就水到渠成了,必要的步骤一锅烩的做个记录,岁数大了,再好的脑子也不如笔头子。

最后修改:2025 年 05 月 28 日
如果觉得我的文章对你有用,请随意赞赏