使用 Mondo 制作可引导的恢复光盘

作者:Craig Swanson

灾难恢复套件 Mondo 已经成为 Midwest Tool & Die (MTD) 备份和恢复计划的重要组成部分。通过在我们的备份计划中增加 Mondo 的备份工具 mondoarchive,我们获得了裸机灾难恢复、快速回滚到已知良好配置以及轻松复制 Linux 软件负载的能力。Mondo 还能够支持克隆 LVM、RAID、ext2、ext3、JFS、XFS、ReiserFS 和 VFAT 文件系统。

灾难恢复

在 MTD,我们依靠磁带备份公司和用户数据。我们使用过几种企业级备份解决方案,但灾难恢复一直是每个方案都存在的问题。过去,要从裸机恢复,需要从发行版光盘重新安装 Linux。全新安装后,加载磁带备份客户端软件。最后,从磁带备份恢复系统的特定软件。

现在,我们创建了一个可引导的恢复光盘,可以恢复包含其特定驱动程序和应用软件的整个系统。然后,磁带恢复会覆盖自光盘创建以来已更改的文件。每当系统发生重大更改时,都会创建一个新的救援光盘映像来替换现有副本。

常规系统备份

创建救援光盘映像是一个简单的过程,因此可以在需要系统快照时重复进行。借助当今的大容量硬盘,使用 mondoarchive 可以进行定期备份。本文稍后将解释一个 cron 任务自动化示例来处理此问题。

在 MTD,我们使用 mondoarchive 而不是磁带备份某些系统

  • 对于服务于静态数据的 Linux 机器,磁带备份不是必需的。可以使用 mondoarchive 定期备份这些机器。

  • 暴露于外部 Internet 的非军事区中的牺牲系统。这些系统必须与内部网络隔离,并且磁带备份服务器不可见。mondoarchive 可以维护牺牲系统的良好副本。如果系统的安全性受到威胁,恢复速度很快。

  • 具有静态配置、没有用户帐户且安全性高的 Linux 防火墙路由器。因此,我们的企业磁带备份系统无法访问路由器。路由器配置不经常更改,因此 mondoarchive 非常适合。

其他应用

除了备份之外,救援光盘还可以充当可引导、可恢复的系统快照。mondoarchive 的易用性在我们公司催生了几种应用。

使用 mondoarchive 构建测试平台是另一项简单的任务。可以从裸机加载系统,并且可以随意恢复已知的良好负载。当最终系统负载准备好投入生产时,将创建一个新的光盘映像。这将成为生产服务器的灾难恢复和快速回滚光盘。

Mondo 的恢复实用程序非常灵活。借助交互式恢复实用程序,我们可以调整大小和重构分区。这是一种从现有硬盘升级到更大硬盘的有用方法。

要复制已安装的 Linux 系统,请从整个系统创建救援光盘。然后,将其恢复到另一台裸机服务器。如果原始系统配置为使用 DHCP 进行 IP 地址分配,则新系统也将执行相同的操作。对于具有静态 IP 的系统,两个系统现在具有相同的主机名和 IP 地址。因此,请务必在断开与生产网络连接的情况下加载克隆。我们为此目的使用测试平台网络。

似乎这些用途还不够,mondoarchive 还包含一个选项来验证系统中的存档文件;因此,您可以将光盘用作针对当前系统的基准。这对于检查静态系统的完整性很有用。

如您所见,mondoarchive 是一款灵活且有用的存档和克隆实用程序。如果您重视您的数据和/或服务器配置,请继续阅读。

依赖项

此处的安装示例适用于 Red Hat Linux 8.0,这是我们测试过的环境。在实际安装 mondoarchive 之前,需要满足几个依赖项。在 Red Hat 系统上,检查以下必需的软件包:afio、cdrecord、buffer、mkisofs、syslinux 和 bzip2。如果它们都已安装,则可以继续安装 mondoarchive 软件包。否则,您需要做一些准备工作。在大多数情况下,您可以在 Red Hat 光盘上找到这些软件包。或者,您可以从 Red Hat、rpmfind.net 或直接从 Mondo 主页下载它们。当您找到所有软件包后,使用以下命令安装它们rpm.

满足依赖项后,您可以安装软件包本身。具体来说,需要安装两个软件包才能使用 mondoarchive。可以从 www.microwerks.net/~hugo/index.html 下载 mindi 和 mondo 软件包。

mindi 是 Mondo 的一部分,用于创建启动和根软盘/光盘。它基本上确保 mondoarchive 拥有启动存档光盘或软盘所需的一切。首先安装 mindi,使用

# rpm -Uvh mindi

您还必须安装 mondo 软件包。安装 mindi 后,输入

# rpm -Uvh mondo
执行

可以使用 mondoarchive 以各种方式备份许多不同类型的系统。在这里,我们仅描述我们之前提出的情况——备份我们的服务器并创建克隆系统。

