ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

Ludusavi Rclone 云备份指南:把游戏存档安稳上云

Ludusavi Rclone 云备份指南:把游戏存档安稳上云

Ludusavi Rclone 云备份指南:把游戏存档安稳上云

【免费下载链接】ludusaviBackup tool for PC game saves项目地址: https://gitcode.com/GitHub_Trending/lu/ludusavi

一块硬盘损坏,几年的存档进度就可能清零,换盘之后唯一的安慰是云端还留着副本。Ludusavi 的云备份能力正是为这种场景设计的:它通过内置的 Rclone 集成,把本地备份目录与任意云存储保持同步,让每份游戏存档都有一份异地容灾的拷贝。

🚀 快速起步:5 分钟搭好第一套云备份

这一节的目标是让你在半小时内跑通"本地 → 云端"的完整链路,不用理解每一个字段。

前提是系统里已经装好 Rclone,并且你知道它放在哪里(路径要填给 Ludusavi)。

GUI 最短路径,全部发生在 "other" 屏幕:

  1. 填入 Rclone 可执行路径(如C:/opt/rclone.exe);
  2. 在远程下拉框选 Google Drive,完成浏览器里弹出的授权;
  3. 云文件夹保持默认即可;
  4. 回到主界面跑一次 Back up,备份完成后会看到自动上传(自动同步默认开启)。

CLI 最短路径:

ludusavi cloud set google-drive ludusavi cloud upload --force

第一条命令把 Rclone 远程配置写好、顺带完成授权;第二条把本地备份直接推上云端。

同步是怎么跑的:Ludusavi 与 Rclone 各管一摊

第一次上传成功之后,打开引擎盖看看里面发生了什么。

分工很干净:Ludusavi 是"打包工",决定哪些文件进箱——存档识别与打包都由它完成;Rclone 是"搬运工",只管传输、比对与上传。云备份的核心实现在 src/cloud.rs,每次同步实际发出的命令是:

rclone sync -v --use-json-log <本地备份目录> <remote_id>:<云路径>

-v --use-json-log让 Rclone 以 JSON 逐行输出日志,Ludusavi 再把行翻译成三类文件级事件:

  • Copied (new):云端新增的文件,记为"新增";
  • Copied (replaced existing):云端已有但内容不同,记为"差异";
  • Deleted:本地已删除的文件,记为"删除"。

stats行里的bytes/total_bytes数值则驱动进度条。还有两个小约定:远端目录统一写成remote_id:path,路径中的反斜杠会被转成正斜杠;进程退出码为 0 判定成功,而上传时若本地目录不存在(此时 Rclone 返回退出码 3),Ludusavi 会先创建目录再发命令。

配置全景:Ludusavi Rclone 配置一览

这一节把 GUI、配置文件、命令行三套入口的配置项汇在一起,方便按需取用。

GUI "other" 屏幕:最直观的入口

云备份区块包含五类控件:

  • Rclone 可执行路径与全局参数(对应apps.rclone.path/arguments);
  • 远程类型下拉框:None、Custom 与六种预配置服务(Box、Dropbox、Google Drive、OneDrive、FTP、SMB、WebDAV),选中后显示对应的凭据字段——主机、端口、账号密码,WebDAV 另有 URL 与服务商;
  • 云文件夹:云端的目录名,默认ludusavi-backup;
  • 自动同步开关(synchronize):控制备份完成后是否自动上传;
  • 上传 / 下载按钮:随时手动对齐两边数据。

屏幕实时执行两条校验,不满足就标红:remote 未配置时提示cloud not configured;云路径为空或为/时提示cloud path invalid。两条都通过,上传 / 下载按钮才会出现(校验逻辑见 src/gui/screen.rs)。

config.yaml:配置文件里长什么样

配置文件中的相关段落(完整结构见 docs/schema/config.yaml):

apps: rclone: path: "C:/opt/rclone.exe" # Rclone 可执行文件路径 arguments: "--fast-list --ignore-checksum" # 附加到每次 Rclone 调用的全局参数 cloud: path: ludusavi-backup remote: GoogleDrive: id: "ludusavi-1234567890" synchronize: true

