Bacula 是什么
Bacula 是开源的企业级集中备份框架,把备份拆成三个可分开部署的组件:Director 负责策略与作业调度,Storage Daemon 负责往磁盘或磁带上读写数据,File Daemon 装在被备份主机上采集文件。三者通过网络通信,作业定义、介质索引与每个文件的落点统一记录在 Catalog 数据库里,因此可以精确到某次作业里的某个文件去做恢复。它适合几十台以上主机的统一备份,缺点是组件多、配置项多。
基本信息
| 适用平台 | Linux/Unix 为主,另有 Windows、BSD 客户端 |
|---|---|
| 核心组件 | Director、Storage Daemon、File Daemon |
| 配置文件 | /etc/bacula/bacula-dir.conf 等(目录随发行版与安装方式不同) |
| 默认端口 | 9101 Director、9102 File Daemon、9103 Storage Daemon |
| 权限要求 | 服务以独立系统用户运行,bconsole 管理控制台需在 Director 中授权 |
| 关键依赖 | Catalog 数据库需 PostgreSQL 或 MySQL |
典型使用场景
- 几十台以上主机的统一备份:集中写作业与策略,客户端只装 File Daemon
- 磁盘与磁带混合介质:用介质池(Pool)分池存放,按用途设置保留期
- 需要文件级恢复:Catalog 记录每个文件的落点,可只恢复一个目录里的某个文件
- 带机械手的环境:Storage Daemon 通过 Autochanger 驱动换带
- 归档合规:把归档作业与常规备份分开,长期介质单独保留、单独轮换
job 定义片段
job 定义片段
# /etc/bacula/bacula-dir.conf 作业定义示意
Job {
Name = "BackupHost1" # 作业名,全库唯一
Type = Backup # 备份作业(Restore 为恢复)
Client = host1-fd # 使用哪个 File Daemon
FileSet = "FullSet" # 备份哪些路径与排除规则
Schedule = "WeeklyCycle" # 引用周期计划
Storage = File # 写到哪个存储设备
Pool = Default # 介质池
Level = Incremental # 备份级别
}
# 改配置后先做语法检查再重载
bacula-dir -t -c /etc/bacula/bacula-dir.conf
systemctl reload bacula-dirbconsole 作业字段读法
| 字段 | 含义 | 正常/异常 |
|---|---|---|
| JobId | 作业唯一编号,恢复时按它定位 | 断号说明有作业未成功创建 |
| Level | F 全量、D 差分、I 增量 | 增量频繁退化成 F 说明级联条件被破坏 |
| JobFiles | 本次处理的文件数 | 明显低于历史同期要查 FileSet 是否漏配路径 |
| JobBytes | 本次写入的字节数 | 长期为 0 说明没有数据真正落盘 |
| JobStatus | T 正常、W 警告、E 错误 | 出现 E 必须立刻查作业日志 |
| Termination | 作业结束原因 | 反复出现同一原因要和日志联合定位 |
Catalog 是 Bacula 的命门:作业历史、介质索引、文件落点全在库里。它必须放在与备份数据不同的位置,并自己也被备份,否则会出现介质还在、索引没了、恢复无从下手的局面。
建议先在三台主机的小环境跑通「备份 → 列出 → 单文件恢复 → 整目录恢复」闭环,再把策略复制到生产。组件间认证与网络配置繁琐,直接在生产上调参成本很高。
社区版与商业版的组件与功能范围不同,具体能力边界以所用版本的官方文档为准。