使用 rclone 将 Synology NAS 备份到 Drime
通过 rclone 官方 Drime 后端,在 Docker 中运行 rclone,并用 DSM 的任务计划定时将 Synology NAS 上的文件夹复制和同步到 Drime。
本指南依据 rclone 和 Synology 的官方文档编写:rclone Drime 后端、在 Docker 中使用 rclone、Synology 任务计划和 Synology SSH。
rclone 提供官方的 Drime 后端,因此 Synology NAS 可以按计划将其文件夹复制到 Drime:rclone 在 NAS 上的 Docker 中运行,由 DSM 的任务计划启动。文件会以普通文件的形式保存到 Drime,您可以打开、分享和下载它们。
目前没有任何一份官方文档完整介绍这套设置:本指南将两方的文档整合在了一起。Drime 不为 rclone 或 DSM 本身提供支持:如需相关帮助,请参阅它们的文档。
#准备工作
一台运行 DSM 7 的 Synology NAS,以及一个管理员账户。
Synology 的 Docker 套件:DSM 7.2 及更高版本为 Container Manager,DSM 7.1 及更早版本为 Docker。
SSH 访问权限(仅当您希望使用 rclone 的交互式配置时需要)。
一个 Drime 账户,且有足够的可用存储空间存放备份内容。
一个 Drime API 令牌,按下一节的步骤创建。
#创建 API 令牌
在 Drime 网页版中,点击您的头像,然后点击设置 > 开发人员。
在 API 访问令牌中,点击创建令牌。
以 NAS 为令牌命名,例如“Synology NAS”,并保留全部权限。
rclone 必须能够上传、列出和删除文件。只读令牌只允许 rclone 下载。

点击创建,复制令牌,然后点击完成。
令牌仅显示一次:请保留它以便下一步使用,或将其存入密码管理器。