带密码的远程(FTP / SMB / WebDAV)其密码字段序列化时会被跳过,从不落盘。remote字段的源码注释(src/resource/config.rs)明确要求经 GUI 或cloud set命令修改:手工改动只会更新 Ludusavi 这一侧的记录,Rclone 配置里的对应远程并没有被创建或删除,两边会就此脱节。

CLI 两条命令链:cloud set 与 upload / download

子命令定义在 src/cli/parse.rs,执行逻辑在 src/cli.rs。配置远程:

ludusavi cloud set none # 关闭云备份 ludusavi cloud set custom --id my-remote # 复用已存在的 Rclone 远程 ludusavi cloud set google-drive # Box / Dropbox / OneDrive 同理 ludusavi cloud set ftp --host ftp.example.com --username alice --password <pass> # 默认端口 21 ludusavi cloud set smb --host nas.example.com --username alice --password <pass> # 默认端口 445 ludusavi cloud set webdav --url https://dav.example.com --username alice --provider nextcloud

WebDAV 的--provider可取other(默认)、nextcloud、owncloud、sharepoint、sharepoint-ntlm,对应 Rclone WebDAV 后端的vendor参数。

手动上传 / 下载与自动同步走的是同一套机制,参数共享:

ludusavi cloud upload [--local <路径>] [--cloud <路径>] [--force] [--preview] [--api] [--gui] [游戏名...] ludusavi cloud download [--local <路径>] [--cloud <路径>] [--force] [--preview] [--api] [--gui] [游戏名...]
参数含义
--local本地备份目录;缺省取配置文件中的backup.path
--cloud云端文件夹;缺省取cloud.path
游戏名...只同步指定游戏,也支持经 stdin 每行一个传入
--preview只预览将发生的变化(即 Rclone 的--dry-run),不动数据
--force跳过确认提示
--api以机器可读 JSON 输出每个文件的同步结果
--gui用 GUI 对话框做提示

各远程类型要填的字段与自动附加的参数对照(逻辑在Remote::config_args(),见 src/cloud.rs):

远程类型需填写的字段写入 Rclone 配置时自动附加的参数
Customid(指向已有远程)无,不写 Rclone 配置
Box / Dropboxid无(走 OAuth 流程)
Google Driveidscope=drive
OneDriveiddrive_type=personal、access_scopes=Files.ReadWrite,offline_access
FTPhost、port、username、passwordhost、port、user、pass
SMBhost、port、username、passwordhost、port、user、pass
WebDAVurl、username、password、providerurl、user、pass、vendor

本地与云端不一致时:Ludusavi 的决策链

这一节讲自动同步背后的判断过程,是整套机制里最容易误解的部分。

开启cloud.synchronize后,每次备份开始时 Ludusavi 会先以上传方向发一次带--dry-run的"侦察"(src/api.rs),量出本地与云端的差距,随后按结果分叉:

  • 侦察无差异:两边本就一致,备份完成后直接上传本次产生的变更;
  • 侦察有差异:说明这次备份开始前两边已经分家,按策略三选一:
策略行为适用场景
Download先把云端拉到本地再开始本次备份,保证mapping.yaml等元数据连贯云端比本地更新、更可信时
Upload先完成本地备份,结尾无条件向云端强推一次已确认本地是唯一可靠来源
默认(未指定方向)云端原样保留,记录cloudConflict需要人工查看差异后自行决定

即便走 Upload 策略,Ludusavi 也只同步"本次备份中确有实际产物的变更游戏",没变化的游戏不占网络。流程中的任何失败(Rclone 不可用、网络异常等)记为cloudSyncFailed,与cloudConflict(表示"有冲突"而非"失败")区分开,

【免费下载链接】ludusaviBackup tool for PC game saves项目地址: https://gitcode.com/GitHub_Trending/lu/ludusavi

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进