面向未来的备份:使用 FreeNAS 和 Bacula 淘汰磁带备份

作者:Jeramiah Bowling

当今环境中的备份正处于变革之中。多年来,磁带一直是大多数组织的主要支柱,在某些情况下甚至长达数十年。然而,随着硬盘驱动器成本的降低和容量的增加,关于备份和磁带的传统观念正在发生变化。尽管磁带仍然证明对存档和异地存储有用,但廉价的基于磁盘的技术正慢慢渗透到传统上由磁带主导的领域。

许多企业发现,通过网络将数据备份到近线存储(如存储区域网络 (SAN) 或网络附加存储 (NAS))与备份到磁带一样容易和可靠。近线存储有时也称为磁盘到磁盘 (D2D) 备份,其优点很多,尤其是速度和容量。当决定采用近线存储时,您实际上只有两种选择:SAN 或 NAS。在这两者中,NAS 对于大多数商店来说更具成本效益。在本文中,我将解释如何实现到 NAS 的近线备份,以说明从磁带过渡到磁盘是多么容易。

我选择了两个程序来实现无磁带备份的目标:FreeNAS(用于创建备份文件的网络存储区域)和 Bacula(用于自动化备份并提供伪每日、每周和每月轮换)。

为了保持简单,让我们构建两个系统,一个运行 FreeNAS,另一个在 Fedora 8 之上运行 Bacula。本文中在 Bacula 系统上完成的所有配置都以 root 用户身份执行,但也可以使用 sudo 完成。请记住,此处介绍的两个程序中的选项仅代表其全部功能的一小部分。

FreeNAS

FreeNAS 是我部署过的最简单的程序之一。它足够小,可以从 CD 或 USB 密钥运行系统。但是,对于此示例,让我们将其安装到本地硬盘上的服务器上。在您的系统上,我建议至少 256MB 的内存和 SATA 驱动器以获得不错的性能。如果您想在驱动器上使用 RAID,请使用基于硬件的解决方案。它们速度更快,并且 FreeNAS 的内置软件 RAID 功能存在问题。如果您选择使用硬件 RAID,请在购买前查看 FreeBSD 硬件兼容性列表,FreeNAS 是基于该列表的。

从 FreeNAS 站点下载最新的 ISO,并将其刻录到 CD(撰写本文时为 .684b 版本)。从 CD 启动系统,当您进入选项菜单(图 1)时,选择选项 7 以将服务器映像安装到本地硬盘。接下来,选择选项 2 以创建两个 UFS 分区。UFS 是 FreeNAS 中的本机文件系统,并且由于我们计划通过网络协议 (NFS) 访问磁盘上的数据,因此任何系统都应该连接到它。选择这些选项以创建一个用于服务器软件的小分区,并将剩余空间用于第二个数据分区。当出现提示时,输入 CD 驱动器的名称(我的安装中为 acd0),然后输入目标驱动器 (da0)。安装例程完成后,在提示符下输入 3 返回主菜单,然后输入 1 分配接口。接受默认接口,并为其指定 IP 地址(除非您使用 DHCP)。分配后,返回主菜单并重新启动计算机。取出 CD,系统现在应该从磁盘上的系统分区启动。

Backups to the Future: Eliminate Tape Backups with FreeNAS and Bacula

图 1. FreeNAS 安装选项

系统恢复启动后,从另一个系统打开 Web 浏览器,然后输入 FreeNAS 机器的 IP 作为 URL 以访问管理站点。在提示符下,输入 admin 作为用户名,freenas 作为密码。从此管理站点,您可以更改许多设置,但目前,我们只需要更改主机名(图 2)、挂载自动创建的 DATA 分区并启用 NFS。

Backups to the Future: Eliminate Tape Backups with FreeNAS and Bacula

图 2. 在 FreeNAS 管理页面上设置主机名

单击 Web 页面“磁盘”部分下的“管理”链接。您应该看到一条消息,提示您需要将硬盘驱动器添加到磁盘列表中。单击 + 图标以添加它(图 3)。将所有选项保留为默认值,但“预格式化 FS”除外。将其设置为 UFS,因为 FreeNAS 已经为我们完成了这项工作。单击“应用更改”按钮后,磁盘的状态列将更改为“在线”。

