备份策略:数据库与附件
备份是自建者的必修课
零知识架构保证密码不被偷走,但不保证密码不丢。硬盘损坏、误删容器、升级失败,任何一次意外都可能让密码库永久消失。对托管服务来说这些事有专业团队兜底,对自建服务来说,备份是你唯一的保险。
好在 Vaultwarden 的备份异常简单,整个服务只需要保存一个数据目录。这一章的目标不是把备份做复杂,而是把它做成一个你真的会执行、真的会验证的简单流程。太复杂的备份方案最后往往因为嫌麻烦而停跑,简单的方案才会坚持十年。
备份这件事还有一层意义:它让你在升级和迁移时拥有底气。敢于删掉容器重建、敢于换主机、敢于尝试新版本,都是因为你知道数据在别处还有一份。备份是自建者所有从容的来源。
备份什么
| 文件 | 作用 | 重要性 |
|---|---|---|
| db.sqlite3 | 全部密码条目与用户数据 | 最重要 |
| attachments 目录 | 密码条目挂的附件 | 高 |
| config.json | 后台生效的配置 | 中 |
| rsa 目录 | 验证用的密钥对 | 中 |
| icon_cache | 网站图标缓存 | 低,可以不备 |
核心是 SQLite 数据库文件。它是一个独立文件,直接复制就是一份完整备份。附件目录看你是否使用附件功能,家用场景经常是空的。图标缓存最无所谓,丢了客户端会自动重建。
这种简单性值得珍惜。很多自建服务的备份要处理数据库主从、增量快照等复杂概念,而这里只是一个文件。因为简单,所以备份脚本只有三行,所以你真的会每天跑它,所以数据真的安全。复杂的方案往往死于执行率,简单的方案才能长期活着。
简单粗暴的做法是整个 data 目录一起打包,不用区分谁重要。存储成本对家用来说可以忽略,备份文件本身就是加密的,也不用担心内容泄露。把方案做简单,执行率才会高。
热备份的正确姿势
对运行中的服务直接复制 SQLite 文件存在风险:如果复制时数据库正在写入,得到可能是一个损坏的副本。正确做法是先让数据库做一次一致性 checkpoint,或者干脆停容器再复制。对家用规模每天一次备份的频率,停机几秒钟完全可以接受,家人根本无感。
脚本化之后就简单了。一个最基本的备份循环可以是这样的思路:复制数据目录到带日期的压缩包,保留最近若干份,把旧于某个天数的删掉。写一次用五年,这类小脚本正是自建生活的乐趣所在。
把脚本放进定时任务之前,先手动跑一次确认它能正常工作。定时任务失败最常见的两个原因是路径不对与权限不够,手动执行时这两类问题会立刻暴露。确认无误后再交给系统每天自动跑,首次自动执行后记得检查一下是否真的生成了压缩包。
#!/bin/sh
set -e
cd /srv/vaultwarden
mkdir -p ../backup
tar -czf ../backup/vw-$(date +%F).tar.gz vw-data
find ../backup -name 'vw-*.tar.gz' -mtime +14 -delete
这段脚本把数据目录打包成带日期的压缩包,保留最近十四天。配合系统的定时任务,每天凌晨自动跑一次。每天一次的备份频率对家用足够:即便今天出事,最多损失一天的数据变动。

