存储方案
本页面由 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 并非万能解决方案,详见适用场景说明。
- rclone 推荐配置方案
要检查或调整 mergerfs 挂载配置,可参考此快捷操作指南
文件系统注意事项
对于特定文件系统,强烈建议进行优化以获得可接受的性能。
ZFS
尽管 Jellyfin 正在开发更多数据库支持选项,但在当前实现中,数据库仍使用 SQLite。ZFS 默认记录大小为 128 K,这对 SQLite 数据库并非最佳配置。
理想情况下,应在存放 Jellyfin 服务器 SQLite 数据库的数据集上使用 4 K 或 8 K 的记录大小。在 Docker 容器中运行 Jellyfin 服务器时,此配置非常容易实现,因为您可以轻松更改绑定挂载,并为各路径设置合适的数据集。
媒体文件数据集切勿使用 4 K 或 8 K 的记录大小,否则随着数据库规模扩大,您可能会遇到性能问题。
对于存放大型媒体文件的 ZFS 数据集(即不包含 Jellyfin 服务器 SQLite 数据库的数据集),1 M 的记录大小通常能实现最佳性能。
请注意:更改现有 ZFS 数据集的记录大小不会影响其中已有数据,这意味着只有新写入的数据才会体现性能变化。因此,建议将数据重新写入数据集以充分利用记录大小变更的优势;否则配置更改将无法带来预期的性能提升。
由于缺乏合理的 destroy 计划时,ZFS 快照会随时间推移占用大量存储空间,您可能会考虑将数据保留在机械硬盘而非 SSD 上。但请勿使用 ZFS 格式化的机械硬盘存储 Jellyfin 服务器数据(除媒体文件外的所有数据),否则将导致性能低下。强烈建议使用 SSD。