内容提要
作者开发了 aliyundrive-fuse,通过 FUSE 将阿里云盘挂载为本地只读文件系统,省去 rclone 中间层,使 Jellyfin 等媒体软件可直接读取云盘。由于 FUSE 单次读请求较小,采用约 10MB 缓存以避免频繁网络请求,播放基本流畅。文中还介绍了用 pip 安装、获取 refresh token 并挂载,以及将挂载目录映射进 Docker 版 Jellyfin 容器并添加媒体库的步骤。
延伸解读
为何选择 FUSE 而非 WebDAV 插件
作者曾考虑为 Jellyfin 编写 WebDAV 插件,但需要学习 C# 和 Jellyfin 插件接口,成本较高。相比之下,利用 Linux/macOS 的 FUSE 机制和 Rust 的 fuser 库,直接实现只读文件系统,省去了 rclone 中间层,让 Jellyfin 像访问本地磁盘一样读取云盘。这种方案对不熟悉 Jellyfin 插件开发的用户更直接,但前提是系统支持 FUSE。
10MB 缓存带来的流畅与卡顿权衡
FUSE 单次读请求较小(Linux 最大 128KB),若每次读取都发起网络请求会严重影响性能。作者采用约 10MB 的缓存来减少请求次数,从而保障读取速度。但缓存未命中时需等待 10MB 数据下载完成,可能导致视频串流偶尔卡顿。实际体验中,播放器预读后续内容可缓解此问题,配合 Jellyfin 使用基本流畅。
部署要点:挂载与容器映射
使用前需通过阿里云盘网页版获取 refresh token,并用 pip 安装 aliyundrive-fuse。挂载时指定 refresh token 和挂载点(如 /mnt/aliyundrive)。对于 Docker 版 Jellyfin,需将挂载目录通过 -v 参数映射到容器内(如 /media),再在 Jellyfin 控制台添加媒体库并指向该路径。扫描完成后即可使用。
Q&A
aliyundrive-fuse 是什么?它和之前的 aliyundrive-webdav 方案有什么区别?
aliyundrive-fuse 是一个通过 FUSE 将阿里云盘挂载为本地只读文件系统的工具,使 Jellyfin 等媒体软件能直接读取云盘内容。相比之前 aliyundrive-webdav 配合 rclone 的方案,它省去了 rclone 中间层,简化了架构。
为什么 aliyundrive-fuse 需要设置约 10MB 的缓存?
因为 FUSE 文件系统单次读请求较小(Linux 上最大 128KB),对于需要网络请求下载数据的场景会导致频繁请求,所以缓存约 10MB 数据来避免每次读取都发起网络请求,保障读取速度。
使用 aliyundrive-fuse 播放视频时会出现卡顿吗?
可能会偶尔出现卡顿,因为缓存一次要下载 10MB 数据,读取未缓存位置时需要等待网络传输完成。但只要播放器提前下载后续内容,配合 Jellyfin 使用整体还是挺流畅的,没有明显问题。
如何安装和挂载 aliyundrive-fuse?
可以通过 pip 安装:pip install aliyundrive-fuse。安装后从阿里云盘网页版获取 refresh token,然后执行挂载命令,例如:aliyundrive-fuse -r your-refresh-token -w /etc/aliyundrive-fuse /mnt/aliyundrive(需提前创建目录)。
怎样将阿里云盘挂载目录映射到 Docker 版 Jellyfin 容器中?
在运行 Jellyfin 容器时,添加 -v /mnt/aliyundrive:/media 参数,将宿主机的挂载目录映射到容器的 /media 路径。例如:docker run -d --name jellyfin ... -v /mnt/aliyundrive:/media ... jellyfin/jellyfin。
在 Jellyfin 中如何添加阿里云盘上的媒体库?
访问 Jellyfin 容器的 8096 端口进入控制台,在媒体库设置中将文件夹位置选择为挂载好的阿里云盘目录(容器内的 /media),等待扫描完成即可使用。