8.1. 服务器备份流程

在 Linux 中执行备份有多种方法。这些方法包括每个 Linux 发行版都包含的命令行工具,例如 ``dd''、``dump''、``cpio'' 以及 ``tar''。此外,还有基于文本的实用程序,例如 ``Amanda'' 和 ``Taper'',后者旨在为备份和恢复流程添加更友好的用户界面。也有基于 GUI 的实用程序,例如 ``KDat''。最后,还有商业备份实用程序可用,例如 ``BRU'' 和 ``PerfectBackup+''。这些备份解决方案中的任何一种都可以为您的宝贵数据提供保护。

一些可用工具的简要列表,包括它们的获取位置,可以在 “Linux 应用程序和实用程序页面” 上找到,网址为 http://www.xnet.com/~blatura/linapp2.html#back。在决定备份解决方案时,您需要考虑以下因素

注意

注意:备份文件系统时,不要包含 ``/proc'' 伪文件系统! /proc 中的文件实际上不是文件,而只是描述和指向内核数据结构的类文件链接。 备份像 ``/proc/kcore'' 这样的文件,它实际上是一个包含您整个内存内容的伪文件,在我看来,这似乎是对磁带的巨大浪费! :-) 您可能还需要避免备份 ``/mnt'' 文件系统,除非您有备份 CD-ROM 设备、软盘驱动器、网络文件共享或其他已挂载设备中的文件的特殊愿望。

显然,执行备份和恢复的流程将因您选择的备份解决方案而异。但是,在本节中,我将讨论使用我最常用的两个工具执行备份的方法:``tar''(其名称代表 “磁带归档器”),这是一种主要在 *nix 系统之间可移植的命令行备份工具;以及 ``KDat'',这是一种基于 GUI 的磁带备份实用程序,它包含在 KDE 软件包中(有关 KDE 的更多信息,请参见第 5.6 节)。

最后,我应该补充一点,根据您选择的备份解决方案,即使该工具没有内置计划自动或无人值守备份的功能,您也可以通过使用 cron 工具来自动化此类备份。 有关使用 cron 和创建 crontab 计划文件的详细信息,请参见第 9.4 节

8.1.1. 使用 ``tar'' 进行备份

如果您决定使用 ``tar'' 作为备份解决方案,您可能应该花时间了解可用的各种命令行选项;键入 man tar 以获取完整列表。 您还需要知道如何访问适当的备份介质;尽管在 Unix 世界中所有设备都被视为文件,但如果您要写入字符设备(如磁带),则 “文件” 的名称就是设备名称本身(例如 ``/dev/nst0'' 用于基于 SCSI 的磁带驱动器)。

以下命令将把您的整个 Linux 系统备份到 ``/archive/'' 文件系统,但排除 ``/proc/'' 伪文件系统、``/mnt/'' 中任何已挂载的文件系统、``/archive//archive/

tar -zcvpf /archive/full-backup-`date '+%d-%B-%Y'`.tar.gz \
    --directory / --exclude=mnt --exclude=proc --exclude=var/spool/squid .

'' 文件系统(备份我们的备份集毫无意义!),以及 Squid 相当大的缓存文件(在我看来,这是对备份介质的浪费,并且没有必要备份)

不要被上面命令的长度吓倒! 当我们将其分解为各个组成部分时,您将看到这个强大实用程序的魅力。上面的命令指定了选项 ``z''(压缩;备份数据将使用 ``gzip'' 压缩)、``c''(创建;正在创建归档文件)、``v''(详细;在备份文件时显示文件列表)、``p''(保留权限;文件保护信息将被 “记住”,以便可以恢复它们)。 ``f''(文件)选项声明紧随其后的参数将是要写入的归档文件(或设备)的名称。 请注意,包含当前日期的文件名是如何派生的,只需将 ``date'' 命令用两个反引号字符括起来即可。 常用的命名约定是为未压缩的归档文件添加 ``tar'' 后缀,为压缩的归档文件添加 ``tar.gz

'' 后缀。/``--directory'' 选项告诉 tar 首先切换到以下目录路径(本例中为 ``

/

'' 目录),然后再开始备份。 ``--exclude'' 选项告诉 tar 不要费心备份指定的目录或文件。 最后,``.'' 字符告诉 tar 它应该备份当前目录中的所有内容。

tar -cvpf /dev/nst0 --label="Backup set created on `date '+%d-%B-%Y'`." \
    --directory / --exclude=var/spool/ etc home usr/local var/spool

