收起左侧

「Jellyfin元数据管理」机械硬盘作为视频仓库的同时,使用固态硬盘加速读取元数据

0
回复
21
查看
[ 复制链接 ]

0

主题

0

回帖

0

牛值

江湖小虾

在 Jellyfin 中,视频刮削下载的元数据通常有两种存放方式。

一种是分散存储在视频同目录下,如:

Movies/
 **── Avatar (2009).mkv
 **── Avatar (2009).nfo
 **── poster.jpg
 **── backdrop.jpg

Jellyfin 需要读取这些元数据以显示信息,使用机械硬盘(HDD)作为视频的仓库盘时,由于 HDD 随机读写性能极差,大量零碎的 .nfo 元数据将会导致性能变慢。

另一种是集中存储到 Jellyfin 管理的数据目录,在 Docker 中常见位置为:

/config/metadata/

元数据储存在固态硬盘(SSD)中可以提高读取速度,但是由于 Jellyfin 通过哈希结构储存元数据,这样就无法控制元数据的目录结构,无法通过 .nfo 文件进行手动管理。

如果希望元数据既能够存储在随机读写性能更高大的 SSD 中,又能够通过目录结构管理 .nfo 文件,可以通过 mergerfs 来实现。

mergerfs 是一种“把多个硬盘目录合并成一个目录显示”的 Linux 联合文件系统。视频储存在 HDD 目录中,元数据储存在 SSD 目录中,通过 mergerfs 结合它们创建虚拟目录,将这个虚拟目录作为媒体库文件夹,在 Jellyfin 眼中,元数据和视频就好像在同一个目录下。

安装 mergerfs:

# 更新包列表
sudo apt update
# 安装 mergerfs
sudo apt install mergerfs -y
# 验证安装是否成功
mergerfs -v

创建 SSD 下的目录 /Test_SSD/Test_Mergerfs,HDD 下的目录 /Test_HDD

接下来要做的,就是通过 mergerfs 把目录 /Test_SSD/Test_HDD 合并成统一的虚拟目录 /Test_Mergerfs

编辑 fstab,开机后会自动挂载:

# 备份
sudo cp /etc/fstab /etc/fstab.bak
# 编辑
sudo nano /etc/fstab

在文件最底部添加一行:

/vol1/1000/Test_SSD:/vol2/1000/Test_HDD /vol1/1000/Test_Mergerfs fuse.mergerfs defaults,allow_other,use_ino,cache.files=off,dropcacheonclose=true,minfreespace=1G,category.create=ff,category.action=epall,nonempty,fsname=mergerfs-media 0 0

关键参数解释:

  • /vol1/1000/Test_SSD:/vol2/1000/Test_HDD:分支列表(要合并的目录)。
  • /vol1/1000/Test_Mergerfs:挂载点(目标目录)。
  • defaults:使用 mergerfs 默认选项。
  • fuse.mergerfs:让系统识别为 mergerfs。
  • allow_other:允许其他用户(如 Docker 中的 Jellyfin)访问。
  • use_ino:让 mergerfs 使用底层文件系统的真实 inode 值,而不是自己生成。
  • cache.files=off:关闭文件缓存,减少内存占用(大库推荐)。
  • dropcacheonclose=true:关闭文件时丢弃缓存,进一步减少内存占用。
  • minfreespace=1G:当某个分支剩余空间少于 1GB 时不再写入该分支(可以根据实际情况调整)。
  • category.create=ff:新建文件/目录时,找到分支顺序中第一个符合条件的分支就写入(First Found)。
  • category.action=epall:删除、改权限、重命名等操作时,在所有存在该路径的分支上执行,避免在“没有这个路径”的分支上无谓操作。
  • nonempty:允许挂载到非空目录,如果挂载点目录 /Test_Mergerfs 已有文件,不会报错。
  • fsname=mergerfs-media:自定义文件系统名称,方便识别。

分支列表 /Test_SSD/Test_HDD 之前,这样读取时会优先读取 /Test_SSD 中的文件。使用 category.create=ff 策略,当我们在 /Test_Mergerfs 中写入文件时,会优先写入 /Test_SSD

保存后执行:

sudo systemctl daemon-reload
sudo mount -a

执行后,访问 /Test_Mergerfs 时,看到的内容是 /Test_SSD/Test_HDD 上文件的“并集”。这正是这套方案的核心:让 Jellyfin 只看到一个路径,却能同时利用 HDD(存视频大文件)和 SSD(存元数据小文件)。

验证挂载是否成功:

# 查看 /Test_SSD + /Test_HDD 合并后的联合容量视图
df -h | grep Test_Mergerfs

mergerfs-media                         15T  5.9T  8.9T  40% /vol1/1000/Test_Mergerfs

如果想要将 /Test_HDD 原有的元数据移动到 /Test_SSD 下,可以通过 rsync:

rsync -avh --max-size=10M --remove-source-files --info=STATS,NAME,PROGRESS /Test_HDD/ /Test_SSD/

这样一来,只需要在 Jellyfin 媒体库设置中使用 /Test_Mergerfs 文件夹,元数据储存方式选择 NFO,勾选 将媒体图像保存到媒体所在文件夹,刮削的元数据就会自动储存在 /Test_SSD,目录结构与 /Test_HDD 中的视频保持一致,可以很方便的进行管理,同时充分利用了 HDD 和 SSD 的特性,将 HDD 作为视频仓库盘的同时利用 SSD 加速元数据的读写。

收藏
送赞
分享
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则