使用 Amanda 的开源备份

作者:Phil Moses

我们这些接到电话的人,都能感受到来电者声音中的紧张和不安,当他或她问道:“备份效果如何?” 磁盘故障、错误删除的文件、心怀不满的同事,或者更糟的是,安全漏洞,这些都可能是您需要依赖备份的时候。

数据可能是计算机中最重要​​的元素,但在很多情况下,我看到数据备份被忽视,或者以一种漫不经心的方式对待,这让我不寒而栗。为此,本文讨论了马里兰大学的 Amanda(高级马里兰自动磁盘归档器)备份软件,这是一款相对易于使用的磁盘归档器,构建于本地 dump 和/或 GNU tar 工具之上。我经常觉得 Amanda 在 Linux/UNIX 跨平台环境中没有得到应有的尊重。但我可以自信地说,对于许多习惯使用命令行界面的 Linux 和 UNIX 用户来说,Amanda 是一个可靠的平台。

大约三年前,我开始在教育环境中使用 Amanda 作为备份平台。在教育和研究环境中工作,备份方面面临着许多挑战。许多技术专业人士和爱好者在自己的备份方面也面临着同样的挑战。这些挑战包括预算不足以购买备份软件、需要备份各种操作系统和发行版,以及完成所有备份的人力资源有限。

对于我自己和其他人来说,理想的解决方案是拥有一个中央备份服务器,它可以适应多种配置以及多个磁带备份设备,同时需要最少的时间和资源。Amanda 满足了这些要求以及更多要求。

开始磁带滚动

安装 Amanda 是一个简单的过程。无论您是从源代码还是二进制包安装,您都需要拥有一个备份用户和一个备份组。您还需要启用 Amanda 用户和备份组的磁盘访问权限。从 RPM 默认安装会为您完成此步骤,将 Amanda 添加为用户并将 Amanda 包括为磁盘组的成员。

在 Amanda 的默认安装中,您的大部分服务器配置文件都放置在 /etc/amanda/ 的子目录中,例如 /etc/amanda/DailySet1。放置在 /etc/amanda/<amanda_config> 中的最少文件是 amanda.conf 文件和 disklist 文件。amanda.conf 文件保存该备份运行的配置设置,而 disklist 文件保存要使用该配置备份的磁盘列表。默认情况下放置在 /var/lib/amanda 中的其他文件包括索引文件、日志文件、当前信息文件以及其他配置文件。如果管理员愿意,可执行文件通常放置在 /usr/sbin 中,包括 amdump(实际的 Amanda 转储程序);amcheck(Amanda 转储前检查实用程序);amverify(用于验证转储完整性的 Amanda 实用程序);amrecover 和 amrestore(恢复程序)以及各种其他 Amanda 实用程序。

GUI?我们不需要该死的 GUI!

安装 Amanda 后,amcheck 和 amdump 会搜索默认配置目录 /etc/amanda/<configuration> 中的配置文件,除非另有指示。在 /etc/amanda 中,您需要为每个要运行的配置创建一个目录。amanda.conf 文件可能看起来有些复杂,但实际上,它相当不言自明。它包含大量文档,一旦阅读,就很容易解释和自定义以适应您的环境。在客户端和服务器端,inetd.conf 或 xinetd.conf 必须包含 Amanda 的条目。在服务器上,您还需要索引服务器 amandaidx 和磁带服务器 amidxtaped 的条目(清单 1)。除了 xinetd 设置之外,对于 Amanda 用户主目录中的每个主机,都需要一个 .amandahosts 文件。此文件定义每个主机以及允许从该主机访问计算机的用户(清单 2)。应特别注意 Amanda 用户主目录和随附文件的权限,这出于显而易见的安全原因。

清单 1. Amanda 的所有三个 xinetd 条目。客户端只需要 Amanda 服务。

service amanda
{
        socket_type = dgram
        protocol    = udp
        wait        = yes
        user        = amanda
        group       = disk
        server      = /usr/lib/amanda/amandad
        disable     = no
}

service amidxtape
{
        socket_type = stream
        protocol    = tcp
        wait        = no
        user        = amanda
        group       = disk
        server      = /usr/lib/amanda/amidxtaped
        disable     = yes
}

service amandaidx
{
        socket_type = stream
        protocol    = tcp
        wait        = no
        user        = amanda
        group       = disk
        server      = /usr/lib/amanda/amindexd
        disable     = no
}

清单 2. .amandahosts 文件的一个简短示例

localhost amanda
localhost.localdomain amanda
foo           amanda
foo.localdomain           amanda

