• 软件测试技术
  • 软件测试博客
  • 软件测试视频
  • 开源软件测试技术
  • 软件测试论坛
  • 软件测试沙龙
  • 软件测试资料下载
  • 软件测试杂志
  • 软件测试人才招聘
    暂时没有公告

字号: | 推荐给好友 上一篇 | 下一篇

[原]使用tar或者afio对linux系统进行备份

发布: 2007-7-04 12:06 | 作者: admin | 来源:  网友评论 | 查看: 17次 | 进入软件测试论坛讨论

领测软件测试网
[color=red:5af2d9c887]欢迎转载,转载请注明出处
天外闲云编写
www.chinaunix.net[/color:5af2d9c887]
    linux的系统备份一直是从windows转到linux的用户关心的问题。由于众所周知的原因,有经验的windows用户都养成了用ghost等软件备份windows系统的“优良传统”,结果这个优良传统也被移植到了linux下。其实ghost用来备份linux也是很不错的,它的压缩功能能够省下不少的硬盘空间,这点对于硬盘紧张的用户来说的确是相当好用的。不过它也有自己的缺点,那就是必须在DOS下使用,如果只是想要解出某部分文件,就只能用windows版的ghost解压出来……,种种因素使得用ghost用来备份linux成为了一件痛苦的事情。

实际上,linux自带的tar和afio就可以很好的完成这个工作,而且使用起来也相当方便,最明显的一点就是,不用为了备份系统而重启计算机。好,言归正传。

[size=18:5af2d9c887]1、使用tar进行简单的备份和恢复[/size:5af2d9c887]
1.1备份
    tat命令能够将存档数据写到文件、磁带或者原始磁带设备之中。tar命令的典型语法如下所示:
[code:1:5af2d9c887]tar -[ c | x | t ] [ -pv ] -f device path1 path2 ...[/code:1:5af2d9c887]
tar需要带一个参数命令,通常c表示创建(create),x表示解压所(extract),t表示测试(test)。选项p指示tar在解压缩时保留原始文件的所有权和权限。选项v指示tar列出详细操作过程。f选项以及后面的参数指定tar写到给定的设备。所有path1,path2等等参数是要添加到存档中的目录树或者文件。

例如,要将/usr目录树写到$HOME/Backup/usrbak.tar中,可以使用如下命令:
[code:1:5af2d9c887]tar -cf $HOME/Backup/usrbak.tar /usr[/code:1:5af2d9c887]
如果想要将/usr目录树写到/dev/st0的磁带设备中,可以使用如下命令:
[code:1:5af2d9c887]tar -cf /dev/st0 /usr[/code:1:5af2d9c887]

现在聪明的网友应该已经想到了,想要备份整个linux文件系统的命令是这样:
[code:1:5af2d9c887]tar -cf /dev/st0 /[/code:1:5af2d9c887]
乍看起来的确是这样的,但是,这个命令却实现不了你的意图。首先,这个命令也会备份/proc目录。根据你的内核版本,它将在你的备份中增加数百兆你不需要的内核运行期数据,甚至会引起tar中断或者分段错误(segmentation fault)。
其次,备份根目录/也会备份/mnt目录,其中会包含装载的CD-ROM数据以及任何装载的网络文件系统甚至于装载的windows分区(这是好事,也可能是坏事,取决于你要做什么)。
要备份除了/proc和/mnt之外的根目录,使用下面的命令:
[code:1:5af2d9c887]tar -cf /dev/st0 $(ls / | grep -v -e proc -e mnt)[/code:1:5af2d9c887]
这个命令将备份除了/proc和/mnt之外的根目录。

1.2恢复
创建了一个tar存档文件之后,通常要将每个文件名前面的斜线“/”删除掉。这意味着当恢复文件时,它们将被恢复到tar运行的相对工作目录中去。例如,要将/dev/st0中的磁带恢复到它们的原始路径中,使用下列命令:

[code:1:5af2d9c887]cd /: tar -xpf /dev/st0[/code:1:5af2d9c887]

