Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1105346
  • 博文数量: 264
  • 博客积分: 7225
  • 博客等级: 少将
  • 技术积分: 5096
  • 用 户 组: 普通用户
  • 注册时间: 2008-11-17 08:53
文章分类

全部博文(264)

文章存档

2011年(33)

2010年(52)

2009年(152)

2008年(27)

我的朋友

分类: LINUX

2009-08-01 10:28:18

Tar备份Linux
2008年01月10日 星期四 下午 08:38
备份的内容

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

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

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

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

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

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

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

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

tar 是一个已移植到 Linux 中的经典 UNIX 命令。 tartape 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 开关(本例中没有显示)以进行多卷备份。


不要忘了 Linux 是区分大小写的。例如, tar 命令应该总是以小写的形式执行。命令行开关可以是大写、小写或大小写的混合。例如, -t-T 执行不同的功能。文件或目录名称可以混合使用大小写,而且就像命令和命令行开关一样,是区分大小写的。

要还原一个或多个文件,可以使用带提取开关( -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

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

/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 磁带设备)上创建 一个新的归档文件,该文件使用 g zip 格式来压缩,并保留所有文件权限。该归档文件将跨越多个卷。要归档的文件的名称将从 TempList 文件中提取。

还可以使用脚本来执行更精细的操作,比如增量备份。Gerhard Mourani 在他的 Securing and Optimizing Linux 一书中给出了一个优秀的脚本,您可在本文结尾处的 参考资料中找到关于这本书的信息。

也可以编写脚本来还原文件,虽然还原通常是手动进行的。正如上面提到过的,用于提取文件的 -x 开关代替了 -c 开关。可以还原整个归档文件,或者还原指定的个别文件或者目录。使用通配符来引用归档文件中的文件是可以的。还可以使用开关来转储和还原。






dump 可以执行类似 tar 的功能。然而, dump 倾向于考虑文件系统而不是个别的文件。下面是引自 dump 手册文件中的内容:“dump 检查 ext2 文件系统上的文件,并确定哪些文件需要备份。这些文件将出于安全保护而被复制到给定的磁盘、磁带或其他存储媒体上……大于输出媒体容量的转储将被划分到多个卷。在大多数媒体上,容量是通过一直写入直至返回一个 end-of-media 标记来确定的。”

配合 dump 的程序是 restore ,它用于从转储映像还原文件。

restore 命令执行转储的逆向功能。可以首先还原文件系统的完全备份,而后续的增量备份可以在已还原的完全备份之上覆盖。可以从完全或部分备份中还原单独的文件或者目录树。

dumprestore 都能在网络上运行,因此您可以通过远程设备进行备份或还原。 dumprestore 使用磁带驱动器和提供广泛选项的文件设备。然而,两者都仅限用于 ext2 和 ext3 文件系统。如果使用的是 JFS、Reiser 或者其他文件系统,您将需要其他的实用工具,比如 tar






使用 dump 执行备份是相当简单的。下面的命令执行一个完全 Linux 备份,它把所有 ext2 和 ext3 文件系统备份到一个 SCSI 磁带设备。

dump 0f /dev/nst0 /boot



dump 0f /dev/nst0 /

在这个例子中,系统中有两个文件系统。一个用于 /boot,另一个用于 / ,这是常见的配置。它们必须在执行备份时单独地引用。 /dev/nst0 引用第一个 SCSI 磁带驱动器,不过是以非重绕的模式引用。这样确保各个卷在磁带上一个接一个地排列。

dump 的一个有趣特性是其内置的增量备份功能。在上面的例子中, 0 表示 0 级或基本级备份。这是完全系统备份,您要定期执行以保存整个系统。对于后续的备份,您可以使用其他数字(1-9)来代替 0,以改变备份级别。1 级备份会保存自从执行 0 级备份以来更改过的所有文件。2 级备份会保存自从执行 1 级备份以来更改过的所有文件,以此类推。使用 tar 和脚本可以执行相同的功能,但要求脚本创建人员提供一种机制来确定上次备份是何时执行的。 dump 具有它自己的机制,即它在执行备份时会输出一个更新文件(/etc/dumpupdates)。这个更新文件将在每次执行 0 级备份时被重设。后续级别的备份会保留它们的标记,直至执行另一次 0 级备份。如果您在执行基于磁带的备份, dump 会自动跟踪多个卷。


标记将被 dump 跳过的文件和目录是可以做到的。实现此目的的命令是 chattr ,它改变 ext2 和 ext3 文件系统上的扩展属性。

chattr +d 

上面的命令向文件添加一个标记,让 dump 在执行备份时跳过该文件。






要还原使用 dump 保存的信息,可以使用 restore 命令。像 tar 一样, dump 能够列出( -t )归档文件的内容,并与当前文件作比较( -C )。使用 dump 時必须小心的地方是还原数据。有两种非常不同的还原方法,您必须使用正确的方法才能获得可预测的结果。

