介绍
Bacula是一个开源网络备份解决方案,允许您创建备份和执行计算机系统的数据恢复。它非常灵活和健壮,这使得它,虽然配置稍微麻烦,适合在许多情况下的备份。备份系统是 在大多数服务器基础架构的重要组成部分 ,从数据丢失恢复往往是灾难恢复计划的重要组成部分。 在本教程中,我们将向您展示如何在Ubuntu 14.04服务器上安装和配置Bacula服务器组件。我们将配置Bacula执行每周作业,创建本地备份(即其自己的主机的备份)。这本身并不是Bacula特别引人注目的用途,但它将为您创建其他服务器(即备份客户端)的备份提供一个良好的起点。本系列的下一个教程将介绍如何通过安装和配置Bacula客户端以及配置Bacula服务器来创建其他远程服务器的备份。 如果你想用CentOS 7代替,请点击此链接: 如何在CentOS 7安装Bacula服务器 。先决条件
您必须在Ubuntu 14.04服务器上具有超级用户(sudo)访问权限。此外,服务器将需要足够的磁盘空间用于计划在任何给定时间保留的所有备份。 如果你正在使用DigitalOcean,您应在Bacula服务器上启用 专用网络 ,以及所有在同一个数据中心的区域客户端服务器。这将允许您的服务器在执行备份时使用专用网络,从而减少网络开销。 我们将配置Bacula使用我们的服务器,如私人FQDNbacula.private.example.com
。如果您没有DNS设置,请改用相应的IP地址。如果您没有启用专用网络,请将本教程中的所有网络连接信息替换为相关服务器可访问的网络地址(例如公共IP地址或VPN隧道)。 让我们先来看看Bacula组件概述。
Bacula组件概述
虽然Bacula由几个软件组件组成,它遵循服务器 - 客户端备份模型;为了简化讨论,我们将集中更多的 备份服务器 ,并比个人Bacula组件 备份客户端上。但是,重要的是要对各种Bacula组件有粗略的了解,所以我们现在将讨论它们。 一个Bacula 服务器 ,我们也称之为“备份服务器”,以下组件:- Bacula Director(DIR):软件控制的备份和恢复由该文件和存储守护程序执行的操作
- Storage Daemon(SD):执行读取和用于备份的存储设备写入软件
- Catalog:即维护备份文件的数据库服务。数据库存储在SQL数据库(如MySQL或PostgreSQL)中
- Bacula Console:一个命令行界面,允许备份管理员进行交互和控制,Bacula董事
注:Bacula的服务器组件不需要在同一台服务器上运行,但他们都共同提供备份服务器功能。一个Bacula 客户端 ,也就是将要备份的服务器,运行 文件守护程序(FD)的组成部分。文件守护程序是为Bacula服务器(特别是主任)提供对将要备份的数据的访问的软件。我们还将这些服务器称为“备份客户端”或“客户端”。 正如我们在介绍中指出的,我们将配置备份服务器以创建其自己的文件系统的备份。这意味着备份服务器也将是一个备份客户端,并将运行文件守护程序组件。 让我们开始安装。
安装MySQL
Bacula使用SQL数据库(如MySQL或PostreSQL)来管理其备份目录。我们将在本教程中使用MySQL。 首先,更新apt-get:sudo apt-get update
现在使用apt-get安装MySQL服务器:
sudo apt-get install mysql-server
将提示您输入MySQL数据库管理用户root的密码。输入密码,然后确认。 记住此密码,因为它将用于Bacula安装过程。
安装Bacula
安装Bacula服务器和客户端组件,使用apt-get:sudo apt-get install bacula-server bacula-client
系统将提示您输入一些将用于配置Postfix的信息,Bacula使用:
- 邮件配置一般类型:选择“互联网网站”
- 系统邮件名称:输入您的服务器的FQDN或主机名
- 配置Bacula导演MySQL的使用DBCONFIG常见的数据库?:选择“是”
- 数据库的管理用户的密码:输入你的MySQL root密码(MySQL的安装过程中设置)
- 对于Bacula主任-mysql的MySQL的应用程序密码 :输入新密码并确认,或将提示空白生成随机密码
sudo chmod 755 /etc/bacula/scripts/delete_catalog_backup
Bacula服务器(和客户端)组件现在已安装。让我们创建备份和恢复目录。
创建备份和还原目录
Bacula需要一个 备份目录,用于存储备份存档和 恢复目录,其中恢复的文件将被放置。如果系统有多个分区,请确保在具有足够空间的目录上创建目录。 让我们为这两个目的创建新目录:sudo mkdir -p /bacula/backup /bacula/restore
我们需要更改文件权限,以便只有bacula进程(和超级用户)可以访问这些位置:
sudo chown -R bacula:bacula /bacula
sudo chmod -R 700 /bacula
现在我们准备配置Bacula Director。
配置Bacula Director
Bacula有几个组件,必须独立配置才能正常工作。配置文件都可以在找到/etc/bacula
目录中。 我们将从Bacula Director开始。 在您喜欢的文本编辑器中打开Bacula Director配置文件。我们将使用vi:
sudo vi /etc/bacula/bacula-dir.conf
配置本地作业
Bacula作业用于执行备份和恢复操作。作业资源定义特定作业将执行的操作的详细信息,包括客户端的名称,要备份或恢复的FileSet等。 在这里,我们将配置将用于执行本地文件系统备份的作业。 在Director配置,找到“BackupClient1”(搜索“BackupClient1”)的名称 作业的资源。 的值更改Name
为“BackupLocalFiles”,所以它看起来是这样的:
bacula-dir.conf - 重命名BackupClient1作业
Job {
Name = "BackupLocalFiles"
JobDefs = "DefaultJob"
}
接下来,找到名为“RestoreFiles”(搜索“RestoreFiles”)的
工作资源。 在这个岗位上,你想改变两件事:更新的值,
Name
为“RestoreLocalFiles”,而价值
Where
,以“/ Bacula/恢复”。它应该看起来像这样:
bacula-dir.conf - 重命名RestoreFiles作业
Job {
Name = "RestoreLocalFiles"
Type = Restore
Client=BackupServer-fd
FileSet="Full Set"
Storage = File
Pool = Default
Messages = Standard
Where = /bacula/restore
}
此配置RestoreLocalFiles作业以还原文件
/bacula/restore
的目录中,我们前面创建。
配置文件集
一个文件集Bacula定义了一组文件或目录 包含或 排除备份选择的文件,并通过作业使用。 找到名为“完整集”的FileSet资源(它在注释说“#要备份的文件列表”)。在这里,我们将实现三个转变:(1)添加到使用gzip压缩备份我们的选项,(2)改变包括文件/usr/sbin
为
/
,和(3)更改第二个排除文件
/bacula
。删除评论后,应该看起来像这样:
bacula-dir.conf - 更新“完全设置”FileSet
FileSet {
Name = "Full Set"
Include {
Options {
signature = MD5
compression = GZIP
}
File = /
}
Exclude {
File = /var/lib/bacula
File = /bacula
File = /proc
File = /tmp
File = /.journal
File = /.fsck
}
}
让我们来看看我们对“完全集”FileSet所做的更改。首先,我们在创建备份存档时启用gzip压缩。第二,我们在包括
/
,即根分区,来进行备份。 第三,我们均不含
/bacula
,因为我们不想冗余备份Bacula我们的备份和恢复的文件。
Note: 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.
请记住,如果您始终在备份作业中使用广泛的文件集(例如“完整集”),则备份将需要比备份选择更具体的磁盘空间。例如,只包含自定义配置文件和数据库的FileSet可能足以满足您的需要,如果您有一个明确的恢复计划,详细安装所需的软件包,并将恢复的文件放置在正确的位置,而只使用一小部分备份存档的磁盘空间。
配置存储后台进程连接
在Bacula Director配置文件中,存储资源定义了Director应连接到的存储后台程序。我们将在稍后配置实际的存储守护程序。 查找存储资源,并更换地址,值localhost
,用你的备份服务器的FQDN私人(或私有IP地址)。它应该看起来像这样(替换突出显示的词):
bacula-dir.conf - 更新存储地址
Storage {
Name = File
# Do not use "localhost" here
Address = backup_server_private_FQDN # N.B. Use a fully qualified name here
SDPort = 9103
Password = "ITXAsuVLi1LZaSfihQ6Q6yUCYMUssdmu_"
Device = FileStorage
Media Type = File
}
这是必要的,因为我们将配置存储守护程序在专用网络接口上侦听,以便远程客户端可以连接到它。
配置池
池资源定义了Bacula用于写入备份的存储集。我们将使用文件作为存储卷,我们将仅更新标签,以便我们的本地备份被正确标记。 找到名为“文件”的池资源(它在注释说“#文件池定义”),并添加一行指定标签格式。完成后应该看起来像这样:
bacula-dir.conf - 更新池:
# File Pool definition
Pool {
Name = File
Pool Type = Backup
Label Format = Local-
Recycle = yes # Bacula can automatically recycle Volumes
AutoPrune = yes # Prune expired volumes
Volume Retention = 365 days # one year
Maximum Volume Bytes = 50G # Limit Volume size to something reasonable
Maximum Volumes = 100 # Limit number of Volumes in Pool
}
保存并退出。你终于完成了Bacula Director的配置。
检查引导程序配置:
让我们验证您的Director配置文件中没有语法错误:sudo bacula-dir -tc /etc/bacula/bacula-dir.conf
如果没有错误信息,您
bacula-dir.conf
文件没有语法错误。 接下来,我们将配置存储后台程序。
配置存储后台进程
我们的Bacula服务器几乎已经设置好,但是我们仍然需要配置存储后台程序,因此Bacula知道在哪里存储备份。 在您喜欢的文本编辑器中打开SD配置。我们将使用vi:sudo vi /etc/bacula/bacula-sd.conf
配置存储资源
查找存储资源。这定义了SD进程将侦听连接的位置。添加SDAddress
参数,并将其分配给备份服务器的FQDN私人(或私有IP地址):
bacula-sd.conf - 更新SDAddress
Storage { # definition of myself
Name = BackupServer-sd
SDPort = 9103 # Director's port
WorkingDirectory = "/var/lib/bacula"
Pid Directory = "/var/run/bacula"
Maximum Concurrent Jobs = 20
SDAddress = backup_server_private_FQDN
}
配置存储设备
接下来,找到名为“FileStorage”(搜索“FileStorage”),设备资源,更新的价值Archive Device
,以配合您的备份目录:
bacula-sd.conf - 更新存档设备
Device {
Name = FileStorage
Media Type = File
Archive Device = /bacula/backup
LabelMedia = yes; # lets Bacula label unlabeled media
Random Access = Yes;
AutomaticMount = yes; # when device opened, read it
RemovableMedia = no;
AlwaysOpen = no;
}
保存并退出。
验证存储后台进程配置
让我们验证您的存储后台程序配置文件中没有语法错误:sudo bacula-sd -tc /etc/bacula/bacula-sd.conf
如果没有错误信息,您
bacula-sd.conf
文件中有没有语法错误。 我们已经完成了Bacula配置。我们准备重新启动Bacula服务器组件。
重新启动Bacula Director和存储后台进程
要使您生效的配置更改生效,请使用以下命令重新启动Bacula Director和Storage Daemon:sudo service bacula-director restart
sudo service bacula-sd restart
现在两个服务都已重新启动,让我们通过运行备份作业来测试它是否正常。
测试备份作业
我们将使用Bacula控制台运行我们的第一个备份作业。如果它运行没有任何问题,我们将知道Bacula配置正确。 现在使用此命令输入控制台:sudo bconsole
这将带您到Bacula控制台提示,由记
*
提示。
创建标签
通过发出一个开始label
的命令:
label
将提示您输入卷名称。输入任何您想要的名称:
Enter new Volume name:MyVolume
然后选择备份应使用的池。我们将使用我们之前配置的“文件”池,输入“2”:
Select the Pool (1-3):2
手动运行备份作业
Bacula现在知道我们要如何为我们的备份写入数据。我们现在可以运行备份来测试它是否正常工作:run
系统将提示您选择要运行的作业。我们要运行“BackupLocalFiles”作业,因此在提示符处输入“1”:
Select Job resource (1-3):1
在“运行备份作业”确认提示下,查看详细信息,然后输入“yes”运行作业:
yes
检查消息和状态
运行一个工作后,Bacula会告诉你你有消息。消息是通过运行作业生成的。 键入以下内容检查消息:messages
消息应该说“找不到先前的完全备份作业记录”,并且备份作业已启动。如果有任何错误,有什么问题,他们应该给你一个提示,为什么工作没有运行。 另一种查看作业状态的方法是检查Director的状态。为此,请在bconsole提示符处输入此命令:
status director
如果一切正常,您应该看到您的作业正在运行。这样的东西:
Output — status director (Running Jobs)Running Jobs:
Console connected at 09-Apr-15 12:16
JobId Level Name Status
======================================================================
3 Full BackupLocalFiles.2015-04-09_12.31.41_06 is running
====
作业完成后,它将移动到状态报告的“终止的作业”部分,如下所示:
Output — status director (Terminated Jobs)Terminated Jobs:
JobId Level Files Bytes Status Finished Name
====================================================================
3 Full 161,124 877.5 M OK 09-Apr-15 12:34 BackupLocalFiles
“OK”状态表示备份作业没有任何问题。恭喜!您有Bacula服务器的“完整集”的备份。 下一步是测试还原作业。
测试恢复作业
现在已经创建了一个备份,重要的是检查它是否可以正确恢复。该restore
命令将允许我们恢复已备份的文件。
运行还原所有作业
为了演示,我们将恢复上次备份中的所有文件:restore all
将出现一个选择菜单,其中有许多不同的选项,用于标识要还原哪个备份集。由于我们只有一个备份,让我们选择最近的备份 - 选择选项5:
Select item (1-13):5
因为只有一个客户端,Bacula服务器,它会自动被选中。 下一个提示将询问您要使用哪个FileSet。选择“Full Set”,应为2:
Select FileSet resource (1-2):2
这将使您进入具有所备份的整个目录结构的虚拟文件树。这个类shell接口允许简单的命令来标记和取消标记要恢复的文件。 因为我们指定我们想要“还原所有”,每个备份的文件已经标记为还原。标记的文件是由领先的表示
*
字符。 如果要调整选择,可以使用“ls”和“cd”命令导航和列出文件,使用“mark”标记要恢复的文件,并取消标记具有“unmark”的文件。通过在控制台中输入“help”可以获得完整的命令列表。 完成恢复选择后,请键入以下内容继续:
done
确认要运行还原作业:
OK to run? (yes/mod/no):yes
检查消息和状态
与备份作业一样,应在运行还原作业后检查消息和Director状态。 键入以下内容检查消息:messages
应该有一条消息表明还原作业已启动或已通过“恢复确定”状态终止。如果有任何错误,有什么问题,他们应该给你一个提示,为什么工作没有运行。 同样,检查Director状态是一个很好的方式来查看恢复作业的状态:
status director
当你与恢复完成后,键入
exit
离开Bacula控制台:
exit
验证恢复
要验证还原作业实际还原选定的文件,你可以看看在/bacula/restore
目录(这是在Director配置了“RestoreLocalFiles”的工作定义):
sudo ls -la /bacula/restore
您应该在根文件系统中看到已恢复的文件副本,但不包括在“RestoreLocalFiles”作业的“排除”部分中列出的文件和目录。如果您尝试从数据丢失中恢复,您可以将恢复的文件复制到其相应的位置。
删除已恢复的文件
您可能需要删除已恢复的文件以释放磁盘空间。为此,请使用以下命令:sudo -u root bash -c "rm -rf /bacula/restore/*"
请注意,您必须先运行此
rm
命令,作为根,因为很多恢复的文件属于root。