Backups to the Future: Eliminate Tape Backups with FreeNAS and Bacula

图 3. 添加磁盘

现在单击“挂载点”链接,然后再次单击此页面上的 + 图标以编辑挂载点属性(图 4)。在此屏幕上,将分区更改为 2,因为分区 1 是系统分区,不能使用。将“文件系统”保留为 UFS,然后输入 DATA 作为共享名称。完成后单击“添加”。这将带您返回到原始的“挂载点”页面。单击“应用更改”。

Backups to the Future: Eliminate Tape Backups with FreeNAS and Bacula

图 4. 挂载 DATA 共享

在“服务”链接下,单击“NFS”。选中“启用”框以启用 NFS,然后在 CIDR 表示法中键入您的网络地址范围。单击“保存”按钮,您的 NAS 构建就完成了。

Bacula

在 FreeNAS 系统就位后,让我们开始构建 Bacula 系统。此处使用的测试系统是基于 Fedora 8 (Werewolf) 和 GNOME 构建的,因为它在其核心 RPM 库中包含 Bacula 及其依赖项。要添加必要的软件包和相关依赖项,您只需使用“应用程序”菜单下的“添加/删除软件”实用程序即可。准备就绪后,安装以下软件包

  • bacula-client

  • bacula-common

  • bacula-console

  • bacula-gnome

  • bacula-console-gnome

  • bacula-console-wxwidgets

  • bacula-director-common

  • bacula-director-mysql

  • bacula-docs

  • bacula-storage-common

  • bacula-storage-mysql

  • bacula-traymonitor

  • mysql

安装完成后,启动 mysqld,并将其设置为从 GNOME 中的“服务”实用程序或使用 chkconfig 从运行级别 5 启动。如果您使用的是其他发行版,则需要使用 Bacula 源文件并进行 make/configure 安装才能进入下一步。由于有许多可用的命令行安装选项,这可能比使用 RPM 更具挑战性。

接下来,打开终端以创建 Bacula 运行所需的 MySQL 表。运行 Bacula RPM 创建的以下脚本

/etc/alternatives/create_bacula_databases 
/etc/alternatives /make_bacula_tables
/etc/alternatives /grant_bacula_privileges

设置数据库后,创建一个本地挂载点(如 /mnt/freenas),并挂载先前创建的 FreeNAS 共享。在每次启动时执行此操作的一种简单方法是将以下行添加到您的 /etc/fstab 文件中

FreeNASServerHostName:/mnt/DATA   /mnt/freenas   nfs   defaults	0 0

要立即挂载分区,请键入mount -a.

在继续编辑 Bacula 的配置文件之前,先了解 Bacula 的工作原理。Bacula 程序由三个独立的守护进程组成:director、storage daemon 和 file daemon。Director 是主管。它是主服务器守护进程,定义作业、池、计划以及与备份相关的大多数重要设置。因此,大多数设置都与它的配置文件 /etc/bacula/bacula-dir.conf 有关。存储守护进程 (SD) 控制 Bacula 写入的介质,通常是磁带或磁盘。这些项目在 bacula-sd.conf 文件中配置。文件守护进程 (FD),也称为客户端,在您要备份的任何系统上本地运行。此处使用的另外两个相关实用程序是 GNOME 控制台 (gnome-console.conf) 和托盘监视器 (tray-monitor.conf) 实用程序。

了解 Bacula 互操作的基本知识后,打开您的 /etc/bacula/bacual-dir.conf 文件,并添加以下行(为了简洁起见,我只添加了我们的场景中使用的部分)

JobDefs {
  Name="UserHomes" Type=Backup Client = bacula-fd FileSet =
  "UserHomeFolders" Storage = File Messages = Daemon
}

Job {
  Name = "WeeklyHomeBackups"
  JobDefs = "UserHomes"
  Level = Full
  Schedule = WeeklyFullandDiffs
  Pool = Weekly
  Priority = 10
  Write Bootstrap = "/var/spool/bacula/WeeklyHomeBackups.bsr"
  
}

Job {
  Name = "MonthlyHomeBackups"
  JobDefs = "UserHomes"
  Level = Full
  Schedule = MonthlyFull
  Pool = Monthly
  Priority = 10
  Write Bootstrap = "/var/spool/bacula/MonthlyHomeBackups.bsr"
  
}