记住,在设计 dump 时考虑得更多的是文件系统,而不是单独的文件。因此,存在两种不同的文件还原风格。要重建一个文件系统,可使用 -r 命令行开关。设计重建的目的是为了能在空文件系统上操作,并将它还原为已保存的状态。在执行重建之前,您应该已经创建、格式化和装载(mount)了该文件系统。不应该对包含文件的文件系统执行重建。

下面是使用上面执行的转储来执行完全重建的例子。

restore -rf /dev/nst0

上面这个命令需要针对要还原的每个文件系统分别执行。

在需要的时候,可以重复这个过程来添加增量备份。

如果需要使用单独的文件而不是使用整个文件系统,您必须使用 -x 开关来提取它们。例如,要仅从我们的磁带备份中提取 /etc 目录,可使用以下命令:

restore -xf /dev/nst0 /etc

restore 提供的另外一个特性是交互式模式。使用命令:

restore -if /dev/nst0

将把您置于交互式 shell 中,同时还显示了包含在该归档文件中的项。键入“help”将会显示一个命令列表。然后您就可以浏览并选择希望提取的项。务必记住,您提取的任何文件都将进入当前目录。


dumptar 都有一批拥护者。两者都各有优点和缺点。如果您运行的是除 ext2 或 ext3 之外的任何文件系统,那么 dump 就对您不可用。然而如果不是这种情况,那么只需最少的脚本就能运行 dump ,并且 dump 还具有可用于帮助还原的交互式模式。

我倾向于使用 tar ,因为我喜欢编写脚本来获得额外的控制级别。此外还有用于操作 .tar 文件的多平台工具。


这里分别介绍几种易于使用的Linux备份软件

软件名称:Xtar
最新版本:4.4.6
适用平台: Unix、Linux
软件大小: 16 KB
软件授权:开放源代码
下载地址:
Xtar 是桌面环境下查看和处理tar的工具。tar工具是Unix备份文件的工具,Linux继承了它。tar几乎可以工作于任何环境中,所以Linux老用户 都信赖它。但是tar是一个命令行的工具,没有图形界面。tar命令的参数非常多,常用的包括30多个,初学者往往不易掌握。Xtar是一个图形化的 tar工具。Xtar全部兼容tar命令,可以在桌面环境下完成打包整个目录树的任务,这使得它特别适合用于备份。Xtar与文件系统无关,可以使用在 ext2、ext3、JFS、Reiser和其它文件系统上,支持各种备份介质:软盘、光盘、可重写的光盘、JazZip、磁带等。
软件名称:Kdat
最新版本: 1.99e
适用平台: Unix、Linux
软件大小: 188 KB
软件授权:开放源代码
下载地址:
Kdat 是一个功能强大的Linux 备份工具。由于使用了GTK 图形库,所以拥有非常友好和漂亮的用户界面。它支持多片压缩的方式,并包含备份、恢复、比较等功能。Kdat是KDE自身的备份软件,使用Kdat需要安 装系统工具包:kdeadmin,它在Linux发行版本中可以找到,也可以在它的主页下载。使用Kdat前必须先安装磁带机。安装磁带机有三种方法: 1.从“文件”菜单选择“Mount Tape”。2.单击工具条上的磁带驱动器图标。3.右键单击磁带驱动器树的节点, 选择“Mount Tape”项。
软件名称:Taper
最新版本: 7.01
适用平台: Unix、Linux
软件大小: 188 KB
软件授权:开放源代码
下载地址:
Taper是一款拥有良好用户界面的磁带备份和恢复软件,并且是开放源代码的。它可以从一台磁带机上备份/恢复软件,支持自动更新备份和恢复, 是一个相当好用的工具。Taper可以运行在命令行和KDE、Gonme桌面环境下。在命令行下启动一个终端输入:$Taper T r即可启动。和Kdat相比Taper最大的优点是支持多种备份介质:磁带、软盘、ZIP驱动器、硬盘等。毕竟磁带机的价格还是比较昂贵的。缺点是 Taper最新版本一次备份文件最大容量不能大于4gb。
软件名称:Arkeia
最新版本: 5.28
适用平台: Unix、Linux
软件大小: 5.7 MB
软件授权:商业软件
下载地址:
Arkeia是一个基于客户/服务模式的备份解决方案。Arkeia使用了独特的多线程技术备份速度可以达到Kdat的3倍。如果客户端是选择 用图形界面的,需要Java 虚拟机支持(或者JDK)。作为商业软件Arkeia和Kdat相比最大的优点是备份速度快(在高速网络中Arkeia一个小时可以备份700GB文 件)、和广泛应用的平台(通过Samba可以备份Windows主机)。如果使用图形界面需要安装两个软件:arkeiasb-server、 arkeiasb-gui。Arkeia有非常详细的在线帮助,很容易上手。

