跳转到内容

BorgBackup:去重加密备份 ​

完成后,选定的共享文件夹会按你设的计划自动备份进一个 Borg 仓库:重复数据只存一份,可以压缩和加密;你能随时浏览任意历史版本,把文件还原回来。同一个插件还能让另一台 OMV 把备份推给你,并且客户端被勒索也删不掉已存的备份。

适合谁 ​

  • 想要多个历史版本(每小时、每天、每周、每月、每年各保留几份)而不是一份镜像。
  • 数据变化不大,想靠去重省空间。
  • 备份目标不完全可信(别人的服务器、云上的 SSH 主机),需要加密。

选别的工具的情况:目标是 S3、B2 等对象存储,用 restic;只要最简单的目录同步,用 rsync 任务;想按硬链接轮转本地第二块盘,用 rsnapshot。

这个插件里有会让备份消失的按钮

  • 影响范围:删除归档配置会删除它在仓库里的全部备份;删除 + 文件(Delete + Files)会删除整个仓库文件夹;提取时勾选原始位置会把文件写回原路径,覆盖现有文件;仓库的口令或密钥文件丢了,备份就再也打不开。
  • 前置条件:仓库必须放在另一块盘或另一台机器上,和源数据在同一块盘上不算备份;先把口令和密钥文件存到 NAS 之外;先在测试数据上跑通,再备份重要数据。
  • 怎么回退:停用归档配置即可暂停备份。仓库一旦删除不可恢复。还原时先提取到一个空目录,核对无误再搬回去。

插件信息 ​

项内容
包名openmediavault-borgbackup
来源omv-extras。BorgBackup 本体是第三方软件
OMV 8 状态截至 2026-10-22 的 omv-extras synchrony 软件源为 8.2.2(amd64、arm64)。Serve 标签页需要 8.2 以上
菜单位置服务 → BorgBackup(Services → BorgBackup):源(Repos)、紧密(Compact)、归档(Archives)、服务(Serve)、环境变量(Environment Variables)
依赖borgbackup、python3-llfuse(挂载仓库用)

官方中文有几处难懂的译名:「源」是仓库(repository),「紧密」是 Compact(回收仓库空间),「服务」是 Serve,「扩展参数」是 Excludes(排除项)。先装 omv-extras。

核心概念 ​

词含义
仓库(repository)存放所有备份数据的文件夹,创建时初始化一次
归档(archive)仓库里的一次备份,名字是 <前缀> 加时间
插件里的「归档」页其实是备份任务:备份哪些目录、什么时候跑、保留几份

备份放哪、密钥和口令怎么保管 ​

这一节比怎么点按钮更重要。

  • 放哪:本地仓库放在一个专用共享文件夹里,这个共享所在的盘不能是被备份的数据盘;远程仓库用 用户@主机:路径 的形式,通过 SSH 访问。Borg 插件以 root 运行,所以 SSH 密钥要配给 root。
  • 加密不是默认的:创建仓库时加密(Encryption)复选框默认不勾选,需要手动勾上。勾选时插件使用 keyfile 模式。
  • 访问加密仓库需要两样东西:口令,加上密钥文件。密钥文件默认保存在 OMV 的 /root 目录下,系统盘坏了或重装,它就没了,仓库也就打不开。
  • 怎么留:创建仓库后立刻在 源 页选中仓库,点 下载源关键文件(Download repo keyfile),把下载的文件和口令一起存进密码管理器(例如 KeePassXC)和离线副本,不要放在备份盘本身上。
  • 口令规则:不要包含空格和特殊符号,插件的提示说它们可能被错误解释。插件会把口令保存在 OMV 配置数据库里供定时任务使用,所以备份 config.xml 时也要当作机密保管。

安装 ​

系统 → 插件(System → Plugins)搜索 borgbackup,安装 openmediavault-borgbackup,硬刷新浏览器。

配置与使用 ​

创建仓库 ​

  1. 在 存储器 → 共享文件夹(Storage → Shared Folders)为备份盘新建一个共享文件夹,例如 borg_local_repo,见 共享文件夹。
  2. 服务 → BorgBackup → 源 → 创建(Create):
字段说明
名称(Name)仓库名
类型(Type)本地(Local)选共享文件夹;远程(Remote)填 user@hostname:path,要先配好 SSH 密钥
口令(Passphrase)访问仓库的口令
加密(Encryption)勾上,原因见上文
跳过初始化(Skip init)只在导入已经存在的仓库时勾选
存储配额(Storage quota)例如 500G,留空不限制
  1. 保存,点黄色提示条上的应用,然后立刻下载密钥文件。

创建备份任务(归档) ​

服务 → BorgBackup → 归档 → 创建,默认值来自 8.2 的表单:

字段默认说明
启用(Enable)开关闭则不自动运行
名称/前缀(Name/Prefix)不要用空格和特殊字符
源(Repo)选刚建的仓库
压缩类型(Compression Type)无lz4 最快,zstd 速度与压缩率折中,lzma 最慢最省
包含(Includes)要备份的目录,用绝对路径;换行或逗号分隔
扩展参数(Excludes,排除项)不想备份的路径
一个文件系统(One filesystem only)关开启后不进入其他挂载点
每小时/每日/每周/每月/每年保留(Retain …)0 / 7 / 4 / 3 / 0每个周期保留几份
各周期的启用只有每日开开了才会定时跑,每日默认 03:30
在备份和清理后运行压缩关见下文「回收空间」
限制速率(Rate limit)0单位 kiB/s,0 为不限,远程备份时按带宽设
邮件(Email)开开启则成功失败都发;关闭则只在出错时发,需要先配好通知
前置脚本 / 后置脚本备份前后运行的脚本路径

