跳至主内容

存储方案

非官方测试版翻译

本页面由 PageTurner AI 翻译(测试版)。未经项目官方认可。 发现错误? 报告问题 →

Jellyfin 设计为直接从文件系统读取媒体文件。使用 Samba 或 NFS 的网络存储设备必须直接挂载到操作系统中。Jellyfin 数据库也应存储在本地而非网络存储设备上。

注意

若在媒体存储不可用时触发,计划维护任务会从您的媒体库中移除项目。

NFS

若您在使用 NFSv3 时遇到文件播放启动缓慢的性能问题,可能是由于 .NET 锁定机制与未启用锁定功能的 NFSv3 存在兼容性问题。

解决方案如下:

  • 使用 .NET 6 引入的 DOTNET_SYSTEM_IO_DISABLEFILELOCKING 参数禁用 .NET 文件锁定

  • 在挂载时使用 nolock 选项禁用锁定功能

  • 启用锁定服务(lock service)

  • 改用内置锁定支持的 NFSv4 协议

Docker 与虚拟机

中等规模的媒体库数据库可能增长至 10 至 100 GB 不等。

转码文件夹通常需要与原始媒体相当的存储空间(在同等码率下转码时)。例如,单个 50 GB 的 Blu-ray 原盘文件转码后可能占用高达约 60 GB 的空间,也可能低至约 15 GB。若转码文件夹与数据库共用存储空间,请务必考虑此因素以避免问题。

云存储供应商

rclone 是连接云存储与 Jellyfin 服务器的常用工具。rclone 支持大多数操作系统。如需合并本地与云端文件系统,可将 rclone 与 mergerfs 等程序配合使用。

使用云存储时,建议禁用图像提取功能,因为此操作需下载整个文件。

MergerFS

MergerFS 并非万能解决方案,详见适用场景说明

要检查或调整 mergerfs 挂载配置,可参考此快捷操作指南

文件系统注意事项

对于特定文件系统,强烈建议进行优化以获得可接受的性能。

ZFS

尽管 Jellyfin 正在开发更多数据库支持选项,但在当前实现中,数据库仍使用 SQLite。ZFS 默认记录大小为 128 K,这对 SQLite 数据库并非最佳配置。

理想情况下,应在存放 Jellyfin 服务器 SQLite 数据库的数据集上使用 4 K8 K 的记录大小。在 Docker 容器中运行 Jellyfin 服务器时,此配置非常容易实现,因为您可以轻松更改绑定挂载,并为各路径设置合适的数据集。

媒体文件数据集切勿使用 4 K8 K 的记录大小,否则随着数据库规模扩大,您可能会遇到性能问题。

对于存放大型媒体文件的 ZFS 数据集(即不包含 Jellyfin 服务器 SQLite 数据库的数据集),1 M 的记录大小通常能实现最佳性能。

请注意:更改现有 ZFS 数据集的记录大小不会影响其中已有数据,这意味着只有新写入的数据才会体现性能变化。因此,建议将数据重新写入数据集以充分利用记录大小变更的优势;否则配置更改将无法带来预期的性能提升。

由于缺乏合理的 destroy 计划时,ZFS 快照会随时间推移占用大量存储空间,您可能会考虑将数据保留在机械硬盘而非 SSD 上。但请勿使用 ZFS 格式化的机械硬盘存储 Jellyfin 服务器数据(除媒体文件外的所有数据),否则将导致性能低下。强烈建议使用 SSD。