如果您运行防火墙,最初可能有点挑战,需要弄清楚允许 Amanda 访问的规则。Amanda 服务器在端口 10080 上联系客户端。此时,Amanda 客户端 fork amandad 进程并在 Amanda 服务器上寻找随机 UDP 端口。反过来,服务器打开几个端口到客户端以进行数据和消息传输。如果启用了索引,它们还需要服务器上的一个额外端口打开,TCP 10082。

随机端口可以通过多种方式解决。从 Amanda 版本 2.4.2 开始,编译选项,--with-portrange=xxx,yyy,指示 Amanda 使用给定的端口范围来连接客户端和服务器。选定的端口范围需要在防火墙的客户端和服务器端都打开。如果您计划在客户端运行 amrecover,则应计划在服务器上打开 TCP 端口 10083 和 10082,此外还在服务器和客户端机器上打开 UDP 端口 10080。所有这些都添加到使用定义的端口之外--with-portrange.

Amanda 能够与大多数磁带设备和库一起工作。诀窍是在 amanda.conf 文件中定义正确的磁带类型,并选择和定义正确的更换器脚本(清单 3)。单磁带驱动器是迄今为止最简单的方法,只需在 amanda.conf 文件中定义驱动器类型和磁带类型,您就可以开始了。如果有磁带库或堆叠器可用,则配置是一个多步骤过程,包括在 amanda.conf 中定义磁带更换器程序(cgh-multi、chng-scsi 和 chg-zd-mtx 是三个配置示例)并在 amanda.conf 中直接提供更换器文件。当 Amanda 服务器在 Linux 平台上运行时,您需要将 sg(scsi -- generic)模块编译到内核中。如果您运行任何基于 mtx 的更换器脚本,您还需要 mtx 程序。Amanda 在磁带上寻找有效的标头,如果没有标头,amcheck 和/或 amdump 将失败。使用 amlabel 工具标记磁带,以及在 amanda.config 文件中定义的正则表达式,例如

/usr/sbin/amlabel DailySet DailySet1

清单 3. amanda.conf 中定义的磁带更换器和一个示例 CHANGER.conf 文件

# At most one changerfile entry must be defined;
#select the most
# appropriate one for your configuration.
#If you select man-changer,
# keep the first one; if you decide not to use a tape
# changer, you may
# comment them all out.

changerdev "/dev/sg1"
runtapes 1   # number of tapes to be used in a /
#single run of amdump
tpchanger "chg-zd-mtx"  # the tape-changer /
#glue script
tapedev "/dev/nst1"     # the no-rewind tape /
# device to be used
changerfile "/var/lib/amanda/CHANGER"

The CHANGER.conf file
changerdev=/dev/nst1
havereader=1
offline_before_unload=1
OFFLINE_BEFORE_UNLOAD=1
poll_drive_ready=10
Max_drive_wait=99
unloadpause=20
driveslot=0

当处理多个计算组或业务部门时,您可能会确定每个组都需要单独的备份方案。使用具有单独备份配置的 Amanda 可以轻松完成此操作。这方面的一个示例是两个备份环境,每个环境分别用于两个独立资助的项目,因此需要您核算每个项目花费的时间和资源。环境一标记为 DailySet-BigFunds,环境二标记为 DailySet-LilFunds。对于 DailySet-BigFunds 项目,您有一个大型磁带库,可容纳十盘磁带。DailySet-LilFunds 为您提供了一个 DLT IV 驱动器,其磁带必须每天更换。为了使这两个项目保持分离但都托管在同一备份服务器上,您需要在 /etc/amanda 中设置单独的目录,例如 DailySet-BigFunds[运行次数] 和 DailySet-LilFunds[运行次数]。每个提到的目录都将包含一个 amanda.conf 文件和一个要备份的包含文件系统的 disklist。这种模式允许在单独的磁带设备上执行互斥的备份。如果必须进行配置更改,您只需要对相关文件进行更改。这在教育环境中非常方便,在教育环境中,您通常有多个组,其硬件和备份介质各不相同。

游戏开始!

现在我们已经安装了软件,磁带和库设备正常工作,并且所有磁带都已标记、加载并准备就绪。那么,我们应该呼叫谁来开始我们的虚拟免手动备份呢?正是 crontab,它有助于使我们的备份尽可能免手动(清单 4)。建议您的 crontab 为每次将要进行的 Amanda 运行包含两个条目。第一个条目应该是 amcheck,用于检查磁带驱动器、磁带标头和每个 Amanda 客户端,以确保备份操作按计划进行。一个好主意是将此邮件发回到一个系统帐户,该帐户会经常检查,以便可以在运行时之前纠正任何问题。crontab 中每个作业的第二个条目应该是 amdump 命令本身,它允许 Amanda 在没有用户干预的情况下开始备份。

清单 4. 使用 amrecover