保存、应用后,选中任务点 Dry Run(试运行,官方中文未翻译)看结果,再点 运行(Run)真正备份一次;持续运行(Run with progress)会显示进度,查看日志(View Log)看输出。

回收空间 ​

Borg 删除旧归档后不会立刻释放空间。用 服务 → BorgBackup → 紧密(Compact)建一个定期的 compact 任务,或者在归档里勾选「在备份和清理后运行压缩」。

浏览和还原 ​

在 源 页选中仓库:

  • 列表(List):列出仓库里的所有归档。
  • 挂载(Mount):选一个共享文件夹,仓库会挂在其中同名的子文件夹里,每个归档一个目录,用文件管理器或命令行浏览、复制。用完点卸载(Unmount)。版本(Versions)选项是实验性的,会按文件列出各版本。
  • 提取(Extract):选归档,选目标共享文件夹,把整个归档的文件按原目录结构还原到那里。不要勾选「原始位置」,除非你确定要覆盖。
  • 导出(Export):把归档打成 .tar.gz 放进指定共享文件夹。
  • 检查(Check):核对仓库一致性,选项有全部、仅源、仅归档和校验(Verify,读全部数据,最慢)。

做一次恢复测试 ​

备份没试过恢复,就等于没备份。 建议配好以后马上做一次,之后每季度做一次:

  1. 源 页选中仓库点列表,确认最新归档的时间是你期望的。
  2. 在 存储器 → 共享文件夹 新建一个空的共享文件夹,例如 restore_test。
  3. 对最新归档点提取,目标选 restore_test,不勾选原始位置。
  4. 在 OMV 的 shell(root)里对比还原结果和源数据。归档里存的是绝对路径(没设基础目录时),所以还原结果会保留完整的原始目录层级,例如 restore_test 下面还有 srv/dev-disk-by-uuid-…/…,对比时要写到对应的那一层:
sh
diff -rq <源目录> <还原出来的对应目录>

刚备份完且源目录没变化时,应该没有差异输出。差异只会来自备份之后改过的文件。 5. 点检查,再偶尔做一次校验。 6. 最严格的一项:证明换一台机器也能还原。把下载的密钥文件和口令拿到另一台装了 Borg 的机器上,按 Borg 的官方文档导入密钥并列出仓库,见 borg key。

OMV 到 OMV:抗勒索的 Serve 模式 ​

这是 8.2 新增的功能:把一台 OMV 做成备份服务器,另一台 OMV 是客户端。客户端即使被入侵或被勒索,也无法删除或改动服务器上已存的备份。两台机器都要装本插件且版本不低于 8.2。

服务器端:

  1. 服务 → SSH(Services → SSH)启用 SSH。
  2. 建一个专用用户,加入 _ssh 组。
  3. 建一个共享文件夹用来存备份,给这个用户读/写权限。
  4. 服务 → BorgBackup → 服务 → 创建:填名称、登录用户(Login user)、目标共享文件夹(Target shared folder,客户端被锁在这个文件夹里)、仅追加(Append-only,默认勾选)、可选配额、客户端公钥(Client public key,留空则自动生成密钥对,之后可下载私钥)。
  5. 保存、应用。不要再把同一把公钥加到这个用户的「用户」页里,否则限制可能被绕过。

客户端:把私钥放到 /root/.ssh/ 并设为仅 root 可读;在 环境变量 页添加 BORG_RSH,值类似 ssh -i /root/.ssh/<私钥文件> -o StrictHostKeyChecking=accept-new;创建远程仓库,路径是服务器目标共享文件夹之内的新子目录;再按上文创建归档。

仅追加有代价:客户端不能自己清理旧备份,要在服务器端用 紧密 页回收空间。

检查结果 ​

  1. 仓库页列表里能看到新归档,名称是前缀加时间。
  2. 设了邮件时,收到成功邮件;日志里有统计信息。
  3. 挂载仓库能看到文件,之后记得卸载。
  4. 重启后计划任务照常运行。

备份与维护 ​

  • 周期性检查:每月对重要仓库做检查;怀疑存储介质有问题时做校验。
  • 源数据的完整性不由 Borg 保证:源上的数据如果已经静默损坏,备份里也是坏的。需要位腐烂防护,用 Btrfs、ZFS 或 SnapRAID。
  • 仓库本身也需要备份:在 NAS 之外再留一份,见 异地与云端备份。
  • 移除仓库:仓库页的 Remove(官方中文显示为「删除」)只在插件里删除配置,不删除文件;Delete + Files(官方中文「删除 + 文件」)才会删文件,而且要先删掉指向它的归档配置。两个按钮的中文名很像,而且 Remove 的中文确认框把英文原意译反了(写成「这将删除全部文件」,英文原文是「不会删除任何文件」),按英文理解。
  • 卸载插件:已备份的仓库文件仍在磁盘上,可以重新导入(跳过初始化),但要有口令和密钥文件。
  • 8.2.2 修复了口令在命令输出和错误信息里泄漏的问题,保持更新。

常见问题 ​

远程仓库连不上,提示 Permission denied。 检查 root 用户的 SSH 密钥、BORG_RSH 里的密钥路径和权限,以及服务器端是否装了 BorgBackup 插件。

远程路径被拒绝。 Serve 模式下仓库路径必须在目标共享文件夹之内。

仓库越来越大。 没有做 compact;加一个紧密任务。

口令正确却打不开加密仓库。 本机缺密钥文件,导入下载的密钥文件。

参考资料 ​

OpenMediaVault 非官方中文使用指南,与 openmediavault 项目及其开发者无隶属关系。