在我们的环境中,许多服务器执行各种任务,并且每个服务器的配置都不同。有些具有多个 IDE 或 SCSI 硬盘,用于海量存储,有些只有一个 IDE 或 SCSI 驱动器。甚至还有一些 RAID 系统。在某些服务器上,数据不断变化,而在某些服务器上,数据几乎从不更改。可以使用 mondoarchive 克隆所有这些系统。

首先,最好查看每个服务器的磁盘使用情况。密切关注正在挂载的内容、位置和时间。如果可以避免,则无需备份非关键信息;如果您有不包含关键数据的大型目录,则应考虑排除它们。例如,我们在服务器之间通过 NFS 和 automount 共享数据,并且我们在每个服务器上都挂载了许多相同的共享。您不想做的是忽略这些已挂载的共享,并让 mondoarchive 也备份该数据。在您识别出不必要的已挂载分区或共享后,您可以使用 -E 选项排除它们。该选项的格式应如下所示-E /a /b /c其中 /a /b 和 /c 是目录。这将确保排除该数据。

存储和刻录 ISO 映像

现在您确切地知道要备份什么,让我们检查一下 mondoarchive 命令及其一些选项。您可以备份到 CD、ISO 映像和 NFS 共享。在本文中,我们仅讨论如何备份到 ISO 映像以便稍后刻录到 CD。有关 mondoarchive 及其用法的完整详细信息,请阅读其手册页。

在运行 mondoarchive 命令之前,请在您的驱动器上选择一个具有大量空间的位置来存储大型 ISO 映像文件。假设我们选择 /home/mondo,并且 home 是一个 6GB 分区。要使用的命令如下所示

# mondoarchive -Oi -d /home/mondo -E "/home/mondo"

-Oi 选项告诉 mondoarchive 将文件系统备份到 ISO 映像。接下来,-d /home/mondo让 mondoarchive 知道生成的 ISO 映像应放在 /home/mondo 目录中。根据系统的大小,您可能会创建多个 ISO 映像。最后,-E /home/mondo排除不必要的目录。在这里,我们告诉它排除 /home/mondo,其中可能包含其他大型 ISO 映像,并导致您的备份不必要地增长。

在磁盘空间不足的情况下,您需要指定一个暂存目录。这是一个临时目录,mondoarchive 在存档之前使用它来构建其 ISO 映像。在这种情况下,明智的做法是告诉 mondoarchive 将其暂存目录放在一个大型分区中。否则,mondoarchive 很可能在空间不足时失败。在下面的示例中,假设 /var/local/data 是您磁盘上的一个大型分区。要指定暂存目录,请运行 mondoarchive 命令并添加 -S 选项

# mondoarchive -Oi -d /home/mondo \
-S /var/local/data -E "/home/mondo"

运行命令后,mondoarchive 会检查您的系统,确保一切正常并开始其备份过程。它在整个过程中不断显示其进度(图 1),并且可能需要一段时间才能完成。当最终完成时,它会询问您是否要创建启动盘。您可以回答否,因为您刻录的 CD 将是可引导的。如果您想要或需要磁盘,请回答是。

Bootable Restoration CDs with Mondo

图 1. Mondoarchive 正在运行

完成后,您将在 /home/mondo 或您指定的任何位置获得 ISO 映像,您可以从中刻录 CD。您可以使用许多不同的方式刻录它们,包括使用 Xcdroast、Webmin 或 cdrecord 命令。要快速执行此操作,请运行cdrecord -scanbus。这将发现您的 CD 刻录机的总线、目标和逻辑单元号 (LUN),通常为 0,0,0

# cdrecord dev=0,0,0 speed=xx /home/mondo/1.iso

当 cdrecord 完成时,如果您的服务器出现故障,您将拥有一个恢复磁盘。

作为 Cron 任务运行

通过将其设置为 cron 任务,mondoarchive 也可以在您选择的时间自动运行。要设置此项,请首先创建一个类似于以下的脚本,并将其放在 /etc/cron.daily/ 中

#!/bin/sh
mkdir -p /home/mondo/`date +%A` && \
mondoarchive -Oi -d /home/mondo/`date +%A` \
-E /home/mondo

当放置在 /etc/cron.daily/ 中时,此脚本每天在同一时间运行。执行后,它会在 /home/mondo 中创建一个与日期对应的文件夹。如果您每周运行七天 cron 任务,则 /home/mondo 中将有七个文件夹,每个文件夹都以一周中的某一天命名,并包含当天备份的 ISO 映像。当然,如果您想将这些映像放在 CD 上,您可以再次使用 cdrecord 命令。

恢复

您可能会说:“太棒了,我有一堆 CD;现在怎么办?” 因为您制作的 CD 是可引导的,所以您可以将其直接放入 CD-ROM 驱动器中,开始您的 mondoarchive 恢复学习体验。有四个不同的恢复选项可用:barebones (nuke)、interactive、expert 和 advanced。