[root]# amrecover -C DailySet1
AMRECOVER Contacting server on localhost
220 jule AMANDA index server (2.4.2p2) ready.
200 Access OK
Setting restore date to today (2004-02-13)
200 Working date set to 2004-02-13.
200 Config set to DailySet1.
200 Dump host set to localhost.
Can't determine disk and mount point from $CWD
amrecover> sethost localhost
200 Dump host set to localhost.
amrecover> setdisk /home
200 Disk set to /home.
amrecover> ls
2004-01-29 condor/
amrecover> add condor
Added dir /condor at date 2004-01-29
amrecover> extract
Extracting files using drive /dev/nst0 on localhost.
The following tapes are needed: DailySet3
Restoring files into directory /restored
Continue? [Y/n]:

每个 Amanda 客户端都会将 crontab 运行中的有用信息存储在 /tmp/amanda 中。在这里,您可以找到来自 amandad、selfcheck(备份前运行的检查)和 sendbackup 的日志,所有日志都带有随附的日期。备份完成后,磁带存储和更换以及所有备份程序完成后,还不能就此结束数据保护。Amanda 包含几个方便的程序,amverify 和 amverifyrun,它们可以验证介质以及已发生的任何 Amanda 运行中的数据。最好不时地运行 amverify(如果时间允许,而不是每次都运行),以验证您的备份实际上是否可以恢复。因为您已经投入时间和精力来配置和执行主要自动化且一致的备份方案,所以验证一切是否正常是很有意义的。而且,您正在将一些磁带组异地存放,对吗?

我必须快速提及 Amanda 提供的唯一可视化实用程序 amplot。amplot 能够读取 Amanda 输出文件并创建备份的图形化解释,使管理员能够确定 Amanda 安装和配置的效率,以及是否需要进行任何更改。

赤脚走过碎玻璃?

赤脚走过碎玻璃可不好玩。话虽如此,我曾经遇到过宁愿赤脚走过碎玻璃也不愿处理糟糕的数据恢复的情况。但是,使用 Amanda 进行数据恢复既简单又有趣。好吧,也许它并不完全有趣,但是恢复数据会带来一定的满足感。运行 amrecover 为您提供了一个易于使用的命令行界面,用于浏览文件和目录。该界面允许您浏览、添加和提取单个文件或目录。这需要多个步骤,设置日期、设置磁盘和设置主机。例如,

/usr/sbin/amrecover -C myconfig1 -t localhost -s localhost

指示 amrecover 使用DailySet1配置 (-C)、localhost 的索引主机 (-t) 和 localhost 的 Amanda 服务器 (-s);请参阅清单 4。

处理备份时,尤其是在处理索引备份时,一个担心是当您的主索引驱动器发生故障时会发生什么。如果您正在从索引恢复,并且您的主 Amanda 驱动器发生故障,您是否就倒霉了?完全不是。amrestore 允许您在不使用索引且不需要任何配置的情况下恢复完整的 Amanda 映像。amrestore 也可用于执行完整的文件系统恢复。以我的经验,amrestore 在您丢失主 Amanda 驱动器时最有用。您可以从全新安装开始并运行 amrestore,恢复完整映像,然后从您离开的地方开始,并包含所有先前的索引和配置。作为旁注,我每月将 Amanda 主目录和 Amanda 配置目录转储到备用机器。这使我可以在主驱动器发生故障且出现意外问题时参考配置文件。

结论、优点和缺点

Amanda 是一款出色的开源备份应用程序,它具有高度可配置性,可适应跨平台备份。与所有软件一样,它可能不是适合每个环境的应用程序,但它确实满足了许多备份需求。以下是我认为 Amanda 备份软件的优点和缺点。

一旦配置了 Amanda 并相应地设置了 crontab,就可以进行免手动一致的备份。Amanda 几乎可以在每个可用的 UNIX 和 Linux 平台上运行。它还能够通过 Samba 共享备份 Windows 数据。此外,Amanda 与大多数备份介质和硬件高度兼容。

至于缺点,Amanda 目前无法跨磁带扩展。这意味着一旦每次 Amanda 运行完成,磁带就会移动到堆栈底部,并请求新磁带。一些用户可能会认为命令行界面是一个缺点。最后,尽管目前可以实现,但使用 Amanda 备份到磁带以外的介质(例如磁盘阵列)有些困难。

Phil Moses 在加利福尼亚州圣地亚哥斯克里普斯海洋研究所的物理海洋学组担任系统经理。他晚上和休息时间梦想着拥有干净温暖的海水、不拥挤的海浪、船只和充足的金枪鱼的热带环境。欢迎在 philmoses@cox.net 处提出意见。

加载 Disqus 评论