注意: 注意:重要的是要意识到 tar 的选项是区分大小写的! 此外,大多数选项可以指定为单个助记字符(例如 ``f'')或更易于记忆的完整选项名称(例如 ``file'')。 助记表示形式通过在它们前面加上 ``-'' 字符来标识,而完整名称则以两个这样的字符为前缀。 同样,有关使用 tar 的信息,请参见 “man” 页面。

另一个示例,这次仅将指定的文件系统(而不是像上面的示例中那样写入所有文件系统并排除例外项)写入 SCSI 磁带驱动器,如下所示/dev/nst0在上面的命令中,请注意未使用 ``z''(压缩)选项。 我强烈建议不要将压缩数据写入磁带,因为如果磁带某部分上的数据损坏,您将丢失整个备份集! 但是,即使磁带归档文件的某些部分损坏,未压缩存储的归档文件也具有非常高的非受影响文件恢复能力。

由于磁带驱动器是字符设备,因此无法指定实际的文件名。 因此,用作 tar 参数的文件名只是设备名称,``/dev/nst0/dev/nst0'',SCSI 总线上的第一个磁带设备。注意: 注意:``

/dev/nst0

'' 设备在写入备份集后不会倒带;因此可以在一个磁带上写入多个集。(您也可以将设备称为 ``/dev/st0'', ``'',在这种情况下,磁带会在写入备份集后自动倒带。)'', ``由于我们无法为备份集指定文件名,因此可以使用 ``--label'' 选项将有关备份集的一些信息写入归档文件本身。最后,只有 ``/etc//home/

/usr/local

mt -f /dev/nst0 rewind
mt -f /dev/nst0 offline

'' 和 ``//var/spool/''(但排除 Squid 的缓存数据文件)中包含的文件会写入磁带。使用磁带时,可以使用以下命令来倒带,然后弹出磁带

提示: 提示:您会注意到,在创建归档文件时,tar 会剥离前导 ``

/

''(斜杠)字符。 这是 tar 的默认操作模式,它旨在保护您在恢复操作中错误地恢复错误文件时,不会用这些文件的旧版本覆盖关键文件。 如果您真的不喜欢这种行为(请记住,这是一个功能!),则可以指定 ``

--absolute-paths

'' 选项给 tar,这将保留前导斜杠。 但是,我不建议这样做,因为它很危险

8.1.2. 使用 ``KDat'' 进行备份/如果您正在使用 KDE 桌面环境,我相信您会发现 ``KDat'' 实用程序既强大又用户友好。 此外,一个额外的优点是 KDat 使用 ``tar'' 作为其备份引擎。 因此,使用 KDat 写入的备份集不仅可以使用 KDat 读取,还可以使用 tar 读取! 这使得 KDat 成为用户友好性和备份可移植性的绝佳选择。/proc提示: 提示:即使您选择不使用也不安装完整的 KDE 软件包,只要您安装了 Qt 库,您仍然可以使用 KDat。/mnt首次运行 KDat 程序时,您需要创建一个备份配置文件。 这样的配置文件告诉 KDat 您要备份系统上的哪些文件。 如果需要,您可以根据自己的需要创建多个备份配置文件(例如,您可以创建一个名为 完整备份 的配置文件用于完整系统备份,创建一个名为 快速备份 的配置文件仅用于备份用户文件)。要创建备份配置文件,请从菜单栏上的 文件 选项中选择 创建备份配置文件(或右键单击 备份配置文件 文件夹,然后选择 创建备份配置文件)。 在 KDat 窗口的右侧,您可以更改各种设置,例如配置文件名称、归档名称、tar 选项以及其他设置。 单击 帮助 菜单以获取有关这些设置用途的更多信息。要指定应包含在备份配置文件中的文件,请左键单击 ``

/

'' 目录文件夹旁边的复选框。 这将启用此目录及其以下的所有文件进行备份。 然后,左键单击文件夹旁边的小 ``+'' 号。 这将展开文件夹,显示其及其以下的文件列表。 这将允许您排除任何您不希望备份的文件;只需左键单击您要排除的每个文件或目录旁边的复选框即可。 例如,完整备份可能应该选中每个文件和目录,但 ``

/proc

''(包含有关您正在运行的系统的信息的伪文件系统)、``

/mnt

''(CD-ROM 驱动器、软盘和网络共享通常挂载在其下的目录),以及,如果您是 Squid 用户,则 ``