Linux系统备份/恢复之Tar(一)

在备份和还原系统时,Linux 基于文件的性质成了一个极大的优点。在 Windows 系统中, 注册表与系统是常相关的。配置和软件安装不仅仅是将 文件放到系统上。因此,还原系统就需要有能够处理 Windows这种特性的软件。在 Linux 中,情况就不一样了。配置文件是基于文本的,并且除 了直接处理硬件时以外,它们在很大程度上是与系统无关的。 硬件驱动程序的现代方法是,使它们以动态加载 的模块的形式可用,这样内核就变 得更 加与系统无关。不同于让备份必须处理操作系统如何安装到系统和硬件上的复杂细节,Linux 备份处理的是文件的打包和解包。

一般情况下,以下这些目录是需要备份的:

* /etc
包含所有核心配置文件。这其中包括网络配置、系统名称、防火墙规则、用户、组,以及其他全局系统项。
* /var
包含系统守护进程(服务)所使用的信息,包括 DNS 配置、DHCP 租期、邮件缓冲文件、HTTP 服务器文件、db2 实例配置,等等。
* /home
包含所有用户的默认用户主目录。这包括他们的个人设置、已下载的文件和用户不希望失去的其他信息。
* /root
是根(root)用户的主目录。
* /opt
是安装许多非系统文件的地方。OpenOffice、JDK 和其他软件在默认情况下也安装在这里。

有些目录是应该考虑不备份的。

* /proc
应该永远不要备份这个目录。它不是一个真实的文件系统,而是运行内核和环境的虚拟化视图。它包括诸如 /proc/kcore 这样的文件,这个文件是整个运行内存的虚拟视图。备份这些文件只是在浪费资源。
* /dev
包含硬件设备的文件表示。如果计划还原到一个空白的系统,那就可以备份 /dev。然而,如果计划还原到一个已安装的 Linux 系统,那么备份 /dev 是没有必要的。

其他目录包含系统文件和已安装的包。在服务器环境中,这其中的许多信息都不是自定义的。大多数自定义都发生在 /etc 和/home 目录中。不过出于完整性的考虑,您可能希望备份它们。

在生产环境中,我希望确保数据不会丢失,因而我会备份除 /proc 目录之外的整个系统。如果最担心用户和配置,我会仅备份 /etc、/var、/home 和 /root 目录。

备份工具

正如前面提到过的, Linux 备份在很大程度上就是打包和解包文件。这允许使用现有的系统实用工具和脚本来执行备份,而不必购买商业化的软件包。在许多情况下,这类备份将是足够的,并且为管理员提供了极大的控制能力。备份脚本可以使用 cron 命令来自动化,这个命令控制 Linux 中预定的事件。

tar

tar 是一个已移植到 Linux 中的经典 UNIX 命令。 tar 是 tape archive(磁带归档)的缩写,最初设计用于将文件打包到磁带上。如果您下载过 Linux 源代码,或许已经碰到过 tar 文件。这是一个基于文件的命令,它本质上是连续地、首尾相连地堆放文件。

使用 tar 可以打包整个目录树,这使得它特别适合用于备份。归档文件可以全部还原,或从中展开单独的文件和目录。备份可以保存到基于文件的设备或磁带设备上。文件可以在还原时重定向,以便将它们重新放到一个与最初保存它们的目录(或系统)不同的目录(或系统)。 tar 是与文件系统无关的。它可以使用在 ext2、ext3、 jfs、Reiser 和其他文件系统上。

使用 tar 非常类似于使用诸如 PKZip 这样的文件实用工具。只需将它指向一个目的(可以是文件或设备),然后指定您想要打包的文件。您可以通过标准的压缩类型来动态压缩归档文件,或指定一个自己选择的外部压缩程序。要通过 bzip2 压缩或解压缩文件,可使用 tar -z 命令。

要使用 tar 来把除 /proc 目录之外的整个文件系统备份到 SCSI 磁带设备:
tar -cpf /dev/st0 / --exclude=/proc

-c 开关表示归档文件正在被创建。
-p 开关表示我们希望保留文件许可权限,这对良好的备份来说是很关键的。
-f 开关指向该归档文件的文件名。在本例中,我们使用的是原始磁带设备 /dev/st0。
/ 表示我们想要备份的内容。既然我们想要备份整个系统,因此把这个开关指定为根(root)。当把 tar 指向一个目录(以 / 结尾)时,它会自动递归。最后,我们排除了 /proc 目录,因为它没有包含需要保存的任何内容。
如果单盒磁带容纳不下这个备份,我们需要添加 -M 开关(本例中没有显示)以进行多卷备份。

要还原一个或多个文件,可以使用带提取开关( -x )的 tar 命令:
tar -xpf /dev/st0 -C /

-f 开关同样指向归档文件
-p 开关表明我们想要还原归档的权限
-x 开关表明从归档中提取文件
-C / 表明我们想要让还原从 / 开始。
tar 通常还原到运行这个命令的目录。 -C 开关使我们的当前目录不再相关。

您可能会经常使用的另外两个 tar 命令是 -t 和 -d 开关。 -t 开关列出某个归档文件的内容。 -d 开关将归档文件的内容与系统上的当前文件作比较。

为便于操作和编辑,您可以将想要归档的文件和目录放进一个文本文件中,然后在命令行通过 -T 开关引用这个文本文件。这些文件和目录可以与命令行上列出的其他目录结合起来。下面的命令行备份 MyFiles文件中列出的文件或目录,同时备份/ 根目录和 /tmp 目录中的所有 iso 文件。
tar -cpf /dev/st0 -T MyFiles  /root   /tmp/*.iso

MyFiles文件列表只是一个文本文件,其中列出文件或目录。下面是一个例子:

/etc
/var
/home
/usr/local
/opt

请注意tar -T (或 files-from )命令不能接受通配符。文件必须明确地列出。
上面的例子展示了一种单独地引用文件的方法。您还可以执行脚本来搜索系统,然后建立一个列表。
下面就是这样一个脚本的例子:

#!/bin/sh
cat MyFiles > TempList
find /usr/share -iname *.png >> TempList
find /tmp -iname *.iso >> TempList

tar -cpzMf /dev/st0 -T TempList

上面的脚本首先将 MyFiles 中的所有现有文件列表复制到 TempList。
然后它执行两个find 命令来搜索文件系统中匹配某个模式的文件,并将它们附加到TempList。第一次是搜索 /usr/share 目录树中以 .png 结尾的所有文件。第二次是搜索 /tmp 目录树中以.iso 结尾的所有文件。在建立好列表之后,tar然后在文件设备 /dev/st0 (第一个 SCSI 磁带设备)上创建一个新的归档文件,该文件使用gzip 格式来压缩,并保留所有文件权限。该归档文件将跨越多个卷。要归档的文件的名称将从TempList 文件中提取。

还可以使用脚本来执行更精细的操作,比如增量备份。
Gerhard Mourani 在他的 Securing and Optimizing Linux 一书中给出了一个优秀的脚本
posted @ 2009-09-16 16:07  jone_linux  阅读(960)  评论(0编辑  收藏  举报