使用 Mondo Rescue 防止数据丢失

作者:Hugo Rabson

每个电脑用户都曾在某个时候丢失过数据。不幸的是,这种经历很少教会用户定期备份数据。Mondo Rescue 基于您的文件系统创建一个或多个可启动的救援 CD。如果发生灾难性的数据丢失,您将能够恢复您的整个系统。Mondo 支持 Lin/Win 双启动系统、RAID、ReiserFS、ext2、ext3、XFS、JFS 和 VFAT。

我编写 Mondo 是因为没有其他程序能够满足我的需求,也没有任何程序如此易于使用。我每周至少使用 Mondo 的最新版本备份、擦除、格式化和恢复我自己的系统三次。Mondo 是我使用的唯一备份方案。

背景

Mondo 是一个蓬勃发展的开源项目;它可以从裸机恢复您的操作系统和数据,自 2000 年 5 月以来,没有报告过数据丢失事件。该项目进展顺利。

最初,Mondo 的创建是为了备份仅 Windows 系统,并为 Windows 用户提供灾难恢复功能。在田纳西州纳什维尔附近经营一家小型电脑商店时,我意识到许多从我们这里购买电脑的人都会把电脑拿回来,要求重新格式化磁盘并重新安装应用程序。这是因为他们不知道如何维护自己的 PC 吗?是我们的硬件有问题吗?无论如何,我们需要一种方法在 10-15 分钟内无人值守地将 Windows 的全新副本恢复到典型的 PC 上。当时我们正在使用 Norton Ghost,但 Ghost 不允许我们选择性地恢复;要么全部要么全无。此外,Ghost 在复制 Linux 分区时容易崩溃。

我们的想法是在 CD 上运行 Linux,但将 Windows 存档在所述 CD 上的大型 tarball 中。好吧,长话短说,它奏效了。我甚至设法编写了可以创建 Windows 可启动 VFAT 分区的代码。

2001 年 3 月,惠普(格勒诺布尔)的一名员工对该项目产生了兴趣。Bruno Cornec 是服务器部门的一位技术娴熟的程序员,他开始研究代码。他开始尝试并以多种方式改进它。在 2000 年 9 月(项目关闭时)到 2001 年 3 月期间,发布了两个新版本的 Mondo。这两者几乎完全由 Bruno Cornec、Maciej Kulasa 和其他贡献者完成。

2001 年 6 月,我组装了一台新电脑并开始工作。到 7 月 4 日,我已经修复了所有主要的错误,Mondo v1.00 发布了(请不要拿独立日开玩笑)。

工作原理

Mondo 只是一个 shell 脚本,它封装了另外两个工具:Mindi 和 afio。

Mindi,又名 Mindi-Linux,是一个迷你发行版,它从您的内核、模块、工具和库生成启动盘。它比通用的启动盘更可能与您现有的软件二进制兼容,因为它的工具直接从您的硬盘复制而来。它还可以生成 El Torito 2.88MB 启动盘镜像。Mondo 使用 Mindi 创建一个 2.88MB 的启动“磁盘”和相关的数据“磁盘”,它们包含在每个 Mondo CD 中。在备份时加载的任何模块都会在启动时重新加载。因此,理论上,您将启动到与您备份时几乎相同的环境中。

Mondo-Archive 的工作方式如下

  1. 它将您的文件压缩成多个 tarball,每个 tarball 的大小为 5-10MB。

  2. 它将这些 tarball 放在一个目录中。

  3. 它将 El Torito 启动软盘镜像和相关数据文件放在该目录中。

  4. 它将 mkisofs 指向该目录,并将其输出管道传输到 cdrecord,这会导致刻录一张 CD,其中包含该目录及其内容的副本。

  5. 它为 N 张 CD 重复上述步骤,N 是容纳您所有文件所需的 CD 数量。

内核配置

Mindi v0.38 附带一个 2.4.7 安全内核,以防您的内核不支持启动盘所需的所有功能。这不是 Mondo 挑剔;这是 Linux 很麻烦。有些内核就是不适合启动盘。新手用户应该坚持使用他们的默认内核,并通过在被问及是否要使用自己的内核制作启动盘时回答 no,让 Mindi 使用它自己的内核。

