Skip to content

公开测试版 · macOS 14 及以上

把 Mac 备份到你自己的存储

免费的菜单栏应用:先在 Mac 上加密你的文件夹,再按时间表备份到你自己的硬盘、存储桶或服务器。

下载 Mac 版
或用 Homebrew 安装,不弹安全提示:
  • 在 Mac 上加密钥匙只在你手里。
  • 存在你选的地方中间没有 Keelhaven 的服务器。
  • 有事才出声只在需要你的时候才提醒。

01 · 文件去哪儿

从你的 Mac 到你的存储,不经别处。

你的 Mac

你挑的文件夹

  • 文稿
  • 照片
  • 项目

…任何你选的文件夹

你的文件

Keelhaven

住在你的菜单栏里

  • 用存在钥匙串里的密码加密
  • 只存上次之后变化的部分
  • 每小时、每天或每周,按你定的时间跑
  • 定期校验仓库,默认每周一次
已加密

你自己的存储

你信得过的地方

  • 外置硬盘或网络硬盘
  • 兼容 S3 的存储桶AWS · B2 · Wasabi · R2 · MinIO
  • 用 SFTP 连服务器或 NAS
  • restic REST server

路径上没有:Keelhaven 的服务器账号遥测

02 · 怎么用

决定三件事,剩下不用管

  1. 「新建备份计划」窗口,停在询问加密备份存到哪里的那一步。

    1 · 建一个计划

    文件夹、目的地、时间表。

  2. 菜单栏弹窗里列着三个计划,每个都亮着绿点,显示时间表和上次备份时间。

    2 · 让它自己跑

    绿点亮着,说明上次备份成功了。

  3. 「恢复备份」窗口,按日期、文件数和大小列出快照。

    3 · 恢复任意时间点

    恢复到新文件夹,不覆盖任何文件。

03 · 不锁定

备份比应用活得久。

每个计划都是标准的 restic 仓库。在任何 Mac 或 Linux 上都能恢复,装不装 Keelhaven 都一样。

$ restic -r sftp:you@nas.local:/backups \
    restore latest --target ~/Restored

04 · 定价

免费。这就是全部定价。

GPLv3 开源。没有账号,没有订阅,没有遥测。

无 Dock 图标,没有主窗口。选定文件夹、备份存储介质、定时策略,后台静默执行,出错才推送通知。密码仅保存在 macOS 钥匙串,生成标准 restic 仓库,脱离本软件也能用 restic 命令行恢复。

小弟调调@jaywcjloveX ↗

05 · 常见问题

不绕弯子的回答

能取代时间机器(Time Machine)吗?

不能,两个一起用。时间机器擅长把整台 Mac 恢复原样,用的是桌上那块硬盘;Keelhaven 管的是第二份副本:丢不起的那些文件夹,加密后放到别的地方。

macOS 说无法验证 Keelhaven,是出问题了吗?

没出问题。Beta 版还没做 Apple 公证,macOS 对所有没法在线验证的应用都会弹这个警告。允许一次,同一版本就不会再问:

  • macOS 15(Sequoia): 先双击一次 Keelhaven,关掉警告;再打开系统设置 › 隐私与安全性,拉到底部,点仍要打开。
  • macOS 14(Sonoma): 在「应用程序」里右键点按 Keelhaven,选打开,再点一次打开。
  • 偏好终端? xattr -d com.apple.quarantine /Applications/Keelhaven.app 一条命令清掉隔离标记,连对话框都不会弹。
忘了仓库密码会怎样?

备份就找不回来了,这是有意为之:仓库端到端加密,备用钥匙谁手里都没有,我们没有,你的存储服务商也没有。Keelhaven 把密码存在钥匙串里,过一道 Touch ID 随时能拷出来;最好也存一份进你的密码管理器。

更多问题
文件怎么恢复回来?

计划的 ⋯ 菜单里有 恢复文件…,它会列出这个计划的每一个快照(日期、文件数、大小,最新的在最上面),你挑一个时间点,再挑放到哪儿。它会恢复进一个以计划名和时刻命名的新文件夹,不覆盖你现在手上的任何文件,所以恢复这件事本身永远不会让你丢掉当前的版本。

不必整个恢复。点 选择文件… 可以打开你选的那个快照,按文件夹展开或按名称搜索,选中要的文件或文件夹,再点 恢复选中的项目…,就只恢复这些。(0.9.2 及以后的版本。)

这一切都不依赖 Keelhaven 还在:仓库是标准 restic 格式,在任何 Mac 或 Linux 上用 restic restore 一样能恢复。

免费的,会不会有什么套路?

没有套路。Keelhaven 的备份引擎是 restic,免费、开源、久经考验;Keelhaven 补上命令行工具留给用户自己操心的部分:定时真的会跑,密码放钥匙串、不落盘不进日志,菜单栏没事不吭声。它没有服务器要养,背后也没有公司,整个项目开源,不需要商业模式也能活下去。要是它在你的 Mac 上站住了脚,向朋友推荐一句,就是对它最好的支持。

会被 Keelhaven 锁定吗?

不会。每个计划写入的都是标准 restic 仓库,在任何 Mac 或 Linux 上用开源的 restic 命令行就能列出、校验、恢复,不需要装 Keelhaven。哪天 Keelhaven 没了,你的备份还在。

Keelhaven 开源吗?

开源,GPLv3,代码在 GitHub:想读、想审计、想自己编译、想 fork 都行。内置的 restic 引擎是 BSD 2-Clause 许可,两份声明见许可页。

别人能读到我的数据吗?

读不到。所有内容上传前就在你的 Mac 上加密完成,仓库密码只在你的钥匙串里。没有服务器、没有账号、没有遥测,这个应用就算想发数据,也没有地方可发。