令牌的所有选项请参阅创建 API 令牌。
#本指南中的命令
每条命令都按照 rclone 文档所示的方式运行 rclone 的官方 Docker 镜像。请替换其中的大写占位符:
占位符 | 替换为 | 示例 |
|---|---|---|
| NAS 上用于存放 rclone 设置的文件夹 |
|
| 要备份的 NAS 文件夹,或用于存放还原文件的文件夹 |
|
| Drime 中接收备份的文件夹 |
|
| 您的 Drime API 令牌 |
请使用以 /volume 开头的完整 NAS 路径。在 Docker 内部,rclone 会将 CONFIG_FOLDER 视为 /config/rclone,将 NAS_FOLDER 视为 /data。
#在 NAS 上配置 rclone
#使用 Container Manager,不使用 SSH
在 DSM 中,打开 Control Panel(控制面板)> Task Scheduler(任务计划)。
点击 Create(创建),然后点击 Scheduled Task(计划任务)> User-defined script(用户自定义脚本)。
为任务命名,例如“rclone 配置”,并选择 root 用户。
在 Task Settings(任务设置)中,将配置命令粘贴到 Run command(运行命令)下。
docker run --rm \ --volume CONFIG_FOLDER:/config/rclone \ --user $(id -u):$(id -g) \ rclone/rclone \ config create drime drime access_token YOUR_API_TOKEN该命令会下载 rclone 的官方镜像,并创建一个名为
drime的远程存储。保存任务,在列表中选中它,然后点击 Run(运行)。
完成后请删除该任务:任务中包含您的令牌。
#使用 SSH
如果您希望使用 rclone 的交互式配置:
在 DSM 中,打开 Control Panel > Terminal & SNMP(终端机和 SNMP)> Terminal(终端机),然后勾选 Enable SSH service(启用 SSH 服务)。
Synology 提示,启用 SSH 可能会带来安全风险:完成后请将其关闭。
在您的电脑上通过 SSH 连接到 NAS,然后运行
sudo -i。通过 SSH 登录需要使用本地管理员组(administrators)中的账户,并且
sudo -i会要求输入该账户的密码。启动 rclone 的交互式配置。
docker run --rm -it \ --volume CONFIG_FOLDER:/config/rclone \ --user $(id -u):$(id -g) \ rclone/rclone \ config回答 rclone 的问题,创建
drime远程存储。输入
n新建远程存储,名称输入drime,存储类型输入drime,然后在access_token处粘贴您的 API 令牌。
如需检查配置,将同一命令中的 config 替换为 listremotes 后运行,结果中应会列出 drime:。
#首次复制
请先使用 rclone copy:它只会向 Drime 添加文件,绝不会删除 Drime 中的任何内容。按照上述方法创建任务,选择 root 用户,并使用以下命令:
docker run --rm \
--volume CONFIG_FOLDER:/config/rclone \
--volume NAS_FOLDER:/data:shared \
--user $(id -u):$(id -g) \
rclone/rclone \
copy /data drime:DRIME_FOLDER运行该任务,然后在 Drime 中检查结果。
#使用 sync 让 Drime 保持同步
rclone sync 会让 Drime 文件夹与 NAS 文件夹保持一致。
运行一次以下命令,并查看任务的输出:
docker run --rm \
--volume CONFIG_FOLDER:/config/rclone \
--volume NAS_FOLDER:/data:shared \
--user $(id -u):$(id -g) \
rclone/rclone \
sync /data drime:DRIME_FOLDER --dry-run确认列表符合预期后,删除 --dry-run。rclone 在 Drime 中删除的文件会移至您的 Drime 垃圾桶;使用 rclone 的高级选项 hard_delete 则会将其永久删除。
#定时备份
在 Control Panel > Task Scheduler 中,使用 root 用户创建一个 Scheduled Task。
选择 User-defined script。
在 Schedule(计划)标签页中,选择运行的日期和时间,例如每天晚上。
在 Task Settings 中,将您的
copy或sync命令粘贴到 Run command 下。您还可以让 DSM 通过邮件向您发送运行详情,或仅在脚本异常终止时发送。
#在 Drime 中检查您的文件
打开 Drime 网页版:DRIME_FOLDER 中保存着您的文件,文件名与原来相同。与其他文件一样,它们会占用您的 Drime 存储空间。
补充说明(来自 rclone 的 Drime 文档):
按大小检测更改:Drime 不向 rclone 提供修改时间或哈希值,因此编辑后大小未变的文件不会被再次复制。
文件名最长可达 255 字节(UTF-8 编码)。
工作区:使用 rclone 的高级选项
workspace_id,可将备份发送到某个工作区,而不是您自己的文件中。rclone 输出中的时间为 UTC 时间:除非设置了 rclone 容器的
TZ变量,否则容器使用 UTC。
#还原文件
使用 rclone copy 反向操作,将文件从 Drime 复制回来。请使用 NAS 上的一个空文件夹作为 NAS_FOLDER,例如 /volume1/restore:
docker run --rm \
--volume CONFIG_FOLDER:/config/rclone \
--volume NAS_FOLDER:/data:shared \
--user $(id -u):$(id -g) \
rclone/rclone \
copy drime:DRIME_FOLDER /data您也可以在 Drime 网页版中下载单个文件。
#遇到问题时
您看到的情况 | 处理方法 |
|---|---|
rclone 提示在其配置文件中找不到 | 该命令使用的 |
rclone 找不到 |
|
任务一开始就因 Docker 错误而失败 | 请检查是否已安装 Container Manager(DSM 7.1 上为 Docker),以及任务是否以 root 身份运行。 |
rclone 无法再连接到 Drime | 令牌可能已被删除或撤销:此时 Drime API 会返回 |
rclone 可以列出和下载,但无法上传 | 令牌可能为只读。请创建全部令牌,然后用同样的方法( |
存储空间快满时上传失败 | 您的 Drime 存储空间可能已满。请参阅查看并释放存储空间。运行 |
您的 Drime 账户开启了双重验证 | 无需任何更改:rclone 使用的是 API 令牌,而不是您的密码。 |
文件名很长的文件没有被复制 | 该文件名超过了 255 字节。请在 NAS 上缩短文件名。 |
#后续步骤
这篇文章对您有帮助吗?