高级用户应确保他们的内核包含以下内置功能:CD-ROM 支持、IDE CD 支持、IDE 支持、initrd 和 RAM 磁盘支持、软盘驱动器支持、稳定的 loopfs 支持(这意味着它确实需要是 2.2.17 或更高版本,或 2.4.5-ac10 或更高版本)和 ISO9660 支持。

如果您的内核不支持这些功能,您可能应该使用 Mindi 自己的内核,直到您有足够的信心构建自己的内核。如果您发现 Mindi 的内核不支持您需要的功能(例如,XFS),请告诉我。我可能会在 Mindi 的下一个版本中添加该功能。

获取和安装 Mondo

要安装该程序,请访问 www.microwerks.net/~hugo 并下载 Mondo 和 Mindi。后者是前者的组成部分,但由于 Mindi 还基于您的内核、模块、工具和库创建独立的启动盘而被分离出来。下载网页上提供了这两个工具的安装说明。

RPM 用户很容易;他们只需将 Mindi 的 RPM 下载到 /tmp,将 Mondo 的 RPM 下载到 /tmp,然后键入以下内容

rpm -Uvh /tmp/mondo-1.13-1.i386.rpm /tmp/mindi-0.39-1.i386.rpm

Tarball 用户稍微麻烦一些;他们必须将 Mindi 的 tarball 下载到 /tmp,将 Mondo 的 tarball 下载到 /tmp,然后键入以下内容

cd /tmp
tar -zxvf mindi-0.39.tgz
cd mindi-0.39
./install.sh
cd ..
tar -zxvf mondo-1.13.tgz
cd mondo-1.12
./install.sh
Mondo 需要的其他工具

某些发行版缺少某些关键软件包。最常缺少的软件包是 afio、cdrecord、bzip2、libnewt0.50、libslang1 和 mkisofs。一些用户可能需要创建 gawk-to-awk 快捷方式。您可以在您的发行版供应商的网站上找到这些工具。

制作测试 CD

制作测试 CD 是一个好主意,因为新用户可以尝试它而不会搞乱他的系统。首先,确保 Linux 知道如何使用您的 CD 刻录机。然后,运行 mondo-archive

要查找您的 CD 刻录机,请键入

dmesg | grep CD

如果您的 CD 刻录机是 IDE 设备,它将在此处显示为 /dev/hdXX 是 a 到 h 之间的字母。如果 SCSI 仿真配置正确,当您键入以下内容时,您将看到您的 CD 刻录机列出

cdrecord -scanbus
如果您的 CD 刻录机已正确安装,您将看到
0,0,0 --- JoeCamel 4x CD Writer
或类似的东西。设备描述左侧的 0,0,0 数字是可以在其中找到刻录机的 SCSI 设备。记下这个数字。

如果您希望您的救援 CD 包含某些特殊程序,例如,您的 BRU 副本,请手动将该文件及其配置文件添加到 /usr/share/mindi/deplist.txt。Mindi 将找到库并为您添加它们。

运行 Mindi 以创建一些启动盘,以确保 Mindi 在您的系统上正常工作。键入

cd /usr/share/mindi
./mindi

如果您的内核太大(超过大约 900KB),您将无法制作启动软盘,但您仍然可以制作可启动的 CD 镜像。在任何一种情况下测试 Mindi 的最简单方法是按 N 表示“创建启动软盘?”和 Y 表示“创建 iso 镜像?”。然后使用 cdrecord 制作可启动的 CD-R 或 CD-RW。键入

cd /root/images/mindi
然后选择以下调用之一来写入 CD,具体取决于驱动器中的光盘是 CD-R 还是 CD-RW。请将 x,x,x 替换为您的刻录机的 SCSI 节点。对于 CD-RW,键入
cdrecord blank=fast dev=x,x,x speed=2 mindi.iso
对于 CD-R,键入
cdrecord dev=x,x,x speed=2 mindi.iso

关闭所有应用程序;从 CD 而不是硬盘重新启动。(您可能需要编辑您的 BIOS 设置,以使您的计算机尝试从 CD 而不是硬盘驱动器启动。)如果您的计算机可以从 CD 正常启动,那么您就知道 Mondo 也将可靠地生成可启动的救援 CD。当然,理想的救援 CD 将使用您自己的内核。我建议您尽可能使用自己的内核,以最大限度地降低启动 CD 不支持您的硬件或文件系统等的风险。