支持哪些备份目的地?

挂在 Mac 上的外置硬盘或网络硬盘;任何兼容 S3 的存储桶(AWS、Backblaze B2、Wasabi、Cloudflare R2、MinIO);用 SFTP 连自己的服务器或 NAS;以及你自己架设的 restic REST server。

我备份到 Backblaze B2,为什么删掉旧备份并没有腾出空间?

因为 B2 不是删除,而是隐藏。Keelhaven 通过 B2 的 S3 兼容 API 访问它,而经由这个 API 删除对象,只会把旧版本标记为隐藏,并不会真正移除。隐藏的版本照样占用存储、照样出现在账单上,而且 restic forget --prune 再跑多少次也够不着它们——删除指令早就发出去了,它已经做完了这个 API 允许它做的事。

解法是存储桶上的一个设置,不在 Keelhaven 里。在 B2 存储桶的生命周期设置中选择 Keep only the last version of the file(只保留文件的最新版本)。这正是 restic 官方文档对 B2 的建议,文档里也写明了之后会发生什么:文件的旧版本会被「隐藏」一天,然后由 B2 自动删除。

空间通常会在随后一两天内回来,而不是立刻。B2 按它自己的节奏执行生命周期规则,所以第二天早上看桶还没什么变化是正常的,并不代表规则没生效。

备份会一直涨下去吗?

默认会,因为删你的数据这件事,Keelhaven 从不自作主张。每次运行加一个去重后的快照,只存变化的部分。

想让某个计划别再涨,编辑计划 → 保留策略里有三种停下来的办法。保留一年和保留一个月会把较旧的快照按每日、每周、每月逐级精简,越往前留得越稀。保留固定份数的备份更直接也更好算:只留最近 N 次,更早的一律删掉,不管它有多新,所以在一下午里连着备好几次,就可能把上个月整个挤掉——选它就是接受这笔账。

无论选哪种,空间都在备份完成后回收,每周最多清一次。仓库始终是标准 restic 格式,想自己用 restic forget --prune 按别的策略清,随时可以。

备份把我的上传带宽占满了,能限速吗?

能。编辑计划 → 高级里有一项上传限速(KiB/秒),填上之后 restic 就不会再压过这个速度,第一次全量备份也不至于让你开会时卡到说不出话。同一处还能调低同时读取的文件数——机械移动硬盘上尤其值得,同时读多个文件只会让它反复寻道;也能调大打包大小,适合按请求次数计费的云存储。三项默认都是空的,留空就是 restic 出厂时的样子。

我怎么知道备份真的能用?

备份失败或没跑完不会悄无声息,引擎报的错会立刻出现在菜单栏和系统通知里。Keelhaven 还会定期用 restic 自带的完整性检查验证仓库,默认每周一次,可按计划调整;通过了就在计划行里安静记一条「已验证」,有问题才会吵你。当然,隔三差五真恢复一个文件出来,才是检验备份的金标准,用什么工具都一样。

备份失败,说有文件读不到,怎么办?

这是 macOS 在保护你的文件,不是备份引擎出了问题。桌面、文稿、下载、iCloud 云盘以及资源库中的部分位置,在你授权之前对所有 App 都是关闭的——而这些恰好就是人们做第一个备份计划时会选的文件夹。Keelhaven 会把读不到的文件列出来,而不是丢一句笼统的失败;计划那一行还有个按钮,直接打开对应的设置面板。

一次性解决:打开 系统设置 › 隐私与安全性 › 完全磁盘访问权限,打开 Keelhaven 的开关——然后退出并重新打开 Keelhaven,再运行备份。macOS 只会把新授予的权限交给重新启动的进程(系统设置里的「退出并重新打开」按钮就是干这个的)。

如果更新之后又出现,原因在这里。 macOS 把这项权限绑定在授权时的那个具体构建上。Keelhaven 的 beta 版本还没有 Developer ID 签名,所以每个新版本在它眼里都是另一个 App,权限需要重新给一次:用 − 按钮把 Keelhaven 移除,再从「应用程序」里重新添加,然后退出并重新打开。签名和公证之后这一步会消失;在那之前,一次发版就可能让它回来。

有一点值得知道:这次运行可能已经把能读到的内容存成了一个快照——restic 会先写下读得到的部分,再报告其余。这类快照在恢复窗口里会标注为不完整,所以不会出现「看着像备份好了、其实缺文件」的情况。

这也是它为什么是一个 App 而不是一个脚本。把这项权限交给一个 shell 脚本,等于交给你的终端——那扇门比一个 App 大得多。

还需要装别的东西吗?

不用。Keelhaven 需要的都在应用包里,包括备份引擎:没有第二步安装,不依赖 Homebrew,也没有要你自己保持更新的组件。

能在终端安装吗?

能,两种方式,装的都是下载按钮那个 DMG。有 Homebrew:brew install --cask shenxianpeng/tap/keelhaven,以后 brew upgrade 自动跟进新版本。没有:curl -fsSL https://keelhaven.app/install.sh | bash 下载最新版并拷进「应用程序」。脚本就一页 shell,不放心可以先看一遍。

为什么不上 Mac App Store?

App Store 要求应用跑在沙盒里,而备份引擎得读你指定的任意文件夹、连网络和 SSH。反过来,待在沙盒之外也意味着你可以给它「完全磁盘访问权限」——macOS 要求任何 App 读取桌面、文稿、下载之前必须先拿到的那项授权。Keelhaven 开着强化运行时(hardened runtime),只是不走商店;Beta 期间也还没公证,所以第一次打开要多点一次确认。

设置一次,然后就可以忘了它。

下载 Mac 版

macOS 14 及以上 · Apple 芯片和 Intel