ArkVault:一块能让硬盘重建你Linux系统的BorgBackup图形界面工具
- 分类
- 工具与下载
- 发布日期
- 2026年7月11日
- 作者
- Jacob Lloyd —— 项目完成后,在 AI 协助下撰写
- 阅读时长
- 约 10 分钟阅读
简单来说: 一款面向Linux电脑的免费备份程序,界面简单,点点鼠标就能用。它会把你重要文件的加密副本存到外接硬盘上,而且硬盘本身还带着一份手把手的恢复指南——这样万一电脑坏了,一台全新的机器也能直接从这块硬盘重建起来。
把备份硬盘插进一台全新安装的Linux——什么都没配置,上面什么都没有——你拿回来的会远不止是文件而已。ArkVault会把带引导的恢复工具包,连同加密备份一起写进硬盘,这样硬盘本身就知道该怎么重建整台机器:dotfiles、SSH密钥、启动器的符号链接、systemd单元,一样不少。
TL;DR
- 这是什么: 围绕BorgBackup做的一个GTK4图形界面(外加一套完整的无头CLI),每次备份都会把一份安装映射清单和自身的一份拷贝写进备份硬盘。
- 花费: 免费,MIT许可。源码压缩包在下面。不需要账号,不上云。
- 你需要: 装有GTK4/libadwaita的Linux(Fedora/GNOME系自带,Debian/Ubuntu只需一行apt命令)、一块闲置硬盘,以及花一个晚上把"什么东西值得保存"这份目录清单写好。
- 最终得到: 一份加密、去重过的备份,外加一个恢复向导——它能在一台什么都没装的机器上,直接从硬盘跑起来。我是真的跑了一遍恢复演练,而不只是走了一遍顺利路径。
最终成果
先看工具,理论稍后再说。以下截图来自沙盒环境里用假数据跑的一次演示,不是我真机上的文件列表。

四个方案,体积估算实时刷新,任何涉及SSH密钥这类标记为机密的项目的方案都会带上锁形徽章。你打开的所有开关,一个按钮就能全部备份。

这正是这整个工具的核心所在:恢复向导会从硬盘读取安装映射,原原本本地展示当初捕获了什么——按类别分组、可勾选、敏感项目带锁形图标。没有来路不明的二进制大杂烩。