如果您仅将 mondoarchive 用作紧急恢复实用程序,那么您真正需要担心的唯一选项是 nuke。CD 启动后,键入nuke在提示符下,观看 mondoarchive 执行其魔力。恢复完成后,您的系统将恢复到您运行 mondoarchive 之前的状态。这在发生灾难性服务器故障时非常方便,在这种情况下,您需要快速恢复运行。当您构建预生产或测试平台系统时,您希望将其回滚到某个开发点,这也很有帮助。

mondoarchive 的交互模式也可能很有用。此模式使您可以在恢复系统之前编辑分区表,并且在构建具有不同硬盘的克隆机器时非常方便。在交互模式下使用 mondoarchive 使您可以更改要将数据恢复到的分区的大小。这可以使用 mondoarchive 中提供的分区表编辑器来实现。mondoarchive 甚至足够好,可以在 nuke 模式下运行时调整分区大小,但在这里您无法控制它使用的大小。mondoarchive 还在交互模式下调整分区大小,但您可以更改它建议的大小。

要在交互模式下使用 mondoarchive,请启动到 CD 并键入interactive。将出现一个菜单,询问您要如何恢复(图 2)。

Bootable Restoration CDs with Mondo

图 2. Mondo 的交互模式

您的选项是“自动”、“交互”和“比较”。我们想要在此处选择的选项是“交互”。选择后,系统会询问您数据应来自何处(图 3)。

Bootable Restoration CDs with Mondo

图 3. 在交互模式下选择数据源

选择适当的位置并继续。接下来,将出现一个分区管理器屏幕(图 4),您可以在其中编辑分区信息。您还可以更改设备名称、挂载点、文件系统格式和分区大小。进行更改后,单击“确定”继续。

Bootable Restoration CDs with Mondo

图 4. 在交互模式下编辑分区信息

从这一点开始,Mondo 会询问您一系列有关恢复操作的问题

- Are you sure you want to save your
  mountlist and continue?  YES
- Do you want to erase and partition
  your hard drives?  YES
- Do you want me to restore all your data?  YES
- Initialize the bootloader?  YES
- Did you change the mountlist?  YES
- You will now edit fstab and lilo.conf/grub.conf,
  to make sure they match your new mountlist.  OK

然后,Mondo 会打开 /etc/fstab 和 lilo.conf/grub.conf 以在 vi 中进行编辑。您应该进行相应的更改,以便它们与您的新挂载列表匹配

- Edit them again?  NO
- Label your ext2 and ext3 partitions
  if necessary?  YES

当 Mondo 完成后,它会将您抛回重新启动的提示符。按 Ctrl-Alt-Delete 重新启动。

验证软件负载

除了完全恢复选项外,mondoarchive 还提供了另一个功能。如果您克隆的机器上的数据是静态的,您可能不希望该数据发生更改。Midwest Tool & Die 的 Linux 路由器就是这种情况。使用 mondoarchive,我们可以验证软件负载是否与备份一致,并发现最近是否进行了任何更改。这很容易。首先,使用 CD #1 在 CD-ROM 驱动器中重新启动系统。然后键入# compare.

当 mondoarchive 完成后,它会将比较结果放在 /tmp/changed.txt 中。CD 和您检查的实时文件系统之间会存在差异。例如,日志文件和 /var 中的大多数内容都会一直更改,因此不必担心它们。您可能想要查找的是对 /boot 或 /etc 等目录中任何内容的更改。这些目录中的配置文件是特定于系统的,并且在系统启动并运行后不应发生太多更改。如果您发现对这些文件的更改并且您不记得进行过更改,则很可能存在问题。

执行比较的唯一问题是您必须关闭系统才能验证它。虽然这在某些环境中可能不是问题,但您可能处于服务器必须 24 小时运行的情况下。在这些情况下,您最好在计划的停机时间内进行验证。使用 mondoarchive 验证系统的替代方法是流行的应用程序 Tripwire。我建议对需要始终运行的静态系统使用 Tripwire。

结论

现在您了解了 mondoarchive 在灾难恢复计划中的潜力,我们建议您更详细地探索它。万一发生灾难性事件,您可以快速且完整地恢复。请访问 Mondo Rescue 主页 www.microwerks.net/~hugo/index.html,了解 mondoarchive 的作者和维护者 Hugo Rabson 在维护 mondoarchive 方面所做的出色工作。他使我们的管理员生活轻松了很多,他也可以为您做同样的事情。

Craig Swanson (craig.swanson@slssolutions.net) 在 SLS Solutions 设计网络并提供 Linux 咨询服务。他还 Midwest Tool & Die 开发 Linux 软件。Craig 自 1993 年以来一直使用 Linux。

Matt Lung (matt.lung@slssolutions.net) 在 Midwest Tool & Die 担任网络工程师。他还 SLS Solutions 提供 Linux 咨询服务。

加载 Disqus 评论