| 8.3 备份数据 8.3.1 制定备份计划 8.3.2 常用的备份命令 8.3.2.1 使用tar命令 8.3.2.2 gzip和compress 8.3.2.3 联合使用 备份数据是Linux系统管理一项不可缺少的工作。制作备份的目的是为了尽可能快速和方便地恢复单个文件或整个文件系统,备份对于文件和数据的安全是非常重要的,任何备份工作都应该围绕这个中心目标进行。 8.3.1 制定备份计划 提出—个符合你需要的、能够恢复最近的文件拷贝的备份计划非常重要。当这个计划确定下来后,就要坚持执行。 理想的情况是能在任何时候恢复任何文件,在某些环境下,实现这种理想状态不太可能,但是至少你应该能在日常基础上恢复文件。为此,你可以组合使用完全备份和增量备份这两种备份手段。完全备份是对系统上每个文件的备份,增量备份则是对最后一次备份后有变化的文件进行备份。增量备份可以有不同的级别,比如对最后一次完全备份的增量备份或对最后一次备份的增量备份。 我们建议你可以按照不同的级别考虑备份计划: 0级 完全备份 1级 对最后一次完全备份的增量备份 2级 对最后一次增量备份的增量备份 下面是一个备份计划的例子: 一天做完全备份,其他天做增量备份 第1天 0级 完全备份 第2天 1级 增量备份 第3天 1级 增量备份 第4天 1级 增量备份 如果你建立和保存了每次备份的一个索引,就只需要一天的备份来恢复单个文件,只需要两天的备份(第1天和另一天的备份)来完全恢复系统。 下面这个例子把星期五作为备份日,每天和每周均做增量备份,每月做一次完全备份。 第一个星期五 0级 完全备份 其他星期五 1级 增量备份 其他日子 2级 增量备份 在这个计划中,要恢复某个文件,可能有以下情况:如果该文件这个月内没有变化,需要完全备份;如果该文件在上周改变了而本周没有改变,需要级别为1的增量备份;如果该文件本周改变了,需要级别为2的增量备份。这个计划看起来比上一个例复杂,但每天备份所用时间要少。 8.3.2 常用的备份命令 8.3.2.1使用tar命令 UNIX的实用程序 tar最初是为了制作磁带档案而设计的(把文件和目录复制到磁带中,然后从档案中提取或恢复文件),现在你可以把它用于任何设备。 它有以下优点: * 易于使用 * 可靠而且稳定 * 几乎可以在任何Linux或 UNIX系统上读取档案。 它还有一些缺点: * 对于某些版本的tar,档案必须放在一个磁盘或磁带上,这意味着,如果这个介质的某一部分失效(比如在磁盘上有一个坏扇区或在磁带上有一个坏块),整个备份就丢失了。 * 不能备份特殊文件(如设备文件)。 * 就其本身功能讲, tar只能制作完全备份。如果你想做增量备份,你得做一点shell程序设计工作。 tar命令的格式如下: tar<options><file><file2>…<fileN> 其中<options>是tar的命令参数和选项表。<file>到<fileN>是往档案文件中增加或从档案文件中展开的文件列表。 例如: $ tar cvf backup.tar/etc 将/etc下的所有文件打包成tar档案文件backup.tar。 tar的第一个参数“cvf”,是tar的命令参数,“c”告诉tar创建一个档案文件;“v“选项迫使tar采用冗长模式,即在存档时打印每个文件名;“f”选项告诉tar下一个参数backup.bar是创建的档案文件名。 tar的其余参数是增加到档案文件中的文件和目录名。 $ tar xvf backup.tar 将tar文件backup.tar解开并放到当前工作目录下。必须说明的是这样做是有危险的,因为在从tar文件中解开文件时,旧文件将被覆盖。 在解开tar文件之前,知道在何处打开文件是非常重要的。例如,假设存档以下文件: /etc/hosts,/etc/group和/etc/passwd。如果用下述命令: $ tar cvf backup.tar /etc/hosts /etc/group /etc/passwd 目录名/etc/会被加到每个文件名前。为了将文件展开到正确位置,需要用下述命令: $ cd/ $ tar xvf backup.tar 这是因为文件从档案文件中抽取出路径名。 如果用下述命令存档文件: $ cd/etc $ tar cvf hosts group passwd 这样目录名就不存在档案文件中,因此需要在展开文件之前用“cd/etc”命令进入目录etc。由此可见,tar文件的创建方式与在何处展开是有很大关系 的。 命令: $ tar tvf backup.tar 在解开tar文件之前显示tar文件的索引,用这种方式可以看到档案文件中与文件名有关的目录名,从而在正确位置上展开档案文件。 8.3.2.2 gzip和compress 与MS-DOS的存档程序不同, tar在存档过程中并不压缩文件。因此,如果存储两个1MB的文件,那么tar文件大小为2MB, gzip命令用来压缩文件(被压缩的文件并不需要是tar格式)。 命令: $ gzip-9 backup.tar 压缩backup.tar文件,产生的文件为backup.tar.gz,开关-9告诉gzip用最高的压缩比。 gunzip命令用来解开一个gzip压缩的文件,用“gzip-d”也可以达到同样效果。 gzip是UNIX家族中一个相当新的工具,许多年来,一直用compress命令来压缩文件,由于compress算法的软件专利之争以及gzip比compress具有更高的压缩效率,使得compress逐渐成为过去。 用compress压缩的文件扩展名为.Z,例如backup,tar.Z是backup.tar用compress压缩后的文件名,而backup,tar.gz是用gziP压缩后的文件名, uncompress命令用来展开用compress压缩的文件, gunziP也知道如何对付用compress压缩的文件。 8.3.2.3 联合使用 介绍了这些命令之后,我们来尝试组合使用这些命令。为了压缩存储一组文件,可以用下述命令: $ tar cvf backup.tar/etc $ gzip-9 backup.tar 结果是形成文件backup.tar.gz。 展开该文件时,用相反的命令: $ gunziP backup.tar.gz $ tar xvf backup.tar 当然在展开tar文件之前要确保在正确目录下。 你还可以用UNIX管道和重定向命令在一个命令行中完成以上所有工作。比如: $ tar cvf-/etc | gzip-9c> backup.tar.gz 这里我们将tar文件送往“-”,它表示tar的标准输出,它被管道输出到gzip,用来压缩输入的tar文件,结果存在backup.tar.gz中。 gzip的-c选择项告诉gzip将其输出送往stdout,然后被重定向到bagkup.tar.gz。 用—命令展开该存档文件如下所示: $ gunzip-c backup.tar.gz | tar xvf- 这里, gunzip解压backup.tar.gz的内容,并将结果tar文件送到stdout,它被管道输出到tar,它读“-”,在这里指tar的标准输入。 tar命令还包括z选择项,它会自动采用gzip压缩算法来联机压缩/解压文件。 例如,下列命令: $ tar cvfz backup.tar.gz/etc 等价于: $ tar cvf backup.tar/etc $ gzip backup.tar 而命令: $ tar xvfz backup.tar._Z 可以用来代替下述命令: $ uncompress backup.tar.Z $ tar xvf backup.tar  谈谈您的看法
|