在恢复过程中可以指定附加的路径。这些路径表示列表中的文件被打包后恢复的路径。允许使用通配符。例如要将/dev/st0磁带中的/usr/X11R6和/usr/local目录树恢复到它们的原始路径,命令如下:

[code:1:5af2d9c887]cd /;tar -xpf /dev/st0 'usr/X11r6/*/' 'usr/local/*'[/code:1:5af2d9c887]

还可以用tee命令将处理的的文件列表在终端显示,并同时将文件列表写到一个文件中,命令如下:

[code:1:5af2d9c887]cd /;tar -xpf /dev/st0 'usr/X11r6/*/' 'usr/local/*' | tee /var/log/restored.files[/code:1:5af2d9c887]

有关使用tar进行更加复杂操作的信息,例如多卷,增量备份和恢复等,可以参看tar的manual

注意:
1、在这里一直没有提及tar的z,j选项。tar -cz(j)确实能够创建压缩tar的归档文件,不过这两个压缩都是基于数据流的。也就是说如果数据保存在磁带上,而磁带发生错误的几率是很高的,如果遇到一个无法恢复的位错误,你将不仅失去这个文件,整个磁带也就毁了。
所以,最好只在错误率低的介质,如硬盘上使用z,j选项。这个问题与基于硬件压缩的磁带设备无关,对于这种设备是无须使用软件压缩的。当然对于大部分网友来说都可以加上z,j选项,毕竟大部分人都没有私人的磁带机。
2、文中的示范命令行都是以/dev/st0为备份设备的,如果是要备份到文件,只要将该参数改为文件的路径即可,如$HOME/Backup/sysbak.tar
[size=18:5af2d9c887]2、使用afio进行简单的备份和恢复[/size:5af2d9c887]

afio命令与tar命令类似,而且afio的存档能够与支持cpio(详细信息可以man cpio)命令的系统共同操作,afio支持对单个文件的压缩,更适合于利用没有硬件压缩功能的磁带进行压缩备份。

可能你的发行版本没有afio软件包,你可以从http://scdbackup.webframe.org/afio-2.4.6.tgz获取afio的源代码。

因为afio将文件列表存档为标准输入流,所以afio的作为存档工具的基本语法包含两个命令:

[code:1:5af2d9c887]find path1 path2 ...[-opts] || afio -[i|o|t] [-vZ]device[/code:1:5af2d9c887]
-i命令用来恢复(input from)磁带或者存档,-o命令(output to)用来写入磁带或者存档,-t命令用来测试磁带或者存档。-v选项对处理文件进行列表,-Z选项在文件写入磁带之前用gzip进行压缩。

2.1备份
通常使用find命令来提供afio要处理的文件列表,可以利用find的特殊功能和afio构造一个更专业更灵活的文件存档计划。
最简单的方式,例如要将/usr目录树写到磁带设备/dev/st0中,使用下列命令:
[code:1:5af2d9c887]find /usr | afio -o /dev/st0[/code:1:5af2d9c887]
要进行同样的存档操作,但是将每个文件在写到磁带之前进行压缩,使用下列命令:
[code:1:5af2d9c887]find /usr | afio -o -Z /dev/st0[/code:1:5af2d9c887]

2.2恢复
要将存档恢复到根目录,可使用-i命令代替-o命令:
[code:1:5af2d9c887]cd /;afio -i /dev/st0[/code:1:5af2d9c887]
要恢复压缩的文档,需记住要包含-Z选项:
[code:1:5af2d9c887]cd /;afio -i -Z /dev/st0[/code:1:5af2d9c887]
afio的详细操作与tar命令的详细操作相同。例如,要在恢复存档的同时在终端上显示处理的文件列表,并将列表保存到/var/log目录的一个文件中,命令如下:
[code:1:5af2d9c887]afio -i -Z -v /dev/st0 | tee /var/log/restored.files[/code:1:5af2d9c887]
有关使用afio进行更加复杂操作的信息。可以参见afio的手册。