备份ubuntu系统


备份ubuntu系统- -

                                      

译者:Jonah.Simon

(做之前确保/media下面没有挂载任何东西,备份文件将放在你的根目录下)

sudo su

cd /

tar cvpzf backup.tgz / --exclude=/proc 、--exclude=/lost+found--exclude=/backup.tgz --exclude=/mnt--exclude=/sys


如果你希望更高的压缩比(速度慢)
用这个替换上面最后一步的代码:


tar cvpjf backup.tar.bz2 / --exclude=/proc --exclude=/lost+found --exclude=/backup.tar.bz2 --exclude=/mnt --exclude=/sys


到你的根目录下,有一个backup.tgz ,这就是你的备份文件


恢复(慎用,会把你分区里所有文件替换成压缩文档里的文件)

sudo su

cd /

tar xvpfz backup.tgz -C /

如果你是用第2种方法备份的话,用这个替换最后一步的代码

tar xvpfj backup.tar.bz2 -C /


等它做完了
代码:

mkdir proc
mkdir lost+found
mkdir mnt
mkdir sys
重启

备份

不像Windows,Linux不限制根用户存取任何东西,因此,你完全可以把一个分区上每一个的文件放入一个TAR文件中。

来实施这一方法,用这个成为根用户:
sudo su
接着去你的文件系统的根目录
cd /
然后,下面就是我用来备份我的系统的完整的命令:
tar cvpzf backup.tgz / --exclude=/proc --exclude=/lost+found --exclude=/backup.tgz --exclude=/mnt --exclude=/sys
接着,让我们稍微解释一下:
很明显,'tar'部分就是我们将要使用的软件。
'cvpfz'是我们给tar加的选项,像“创建一个压缩文档”(这是显然的),“保存权限”(以便使每一个相同的文件有相同的权限),以及“gzip”(缩减大小)。
接下来,是压缩文档将获得的名称,在我们的例子中是backup.tgz。
紧随其后的是我们想要备份的根目录。既然我们想备份所有东西:/
接着就是我们要剔除的目录了。我们不想备份每一样东西,因为包括有些目录不是非常有用。同时确保你没有把备份文件本身也加进去了,否则,你会得到怪异的结果的。你也许同样不打算把/mnt文件夹包括进来——如果你在那儿挂载了其他分区——否则最终你会把那些也备份的。同时确保你没有任何东西挂载在 /media(即没有挂载任何cd或可移动介质)。否则,剔除/media。

在进程的最后,你也许会得到一条信息,写着“tar:由于先前错误的耽搁而存在错误”或者其他什么,不过大多数情况下你可以仅仅忽略它。

作为选择,你可以使用Bzip来压缩你的备份。这意味着较高的压缩比但是也意味着较低的速度。如果压缩比对你很重要,只需用“j”替换命令中的“z”,同时给备份命一个相应的扩展名。这些会使命令变成这样:
tar cvpjf backup.tar.bz2 / --exclude=/proc --exclude=/lost+found --exclude=/backup.tar.bz2 --exclude=/mnt --exclude=/sys

恢复:

警告:看在上帝的份上,在这一部分请小心谨慎。如果你不理解你在这里干了什么,你可能最终毁坏了对你而言很重要的东西,所以请小心谨慎。

那么,我们将紧接着上一章的例子:在分区的根目录下的backup.tgz文件
再一次确保你是根用户以及备份文件在文件系统的根目录。

Linux美妙的地方之一就是这一项工作甚至可以在一个正在运行的系统上进行;没必要被引导cd或者任何东西搞得晕头转向。当然,如果你使你的系统 无法被引导了。你也许别无选择,只能使用一张live-cd了,但是结果是一样的。你甚至可以在Linux系统正在运行的时候,移除它里面所有文件。可是 我不告诉你那个命令!

这是我要用的命令:
tar xvpfz backup.tgz -C /

如果你使用 bz2:
tar xvpfj backup.tar.bz2 -C /

警告:这会把你分区里所有文件替换成压缩文档里的文件!

确保在你做其他任何事情之前,重新创建你剔除的目录:
mkdir proc
mkdir lost+found
mkdir mnt
mkdir sys

/proc 权限:文件所有者:root群组:root 所有者:读取 执行 群组:读取 执行 其它:读取 执行
/lost+found 权限:文件所有者:root群组:root 所有者:读取 写入 执行 群组:读取 执行 其它:读取 执行
/mnt 权限:文件所有者:root群组:root 所有者:读取 写入 执行 群组:读取 执行 其它:读取 执行
/sys 权限:文件所有者:root群组:root 所有者:读取 写入 执行 群组:读取 执行 其它:读取 执行

当你重启以后,所以的事情都会和你备份的时候一模一样
阅读(1104) | 评论(0) | 转发(1) |
给主人留下些什么吧!~~