最近更新: 2026-07-08
你在一台服务器上有一个很大的文件夹——几十 GB——想在另一台上得到一份完整副本。你没法盯着终端好几个小时,而且传到一半断掉的传输不应该从头再来。relayium sync 正是为此而生:一个单向增量镜像,跳过已经存在的文件,把传了一半的文件从中断处续传,并对每个文件做端到端校验。
本指南搭建一个无人值守、自动恢复的传输:把发送方授权一次,让监听端在后台运行,并在 tmux 里用重试循环驱动 relayium sync,让它在掉线之后继续跑,直到整个文件夹全部到达。
sync 是走原生协议的单向增量镜像(两端都要装 relayium)。有三个特性让它可以安心地无人值守地反复运行:
两端服务器都要装 relayium(sync 走原生协议,因此每一端都必须有):
# on BOTH servers
curl -fsSL https://relayium.com/install.sh | sh
接收方对发送的那台机器授权一次;授权会写入磁盘并在重启之间保持有效,因此你无需重复。先在终端里前台启动监听端,并把 --dir 指向父目录——relayium sync /root/workspace 会在接收方重建出 workspace/...,所以 --dir /root 会把文件落到 /root/workspace/。
当发送方首次连接时(见下一节),serve 会显示它的地址和指纹并请你批准;回答 y,它就会被永久记住:
# on the RECEIVER (foreground, to approve interactively)
relayium serve --dir /root --port 9031
# on the RECEIVER, at the first connection:
Incoming push from 203.0.113.9:52140
fingerprint: 9f2c41ab…
Accept and remember this peer? [y/N] y
指纹授权之后,停掉前台的 serve(Ctrl-C),再以脱离终端的方式重新启动,让它在你退出登录后依然存活。它会读回已保存的指纹并静默接受发送方——这次不再提示:
# on the RECEIVER
nohup relayium serve --dir /root --port 9031 > ~/relayium-serve.log 2>&1 &
长时间的传输总会被打断——会话断开、网络抖动、机器重启。解决办法不是什么高级工具,而是一个把 sync 反复重跑到成功为止的循环,再加一个终端复用器让它在你退出登录后存活。这里 tmux 比 nohup 更省心:没有容易写错的输出重定向,而且可以重新接入查看进度。
开一个 tmux 会话,然后在 until 循环里运行镜像——它每 10 秒重试一次,直到 sync 成功返回,然后自己退出:
# on the SENDER
tmux new -s xfer # apt install -y tmux if it's missing
until relayium sync /root/workspace relayium://203.0.113.43:9031; do echo "$(date) retrying"; sleep 10; done
当 until 循环结束、你回到普通的 shell 提示符时,传输就完成了。确认两边一致,然后停掉监听端:
# compare totals on BOTH servers
du -sh /root/workspace
# on the RECEIVER, once verified
pkill -f 'relayium serve'
有几件事看起来像问题,但通常并不是——以及一个通常确实是问题的(端口被挡)。
什么都不会丢。重新运行 relayium sync——它会跳过接收方已有的文件,并把传了一半的文件从磁盘上已有的字节偏移续传。本指南里的 until 循环会自动做这件事,直到整个文件夹镜像完成。
两者都做增量单向镜像,但 relayium sync 走锁定的 TLS 连接、不需要 SSH 账号(守护进程直连),通过证书指纹互相认证两台机器,并对每个文件做 SHA-256 校验。它和 relayium 其它模式用的是同一个传输引擎。
只有你要求时才会。默认情况下 sync 只新增和更新。加 --delete 才会镜像删除,而且接收方必须以 --allow-delete 运行 serve 才会执行——否则删除会被忽略并回报给你。
可以。加 --watch,sync 会持续运行,在源目录下任何改动时重新镜像。对于一次性搬运一个大文件夹,你不需要它——重试循环加一个普通的 sync 就够了。
用守护进程直连的话,是的——监听端口(默认 9031)必须能从发送方访问到。如果你不想开端口、而且两台服务器之间已经有 SSH,sync 也可以走 SSH:relayium sync /path user@host:/path(远端必须装了 relayium)。
在你自己的两台服务器之间镜像一个文件夹——增量、可续传、无需盯守。
获取 CLI