[size=18:5af2d9c887]备注:[/size:5af2d9c887]
tar和afio用于备份linux已经可以工作得很好,但是可能有些用户还是不习惯使用命令行工具,或者某些用户需要更复杂的,网络功能更强的工具,这是tar或者afio所不能提供的。

实际上也有不少商用的linux备份方案。比如:
Arkeia
http://www.arkeia.com/

BRU(Backup and Restore Utility)
http://www.bru.com/

二者都提供了gui界面,而且有很好的网络功能以及一些特性,具体可以参看官网的介绍。当然还有很多的备份软件,不过这两者是比较著名的linux备份方案。

但是它们两都是商业软件,要想要使用就得掏钱买,否则只能使用它们的试用版了。

 jiadingjun 回复于:2004-07-03 16:56:36
我想/tmp目录下的文件,在备份时是可以忽略的吧。

另外想请教一下在“ tar -cf /dev/st0 $(ls -l / | grep -v -e proc -e mnt) ”中$符号起什么作用呢?

多谢!

 天外闲云 回复于:2004-07-03 17:34:12
汗,这个我自己也不知道$号起什么作用,但是这个地方是吧$()括号里的输出作为了tar的路径,$()的用法也是偶然在某个shell里看到的。

 零二年的夏天 回复于:2004-07-03 22:18:43
$()的作用相当于``,注意,是键盘1的左边的键。:D
具体解释请参看shell版的《shell十三问》。

----------
很不错啊!:D

 flighttop 回复于:2004-07-04 11:25:52
Hi, Sir, can you tell me where I can get the '13 Answers for Shell'?
Thank you.

 天外闲云 回复于:2004-07-04 12:56:43
[quote:ffb4682a8f="零二年的夏天"]$()的作用相当于``,注意,是键盘1的左边的键。:D
具体解释请参看shell版的《shell十三问》。

----------
很不错啊!:D[/quote:ffb4682a8f]

呵呵,谢谢。

 platinum 回复于:2004-07-04 17:26:30
如果没有磁带机设备,没有/dev/st0,应该怎么备份呢?

我的环境是这样的
http://sys.platinum.3322.org
应该如何备份呢?我觉得好难!

 天外闲云 回复于:2004-07-04 17:41:15
备份成文件再刻盘吧,没有别的办法了。不过硬盘空间得够大,我觉得用tar -cjvf会比较好,压缩率比较高的说。200mb大概能压到60mb左右。

 零二年的夏天 回复于:2004-07-04 22:25:10
[quote:77befd92ac]200mb大概能压到60mb左右[/quote:77befd92ac]
这也要看压缩的是什么格式的文件吧。

 天外闲云 回复于:2004-07-04 22:39:18
是的,不过linux系统文件和binary执行文件的话差不多可以达到这个压缩率的。

 零二年的夏天 回复于:2004-07-04 22:43:51
收到。:D

 platinum 回复于:2004-07-05 00:17:25
cjvf 明显比 czvf 要慢许多!

 好好先生 回复于:2004-07-05 07:25:56
[quote:43d55bfed0="platinum"]cjvf 明显比 czvf 要慢许多![/quote:43d55bfed0]
但压缩比也大啊,人家干活多当然用的时间要长了。 :em02:

 skynet 回复于:2004-07-05 07:39:00
不错,是我要找了好久的好东西。顶!!!

文章来源于领测软件测试网 https://www.ltesting.net/


关于领测软件测试网 | 领测软件测试网合作伙伴 | 广告服务 | 投稿指南 | 联系我们 | 网站地图 | 友情链接
版权所有(C) 2003-2010 TestAge(领测软件测试网)|领测国际科技(北京)有限公司|软件测试工程师培训网 All Rights Reserved
北京市海淀区中关村南大街9号北京理工科技大厦1402室 京ICP备10010545号-5
技术支持和业务联系:info@testage.com.cn 电话:010-51297073

软件测试 | 领测国际ISTQBISTQB官网TMMiTMMi认证国际软件测试工程师认证领测软件测试网