最后,要进行完整备份,请键入

cd /home
mondo-archive --burn-cds 2 0,0,0 --comp-level 9

2 表示您以 2 倍速写入。如果您要刻录到 CD-RW,请键入

mondo-archive --burn-cds 2 0,0,0 cdrw --comp-level 9
运行命令后,将空白 CD-R(W) 插入驱动器,并让 PC 运行。就这样。

我总是选择最大压缩级别 (9),因为我启动 Mondo 然后去上班。当我回家时,我插入第二张 CD-RW 并等待半小时。这是一天的备份。

默认压缩级别为 3。如果您赶时间,请使用 --comp-level 1 来加快备份过程。您将使用更多 CD,但这应该会减少运行时间。

如果 Mondo 在尝试将文件写入 CD 时未在驱动器中找到 CD,它将暂停并显示“重试/失败/中止”消息。如果您插入 CD 并选择“重试”,它将重试,就像什么也没发生一样。如果您选择“中止”,程序将停止。如果您选择“失败”,程序将跳过该 CD,但继续备份过程。大多数情况下,您应该选择“重试”。

如果有您不想备份的特定路径,您可以使用以下命令排除它们

--exclude-paths /foo /bar /xanadu

如果您只想包含某些路径,请使用 --bkpath /home。因此,如果您只想备份您的 home 和 boot 目录,但排除公共 MP3 文件夹,请使用以下命令

mondo-archive --burn-cds 2 0,0,0 cdrw --exclude-paths /home/MP3s /home/WAVs /home/secret
如果您不想立即刻录 CD,而是想创建稍后刻录的 ISO 磁盘镜像,请执行以下操作
mondo-archive --isodir /root --bkpath /home /boot --exclude-paths /home/MP3s /home/WAVs /home/secret
这将创建 1.ISO、2.ISO 等,并将文件保存到 /root 目录。

在运行 Mondo-Archive 之前,请务必向 /usr/share /mindi/deplist.txt 添加一些文件,运行 mount 以确保您已挂载要备份的分区,并运行 df 以确定备份大小/压缩/所需 CD。

您可以通过在启动后切换到另一个终端并运行 ide-opt 来加快比较过程。使用 Alt-左光标键并键入 ide-opt。这将启用 DMA 和其他好东西。

要将备份与您的实时文件系统进行比较,请从 CD 启动并选择比较模式(键入 compare,然后按 Enter 键)。在比较周期后检查 /tmp/mondo-restore.log,查看哪些文件不匹配。除了您在从您的内核制作启动盘时可能遇到的最初的磨合问题(某些内核不适合启动盘,必须重新编译),您可能会发现 Mondo 非常枯燥。它完成了它所说的功能。它将您的所有文件压缩到您的 CD-R(W) 上,并在必要时再次恢复它们。它对您的驱动器进行分区、格式化它们、恢复数据并运行 LILO 来设置您的引导扇区。

裸机恢复

想象一下,您的硬盘驱动器碰巧被故意或意外地擦除了。或者,想象一下您想要克隆您现有的操作系统。在任何一种情况下,您都想在 Nuke 模式下运行。从您的 Mondo CD 启动后,键入 nuke,按 Enter 键,然后观看表演。就这样。

如果您想确切地了解 Mondo 在恢复时正在做什么,请按 Alt-A 并键入

tail -f /tmp/mondo-restore.log

以详细监控其进度。

选择性恢复

如果您只想恢复某些文件,或者如果您不想准备/格式化您的驱动器,那么您应该启动到交互模式。在启动时键入 interactive,然后按 Enter 键。系统会要求您对一系列问题回答是/否:您要对您的设备进行分区吗?您要格式化它们吗?您要恢复所有内容吗?您要恢复某些内容吗?您要运行 LILO 来设置您的引导扇区吗?

交互模式适用于那些从他们的实时文件系统中丢失了数据子集的人,或者可能从他们最新的备份中丢失了一些数据并想要从较早的备份中恢复数据子集的人。

