外观
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,硬刷新浏览器。
配置与使用
创建仓库
- 在
存储器 → 共享文件夹(Storage → Shared Folders)为备份盘新建一个共享文件夹,例如borg_local_repo,见 共享文件夹。 服务 → BorgBackup → 源→ 创建(Create):
| 字段 | 说明 |
|---|---|
| 名称(Name) | 仓库名 |
| 类型(Type) | 本地(Local)选共享文件夹;远程(Remote)填 user@hostname:path,要先配好 SSH 密钥 |
| 口令(Passphrase) | 访问仓库的口令 |
| 加密(Encryption) | 勾上,原因见上文 |
| 跳过初始化(Skip init) | 只在导入已经存在的仓库时勾选 |
| 存储配额(Storage quota) | 例如 500G,留空不限制 |
- 保存,点黄色提示条上的应用,然后立刻下载密钥文件。
创建备份任务(归档)
服务 → 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,读全部数据,最慢)。
做一次恢复测试
备份没试过恢复,就等于没备份。 建议配好以后马上做一次,之后每季度做一次:
源页选中仓库点列表,确认最新归档的时间是你期望的。- 在
存储器 → 共享文件夹新建一个空的共享文件夹,例如restore_test。 - 对最新归档点提取,目标选
restore_test,不勾选原始位置。 - 在 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。
服务器端:
服务 → SSH(Services → SSH)启用 SSH。- 建一个专用用户,加入
_ssh组。 - 建一个共享文件夹用来存备份,给这个用户读/写权限。
服务 → BorgBackup → 服务→ 创建:填名称、登录用户(Login user)、目标共享文件夹(Target shared folder,客户端被锁在这个文件夹里)、仅追加(Append-only,默认勾选)、可选配额、客户端公钥(Client public key,留空则自动生成密钥对,之后可下载私钥)。- 保存、应用。不要再把同一把公钥加到这个用户的「用户」页里,否则限制可能被绕过。
客户端:把私钥放到 /root/.ssh/ 并设为仅 root 可读;在 环境变量 页添加 BORG_RSH,值类似 ssh -i /root/.ssh/<私钥文件> -o StrictHostKeyChecking=accept-new;创建远程仓库,路径是服务器目标共享文件夹之内的新子目录;再按上文创建归档。
仅追加有代价:客户端不能自己清理旧备份,要在服务器端用 紧密 页回收空间。
检查结果
- 仓库页列表里能看到新归档,名称是前缀加时间。
- 设了邮件时,收到成功邮件;日志里有统计信息。
- 挂载仓库能看到文件,之后记得卸载。
- 重启后计划任务照常运行。
备份与维护
- 周期性检查:每月对重要仓库做检查;怀疑存储介质有问题时做校验。
- 源数据的完整性不由 Borg 保证:源上的数据如果已经静默损坏,备份里也是坏的。需要位腐烂防护,用 Btrfs、ZFS 或 SnapRAID。
- 仓库本身也需要备份:在 NAS 之外再留一份,见 异地与云端备份。
- 移除仓库:仓库页的 Remove(官方中文显示为「删除」)只在插件里删除配置,不删除文件;Delete + Files(官方中文「删除 + 文件」)才会删文件,而且要先删掉指向它的归档配置。两个按钮的中文名很像,而且 Remove 的中文确认框把英文原意译反了(写成「这将删除全部文件」,英文原文是「不会删除任何文件」),按英文理解。
- 卸载插件:已备份的仓库文件仍在磁盘上,可以重新导入(跳过初始化),但要有口令和密钥文件。
- 8.2.2 修复了口令在命令输出和错误信息里泄漏的问题,保持更新。
常见问题
远程仓库连不上,提示 Permission denied。 检查 root 用户的 SSH 密钥、BORG_RSH 里的密钥路径和权限,以及服务器端是否装了 BorgBackup 插件。
远程路径被拒绝。 Serve 模式下仓库路径必须在目标共享文件夹之内。
仓库越来越大。 没有做 compact;加一个紧密任务。
口令正确却打不开加密仓库。 本机缺密钥文件,导入下载的密钥文件。
参考资料
- 插件源码:openmediavault-borgbackup
- omv-extras wiki:BorgBackup Plugin For OMV8(2026-06-04 更新,含 Serve 章节)
- Borg 官方文档:borgbackup.readthedocs.io