12.4. 简单的备份

一个简单的备份方案是先完整备份一次所有内容,然后再备份自上次备份以来修改过的所有内容。第一次备份称为完整备份,随后的备份称为增量备份。完整备份通常比增量备份更费力,因为需要写入磁带的数据更多,而且完整备份可能无法放入一张磁带(或软盘)。从增量备份恢复可能比从完整备份恢复要费力得多。可以优化恢复过程,以便始终备份自上次完整备份以来的所有内容;这样,备份工作会稍微多一些,但永远不需要恢复超过一个完整备份和一个增量备份的内容。

如果您想每天进行备份并有六盘磁带,您可以将磁带 1 用于第一次完整备份(例如,在星期五),并将磁带 2 到 5 用于增量备份(星期一到星期四)。然后在磁带 6 上进行新的完整备份(第二个星期五),并再次使用磁带 2 到 5 开始进行增量备份。在您获得新的完整备份之前,您不想覆盖磁带 1,以免在您进行完整备份时发生意外。在您将完整备份制作到磁带 6 后,您需要将磁带 1 放在其他地方,这样当您的其他备份磁带在火灾中被毁坏时,您仍然至少有一些东西留下。当您需要进行下一次完整备份时,您取出磁带 1 并将磁带 6 放在原位。

如果您有超过六盘磁带,您可以将额外的磁带用于完整备份。每次进行完整备份时,您都使用最旧的磁带。这样,您可以拥有来自前几周的完整备份,如果您想查找一个旧的、现在已删除的文件,或文件的旧版本,这将非常有用。

12.4.1. 使用 tar 进行备份

可以使用 tar 轻松完成完整备份

# tar --create --file /dev/ftape 
/usr/src
tar: Removing leading / from absolute path names in 
the archive
#
上面的示例使用了 GNU 版本的 tar 及其长选项名称。传统的 tar 版本仅理解单字符选项。GNU 版本还可以处理不适合一张磁带或软盘的备份,以及非常长的路径;并非所有传统版本都能做到这些。(Linux 仅使用 GNU tar。)

如果您的备份不适合一张磁带,您需要使用--multi-volume (-M) 选项

# tar -cMf /dev/fd0H1440 
/usr/src
tar: Removing leading / from absolute path names in 
the archive
Prepare volume #2 for /dev/fd0H1440 and hit return:
#
请注意,您应该在开始备份之前格式化软盘,或者使用另一个窗口或虚拟终端,并在 tar 要求新软盘时进行格式化。

在您完成备份后,您应该使用以下选项检查备份是否正常:--compare (-d) 选项

# tar --compare --verbose -f 
/dev/ftape
usr/src/
usr/src/linux
usr/src/linux-1.2.10-includes/
....
#
未能检查备份意味着您将不会注意到您的备份不起作用,直到您丢失了原始数据。

可以使用 tar 和以下选项完成增量备份:--newer (-N) 选项

# tar --create --newer '8 Sep 1995' 
--file /dev/ftape /usr/src 
--verbose
tar: Removing leading / from absolute path names in 
the archive
usr/src/
usr/src/linux-1.2.10-includes/
usr/src/linux-1.2.10-includes/include/
usr/src/linux-1.2.10-includes/include/linux/
usr/src/linux-1.2.10-includes/include/linux/modules/
usr/src/linux-1.2.10-includes/include/asm-generic/
usr/src/linux-1.2.10-includes/include/asm-i386/
usr/src/linux-1.2.10-includes/include/asm-mips/
usr/src/linux-1.2.10-includes/include/asm-alpha/
usr/src/linux-1.2.10-includes/include/asm-m68k/
usr/src/linux-1.2.10-includes/include/asm-sparc/
usr/src/patch-1.2.11.gz
#
不幸的是,当文件的 inode 信息发生更改时,例如,其权限位已更改,或者其名称已更改时,tar 无法注意到。这可以通过使用 find 并将当前文件系统状态与先前备份的文件列表进行比较来解决。可以在 Linux ftp 站点上找到用于执行此操作的脚本和程序。

12.4.2. 使用 tar 恢复文件

用于 tar--extract (-x) 选项提取文件

# tar --extract --same-permissions 
--verbose --file 
/dev/fd0H1440
usr/src/
usr/src/linux
usr/src/linux-1.2.10-includes/
usr/src/linux-1.2.10-includes/include/
usr/src/linux-1.2.10-includes/include/linux/
usr/src/linux-1.2.10-includes/include/linux/hdreg.h
usr/src/linux-1.2.10-includes/include/linux/kernel.h
...
#
您还可以通过在命令行上命名来仅提取特定的文件或目录(包括其所有文件和子目录)
# tar xpvf /dev/fd0H1440 
usr/src/linux-1.2.10-includes/include/linux/hdreg.h
usr/src/linux-1.2.10-includes/include/linux/hdreg.h
#
如果您只想查看备份卷上有哪些文件,请使用--list (-t) 选项
# tar --list --file 
/dev/fd0H1440
usr/src/
usr/src/linux
usr/src/linux-1.2.10-includes/
usr/src/linux-1.2.10-includes/include/
usr/src/linux-1.2.10-includes/include/linux/
usr/src/linux-1.2.10-includes/include/linux/hdreg.h
usr/src/linux-1.2.10-includes/include/linux/kernel.h
...
#
请注意,tar 始终按顺序读取备份卷,因此对于大容量卷,它相当慢。但是,在使用磁带驱动器或其他顺序介质时,不可能使用随机访问数据库技术。

tar 不能正确处理已删除的文件。如果您需要从完整备份和增量备份恢复文件系统,并且您在两次备份之间删除了一个文件,那么在您完成恢复后,该文件将再次存在。如果该文件包含不应再提供的敏感数据,这可能是一个大问题。