使用专家模式

当您备份了您的系统,从 CD 启动到比较模式并验证了存档后,您就可以开始试验您的系统了。您可以移动分区、调整分区大小、启用或禁用 RAID、使用其他引导加载程序等。这就是 Mondo 真正擅长的。在我看来,对典型 Linux 安装的最大威胁是粗心的 root 用户。

如果您想尝试其中一些技巧,请从您的 Mondo CD 启动并选择专家模式。这将使您进入 shell 提示符。编辑 mountlist 文件。然后,键入 mondo-restore 并从弹出菜单中选择“交互式”。mountlist 是一个文本文件,/tmp/mountlist.txt,位于您从 Mondo CD 启动后的 RAM 磁盘上。它列出了将要创建的各种分区、它们的大小、它们的挂载点和它们的格式。要更改分区的大小或布局,只需使用 pico /tmp/mountlist.txt 编辑该文件(或使用您喜欢的编辑器)。通过按 Ctrl-X,然后按 Enter 键保存并关闭。

这是一个 mountlist 示例。大小以千字节为单位,因此在修改值时请仔细计算零。请记住,新的布局在您运行 mondo-restore 以重新分区和重新格式化驱动器之前不会生效

/dev/hda1    /mnt/windows       vfat        4096000
/dev/hda2    swap               swap        256
/dev/hda3    /                  ext2        8192000

要更改根分区的大小和格式,只需更改相关字段

/dev/hda1    /mnt/windows       vfat        4096000
/dev/hda2    swap               swap        256
/dev/hda3    /                  reiserfs    16384000
或者,您可以从使用多个主分区转移到使用主分区 (hda1)、扩展分区(hda2,由 Mondo 创建/处理)和几个逻辑分区。请注意新的 /dev/hdaN 条目
/dev/hda1    /mnt/windows       vfat        4096000
/dev/hda5    swap               swap        256
/dev/hda6    /                  reiserfs    8123000
/dev/hda7    /usr               reiserfs    4099000
/dev/hda8    /home              reiserfs    4099000
如果您添加了第二个硬盘驱动器(例如,主从盘),那么您可以将一些分区移动到该驱动器。请参见下文并注意更改
/dev/hda1    /mnt/windows       vfat        4096000
/dev/hda2    swap               swap        256
/dev/hda3    /                  reiserfs    81422000
/dev/hdb1    /home              reiserfs    9481000
/dev/hdb5    /usr               reiserfs    16384000
/dev/hdb6    /tmp               reiserfs    1589000
移动到 RAID 稍微复杂一些,因为您必须创建一个 /etc/raidtab 文件。您可以从专家模式中执行此操作。只需键入 pico /etc/raidtab 并创建一个好的 raidtab 文件。(这超出了本文的范围。)然后,将传统设备替换为 RAID 设备 (/dev/mdN)
/dev/hda1    /mnt/windows       vfat        4096000
/dev/hda5    swap               swap        256
/dev/md0     /                  reiserfs    16384000
编辑 mountlist 后,运行 mondo-restore。当被问及是否要对驱动器进行分区和格式化时,回答是。您可能想要恢复数据或运行 LILO 来初始化引导扇区,具体取决于您正在做什么。如果您只是测试新的分区布局,您可能希望在回答其他问题时回答否。否则,回答是。
结论

好的备份软件必须文档齐全、经过充分测试且易于使用。如果备份软件太繁琐,那么用户根本不会费心。如果它不可靠,那么用户将被虚假的安全感所迷惑,最终在关键时刻希望落空。我每周使用 Mondo 备份我自己的系统两到三次。我定期恢复作为测试方案的一部分。

如果您想参与,请下载该程序并加入邮件列表。我很乐意收到您的来信。

Mondo 的其他用途

Guard Against Data Loss with Mondo Rescue
电子邮件:hugo@firstlinux.net

Hugo Rabson 是一位 26 岁的英国人,在田纳西州纳什维尔生活和工作。他的主要资格是商业,但他从青春期开始就一直在编写代码。他目前在 WebMD 工作。Mondo 是他试图回馈 Linux 社区的一种尝试,他很乐意接受所有意见、建议和补丁。

加载 Disqus 评论