Bacula是一套成熟的开源备份软件,采用客户端/服务器架构,由Director统一调度,Storage Daemon负责存储介质管理,File Daemon部署在被备份的机器上读取数据。三个组件可以分散部署也可以合并在一台服务器上,非常适合中小企业搭建集中式备份平台。本文以Ubuntu 22.04为例,演示在单机上部署全部组件并完成一次完整备份与恢复的全过程。

一、安装Bacula核心组件与数据库
在Ubuntu上安装Bacula非常简单,官方仓库中已经包含了所需的软件包。执行以下命令即可安装Director、Storage Daemon、File Daemon以及MySQL后端支持。安装过程中系统会提示设置数据库管理员密码和Bacula专用数据库密码,建议使用强密码并妥善记录。
sudo apt update sudo apt install bacula-server bacula-client bacula-common-mysql mysql-server -y
安装完成后,debconf会自动创建名为bacula的数据库并导入初始表结构。如果自动初始化失败,可以手动执行初始化脚本。数据库中保存着任务定义、客户端列表、任务历史记录等核心信息,是Director正常运行的基础,因此建议对MySQL做好定期维护,至少要保证这个库本身也在备份范围内,否则Director一旦损坏所有任务配置都会丢失。
# 手动初始化数据库(如自动创建失败时使用) sudo cp /usr/share/bacula-director/mysql/update_mysql_tables.sql /tmp/ sudo mysql -u root -p bacula < /usr/lib/bacula/scripts/grant_mysql_privileges.sql
二、配置存储池与自动清理策略
Bacula的配置文件位于/etc/bacula目录下,核心文件包括bacula-dir.conf、bacula-sd.conf和bacula-fd.conf。首先要在bacula-dir.conf中定义Storage资源,指定Storage Daemon的地址和密码,然后规划存储池。生产环境建议至少建两个Pool:一个存放完全备份,一个存放增量备份,并通过Maximum Volume Jobs和Volume Retention控制卷的轮转。
Pool {
Name = FullBackup
Pool Type = Backup
Recycle = yes
AutoPrune = yes
Volume Retention = 90 days
Maximum Volume Jobs = 10
Label Format = "Full-"
}
Pool {
Name = IncBackup
Pool Type = Backup
Recycle = yes
AutoPrune = yes
Volume Retention = 30 days
Maximum Volume Jobs = 20
Label Format = "Inc-"
}存储介质建议单独挂载一块磁盘或网络存储,并在bacula-sd.conf中配置对应的Device和Archive Device路径。路径权限必须允许bacula用户读写,否则任务会在挂载卷时直接报错。AutoPrune开启后,过期的任务记录会自动清理,Recycle则允许覆写已标记为可回收的卷,两者配合可以避免存储空间被无限占用,这是长期稳定运行的关键设置。
三、定义备份任务并触发首次备份
Job资源是Bacula的核心调度单元,需要指定JobDefs模板、客户端、文件集和存储池。文件集决定了备份哪些目录,客户端指向File Daemon配置。下面是一个备份本地Web数据的完整任务定义。
JobDefs {
Name = "DefaultJob"
Type = Backup
Level = Incremental
Client = "ubuntu-fd"
FileSet = "WebData"
Schedule = "WeeklyCycle"
Storage = File1
Messages = Standard
Pool = IncBackup
Full Backup Pool = FullBackup
Priority = 10
}
FileSet {
Name = "WebData"
Include {
Options { signature = MD5 }
File = /var/www
File = /etc/nginx
}
}
Job {
Name = "BackupWeb"
JobDefs = "DefaultJob"
}配置完成后重启服务并使用bconsole验证。进入bconsole后执行status director检查各组件连接状态,全部显示OK后执行run命令手动触发一次Full备份,用messages查看任务输出,出现Termination说明任务结束。
sudo systemctl restart bacula-director bacula-sd bacula-fd sudo bconsole # 在bconsole交互环境中执行: # status director # run job=BackupWeb level=Full # messages
四、恢复验证与常见问题排查
备份是否有效只有通过恢复才能验证。在bconsole中执行restore命令,选择最近一次备份任务,标记需要恢复的文件后执行,默认会恢复到客户端的/tmp/bacula-restores目录,确认无误后再覆盖回原位置。建议每次备份策略调整后都做一次抽样恢复演练,这是很多团队容易忽略的环节。
排查问题主要看三处日志:/var/log/bacula/bacula.log记录Director调度详情,journalctl -u bacula-sd查看存储端状态,客户端问题则看File Daemon日志。最常见的故障是组件之间无法连接,Bacula涉及9101、9102、9103三个端口,务必用telnet或nc验证连通性。另外要注意各配置文件中的密码必须与 Director 中对应资源的密码一致,密码不匹配会报授权失败错误。还有一点经验:Director、SD、FD三处的Name字段要保持全局唯一且配置互相引用正确,任何一个名字对不上都会导致任务调度失败。
到这里,一套单机版Bacula备份系统就搭建完成了。后续如果要备份多台服务器,只需在目标机器安装File Daemon,将其Client配置加入bacula-dir.conf并重载即可,扩展成本很低,非常适合逐步纳入更多业务主机形成统一的备份管理体系。
Ubuntu部署BaculaBacula备份系统Linux备份方案修改时间:2026-09-03 12:30:50