备份的去处与散布原则
只把备份放在同一台机器上是有风险的,因为机器本身是单点。经典的备份原则是三份副本、两种介质、一份异地。家庭场景具体可以是:主机本地一份、NAS 另一目录一份、手工定期拷到外置硬盘或加密网盘一份。
| 层级 | 位置 | 特点 |
|---|---|---|
| 第一份 | 服务主机本地 | 恢复最快 |
| 第二份 | NAS 或另一台机器 | 主机坏了还有救 |
| 第三份 | 外置硬盘或加密网盘 | 全家的机器都出事还有救 |
不必每次都做三层,最基本的底线是别让备份和原文在同一块硬盘上。异地的那一份可以降低频率手动做,比如每季度一次。记住备份文件本身就是加密的,所以不用担心放到网盘会泄露内容——没有主密码,网盘服务商也只能看到一堆乱码。
备份频率这件事别过度设计。家用密码库的变化是渐进的,每天一次的增量已经足够覆盖绝大多数风险。把精力省下来去做更有价值的验证,比盲目加密频次划算得多。
定期验证恢复
没验证过的备份不能算备份。恢复演练听起来专业,其实很简单:找个空闲时间,把备份的压缩包解压到另一台测试机器上,用同样的 compose 文件起一个新服务,登录看看密码库是否完整,条目数量、文件夹、附件是不是都在。
到这里整套备份逻辑就闭环了:服务端自动备份保数据,客户端导出做兜底,恢复演练验证整个链条。这套流程跑顺之后,自建密码服务的心理负担会降到接近于零。出事时你知道有备份,也知道怎么恢复,这种确定感是自建运维最值得追求的状态。
建议把这件事安排在有维护心情的日子,比如每半年一次。把方法记在便签里,这一步的意义在于真出事时你不会手忙脚乱。周密的计划如果没有经过演练,在真实压力下常常打折扣,备份尤其如此。
演练的另一个收获是你会知道恢复需要多久。心里有数之后,真遇到故障时就不会慌,因为你知道「最多花半小时就能全部恢复」。
| 演练频率 | 建议动作 |
|---|---|
| 每月 | 确认备份文件还在、大小正常 |
| 每季度 | 换台机器完整恢复一次 |
| 每年 | 演练一次「全部重建」流程 |
灾难恢复的分级
| 场景 | 应对方式 |
|---|---|
| 容器被误删 | 数据目录还在,重新启动即可 |
| 主机系统损坏 | 换台机器挂载备份目录启动 |
| 硬盘物理损坏 | 用异地的备份恢复 |
| 主密码遗忘 | 备份也救不了,只能靠加密导出 |
行文至此再次提醒一件事:主密码丢失没有任何技术手段可以恢复,备份只能恢复服务,不能恢复记忆。所以离线的加密导出也是一种特殊意义的备份,两者配合才完整。把导出的加密文件和备份压缩包放在一起,是家庭密码资产最完整的兜底方案。
客户端侧的导出
除了服务端备份,客户端本身也提供导出功能。在浏览器插件或 App 的设置里都有导出入口,格式有两种:加密导出和明文导出。
| 格式 | 特点 | 适用场景 |
|---|---|---|
| 加密导出 | 需要主密码解包 | 长期存放 |
| 明文导出 | 打开即见内容 | 迁移到其他软件,用完即删 |
| 官方格式 | 与 Bitwarden 客户端通用 | 跨服务迁移 |
长期保存请只使用加密导出。明文导出请务必在迁移完成后立即删除文件,不要让它躺在下载目录里——一份明文密码文件是家庭数据安全的严重短板。这条纪律适用于所有密码管理器,不是 Vaultwarden 特有的要求。
数据清理与长期维护
跑了几年之后,密码库会积累一些该清理的东西:不再使用的网站账号、重复保存的密码条目、过时的备注。把清理当作每年一次的小整理,能让密码库保持清爽,也让每一次查找都更高效。
| 清理对象 | 判断标准 |
|---|---|
| 多年未用的条目 | 大概率服务已不用 |
| 重复条目 | 同一账号保存两次以上 |
| 弱密码条目 | 趁机改为随机强密码 |
| 失效备注 | 密保问题早已更新 |
清理时记得先做一次完整备份,这样误删了还能找回来。整理密码库的体验类似整理衣柜,过程中你会重新认识自己的数字生活轨迹,顺带把那些年注册过就忘掉的服务一并了结。
自动化生活的小确幸
当备份脚本跑了几个月之后,你会发现它已经成了家里最省心的基础设施之一。没有提醒、没有打扰,只是每天凌晨在后台默默完成一次复制。这种安静的可靠性是自建服务最迷人的地方,也是它替代那些花哨商业服务的底气。
如果想在手机上偶尔确认一下,可以在家庭群里留一个简单的查询办法,或者干脆学一下《NAS DIY 指南》里的监控思路,给备份任务加一个简单的成功提醒推送。通知不是必须的,但你偶尔看到「备份成功」这四个字时,心里会更踏实。
小结:备份的三条纪律
| 纪律 | 一句话总结 |
|---|---|
| 自动 | 每天定时跑,不需要手动 |
| 分散 | 不与原文同机,至少异地一份 |
| 验证 | 定期恢复演练,确认能还原 |
记住这三条,备份这件事就算学到位了。余下的工具与脚本都是实现细节,而行业的最佳实践,最终都收敛到这三条朴素的原则上。
如果后面要迁移到群晖等成品 NAS 上,备份方案可以进一步简化为套件提供的定时任务,思路完全一样,只是工具换了。能透过工具看清原则的人,换到任何平台都能快速重建自己的方案。

延伸阅读
- Synology DSM 指南:利用群晖的备份套件实现定期版本化备份
- NAS DIY 指南:为备份规划第二存储位置
