周五下午,团队里负责发版的同事在群里问了一句:"我们那台按月租的 Mac mini 下周三就到期了,里面的证书、模拟器数据和 Homebrew 缓存怎么办?"没人能立刻回答完整清单——这就是典型的迁出翻车前兆。云端 Mac mini 用起来顺手,但很多状态是"用的时候忘了它在哪",真到收尾那天才发现散落在十几个目录里。
为什么租期结束前的迁出常常翻车
多数人对"迁出"的理解停留在"把项目文件夹拷回本地",但真正卡住构建的往往是隐藏配置:~/.ssh 里签发过的部署密钥、Keychain 里的发行证书、~/Library/Developer/Xcode/DerivedData 里的增量构建索引、以及各种工具在用户目录下悄悄写的缓存路径。这些东西平时不显眼,一旦机器到期释放,就再也拿不回来。
迁出不是"备份文件",是"复现一台能立刻工作的机器"。判断标准不是"文件拷完了没",而是"新机器上跑一次构建,产物和旧机器一致吗"。
迁出前的资产清单:哪些东西必须带走
先把要带走的东西分成两类,分类本身就能减少遗漏。
开发环境配置
包括 shell 配置(.zshrc/.zprofile)、SSH 密钥与 known_hosts、Git 全局配置与凭据、Xcode 签名证书与描述文件、以及通过 security 命令导出的 Keychain 条目。这类文件体积小但缺一不可,建议单独打一个归档。
项目与依赖缓存
包括代码仓库(理论上应该都在远端,但本地未 push 的分支要额外检查)、CocoaPods 与 SwiftPM 的本地缓存、Homebrew 安装的软件包清单(用 brew bundle dump 导出 Brewfile 比拷贝整个 /opt/homebrew 划算得多)、以及 Podfile.lock、.xcode-version 这类锁定文件。
三层备份策略:rsync 增量 + tar 归档 + 快照下载
不要指望一种手段兜底所有场景,三层组合起来才稳。
| 层级 | 工具 | 适用场景 | 缺点 |
|---|---|---|---|
| 第一层 | rsync 增量同步 | 日常持续备份,项目文件、配置文件 | 需要目标端可写,不适合超大二进制 |
| 第二层 | tar 打包归档 | 一次性打包 Keychain、证书等敏感小体量数据 | 不便于增量更新 |
| 第三层 | 平台快照下载 | 前两层失败后的最后兜底 | 体积大,受出口带宽限制,耗时长 |
用 rsync 做增量同步
从本地发起,把 Mac mini 上的关键目录同步到本机或对象存储挂载点:
rsync -avz --delete \
--exclude 'DerivedData' \
--exclude 'node_modules' \
dev@hk1.oncemini.com:~/projects/ \
~/backup/mac-mini-hk1/projects/
排除 DerivedData、node_modules 这类可重新生成的目录,能把同步时间从几十分钟压到几分钟。建议在到期前一周开始每天跑一次,而不是等到最后一天才第一次同步——首次全量同步的耗时经常被低估。
打包不可变归档
对证书、密钥这类不常变动但绝对不能丢的数据,单独打包并加密:
tar czf keychain-backup.tar.gz \
~/Library/Keychains \
~/.ssh
gpg -c keychain-backup.tar.gz
加密后的归档再走 rsync 或直接下载,避免明文密钥在传输链路上落地。
平台快照下载作为兜底
如果前两层因为网络原因没跑完,控制台里的整机快照下载可以作为最后一道保险,但要提前测算体积——512GB 的系统盘按住宅带宽下载可能需要数小时,一定要预留缓冲时间,不要卡在到期前几小时才发起。
常见坑与检查清单
- 忘记导出
brew bundle dump生成的 Brewfile,新机器上装软件全靠回忆,版本号对不上。 - 只备份了项目代码,没备份
.env里的本地环境变量,新机器构建时缺配置报错。 - 用普通用户权限跑 rsync,漏掉了系统级证书文件的读取权限,导致归档不完整却没有报错提示。
- 到期前几小时才开始下载快照,遇到带宽波动直接来不及。
- 迁出后没有清理旧机器上的密钥和令牌,退租后这些凭据理论上仍然有效,存在安全隐患,应在最后一次登录时主动吊销。
迁出后的新机器冷启动验证
搬完不代表结束,要在新环境跑一次完整验证才能收尾:
brew bundle install --file=Brewfile
pod install --repo-update
xcodebuild -workspace App.xcworkspace \
-scheme App -configuration Release \
clean build
shasum -a 256 build/App.app/App
把新旧两次构建的 shasum 输出对比,一致才算迁移真正完成。这一步经常被省略,但恰恰是唯一能证明"环境没丢东西"的客观证据,比"看起来能跑"靠谱得多。
常见问题
租期到期后数据会保留多久?
平台标准保留期是72小时,建议在到期前48小时内就完成备份,不要卡着最后时刻冲刺,避免网络波动或磁盘故障导致来不及重传。
rsync 和平台快照下载该选哪个?
优先用 rsync 做增量备份到本地或对象存储,速度快且可断点续传;平台快照下载体积大、受出口带宽限制,只作为最后兜底手段。
迁出后怎么确认新机器环境完整?
用同一份 Brewfile、Podfile.lock 和 .xcode-version 在新机器上重建环境,跑一次完整构建并对比产物哈希,哈希一致才算迁移成功。
需要一台独享 Mac mini 跑通你的构建流程?
前往控制台租用 Mac mini