Schedule {
  Name = "WeeklyFullandDiffs"
  Run = Level=Full Pool=Weekly sun at 3:00
  Run = Level=Differential Pool=Diffs mon-fri at 3:00
}

Schedule {
  Name = "MonthlyFull"
  Run = Level=Full Pool=Monthly 1st sat at 3:00
}

FileSet {
  Name = "UserHomeFolders"
  Include {
    Options {
      compression=GZIP
      signature = MD5
    }
    File = /home
  }
}

Pool {
  Name = Weekly
  Pool Type = Backup
  Recycle = yes                       
  AutoPrune = yes                     
  Volume Retention = 6 days       
  Maximum Volumes = 5
  Label Format = Bkup-Full
  
}

Pool {
  Name = Diffs
  Pool Type = Backup
  Recycle = yes 
  AutoPrune = yes           
  Volume Retention = 23 hours 
  Maximum Volumes = 1
  Label Format = Bkup-Diff
}

Pool {
  Name = Monthly
  Pool Type = Backup
  Recycle = yes
  AutoPrune = yes
  Volume Retention = 364 days 
  Maximum Volumes = 12
  Label Format = Bkup-Monthly
}

尽管从底部开始讨论 Pool 部分可能看起来很奇怪,但正确配置它至关重要。池只是卷的集合。卷是写入备份文件的磁带或磁盘。一个池可以包含任意数量的卷,但它必须至少有一个卷。在这里,我们设置了三个池:每周完整备份、差异备份和每月备份。这使我们能够维护当前星期直到前一天的备份以及每月备份的 12 个月轮换。

然后,从顶部部分向下,有一个“作业定义 (JobDefs)”部分,以及围绕我们的备份策略建模的两个作业。“作业定义”部分定义了多个作业共享的通用属性,例如模板。在其中,我们列出了两个作业共有的设置。“计划”部分定义了给定作业何时运行以及运行频率。此处列出的计划每周日运行每周备份,周一至周五每天运行差异备份,每月第一个星期六运行每月备份。“文件集”部分列出了要备份的文件夹和文件以及使用的选项。对于此示例,我们将 Bacula 设置为备份本地用户的主文件夹,这是备份的常见场景。默认情况下,文件集上启用了递归,因此我们只需要指定父文件夹。备份文件还设置为使用 gzip 压缩,并使用 MD5 哈希/加密自身。两者都做是很好的做法。

在保存并关闭文件之前,请通读并更改 @@Password@@ 或类似条目的任何实例为通用密码。与其介绍每个 Bacula 守护进程如何相互验证,不如简单地将它们全部更改为相同的密码,以便暂时启动并运行系统。如果需要,您可以稍后更改这些密码。还要将以下文件中的任何其他与密码相关的字段更改为通用密码:bacula-sd.conf、bacula-fd.conf、bconsole.conf、gnome-console.conf 和 tray-monitor.conf。更改密码后,您还需要更改所有 .conf 文件中对您的主机的任何引用,以便每个守护进程都可以相互通信。如果所有守护进程都在本地运行,则可以使用 localhost。您也可以使用 FQDN 或 IP 地址。您要编辑的字段在每个部分下列为“地址”。因此,例如,更改行

Address = server.example.com

Address = localhost  

您还可以搜索 client.example.com 和 storage.example.com 条目以查找需要更改的其他一些条目。设置密码和“地址”字段后,在编辑器中打开 /etc/bacula/bacula-sd.conf 文件,并注释掉 Filestorage 设备的“设备”部分中的以下行

Archive Device = /tmp

然后,在其下方添加以下行,将本地挂载的 FreeNAS 分区与存储守护进程关联,以便您可以备份到它

Archive Device = /mnt/freenas

最后一步是打开“系统”→“管理”下的“服务”实用程序,并选中复选框以将 bacula-dir、bacula-sd 和 bacula-fd 设置为在运行级别 5 启动(图 5)。现在您可以使用语法

service bacula-dir|sd|fd start|stop|restart 

来控制守护进程。在其他发行版上,您可以直接从 /usr/sbin 启动守护进程,并使用 chkconfig 设置运行级别。

Backups to the Future: Eliminate Tape Backups with FreeNAS and Bacula