还有一种拖放模式,专门用来处理那些不该放进主目录清单的一次性文件集合。
| 指标 | 数值 |
|---|---|
| 代码量 | 约7,100行Python代码,分布在48个文件中 |
| pip依赖 | 零——GTK来自系统本身,requirements.txt故意留空 |
| 测试套件 | 82/82项检查通过,不需要pytest |
| 压缩包大小 | 108 KB,53个条目(Borg的二进制文件没有打包在内——由安装程序自行下载) |
| 恢复演练结果 | 在第二个全新的$HOME里,8个项目全部正确落地 |
| 许可证 | MIT,免费 |
Borg到底帮你解决了什么
ArkVault本身不是备份引擎,它是BorgBackup的前端,难啃的部分都交给了Borg:
- 加密: repokey-blake2。密钥存在仓库内部,由你的密码短语保护。偷走硬盘的人什么都拿不到。
- 去重: 基于内容的分块方式,所以一个变化缓慢的家目录做十次快照,并不会占用十倍的空间。
- 压缩: zstd等级6。压缩效果不错,又不会把备份速度拖得太慢。
- 保留策略:
borg prune默认保留每日7份、每周4份、每月6份(可自定义),旧快照会按顺序过期,不至于把硬盘吃满。
ArkVault补上的,是Borg根本不关心的那部分:哪些文件重要,它们需要什么权限,以及文件落地之后,机器要真正重新跑起来还需要发生些什么。
为什么一个不可变发行版逼出了不同的设计
这是我为一台Bazzite机器做的——不可变、原子化的Fedora,根目录只读。这个限制塑造了整个工具的形态:
- 所有东西都装在
~/.local下面,一点也不碰/。 - 虚拟环境用
--system-site-packages构建,这样GTK4/PyGObject直接来自宿主系统,而不用针对只读的基础系统去编译绑定。 pip install borgbackup在这里根本装不上——没有liblz4头文件,也没有匹配的wheel——这就是安装程序要下载官方上游独立Borg二进制文件(一个内置FUSE的PyInstaller构建)的真正原因。- 哪里都用不上
sudo。唯一需要root权限的操作——格式化硬盘——会走polkit/pkexec的确认弹窗。
真正的思路:让硬盘来重建这台机器
普通的备份工具只会把文件还给你,至于每个文件该放回哪、哪些systemd单元该重新启用,还得靠你自己记住。ArkVault把这些知识,每次备份时都写进硬盘:
arkvault-repo/——加密的Borg仓库。ArkVault-App/——ArkVault自身的一份自带副本,源码加安装程序,以原子方式拷贝(先写临时目录,再重命名),这样即使拷贝过程被打断,硬盘上也不会留下一个半吊子的应用。arkvault-install-map.json和RESTORE-README.md——记录所有已捕获内容的清单,以及一份不需要任何工具就能读的纯文本说明。
安装映射记录的只是"某个文件是机密的"这个事实本身,绝不会记录其内容。硬盘知道自己带了什么,却一滴都不会泄露。
一次备份实际做了什么
一次备份是一条直线:先找出目录清单匹配到的内容(找不到的路径会被跳过),可选地让写入频繁的服务暂停一下,好让运行中的数据库落地时保持一致状态,然后borg create,borg prune,最后把恢复工具包写进硬盘。
那些偏执到位的细节
下面这些是真正花了时间打磨的部分:
- 格式化防护会拒绝系统盘。 格式化错硬盘,是备份工具界的经典灾难。ArkVault会顺着
/sys/class/block/*/slaves一路追溯,把LUKS/LVM的device-mapper链条解析回物理磁盘——加密根分区的mapper名字跟底层磁盘完全对不上号,单纯按名字比对是发现不了的。如果它压根没法枚举出系统盘,就会失败关闭,拒绝格式化任何东西。最后你还是得手动敲入准确的设备名来确认。 - 恢复时的路径封闭。 一份损坏或被篡改的安装映射,没法把内容写到目标家目录之外:中间的符号链接会被解析,末端的符号链接则故意不追踪,任何试图逃出家目录的重新部署目标都会被拒绝。
- 日志里的机密卫生。 密码短语,以及任何被标记为机密的内容,都会通过字面匹配加上正则表达式兜底(比如
apiKey:、Bearer这类模式)从日志里清除。 - 恢复凭据单。 第一次备份时会显示一张密码短语单,文本不可选中(不会不小心被复制到剪贴板),而且在你勾选"我已保存我的密码短语"之前,关闭按钮一直是禁用状态。这张单子永远不会被写进硬盘。丢了密码短语,备份也就跟着丢了——真正的加密就是这个意思。
- FAT32会被拒绝作为仓库目标——它4 GB的文件大小上限会直接搞垮Borg。exFAT则允许使用,只是会给出警告,毕竟Borg本来就会在内部保存Unix元数据。
- 空归档会被拒绝写入。 如果所有源路径都消失了(硬盘没挂载、目录清单写错了路径),ArkVault会拒绝写出一个看起来像成功、实则空空如也的归档。
- 验证的主动权在你手里,随时都行。
borg check可以从图形界面或CLI跑起来,是真正的完整性检查;"Browse snapshot"则会把某个归档以只读方式通过FUSE挂载出来,让你在真正信任它之前先翻一翻里面的内容。
动手设置
你需要GTK4/libadwaita的PyGObject绑定、udisks2和polkit。Fedora/GNOME系列自带;Debian/Ubuntu只要一行:
sudo apt install python3-gi gir1.2-gtk-4.0 gir1.2-adw-1
然后运行安装程序,它是幂等的——重复运行也安全:
bash install.sh
这会把应用拷贝到~/.local/share/arkvault,搭建带--system-site-packages的虚拟环境,下载官方的Borg独立二进制文件,并放好~/.local/bin/arkvault和一个桌面入口。接着运行:
arkvault probe
一切应该都显示OK。单独运行arkvault会启动图形界面;同一套核心代码也驱动着一套无头CLI:
arkvault probe|backup|restore|list|check
真正要紧的那一步是:编辑目录清单。随附的那份只是个通用示例——core/discovery.py、profiles.py、core/quiesce.py、core/containers.py和core/installmap.py里都标着"EDIT ME"的代码块。整理出一份"全新安装还不了给你"的精选清单,才是这个工具真正的意义所在,而且这份清单没人能替你写。
跑完第一次备份后,把恢复凭据单存到备份硬盘以外的地方,再点一下"Copy app to drive"。要做无人值守的定时运行,README-SETUP里有一份systemd用户定时器的模板;它会从密钥环或ARKVAULT_PASSPHRASE里读取密码短语。
证明它真的管用
一份从没试过恢复的备份,不是备份,只是个美好愿望。所以,针对一个伪造的$HOME:
- 解压源码,运行
install.sh——真实下载Borg,27.9 MB。 arkvault probe:全部OK。- 用
arkvault backup把3个示例方案备份到一个临时硬盘目录:8个项目进入备份,仓库以repokey-blake2初始化,安装映射+RESTORE-README+自带应用副本都写好了。 arkvault list,然后arkvault check:通过。arkvault restore恢复到第二个全新的家目录:全部8个项目都落在了正确的路径上,剩下的打印成手动检查清单。
这套不依赖任何外部包的测试套件,在压缩包里原封不动的代码树上跑出82/82全部通过。
容易踩的坑
- 压缩包版本修复了原始安装脚本里的一个bug。 Borg的GitHub发布页只提供GPG的
.asc签名,却没有.sha256校验文件,导致安装程序获取校验和时404,而set -e在脚本自身的回退逻辑还没来得及运行前就把安装杀掉了。这里已经修好了,还额外加了个可选的ARKVAULT_BORG_SHA256环境变量,用来锁定一个已知可信的哈希值。我自己的机器倒是从没踩到过——因为我的Borg二进制文件早就存在,下载那个分支根本没被触发过。 - FAT32会悄无声息地毁掉你这一周。 ArkVault能检测并拒绝它,但很多U盘出厂时默认格式就是它。
- 运行崩溃会留下一个陈旧的仓库锁。
borg break-lock能清掉它(图形界面里也有对应按钮),设置BORG_LOCK_WAIT=120能让重叠的运行等待而不是直接失败。 - 处于WAL模式下运行中的SQLite需要把db、wal、shm三个文件一起捕获,或者先把服务停掉。这正是暂停(quiesce)这一步存在的原因——它的重启逻辑放在
finally块里,所以就算备份中途挂掉,服务也照样会恢复运行。 - 恢复到不同的用户名是可行的,因为每个目标路径都是相对于家目录记录的。没法映射到新用户的所有权,不会被悄悄跳过,而是会进手动检查清单。
- 没有GNOME密钥环(无头机器、CI环境)?它会退化成内存中的密码短语加一个提示,而不是直接失败。
- 那个无聊的bug:
python -m arkvault backup ...以前会悄悄什么都不做——图形界面的参数解析器把子命令吞掉了,然后正常退出。现在__main__.py会显式地分发CLI子命令。吓人的bug会自己发出声响;真正危险的那种,是干干净净退出、什么都没做。 - 随附的目录清单是故意留白的示例。 我自己实际在用的那份,精确记录了我重要东西的位置,而这恰恰是不该出现在公开压缩包里的内容。你拿到的是一份干净的Projects/Settings示例,带着一个跑通了的重新部署样例——结构一样,路径都不是我的。
下载
- 下载ArkVault源码(zip) 106 KB
仅限个人使用免费。如果它替你省下了一下午的时间,欢迎点旁边的咖啡按钮支持一下。