在完成生产备份之后,您需要保存您的分区信息,以便您可以重建您的分区。
脚本 make.fdisk 扫描硬盘以获取分区信息,并将其保存在三个文件中。第一个是可执行脚本,名为 make.dev.x(其中 "x" 是设备文件名,例如 hda)。第二个是 mount.dev.x,它创建挂载点并将新创建的分区挂载到这些点上。最后一个是 dev.x,它是 fdisk 构建分区所需的命令。您通过命名关联的设备文件作为 make.fdisk 的参数,来指定您想要为哪个硬盘构建脚本(以及因此的文件名)。例如,在一个典型的 IDE 系统上,
bash# make.fdisk /dev/hda |
会输出脚本 make.dev.hda、mount.dev.hda 和 fdisk 的输入文件 dev.hda。
此外,如果 make.fdisk 遇到 FAT 分区,它会将分区的引导扇区保存在名为dev.xy的文件中,其中 x 是驱动器的设备名称(例如 sdc, hda),y 是分区号。引导扇区是分区的第一个扇区,512 字节。此扇区在重建分区时同时恢复,在脚本 make.dev.hda 中。
幸运的是,硬盘的价格下降的速度几乎与公众在选举后对政治家的信任下降的速度一样快。因此,输出文件是文本格式,并允许手动编辑是件好事。这是在更大的替换驱动器上重建最困难但也是最灵活的方法。(请参阅 待办事项列表。)
其他元数据保存在脚本 save.metadata 中。该脚本将分区信息保存在文件fdisk.hda中,位于 ZIP 磁盘的根目录中。最好打印此文件和您的/etc/fstab,这样您就有了硬拷贝,以防您必须手动恢复分区数据。您可以通过在两个虚拟控制台之间切换来节省一棵树,在一个控制台中运行 fdisk,并在另一个控制台中根据需要 cat/etc/fstab或/fdisk.hda。但是,这样做容易出错。
您还需要保存与您的恢复方法相关的文件。例如,如果您使用 nfs 保存您的数据,您将需要保存 hosts.allow、hosts.deny、exports 等。此外,如果您正在使用任何基于网络的恢复过程,例如 Amanda 或 Quick Restore,您将需要保存网络文件,如 HOSTNAME、hosts 等,以及相关的软件树。
处理这些和类似问题的最简单方法是保存整个 etc 目录。
100 MB 的 ZIP 磁盘不可能容纳现代 Linux 发行版的服务器安装。我们必须比简单地保存整个 kazoo 更具选择性。我们需要哪些文件?
boot 目录。
/etc 目录和子目录。
启动时需要的目录。
/dev 中的设备文件。
要确定启动时需要的目录,我们查看启动初始化文件/etc/rc.sysinit。它像这样设置自己的路径
PATH=/bin:/sbin:/usr/bin:/usr/sbin export PATH |
试错法表明我们还需要其他一些目录,例如/dev。在 Linux 中,没有设备文件您做不了多少事情。
在阅读脚本 save.metadata 时,请注意我们不一定保存使用绝对路径调用的文件。
在我们拥有可用的备份脚本之前,我们可能需要多次迭代备份,测试裸机恢复,从 CD 重新安装并再次尝试。在我编写此 HOWTO 时,我进行了五次这样的迭代才成功恢复。这就是为什么尽可能使用脚本至关重要的原因之一。彻底测试!
在基于 RPM 的系统上,您可以做的一件事是使用 rpm 程序来确定哪些文件在哪里。例如,要获取 openssh 软件包使用的文件的完整列表,请运行
bash# rpm -ql openssh |
有些东西您不需要,例如 man 页面。您可以检查每一个,并决定是否备份它。
![]() | 警告 |
---|---|
恢复的第二阶段在不覆盖先前恢复的文件的情况下运行。这意味着在第一阶段恢复的文件是在完全恢复后将要使用的文件。因此,每当您更新这些目录中的文件时,请更新您的裸机备份! |
![]() | 警告 | |
---|---|---|
tomsrtbt 中包含的 tar 版本在恢复时不会保留所有权。这可能会给像 Amanda 这样的应用程序带来问题。Amanda 是一种备份和恢复工具,它有几个目录由其自己的同名用户拥有。解决方案是
|
![]() | 警告 |
---|---|
tomsrtbt 不支持通过 UID/GID 恢复所有者。为了使备份适合使用 tomsrtbt 恢复,请从脚本 save.metadata 中函数 crunch 中 tar 的命令行选项中删除 tar 命令行选项 "--numeric-owner"。 |
此备份过程过去需要您在每次备份时都存在 ZIP 磁盘驱动器。现在它在目录中创建 ZIP 磁盘的内容,您可以通过网络备份该目录。然后,您只需要在需要恢复时在备份服务器上构建 ZIP 磁盘(使用 cp -rp)。
备份过程将比直接写入 ZIP 驱动器更快,但您应该检查生成的目录是否适合您的 ZIP 磁盘(使用脚本 save.metadata 中 du -hs $target.zip 的输出)!请参阅变量的定义zip在该脚本中。
我的笔记本电脑在同时运行网卡和 ZIP 驱动器时遇到问题,因此这是我用来备份它的过程。我保留备份映像以及当前映像,以便在计算机在备份期间崩溃时,我有一个回退方案。
或者,您可以在硬盘驱动器上构建多个 ZIP 磁盘的备份,并在恢复时将其馈送到系统。
这与上面的无 ZIP 驱动器选项类似。如前所述,将您的备份保存到硬盘驱动器上的目录中。然后使用 mkisofs 从该目录创建 ISO 9660 映像并刻录它。这不适用于某些基于 CD-ROM 的 Linux,例如 Knoppix,因为 Linux 必须有 CD-ROM 驱动器。除非您有两个 CD-ROM 驱动器,例如 USB clamshell 中的一个。我有一个 DVD 刻录机以这种方式设置,正是出于这个目的。
或者查看 remastering Knoppix,将您的第一阶段和第二阶段备份放在 CD-ROM/DVD 上。您还应该能够 remaster finnix。
如今,许多计算机都配备了 CD-ROM 驱动器,但没有软盘驱动器。软盘驱动器也确实会发生故障。因此,最好在 CD-ROM 上刻录可引导映像。坏消息是 "El Torito" 格式支持 1.2 MB、1.44 MB 和 2.88 MB 软盘,而 tomsrtbt 使用 1.7 MB 软盘。好消息是您可以获得 2.88 MB 版本,tomsrtbt-2.0.103.ElTorito.288.img,从您获取软盘映像的相同镜像中获取。在备份文件的根目录中放置一个副本 [1]。然后使用 mkisofs 命令行选项 -b 来指定tomsrtbt-2.0.103.ElTorito.288.img作为引导映像文件。
此过程的唯一缺点是许多较旧的 BIOS 不支持 CD-ROM 上的 2.88 MB 软盘映像。其中大多数将引导到 tomsrtbt 软盘。
另一种选择是使用 Syslinux。它不依赖于软盘映像,您可以构建自己的 CD,其中包含许多工具,例如 tomsrtbt。
您可能需要调整 BIOS 选项以允许计算机从 CD-ROM 驱动器启动。如果您无法做到这一点,要么是因为 BIOS 不支持从 CD-ROM 启动,要么是因为您无法进入 BIOS,请参阅 Smart Boot Manager (SBM),如 资源 中所述。
在您将在恢复时使用的驱动器上测试您的 CD。如果您发现您需要破解脚本,您可以将它们复制到/tmp,tomsrtbt 下的 RAM 磁盘,并在那里编辑它们。脚本将在那里运行。由于 RAM 磁盘是易失性的,请务必在重新启动之前保存您的更改!
通过拆分前两个阶段的脚本 restore.metadata 和 save.metadata,您可以将第一阶段的元数据分散到多个 ZIP 磁盘上。
有时您需要从第一阶段数据中挤出几兆字节,尤其是在您逼近 ZIP 磁盘的极限时。脚本 save.metadata 中的函数 crunch 接受多个参数以馈送到 tar。它也可以接受 --exclude 参数。因此,例如,您可以排除samba和X11目录,在/etc下,像这样
crunch etc --exclude etc/samba --exclude etc/X11 etc |
为什么是这两个?因为它们占用大量硬盘空间,并且我们在启动时不需要它们。
如果您保留多个内核,您可以删除所有您不会启动的内核的模块。检查您的lilo.conf或grub.conf以查看您将使用哪个内核,然后检查/lib/modules以查找您可以排除的模块目录。
如何找到更多好的排除候选对象?使用 ls -alSr 列出单个文件的目标目录,使用 du | sort -n 列出目录。
另一种(可能更简洁的)排除目录的方法是将目录的完整列表放入文件中,然后通过 tar 选项引用它--exclude-from=FILENAME.
如果您的系统使用初始 RAM 磁盘或 initrd 启动,请确保 restore.metadata 创建目录/initrd。做到这一点的最简单方法是确保它包含在最后目录创建循环中使用的目录列表中。
如果您的系统从 SCSI 驱动器启动或在 ext3fs 分区上具有根目录,则您的系统可能会使用 initrd。检查/etc/lilo.conf以查看它是否调用了 initrd。
[1] | 我强调副本是因为 mkisofs 会修改它从中创建 ISO 映像的目录中的文件。 |