备份的重要性
[1] 尽管现代的硬件越来越可靠,但本质上看来还是会坏的。最重要的存储数据的硬件是硬盘,它依赖于在充满电磁干扰的世界里微小的磁场未被触及的状况。现代的软件甚至并没有趋于更可靠;极其稳固可靠的程序是一个特例,而不是常有的。人的行为是非常不可靠的,他们或者会造成一个错误,或者会有目的地恶意地破坏数据。自然并不是邪恶的,但有时即使是在正常的状态下也会造成巨大的破坏。总的来说,所有的部分都能正常地工作是个小小的奇迹。[2] 让人感到雪上加霜的是,当你正在做备份时数据突然坏掉了;如果你只有一个备份的话,它也许同样会损坏,给你留下的只是辛勤工作的烟尘。[3] 或者在你恢复数据时,发现有些重要数据忘记备份了,就象有个15000个用户站点上的用户数据库。最好的情况是,你的所有备份都能正常的工作,但是你所用的最后一个磁带驱动器所读的那类的磁带肯定是含有水分的。
备份是保护投资的一种方法。通过对数据拥有几个拷贝,那么有一个被损坏的话也无所谓(代价只是从备份中恢复丢失的数据)。
正确地作好备份是很重要的。正如与实际世界相关的所有事情一样,备份迟早也会失效。要做好备份的部分工作是确信它是有效的、可用的;你不会想知道你的备份是不可用的。
当说到备份工作时,常要用到偏执狂这种工作态度。
选择备份的介质
UNIX备份工具是tar、cpio、以及dump。另外,还有许多第三方的软件包(有免费的也有商业版的)可供使用。对备份介质的选择会影响对备份工具的选择。
和cpio是相似的,而且从备份的观点来看,这两者几乎是相同的。这两者都能将文件存储于磁带上,以及从磁带上恢复文件。都几乎可以使用任何介质,因为内核的设备驱动程序处理低级的设备操作,并且对于用户级程序来说这些设备看上去都是一样的。有些UNIX版的tar和cpio在处理不寻常的文件时可能会碰上问题(符号连接、设备文件、有很长的路径名的文件等等),但是,Linux版的就可以正确地处理所有这些文件。
有些不同,它是直接读取文件系统而非通过文件系统来读取其中的文件。它也是特定为备份的用途而编写的;tar和cpio其实是用于文件归档的,尽管它们也同样用于备份操作。tar和cpio来讲,你就必须首先以只读方式来加载文件系统。如果所有的东西都要备份,那么直接读取文件系统也就更有效,因为这样可以减少磁头的运动。主要的缺点是特定的文件系统类型要求特定的备份程序;Linux的dump程序只能对ext2文件系统进行操作。
直接读取文件系统有某些优点。这使得它可以在不影响文件时间标签的情况下备份文件;而对于
也同样支持备份级别(levels)(这将在下面讨论);而对于tar和cpio来讲,这需要用其它的工具来实现了。Linux软件图(Linux Software Map,LSM)列出了许多着方面的自由软件。
有关第三方备份工具的比较不在本书范围内。
简单备份
full backup),接下来的一系列备份称为增量备份(incremental backups)。完全备份经常比增量备份要花更多的劳动,因为有很多的数据要写入磁带并且一个完全备份有可能一个磁带(或软盘)还不够。从增量备份中进行恢复要比从完全备份进行恢复需要多次和更多的工作量。恢复能够进行优化,这样自从前次的完全备份后,你总可以备份所有的东西;这样,备份可能需要多花上一点工作量,但是就不会再需要恢复比完全备份以及增量备份更多的数据量。2至5盒重做增量备份。直到你又有了一个完全备份之前,你无需重写磁带1上的备份,免得当你在做完全备份时发生什么问题。在磁带6上做过完全备份之后,可将磁带1保存在其它什么地方,这样当你的其它备份磁带在火灾中毁坏时,你起码还有些备份留下。当你需要制作下一个完全备份时,把磁带1拿出来做,而把磁带6保存在其它地方。 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 # 使用 的 –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顺序地读取备份卷,所以对于大的卷,它是很慢的。然而,当使用磁带驱动器或其它一些顺序介质时,不可能使用随机访问数据库技术的。 不能恰当地处理已删除的文件。如果你需要从完全备份以及增量备份上恢复一个文件系统时,并且你已经在两次备份之间删除了一个文件,这个文件在你做完恢复的操作后又将存在。如果该文件含有敏感数据并且本应不该再存在的话,就可能成为一个大问题。 多级备份 0,增量备份的不同级就是备份级1、2、3等等。在每个增量备份级操作中,要备份从本级或前一级的前次备份以来所有已经改变过的东西。backup history)。在上节的例子中,备份记录史可以追溯到上一个完全备份。若有更多的磁带,但每盒新磁带记录一星期,就能再延伸备份历史,不过这样可能太昂贵了点。较长的备份历史是有用的,因为被删除的或已毁坏的文件经常长期得不到注意。即使不是一个最新版的文件也总比没有的好。10-1显示出了每天使用那一个备份级别,以及哪些备份在月底可以用于恢复操作。10-1. 多级备份方案的例子。dump的manual page中提出的,并在表XX中进行了叙述(有效备份级别)。使用下面的连续备份级别:3,2,5,4,7,6,9,8,9等等。这样可使得备份和恢复操作的时间都较少。你所需要的备份时间最多是抵两个工作日。一次恢复操作要用到的备份好的磁带的数量依赖于两次完全备份之间的时间长短,但数量要比在简单备份中用的要少。10-1. 使用多备份级的有效备份方案。 这样做的目的是可以方便地有一个更长的备份记录史( 图 备份级也能用于使得文件系统的恢复工作时间达到最短。如果你有许多增量备份,并且这些增量备份的级别一个比一个高而不一样,那么当你需要重建整个文件系统时,你就需要恢复所有这些备份。然而,你可以使用级别不是顺序递增的备份级,这样就可以减少恢复操作时要用到的备份数量。 为了减少用于恢复操作时的已备份磁带数量,你可以对每个增量磁带使用更小的级别。然而,这样的话制作备份所用的时间就增加了(自从上次完全备份以来,每个备份要拷贝所有的东西)。一个更好的备份方案是在 表 磁带 级别 备份(天数) 恢复用到的备份磁带数 1 0 n/a 1 2 3 1 1, 2 3 2 2 1, 3 4 5 1 1, 2, 4 5 4 2 1, 2, 5 6 7 1 1, 2, 5, 6 7 6 2 1, 2, 5, 7 8 9 1 1, 2, 5, 7, 8 9 8 2 1, 2, 5, 7, 9 10 9 1 1, 2, 5, 7, 9, 10 11 9 1 1, 2, 5, 7, 9, 10, 11 . . . 9 1 1, 2, 5, 7, 9, 10, 11, . . . 一个好的备份方案能够减少所需的工作总量,但这也意味着要明了许多事情。你必须判定这样是否值得。 dump 需要备份些什么 [4] 但即使是这些软件,也可能含有一些配置文件,这些文件是备份操作的重要对象;以免从头开始重新配置所有这些软件。另一个例外是/proc文件系统;因为它只含有内核总是自动产生的数据,所以没有必要备份它。尤其没有必要备份/proc/kcore文件,因为它只是当前物理内存的一个映像;而且它也非常大。news spool、log文件、以及/var中的许多数据。你必须决定什么数据对你来说是重要的。/home)以及系统配置文件(/etc,但很可能其它一些散布在整个文件系统中)。 可备份也可不备份的部分包括 显然要备份的数据包括用户文件( 压缩备份 GNU的tar程序的—gzip(-z)选项在把数据写入备份介质前,将整个备份数据输送到gzip压缩程序进行压缩。GNU tar的方法压缩,整个输出是一个压缩好的单元(文件),那么只要有一丁点错,整个备份都玩完。备份必须可靠,因此压缩的办法并不是个好主意。afio程序(cpio的一个变种)可用来做这个工作。[5] 这可以用输出缓冲来避免(如果备份程序编制的很好的话可以编成内部的缓冲,或者用其它的程序来做到),但即使这样,运行工作也并不一定足够好。应该只是在很慢的计算机上才会有这个问题。… 不幸的是,压缩的备份可能会带来麻烦。由于压缩操作的本性,如果一个比特错了,那么其余所有的压缩数据都将毫无用处。有些备份程序含有内建的纠错功能,但并没有处理大量错误数据的办法。这意味着如果备份使用 另一种方法是独立地压缩每个文件。这仍然意味着一个文件要是出错,那么该文件整个地就会坏掉了,但不伤及其它文件。这个文件可能是由于各种原因毁坏的,所以,这种办法要比一点也不压缩好一些。 压缩操作需要花费一些时间,这可能使得备份程序不能尽可能快地将数据写到磁带驱动器中。 注释 在做好了一个备份之后,你应该使用选项 如果你的备份在一盒磁带上放不下,你就需要使用
图
有内建的对备份级的支持。而对于tar和cpio来说,则还需要用shell描述语言来实现。
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/8570952/viewspace-915131/ ,如需转载,请注明出处,否则将追究法律责任。