在Linux上使用Systemd+Rclone+Backblaze B2同步视频
涉及到的:
- Linux
- Rclone
- Backblaze
- Systemd
需要现在本地配置好rclone,使用rclone config,在backblaze创建/b2 cli创建好对应的bucket
sudo rclone config —— /root/.config/rclone/rclone.conf
rclone config —— /home/jay/.config/rclone/rclone.conf
Systemd文件

首先给出一个简单的mount文件
# /etc/systemd/system/mnt-porn.mount
[Unit]
Description=Mount for /mnt/porn
After=network-online.target
Wants=network-online.target
[Mount]
Type=rclone
What=b2:mount-porn
Where=/mnt/porn
Options=rw,_netdev,allow_other,args2env,vfs-cache-mode=writes,config=/etc/rclone/rclone.conf,cache-dir=/var/rclone
文件名为PATH的/改为.,必须遵守
- _netdev为systemd挂载语义,代表依赖网络挂载,远程存储必须
- allow_other为FUSE参数,rclone使用的就是FUSE,允许非挂载者访问该挂载点,需要先在
/etc/fuse.conf修改 - args2env为systemd专用参数,将Options内参数转化为环境变量,因为rclone参数很多,systemd对参数很严格
config=/etc/rclone/rclone.conf不是rclone的默认配置路径,默认在/home/jay/.config/rclone/rclone.conf
sudo mkdir -p /etc/rclone
sudo cp ~/.config/rclone/rclone.conf /etc/rclone/rclone.conf
After=network-online.target代表需要网络在线,在线后再启动
Wants=network-online.target- 保险起见:
sudo ln -s $(which rclone) /sbin/mount.rclone,验证:ls -l /sbin/mount.rclone
启用.mount文件
- 创建文件:
sudo nano /etc/systemd/system/mnt-porn.mount - 刷新:
sudo systemctl daemon-reload - 挂载:
sudo systemctl start mnt-porn.mount - 验证挂载:
systemctl status mnt-porn.mount

正确创建/mnt下文件夹
systemd 对非 root 持有的挂载点容错更差,让root拥有/mnt/porn,所有人可进,但只有 root 能改结构,allow_other让其他用户可用
sudo mkdir -p /mnt/porn
sudo chown root:root /mnt/porn #(默认为root)
sudo chmod 755 /mnt/porn #(默认为755)Rclone将文件同步到Backblaze

基础命令:rclone sync /mnt/porn b2:mount-porn
注意 :使用 -P / --progress 标志可查看实时传输统计信息
rclone sync 的危险不在参数,而在你不清楚“谁是源”
- 显示传输统计信息,并发传输文件4,并发扫描检验8,--checksum检查变化,包括大小和校验和(如果可用,否则仅使用大小)
一般我网速不快,而且传大视频(GB)--transfers改成1
rclone sync /mnt/porn b2:mount-porn --progress --transfers=4 --checkers=8 --checksum- --immutable只增不减
rclone sync /mnt/porn b2:mount-porn --progress --checksum --immutable
实践
sudo mkdir -p /mnt/videosudo nano /etc/systemd/system/mnt-video.mount
# /etc/systemd/system/mnt-video.mount
[Unit]
Description=Mount for /mnt/video
After=network-online.target
Wants=network-online.target
[Mount]
Type=rclone
What=b2:mount-video
Where=/mnt/video
Options=rw,_netdev,allow_other,args2env,vfs-cache-mode=writes,config=/etc/rclone/rclone.conf,cache-dir=/var/rclonesudo systemctl daemon-reload
sudo systemctl start mnt-video.mount
systemctl status mnt-video.mount


rclone sync /mnt/video b2:mount-video --progress --transfers=4 --checkers=8 --checksum第一次完成同步

在~/media/yt-dlp/下删除三个视频,保持文件结构
find ~/media/yt-dlp -type f -name "*.mp4" -exec rm -f {} +

导出持久的youtube cookies.txt
yt-dlp --js-runtimes node -f "bestvideo[height<=1080]+bestaudio/best[height<=1080]" --merge-output-format mp4 -o "/mnt/video/ytb/%(title)s.%(ext)s" --cookies /home/jay/cli/yt-dlp/cookies.txt "https://youtu.be/CbnC626lSLY?si=U3rwTFYEEFlzpZa6"rclone sync ~/media/yt-dlp b2:mount-video --progress --transfers=4 --checkers=8 --checksum --immutable
使用--immutable或者使用copy,不删除b2有本地没有的文件
rclone copy ~/media/yt-dlp b2:mount-video --progress --transfers=4 --checkers=8 --checksum

最后
我刚刚犯了一个错误,但是已经改过来了
我忘记了我不应该从/mnt/video上传,应该从~/media/yt-dlp上传,然后copy到b2:mount-video然后从/mnt/video tree
我通过rclone sync b2:mount-video ~/media/yt-dlp --progress --transfers=4 --checkers=8 --checksum --immutable 将视频同步了回来,然后放回了~/media/yt-dlp,再删除~/media/yt-dlp下的文件,/mnt/video和b2就都不会有影响了