夜雨聆风学习资料网

ARTICLE · 1180748

两台电脑持久同步文件,不占我的 iCloud 空间

两台电脑持久同步文件,不占我的 iCloud 空间
像素李的AI笔记 / 实测记录

Mac mini 作为个人服务器,非常适合做文件同步与备份的工作。既做了iCloud的活,又省了订阅费,还有更精细的权限控制。

我的 mbp 在征战几年后,存储空间开始逐渐吃紧了,经常只剩 100GB 不到,我总需要分神清理空间。iCloud+ 虽然好,但毕竟不是免费的,免费版的 5GB 基本就不能存东西用,而且偶尔也有抽风的时候。正好最近我入了一台个人服务器 Mac mini,它就可以作为我和家里 NAS 的桥梁存在了。Syncthing 刚好可以帮我做到无感同步。这篇记录一下这套安排,以及部署记录里留下的几个问题,如果你也有一台 7x24 小时持续运行的本地个人服务器,文件同步是非常适合它做的。

01我的硬件环境

  • MacBook Pro m2 max
  • Mac mini m5 pro
  • 群晖 DS423+

02一句话结论

同步不是备份。 同步负责「两边一样」,备份负责「删了还在」。把两件事拆开设计,才能管理好。

03我的需求

视频备份

我有2个大文件夹,分别存着视频工程文件和成品 mp4,之前总要不定期导出到 NAS。

但工程文件很细碎,且有特殊符号,必须要压缩成 zip 才能备份。而且备份到 NAS 后,以后万一想拿来改,也需要苦等好一阵子(因为传输速度太慢)。

Obsidian 三端互通

Obsidian 如今是我的主力协作工具,它目前保存在我的 iCloud 上,可以在 mbp 和 iPhone 里分别打开和同步管理。但当 mini 介入后,有时候的文章需要从 mini 更新,而 mini 又没登 Apple 账户,就导致无法和 mbp 与 iPhone 同步。

基于这些需求,我就引入了 Syncthing。

04为什么选 Syncthing

一开始手写了一个 rsync + launchd 的脚本,常规场景能跑,但回头细看有几处补不齐的短板:

  • 大文件传一半断了只能从头来——几 GB 的视频很伤
  • 判断「导出完成没有」只能靠猜(比如 2 分钟内没写入)
  • 失败只写日志,人不会知道
  • (最重要的)难以管理。脚本运行在后台,我哪天想改,只能再交给大模型重新理解任务

Syncthing 这些都是现成的:分块校验、断点续传、先写临时文件校验后才落地、有网页面板看状态。

MBP 上的 Syncthing 主界面

同一截图局部:4个文件夹与 mini 均显示最新

其他候选也想过:

  • iCloud+
    :服务器账户要登录 Apple ID,破坏半径太大;「优化存储」还会把文件变成占位符;而且最主要的是要订阅费
  • 群晖 Drive
    :NAS 变成中转站,多绕一次,而且它是机械硬盘,速度有限
  • Resilio
    :闭源,没必要

05三种同步形态

形态
配置
用在哪
单向镜像
源端“仅发送” → 目标端“仅接收”
视频工程文件、成品 MP4:mini 只存不改
只读库 + 写入区
整库单向;嵌套一个子目录双向
本库:agent 读全部,只在 Agent-Mini/ 写入
桥接
一台机器同时在两套同步里
MBP 同时连 iCloud 和 Syncthing,把 iPhone 的改动转给 mini

嵌套文件夹的要点:外层的忽略规则必须排除内层路径,而且两端都要写,否则内层内容会被外层重复同步。

06分层归档:让删除变得没有顾虑

对于视频源文件和成品 mp4,我采用的是如下方案:

  1. mbp 作为主力生产机,日常视频项目都在这里完成。2个大文件夹也是在这里写入和更新的;
  2. mini 接入 syncthing 实时读取这2个文件夹,做好日常备份;
  3. mini 会定期和 NAS 互联,做好归档工作;
  4. Hermes / 微信 / 飞书 / Bark 可以定期接收归档通知和删除建议;
  5. mbp 在存储吃紧的时候,或者收到可删除信息通知的时候,就可以删掉已备份过的文件。删除的时候也不怕影响备份。

如此做到无感同步和归档,清理 mbp 的空间时也有迹可循。

具体策略如下:

  1. 镜像
    (实时):Syncthing 从 mbp 自动传到 mini,删除物进回收站保留 30 天
  2. 本机归档
    (每日):一个项目稳定满 7 天没改才归档——7 天内被删的废弃版本,或者正在工作中的项目自然不进存档
  3. NAS 归档
    (每周):只传新增,逐字节校验通过才算数
  4. 冷备份
    (每月):NAS 自己拷到移动硬盘,不经网络

再配一个信号:每周推一份「mini 与 NAS 都有了,MBP 上可放心删除」的清单。有了这个清单,删东西才真的「无感」。

几个细节:

  • 工程文件打成 tar:移动硬盘是 exFAT,存不了符号链接,而 FCPX 引用库外素材靠的正是符号链接;几万个小文件变成一个大文件,对机械盘也友好
  • 靠账本决定传什么,从不扫描目标盘——少读一次盘,就少一次磨损
  • 每月滚动复核:最久没查过的优先,限时完成,逐步覆盖全部

07Obsidian 文档同步

这个就简单很多,Obsidian 自己的根目录保存在 iCloud 上,里面专门新建了一个子文件夹 Agent-Mini/,在 mini 的 Syncthing 中配置的时候,要把根目录配置成只读(仅接收)权限,子文件夹 Agent-Mini/ 可以读写。这样它既可以读取我的所有文章笔记,又能在固定的工作空间更新笔记,并最终在 iCloud 同步到 mbp 和 iPhone 供我实时查看。mini 端的具体配置如下:

本机目录
同步权限
忽略规则(.stignore 有效项)
~/Obsidian/<笔记库>/
仅接收(receiveonly)
/Agent-Mini
.obsidian/workspace.json.obsidian/workspace-mobile.json.trash(?d).DS_Store(?d)._*(?d).*.icloud
~/Obsidian/<笔记库>/Agent-Mini/
发送与接收(sendreceive)
(?d).DS_Store
(?d)._*(?d).*.icloud

mini 根库:仅接收(Receive Only)

Agent-Mini:发送与接收

外层忽略规则,包含 /Agent-Mini

08值得记住的

  1. Mac 上的 Syncthing app 自带程序
    ——别再用 brew services 启一个,会抢端口;记得勾「登录时启动」
  2. mbp 和 mini 上的 Syncthing 记得开机自启,mini 作为服务器,也要把该服务纳入日常巡检(当然肯定是脚本自动完成并通知)
  3. NAS 的计划任务和 mini 结合,并通过有线方式传输,速度会又快又稳定

09安全边界

  • 服务器账户不登录 Apple ID,不给管理员权限——它会读网页、消息这类不可信内容
  • 关掉 Syncthing 的全局发现和公共中继,只走局域网和 Tailscale,文件不经第三方
  • NAS 的同步和传输保持约定好的低权限连接,具体任务由 NAS 计划任务和 mini 联动,并通过有线方式传输,速度又快又稳定。

10写在最后

文件同步这种工作非常适合交给本地服务器。如果你有相关需求,或者对本地服务器可以跑的服务有什么心得或者建议,欢迎在下方留言。

像素李的AI笔记

做视频、写代码,也玩音乐。记录把 AI 用进工作和生活的过程。

相关学习资料