跳到主要内容

配置文件系统

路径映射

从下载器到 lani,再到 Jellyfin,涉及到两个目录:

  1. 下载文件:存放完成下载后的文件,通常每个种子一个子目录,内部结构以种子内容为准
  2. Jellyfin 媒体库:通常每个系列一个子目录,需要符合一定结构使 Jellyfin 正确识别

lani 作为这两者之间的桥梁,将文件从一个目录复制到另一个目录。

这里涉及三个服务(容器),它们使用的文件路径可能不完全一致,因此需要通过 路径映射 使其匹配。

一个典型的例子如图所示:

系统架构 1

如何理解这个例子?

在导入下载完成的文件时,lani 会从下载器获取某个种子对应的文件,这里的路径是下载器内部的,比如:

/downloads/Some-Anime-S01E01.mkv

在 lani 中,无法用这个路径找到对应的文件,我们需要将路径中的 /downloads 替换为 /files/downloads,从而得到:

/files/downloads/Some-Anime-S01E01.mkv

注意,文件在宿主机上的目录是 /data,但这与 lani 无关。

如果你有多个目录需要映射,你可以在 pathMapping 中添加更多的配置项。执行时,以第一条匹配的配置项为准,均不匹配则保持不变。找到匹配的配置项后,会在保持相对路径不变的前提下替换路径。

注意在配置中,from 始终指的是外部服务(如 Jellyfin 和下载器)中的路径,to 始终指的是 lani 的路径。

导入策略

你可以配置 moveStrategy 来控制 lani 导入时使用的策略,像:

lani:
moveStrategy: hardLinkOrMove

可选的值包括:

策略
hardLinkOnly仅硬链接,如果无法硬链接,导入报错
hardLinkOrCopy先尝试硬链接,如果无法硬链接,拷贝文件
hardLinkOrMove(默认)先尝试硬链接,如果无法硬链接,移动文件
copyOnly总是拷贝文件
moveOnly总是移动文件

这里总共有三种做法:硬链接、拷贝和移动,你应该使用哪种策略?

硬链接

硬链接 指的是,使两个不同的路径指向相同的数据块,效果上类似于拷贝。这样做的优缺点是:

  • 最佳性能:对于 500MB 的动画文件,机械硬盘上的拷贝往往要花上 5 秒左右,且在你的机械硬盘上额外占用 500MB 的空间。硬链接能够瞬间完成,且不额外消耗空间。
  • 可靠:在拷贝过程中,如果由于断电等原因中断,可能会留下拷贝到一半的文件,无法播放。
  • 效果上等于拷贝:从下载器看来,文件始终在原位。如果修改原位上的文件,导入后的文件也会被修改。不过,你可以随时删除原位上的文件,这不会删除导入后的文件。
  • 要求链接前后的路径在同一个文件系统上,对于 docker 一体机容器部署来说,这意味着 Jellyfin 和下载目录必须在同一个 --volume 对应的目录下。因此,最好是将 Jellyfin 和下载目录放在同一个目录下,然后将这个外层的目录挂载到 lani 容器内。

由于有着如此之多的优势,我们推荐使用硬链接策略。

拷贝

拷贝会将下载目录下的视频文件拷贝到 Jellyfin 目录下,这个过程可能会花费数秒(取决于硬盘性能),并占用额外的空间。

移动

移动会将下载目录下的视频文件移动到 Jellyfin 目录下,这个过程会瞬间完成(如果文件在同一块硬盘上),不会额外占用空间。

移动之后,下载目录下不再有视频文件,会导致下载软件无法正常做种。lani 自动下载时的种子不会使用 PT(私有 Tracker),不过如果你需要手动下载 PT 种子,最好不要使用移动策略。