图 5. 启动所有三个 Bacula 守护进程,并将它们设置为运行级别 5。

运行备份作业

运行备份非常简单,因为您已经通过编辑 bacula-dir.conf 文件完成了大部分工作。从 GNOME 中的“应用程序”→“系统工具”菜单启动 Bacula 控制台(图 6)。您可能需要编辑启动器,就像我所做的那样,以将其指向正确的 /etc/bacula/gnome-console.conf 文件。也从“系统工具”菜单启动“托盘监视器”实用程序。“托盘监视器”(图 7)非常棒,因为它使您可以快速浏览守护进程的状态和任何正在运行的作业。当您进行多任务处理或有夜间运行的作业并且您想在第二天早上检查其状态时,这很有帮助。返回控制台,然后单击“运行”按钮以调出备份作业对话框窗口。在“作业”下,选择“WeeklyHomeBackups”(图 8)。这将使用您的 .conf 文件中指定的项目预填充字段选择。您可以在此时更改任何这些选项,但它们必须首先存在于 .conf 文件中,否则它们将不会出现在字段中。换句话说,如果不填充 .conf 文件的“作业”部分,则无法从下拉列表中创建作业。

到目前为止,还没有卷,如前所述,在运行备份之前需要存在卷。通常,您必须使用控制台命令行的 label 命令手动在池中创建卷,但由于我们的设置,系统将自动创建它们、自动命名它们,并在卷保留期触发时回收它们。我更喜欢这种方式而不是手动创建卷,因为您不太可能遇到命名错误。单击“确定”以运行作业,并在控制台中查看结果。

Backups to the Future: Eliminate Tape Backups with FreeNAS and Bacula

图 6. GNOME Bacula 控制台

Backups to the Future: Eliminate Tape Backups with FreeNAS and Bacula

图 7. Bacula 托盘监视器

Backups to the Future: Eliminate Tape Backups with FreeNAS and Bacula

图 8. 从 GNOME 控制台运行备份作业

如果您要更改同一池上的“卷保留”设置,重新启动守护进程并再次运行作业,您将看到系统自动回收池中的卷以用于下一个作业。否则,它将提示您创建新卷,因为由于保留设置,无法回收现有卷。您可以根据需要经常手动运行这些作业,但它们也会按照 bacula-dir.conf 文件中定义的计划运行。

恢复文件

在 Bacula 中恢复文件也非常简单。您可以使用控制台工具栏上的“恢复”按钮或 restore 命令。两者都易于使用,但 restore 命令提供了更多选项。为了简单起见,让我们使用“恢复”按钮。当对话框打开时,从要从中恢复的作业、客户端、池等中选择(图 9),然后单击“选择文件”以标记您要恢复的文件/文件夹(图 10)。在恢复作业运行之前,将提示您确认您的选项,此时您可以键入yes, modno。键入mod提供了对作业的更多选项,包括将文件恢复到与原始路径不同的路径的选项。

Backups to the Future: Eliminate Tape Backups with FreeNAS and Bacula

图 9. Bacula 的“恢复选项”对话框窗口

Backups to the Future: Eliminate Tape Backups with FreeNAS and Bacula

图 10. 标记要恢复的文件

未来的开始

尽管我们在此简化了近线备份过程,但这仅仅是开始。我们简单的设置已经完成了我们着手要做的事情:将我们的数据备份到网络磁盘。要在大多数备份策略中完全取代磁带,您需要某种异地存储/同步方案,我在此处未解决。但是,一旦您看到更快的备份以及可以在磁盘上存储更多数据,您就会渴望进行迁移并摆脱那些磁带。

资源

FreeNAS 主站点:www.freenas.org

FreeBSD 硬件兼容性清单:www.freebsd.org/releases/5.1R/hardware-i386.html

Bacula:www.bacula.org

Bacula 下载站点:sourcefort.net/projects/bacula

Bacula 文档:www.bacula.org/rel-manual/index.html

Jeramiah Bowling 担任系统管理员和网络工程师已有十多年。他为马里兰州亨特谷的一家地区性会计和审计公司工作,并拥有包括 CISSP 在内的多项行业认证。欢迎您在 jb50c@yahoo.com 提出您的意见。

加载 Disqus 评论