在搭建 Emby 媒体库时,如何既能保持下载整理的自动化,又不占用宝贵的本地磁盘空间?本文将分享一种**“本地瞬间移动 + 外部 Rclone 满速上传”**的进阶方案。
该方案特别适合高性能服务器(如 25 核以上),能够完全压榨硬件性能,且彻底解决 Rclone 挂载带来的缓存堆积问题。
方案逻辑图解
-
MoviePilot (MP):负责下载监控与整理,将文件从下载目录移动到本地中转站。
-
外部脚本:监听中转站,利用 Rclone 命令行模式满速上传。
-
云端存储:文件上传后本地自动删除,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 是校验成功后才删除,流程极其稳健。
希望这篇教程能帮到正在折腾自建媒体库的朋友!如有疑问,欢迎在评论区交流。
