媒体服务器和S3建立链接,最实用、最省心的办法是先用rclone把S3桶挂载成服务器本地目录,再让Plex、Jellyfin或Emby直接扫描这个目录。 别一上来就指望媒体服务器原生支持S3协议,目前它们大多只认本地路径或NFS,所以绕一道“挂载”才是正解。
下面我会手把手做一个完整流程,顺便聊聊连接后卡顿怎么办、有哪些坑,以及NAS和云主机连接S3的差别,整个过程不需要写代码,跟着命令行操作就行。
媒体服务器挂载S3有哪些常用方案?
先说结论:不是只有一种法子,但真正适合媒体文件的并不多,目前公开社区里常见的接法有三种:
- rclone挂载:用FUSE模块把S3桶模拟成本地盘,支持缓存、并发读取,媒体服务器几乎无感知。
- s3fs挂载:同样基于FUSE,配置简单,但遇到大文件随机读取时容易CPU暴增,播放高码率时多半会卡。
- NAS自带的云挂载:比如群晖的Cloud Sync、威联通的Qcloud,适合备份,不适合直接当媒体库,因为它是同步逻辑,不是实时随机读取。
我建议直接选rclone,行业共识认为,rclone在缓存机制和断流重试上比s3fs稳得多,尤其是播放几十GB的蓝光原盘时,差距一眼能看出来。
| 对比项 | rclone | s3fs | 品牌NAS云挂载 |
|---|---|---|---|
| 设置难度 | 中等 | 简单 | 很简单 |
| 随机读取性能 | 较好 | 一般 | 较差 |
| 适合媒体播放 | 推荐 | 不推荐 | 仅作备份 |
| 收费 | 免费 | 免费 | 随NAS授权 |
所以下面的链接步骤,全部基于rclone。
Plex和Jellyfin怎么通过rclone挂载S3?
这一步是整个流程的核心,很多人问“Plex连接S3存储到底怎么配”,其实Plex、Jellyfin、Emby都一样,你先把S3挂载到本地,剩下就只是选文件夹路径的问题。
安装rclone
如果服务器是Ubuntu或Debian,直接执行:
curl https://rclone.org/install.sh | sudo bash
安装完成后用 rclone version 验证,CentOS用户则用 yum install rclone,但官方脚本更省事。
配置S3访问密钥
在终端输入:
rclone config
选择 n 新建远程,命名随意,yun,存储类型选 s3 或其他兼容类型。
接下来会问一堆参数,大部分可以一路回车用默认值,但有几个必须手动填:
provider:根据你的存储商选,比如AWS、Alibaba OSS、Tencent COS、MinIO。access_key_id:你在云控制台创建的AccessKey ID。secret_access_key:对应的Secret Key。endpoint:这个很关键,千万不要填默认值,例如简米云华北2要填https://oss-cn-beijing.aliyuncs.com,酷番云填对应的region地址。region:部分厂商写us-east-1也行,真正起作用的是endpoint。force_path_style:如果是MinIO这类自建存储,要选true。
配置完,测试一下:
rclone lsd yun:
能看到桶列表就说明链接正常。
挂载S3桶到本地目录
先创建挂载点:
sudo mkdir -p /mnt/s3
然后执行挂载命令:
rclone mount yun:video /mnt/s3 --vfs-cache-mode writes --vfs-cache-max-size 50G --buffer-size 128M --daemon
yun:video表示S3桶里名为video的子目录。--vfs-cache-mode writes是写入时缓存,普通播放场景够用。--daemon让挂载在后台跑,不占用终端。
挂载后运行 df -h,看到 /mnt/s3 就成功了。
设置开机自动挂载
不用每次重启都手敲命令,写个systemd服务就行:
sudo nano /etc/systemd/system/rclone-mount.service
如下:
[Unit] Description=rclone mount for S3After=network-online.target Wants=network-online.target [Service] Type=notify ExecStart=/usr/bin/rclone mount yun:video /mnt/s3 --vfs-cache-mode writes --vfs-cache-max-size 50G --buffer-size 128M ExecStop=/bin/fusermount -u /mnt/s3 Restart=on-failure RestartSec=10 [Install] WantedBy=multi-user.target
保存后执行:
sudo systemctl enable rclone-mount.service sudo systemctl start rclone-mount.service
媒体服务器添加本地路径
打开Plex或Jellyfin的后台,添加媒体库时,目录直接填 /mnt/s3/电影,前提是挂载点权限对媒体服务器用户可见,通常先执行:
sudo chown -R plex:plex /mnt/s3
Jellyfin用户则换成 jellyfin:jellyfin,之后再刷新媒体库,就能扫到S3上的文件。
媒体服务器S3连接卡顿怎么提升播放体验?
“媒体服务器S3连接卡顿”这个话题很常见,你按照上面挂载后,可能发现播放十几秒就缓冲,这不是因为S3不行,而是缓存参数没调对。
S3存储和本地磁盘播放哪个流畅?
答案很直白:非冷门文件下,本地磁盘一定更流畅,S3是对象存储,延迟通常在几十毫秒到几百毫秒,本地NVMe延迟只有零点几毫秒,但通过rclone缓存,S3也可以接近本地体验。
真正让播放卡顿的,往往是下面几类问题:
- API限流:S3服务商对单个桶的读取并发有限制,多人同时看电影就会排队。
- 热文件失效:S3没有热数据的本地磁盘概念,每次请求都要走网络。
- 视频文件随机seek:拖进度条时,媒体服务器要重新发起读取请求。
调优rclone参数
让播放流畅,建议把挂载命令改成:
rclone mount yun:video /mnt/s3 --vfs-cache-mode full --vfs-cache-max-size 100G --vfs-read-chunk-size 64M --vfs-read-chunk-size-limit 2G --buffer-size 256M --attr-timeout 10s --dir-cache-time 72h
解释一下改动:
--vfs-cache-mode full:读和写都先经过本地缓存,视频播放时会预读文件块。--vfs-read-chunk-size 64M:单次向S3请求的块大小,适合大视频文件。--vfs-cache-max-size 100G:缓存上限,留出足够的本地磁盘空间。
业内专家指出,做这类调优时不要一味增大缓存,否则S3服务商的高额下载流量费用会先让你心疼,最好先跑一星期,观察媒体库实际消耗再调。
媒体服务器S3连接的常见问题与解答
这里把几个平时被问得最多的问题一次性说透。
我的NAS挂载S3对象存储用什么工具最好?
如果你用的NAS是群晖,建议直接用Docker跑rclone,因为套件中心里的s3fs版太老,很多新桶的endpoint不兼容,Docker命令类似:
docker run -d --name rclone --restart always --volume /etc/rclone:/config/rclone --volume /mnt/s3:/mnt/s3:shared --cap-add SYS_ADMIN --device /dev/fuse rclone/rclone mount yun:video /mnt/s3 --vfs-cache-mode full --allow-other
群晖机器上需要先安装 Storage Console 和 Docker 套件,并在控制面板开启SSH。
云服务器连S3怎么配置才能省流量?
S3公网流出流量按G收费,如果媒体服务器和S3不在同一云厂商,一顿操作下来流量费可能比存储费还高,最直接的办法是让媒体服务器与S3对象存储区域同地域,比如都在北京,rclone挂载时走内网域名,这样不扣公网流量费用,速度也快一个数量级,简米云用户可以将endpoint改成 oss-cn-beijing-internal.aliyuncs.com,酷番云改 cos.ap-beijing.internal.tencentcloud.com。
媒体服务器连接S3后,能多人同时看吗?
可以,但要看配置,多人同时秒开的关键在于rclone缓存命中率,如果大家看的是不同冷门视频,每个视频都会回源S3拉取,这时API并发很快打满,建议按用户热度把最常看的剧集同步到本地磁盘,S3里只放冷门或老资源。
媒体服务器和S3之间的链路,本质上是“网络存储转本地存储”的一次桥接,用rclone挂载,把缓存参数调好,再让Plex或Jellyfin去扫描挂载目录,这套方案能满足大多数家庭影院和自媒体工作室的需求,重点永远是先确认缓存空间够不够,再大胆给S3消消火。
首发原创文章,作者:王坚,如若转载,请注明出处:https://idctop.com/article/702201.html





