MoviePilot + Rclone + Emby 高阶方案:零磁盘残留、极速上传自动化指南

在搭建 Emby 媒体库时,如何既能保持下载整理的自动化,又不占用宝贵的本地磁盘空间?本文将分享一种**“本地瞬间移动 + 外部 Rclone 满速上传”**的进阶方案。

该方案特别适合高性能服务器(如 25 核以上),能够完全压榨硬件性能,且彻底解决 Rclone 挂载带来的缓存堆积问题。


方案逻辑图解

  1. MoviePilot (MP):负责下载监控与整理,将文件从下载目录移动到本地中转站。

  2. 外部脚本:监听中转站,利用 Rclone 命令行模式满速上传

  3. 云端存储:文件上传后本地自动删除,Emby 通过 Rclone 只读挂载读取。


第一步:MoviePilot 核心设置

首先,我们需要让 MoviePilot 将整理后的文件存放在本地硬盘,而不是直接写入网盘挂载点,以确保“移动”操作是秒完成的。

  • 转移方式:选择 “移动 (Move)”

  • 目的地目录:设置一个本地路径(例如:/mnt/local/media_staging)。

  • 内置 Rclone关闭 MP 的内置 Rclone 上传功能。

注意:确保下载目录和目的地目录在同一个物理磁盘分区,这样“移动”操作不产生磁盘 IO 压力。


第二步:创建高性能上传脚本

由于 MP 内置 Rclone 线程有限,我们编写一个外部脚本,针对高性能 CPU(25核)进行调优。

创建脚本文件:vim /home/scripts/mp_upload.sh


#!/bin/bash

# ================= 配置区域 =================
SOURCE_DIR="/home/zzmedia"
REMOTE_NAME="GDrive"                    # 远程配置名
REMOTE_PATH="Media"                     # 目的地文件夹(不带斜杠)
CONFIG_FILE="/root/.config/rclone/rclone.conf"
LOG_FILE="/var/log/rclone_upload.log"
LOCK_FILE="/tmp/rclone_upload.lock"
# ===========================================

# 确保日志文件存在
touch "$LOG_FILE"

(
  # 锁文件路径也必须加双引号,防止路径中有空格
  flock -n 200 || exit 1

  # 执行 25 核高性能优化上传
  # 语法解释:"${REMOTE_NAME}:${REMOTE_PATH}" 会被解析为 "GDrive:Media"
  rclone move "$SOURCE_DIR" ${REMOTE_NAME}:"${REMOTE_PATH}" \
    --config "$CONFIG_FILE" \
    --min-age 2m \
    --transfers 16 \
    --checkers 32 \
    --drive-chunk-size 128M \
    --buffer-size 512M \
    --multi-thread-streams 6 \
    --multi-thread-cutoff 256M \
    --use-mmap \
    --fast-list \
    --delete-empty-src-dirs \
    --ignore-errors \
    --log-file "$LOG_FILE" \
    -v

) 200> "$LOCK_FILE"

第三步:部署 Systemd 自动化管理

使用 Systemd 代替 Crontab,可以实现更精细的状态监控。

1. 创建 Service 服务

vim /etc/systemd/system/rclone-upload.service


[Unit]
Description=MoviePilot Rclone Upload Service
After=network.target

[Service]
Type=oneshot
ExecStart=/bin/bash /home/scripts/mp_upload.sh
User=root

2. 创建 Timer 定时器(每5分钟运行)

vim /etc/systemd/system/rclone-upload.timer


[Unit]
Description=Run Rclone Upload every 5 minutes

[Timer]
OnBootSec=1min
OnUnitActiveSec=5min
Persistent=true

[Install]
WantedBy=timers.target

第四步:常用管理命令

配置完成后,使用以下命令启动自动化流程:


# 重载配置
systemctl daemon-reload

# 启动并设置开机自启
systemctl enable --now rclone-upload.timer

# --- 运维常用命令 ---
# 1. 立即手动触发上传
systemctl start rclone-upload.service

# 2. 查看下一次运行时间
systemctl list-timers rclone-upload.timer

# 3. 实时监控上传日志
journalctl -u rclone-upload.service -f

方案总结

为什么选择这种方式?

  • 零缓存残留:由于不使用 rclone mount 写入,彻底告别 VFS 缓存占满硬盘的烦恼。

  • 性能最大化:手动设置 16-24 个并行线程,充分利用 25 核 CPU 的算力。

  • 原子化操作:MP 的本地移动是瞬间的,Rclone 的 move 是校验成功后才删除,流程极其稳健。


希望这篇教程能帮到正在折腾自建媒体库的朋友!如有疑问,欢迎在评论区交流。

点赞

发表回复

电子邮件地址不会被公开。必填项已用 * 标注

×
订阅图标按钮