Emby:使用Overlayfs优化云盘视频海报/视频列表加载速度

本文最后更新于7 个月前,文中所描述的信息可能已发生改变。

之前的一片文章讲述了如何优化视频流的加载速度,但是另一个问题还没有解决,即在打开emby时海报加载需要多次从云盘下载,拖慢了海报加载速度,并且在加载有大量集数的电视剧/动漫的播放列表的时候较为缓慢。其中以老友记为例,每一季打开后需要等待20-50秒才能完全加载出视频列表。本文将介绍如何使用overlayfs自建缓存,将图片和元数据保存在本地,以提高海报和视频列表的加载速度。

原理分析

OverlayFS,顾名思义是一种堆叠文件系统,可以将多个目录的内容叠加到另一个目录上。其中有三个目录,分别为lower_dir(下层目录,是处于最底层的目录,作为只读层,通过overlayfs挂载后无法被读写)、upper_dir(上层目录,处于最顶层的目录,任何读写的操作都只会在此目录进行)和work_dir(作为缓存目录)。

进程读写overlayfs文件规则:

  1. 当进程“读取”文件时,overlayfs文件系统驱动将优先在上层目录upperdir中查找并从该目录中读取文件,找不到则在下层目录lowerdir中查找。

  2. 当进程"写入"文件时,overlayfs会将其写入上层目录upperdir。

  3. 当进程“删除”文件时,如果upperdir存在此文件则直接删除,如果是lowerdir中的目录则不会真正删除,而是会在upperdir中标注此文件已删除。

至此,根据进程读取文件会优先从上层目录读取的原理,我们只要将云盘中的图片和nfo文件按照目录结构拷贝到本地,作为“上层目录”,并且将云盘挂载到本地的目录作为“下层目录”,即可做到Emby在读取图片和nfo元数据的时候从本地读取,只有在读取视频文件的时候从云盘获取了。这样会大大减少图片和视频列表的加载速度,从最直观的老友记来说,从之前加载视频列表所需要的几十秒,到现在几乎秒加载,体验还是非常不错的。

不过这里有一个问题,如果我们将图片和元数据保留在本地即可大幅度优化加载体验,那为什么不在Emby扫库的时候不勾选**“将媒体图片和资料信息保存到媒体所在文件夹”和“存储nfo文件”**呢?这样的话图片和nfo也将保存在本地,加载速度也会很快。我认为不这么做的理由有几个:

  1. 如果由Emby保存图片和nfo到本地,并不能自定义文件存储位置,并且在对Emby配置进行备份的时候备份包也会非常大;
  2. 如果出现了特殊情况(如Emby配置文件丢失或更改媒体服务器程序)需要重新扫库的时候不需要从头挂削元数据,只需要扫描本地nfo即可。

具体实现

创建Upper_dir用于存储图片和元数据

Rclone在拷贝文件的时候有一个非常好用的参数:--include,所以我们如果只需要加上--include "*.{png,jpg,nfo}"就可以仅拷贝图片和元数据文件。

bash
#创建upper_dir目录
mkdir media_uppper 
#第一次运行建议加上--dry-run确保指令没有出错,同时可以查看图片和nfo总共的文件大小方便分配空间
rclone copy Cloud\ drive:/movie ./media_upper/movie --include "*.{png,jpg,nfo}" -P -v --dry-run
rclone copy Cloud\ drive:/anime ./media_upper/anime --include "*.{png,jpg,nfo}" -P -v --dry-run

挂载overlayfs文件系统

挂载overlayfs文件系统非常简单,仅需一行命令即可:

bash
# lowerdir是云盘的挂载目录,upperdir是上一步创建的文件夹,workdir在任意位置创建一个空文件夹即可,最后加上需要挂载的最终目录。注意确保lowerdir和upperdir文件结构一致!!!
mount -t overlay overlay -o lowerdir=/mnt/drive/anime,upperdir=/root/media_upper/anime,workdir=/tmp/media_overlayfs/anime /media/anime
# 我挂载了第二个目录
mount -t overlay overlay -o lowerdir=/mnt/drive/movie,upperdir=/root/media_upper/movie,workdir=/tmp/media_overlayfs/movie /media/movie

进入最终挂载的目录检查目录结构是否正确,最后将docker挂载的目录更改为通过overlayfs挂载的目录位置即可(我是通过docker部署的emby)。

最后,享受如本地盘的丝滑加载体验,enjoy

Scaleway救援模式救机过程
Windows连接移动硬盘不自动分配盘符
Valaxy v0.18.3 驱动 | 主题 - Yun v0.18.2