介绍
Bacula 是一个开源网络备份解决方案,允许您创建备份并执行您的计算机系统的数据恢复。它非常灵活和坚固,这使得它,虽然配置有点麻烦,但适合在许多情况下进行备份。
在本教程中,我们将向您展示如何在Ubuntu 14.04服务器上安装和配置Bacula的服务器组件. 我们将配置Bacula以执行每周的工作,创建本地备份(即自己的主机的备份)。
如果您更喜欢使用 CentOS 7,请遵循以下链接: How To Install Bacula Server on CentOS 7。
前提条件
您必须在 Ubuntu 14.04 服务器上拥有超级用户 (sudo) 访问权限,并且服务器将需要足够的磁盘空间用于您计划在任何时间保留的所有备份。
如果您正在使用 DigitalOcean,您应该在您的 Bacula 服务器上启用 私人网络 ,以及位于同一数据中心区域的所有客户端服务器。
我们将配置 Bacula 以使用我们的服务器的私人 FQDN,例如 bacula.private.example.com
. 如果您没有 DNS 设置,请使用相应的 IP 地址。
让我们从Bacula的成分的概述开始。
Bacula 组件概述
虽然Bacula由几个软件组件组成,但它遵循服务器客户端备份模型;为了简化讨论,我们将更多地关注 备份服务器 和 ** 备份客户端** ,而不是单个Bacula组件。
一个Bacula 服务器 ,我们也将称之为备份服务器
,具有以下组件:
- Bacula Director (DIR): 软件,控制的备份和恢复操作,由文件和存储大师
- Storage Daemon (SD): 软件,在用于备份
- 使用的存储设备上进行读取和写作 ** 目录:** 维护备份文件的数据库的服务. 数据库存储在SQL数据库,如MySQL或PostgreSQL
- Bacula Console: 一个命令行界面,允许备份管理员与,并控制,Bacula Director
1Note: The Bacula server components don't need to run on the same server, but they all work together to provide the backup server functionality.
一个 Bacula client ,即将备份的服务器,运行了 ** File Daemon (FD)** 组件. 该文件 Daemon 是软件,为 Bacula 服务器(具体来说是 Director)提供访问将备份的数据。
正如我们在介绍中所指出的那样,我们将配置备份服务器以创建自己的文件系统的备份,这意味着备份服务器也将是一个备份客户端,并将运行 File Daemon 组件。
让我们从安装开始。
安装思维
Bacula 使用 SQL 数据库,如 MySQL 或 PostreSQL,以管理其备份目录. 我们将在本教程中使用 MySQL。
首先,更新 apt-get:
1sudo apt-get update
现在使用 apt-get 安装 MySQL 服务器:
1sudo apt-get install mysql-server
您将被要求为 MySQL 数据库管理用户, root 的密码,输入密码,然后确认。
记住这个密码,因为它将在Bacula安装过程中使用。
安装 Bacula
安装 Bacula 服务器和客户端组件,使用 apt-get:
1sudo apt-get install bacula-server bacula-client
您将被提示一些信息,将用于配置Postfix,Bacula使用:
- ** 通用邮件配置类型:** 选择
互联网网站
- 系统邮件名称: 输入您的服务器的 FQDN 或主机名称
接下来,您将被提示获取将用于设置 Bacula 数据库的信息:
- 以 dbconfig-common为 bacula-director-mysql配置数据库: 选择
Yes
- 数据库管理用户的密码: 输入您的MySQL根密码(在MySQL安装过程中设置)
- MySQL应用程序密码为 bacula-director-mysql :输入新的密码并确认它,或留下提示空以生成随机密码
安装的最后一步是更新 Bacula 在其目录备份过程中使用的脚本的权限:
1sudo chmod 755 /etc/bacula/scripts/delete_catalog_backup
现在安装了 Bacula 服务器(和客户端)组件,让我们创建备份和恢复目录。
创建备份和恢复目录
Bacula需要一个 备份 目录 - 用于存储备份档案 - 和 ** 恢复** 目录 - 将恢复的文件放置在那里. 如果您的系统有多个分区,请确保在一个有足够的空间中创建目录。
让我们为这两个目的创建新的目录:
1sudo mkdir -p /bacula/backup /bacula/restore
我们需要更改文件权限,以便只有 bacula 进程(和超级用户)才能访问这些位置:
1sudo chown -R bacula:bacula /bacula
2sudo chmod -R 700 /bacula
现在我们已经准备好配置Bacula Director。
配置 Bacula 导演
Bacula 有几个组件,必须独立配置才能正常运作. 配置文件都可以在 /etc/bacula
目录中找到。
我们将从Bacula主任开始。
在您最喜欢的文本编辑器中打开 Bacula Director 配置文件. 我们将使用 vi:
1sudo vi /etc/bacula/bacula-dir.conf
配置本地工作岗位
工作资源定义了特定任务的细节,包括客户端的名称、备份或恢复的 FileSet 等。
在这里,我们将配置用于执行本地文件系统备份的任务。
在管理器配置中,找到名为BackupClient1
的 Job 资源(搜索BackupClient1
)。
1[label bacula-dir.conf — Rename BackupClient1 job]
2Job {
3 Name = "BackupLocalFiles"
4 JobDefs = "DefaultJob"
5}
接下来,找到名为RestoreFiles
的 Job 资源(搜索RestoreFiles
)。 在此任务中,您要更改两件事:更新Name
值为RestoreLocalFiles
,以及Where
值为/bacula/restore
。
1[label bacula-dir.conf — Rename RestoreFiles job]
2Job {
3 Name = "RestoreLocalFiles"
4 Type = Restore
5 Client=BackupServer-fd
6 FileSet="Full Set"
7 Storage = File
8 Pool = Default
9 Messages = Standard
10 Where = /bacula/restore
11}
这将配置 RestoreLocalFiles 任务来将文件恢复到 /bacula/restore
,我们之前创建的目录。
配置文件集
Bacula FileSet 定义了一组文件或目录,以从备份选择中 包括 或 ** 排除** 文件,并由工作使用。
查找名为Full Set
的FileSet资源(在评论中说# 备份的文件列表
)这里,我们将做出三个更改:(1)添加使用gzip来压缩我们的备份的选项,(2)更改包括文件从/usr/sbin
到/
,并 (3)更改第二排除文件到/bacula
。
1[label bacula-dir.conf — Update "Full Set" FileSet]
2FileSet {
3 Name = "Full Set"
4 Include {
5 Options {
6 signature = MD5
7 compression = GZIP
8 }
9File = /
10}
11 Exclude {
12 File = /var/lib/bacula
13 File = /bacula
14 File = /proc
15 File = /tmp
16 File = /.journal
17 File = /.fsck
18 }
19}
首先,我们在创建备份档案时启用了 gzip 压缩,其次,我们将包括 /
,即根分区,以备份,第三,我们将排除 `/bacula,因为我们不想重复备份我们的 Bacula 备份和恢复的文件。
1Note: If you have partitions that are mounted within /, and you want to include those in the FileSet, you will need to include additional File records for each of them.
请记住,如果您在备份工作中总是使用广泛的 FileSets,例如Full Set
,则您的备份将需要更多的磁盘空间,而不是如果您的备份选项更为具体。
配置存储 Daemon 连接
在 Bacula Director 配置文件中,存储资源定义了管理员应该连接的存储 DAEMON,我们会在一瞬间配置实际的存储 DAEMON。
查找存储资源,并用备份服务器的私人 FQDN (或私人 IP 地址) 替换地址值,即本地主机
。
1[label bacula-dir.conf — Update Storage Address]
2Storage {
3 Name = File
4# Do not use "localhost" here
5 Address = backup_server_private_FQDN # N.B. Use a fully qualified name here
6 SDPort = 9103
7 Password = "ITXAsuVLi1LZaSfihQ6Q6yUCYMUssdmu_"
8 Device = FileStorage
9 Media Type = File
10}
这是必要的,因为我们将配置 Storage Daemon 在私人网络界面上聆听,以便远程客户端可以连接到它。
配置池
一个池资源定义了Bacula用来写备份的存储集合,我们将使用文件作为我们的存储量,我们将简单地更新标签,以便我们的本地备份得到正确的标签。
查找名为File
的 Pool 资源(它在评论中表示# File Pool 定义
),然后添加指定标签格式的行。
1[label bacula-dir.conf — Update Pool:]
2# File Pool definition
3Pool {
4 Name = File
5 Pool Type = Backup
6 Label Format = Local-
7 Recycle = yes # Bacula can automatically recycle Volumes
8 AutoPrune = yes # Prune expired volumes
9 Volume Retention = 365 days # one year
10 Maximum Volume Bytes = 50G # Limit Volume size to something reasonable
11 Maximum Volumes = 100 # Limit number of Volumes in Pool
12}
保存和退出. 您终于完成了 Bacula 管理器的配置。
查看管理员配置:
让我们检查您的 Director 配置文件中没有语法错误:
1sudo bacula-dir -tc /etc/bacula/bacula-dir.conf
如果没有错误消息,则您的 bacula-dir.conf
文件没有语法错误。
接下来,我们将配置 Storage Daemon。
存储配置 DAEMON
我们的 Bacula 服务器几乎已经设置,但我们仍然需要配置 Storage Daemon,所以 Bacula 知道在哪里存储备份。
在您最喜欢的文本编辑器中打开 SD 配置,我们将使用 vi:
1sudo vi /etc/bacula/bacula-sd.conf
配置存储资源
查找存储资源. 此定义了 SD 流程会听到连接的位置. 添加SDAddress
参数,并将其分配到您的备份服务器的私人 FQDN(或私人 IP 地址):
1[label bacula-sd.conf — update SDAddress]
2Storage { # definition of myself
3 Name = BackupServer-sd
4 SDPort = 9103 # Director's port
5 WorkingDirectory = "/var/lib/bacula"
6 Pid Directory = "/var/run/bacula"
7 Maximum Concurrent Jobs = 20
8 SDAddress = backup_server_private_FQDN
9}
配置存储设备
接下来,找到名为FileStorage
的设备资源(搜索FileStorage
),并更新Archive Device
值以匹配您的备份目录:
1[label bacula-sd.conf — update Archive Device]
2Device {
3 Name = FileStorage
4 Media Type = File
5 Archive Device = /bacula/backup
6 LabelMedia = yes; # lets Bacula label unlabeled media
7 Random Access = Yes;
8 AutomaticMount = yes; # when device opened, read it
9 RemovableMedia = no;
10 AlwaysOpen = no;
11}
保存和退出。
检查存储 DAEMON 配置
让我们检查您的 Storage Daemon 配置文件中没有语法错误:
1sudo bacula-sd -tc /etc/bacula/bacula-sd.conf
如果没有错误消息,则您的 sql.conf
文件没有语法错误。
我们已经完成了 Bacula 配置,我们已经准备好重新启动 Bacula 服务器组件。
重启 Bacula 管理器和存储 Daemon
要将您所做的配置更改实施,请使用以下命令重新启动 Bacula Director 和 Storage Daemon:
1sudo service bacula-director restart
2sudo service bacula-sd restart
现在,这两个服务已经重新启动,让我们通过运行备份工作来测试它是否有效。
备份工作测试
我们将使用 Bacula Console 来执行我们的第一个备份工作. 如果它运行没有任何问题,我们将知道 Bacula 已正确配置。
现在用这个命令进入控制台:
1sudo bconsole
这将带你到Bacula Console提示,标记为*
提示。
创建一个标签
开始用一个标签
命令:
1label
您将被要求输入一个卷名称. 输入您想要的任何名称:
1[secondary_label Enter new Volume name:]
2MyVolume
然后选择备份应该使用的池,我们将使用我们之前配置的文件
池,输入2
:
1[secondary_label Select the Pool (1-3):]
22
手动执行备份工作
Bacula现在知道我们想要如何为我们的备份写数据. 我们现在可以运行我们的备份来测试它是否正常工作:
1run
我们要运行BackupLocalFiles
任务,所以在提示中输入1
:
1[secondary_label Select Job resource (1-3):]
21
在运行备份任务
的确认提示下,查看详细信息,然后输入是
来执行任务:
1yes
查看消息和状态
运行任务后,Bacula会告诉你你有消息,这些消息是通过运行任务生成的输出。
通过键入查看消息:
1messages
消息应该说没有以前的完整备份工作记录被找到
,并且备份工作开始了。
查看工作状态的另一种方法是检查主任的状态. 要做到这一点,请在 bconsole 提示处输入以下命令:
1status director
如果一切正常工作,你应该看到你的工作正在运行。
1[secondary_label Output — status director (Running Jobs)]
2Running Jobs:
3Console connected at 09-Apr-15 12:16
4 JobId Level Name Status
5======================================================================
6 3 Full BackupLocalFiles.2015-04-09_12.31.41_06 is running
7====
当你的工作完成时,它将移动到状态报告的终止工作
部分,如下:
1[secondary_label Output — status director (Terminated Jobs)]
2Terminated Jobs:
3 JobId Level Files Bytes Status Finished Name
4====================================================================
5 3 Full 161,124 877.5 M OK 09-Apr-15 12:34 BackupLocalFiles
OK
状态表明,备份工作没有任何问题。恭喜!您有您的Bacula服务器的完整设置
备份。
下一步是测试恢复工作。
检验恢复工作
现在已经创建了备份,重要的是要检查它是否可以正确恢复,恢复
命令将允许我们恢复已备份的文件。
跑 恢复所有工作
为了证明,我们将恢复我们最后的备份中的所有文件:
1restore all
选择菜单将出现许多不同的选项,用于识别从哪个备份设置恢复. 由于我们只有一个备份,让我们选择最新的备份
- 选择选项 5:
1[secondary_label Select item (1-13):]
25
因为只有一个客户端,Bacula服务器,它将自动选择。
下一个提示将询问您想要使用哪个FileSet。选择完整设置
,应该是2:
1[secondary_label Select FileSet resource (1-2):]
22
这会让您陷入一个虚拟的文件树中,其中包含您备份的整个目录结构,这种壳式界面允许简单的命令来标记和解标文件以恢复。
因为我们指定了我们想要恢复所有
,每个备份的文件已经被标记为恢复,标记的文件被标记为一个领先的*
字符。
如果你想精心调节你的选择,你可以导航和列出用ls
和cd
命令的文件,标记文件以恢复为标记
,并卸载文件以无标记
。
当您完成恢复选择时,继续键入:
1done
确认您想运行恢复任务:
1[secondary_label OK to run? (yes/mod/no):]
2yes
查看消息和状态
与备份工作一样,在运行恢复任务后,您应该检查消息和管理员状态。
通过键入查看消息:
1messages
应该有一个消息,表示恢复工作已经开始或以恢复OK
状态结束. 如果有任何错误,有什么不对劲,他们应该给你一个提示,为什么工作没有运行。
再次,检查管理员状态是查看恢复工作状态的好方法:
1status director
当您完成恢复时,键入退出
,离开 Bacula Console:
1exit
检查恢复
要验证恢复任务是否确实恢复了所选的文件,您可以在/bacula/restore
目录中查看(该目录在RestoreLocalFiles
目录中被定义为RestoreLocalFiles
目录):
1sudo ls -la /bacula/restore
您应该看到在您的根文件系统中恢复的文件副本,不包括在RestoreLocalFiles
任务的排除
部分中列出的文件和目录。
删除已恢复的文件
您可能想要删除恢复的文件以释放磁盘空间。
1sudo -u root bash -c "rm -rf /bacula/restore/*"
请注意,您必须将此rm
命令作为 root 运行,因为许多恢复的文件属于 root。
结论
您现在有一个基本的 Bacula 设置,可以备份和恢复本地文件系统. 下一步是将其他服务器添加为备份客户端,以便在数据丢失的情况下恢复它们。
下面的教程将向您展示如何将您的其他远程服务器添加为Bacula客户端: 如何使用Bacula备份Ubuntu 14.04服务器。