Linux 管理员手册(8)--备份
发表于:2007-07-13来源:作者:点击数:
标签:
硬件不肯定是可靠的 软件肯定是不可靠的 人不肯定是不可靠的 而自然肯定是可靠的 本张说明为什么、如何、何时要做备份,及如何回存备份的东西。 备份的重要 数据是有价值的。重新产生它需要你花费时间和努力,并且要花费金钱或至少伤心和眼泪,有时甚至不可
硬件不肯定是可靠的
软件肯定是不可靠的
人不肯定是不可靠的
而自然肯定是可靠的
本张说明为什么、如何、何时要做备份,及如何回存备份的东西。
备份的重要
数据是有价值的。重新产生它需要你花费时间和努力,并且要花费金钱或至少伤心和眼泪,有时甚至不可能重新产生,例如一些实验结果。由于数据是一种投资,你必须保护它,并采取措施避免丢失。
丢失数据一般有4个原因:硬件失败、软件曲线、人为因素或自然灾害。 虽然现代硬件已经相当可靠,但仍可能自然损坏。存储数据最决定性的硬件是硬盘,它依赖微小的磁区在充满电噪声的世界上保存数据。现代软件依然不可靠,一个真正可靠的程序是理想、罕见的,而不是规律。人更不可靠,他们很容易犯错误,甚至为某种目的恶意地破坏数据。自然可能不是邪恶的,但也可能造成破坏。一切的一切,希望什么都正常、完美几乎是不可能的。
备份是保护数据投资的方法。有数据的多个拷贝,就不怕某个损坏(所需做的仅仅是从备份中恢复丢失的数据)。
正确的备份是很重要的。正如物理世界中任何东西都与其他相关,备份也迟早会失效。好的备份确保有效,你不希望你的备份无效。 如果你的备份又坏了,这将雪上加霜,如果你只有一个备份,它可能根本是坏的,只留下你和硬盘中冒烟的灰烬。 或者当你恢复时,发现忘了备份一些重要的东西,比如15000个用户站点的用户
数据库。 Best of all, all your backups might be working perfectly, but the last known tape drive reading the kind of tapes you used was the one that now has a bucketful of water in it.
When it comes to backups, paranoia is in the job description.
选择备份介质
备份所需的最重要的决定是选择备份介质。需要考虑成本、可靠性、速度、可得到、可用性。
成本是很重要的,因为你的数据可能需要多个存储、多个备份。便宜的介质可以用很多。
可靠性是最重要的,因为坏的备份会雪上加霜。备份介质必须能存储数据多年而不损坏。作为备份介质,使用方法影响可靠性。硬盘一般是很可靠的,但作为备份介质并非很可靠,如果它和备份源在同一计算机里的话。
速度通常不太重要,如果备份可以非交互地完成。备份花2个小时无所谓,无须监督,多长时间都没有关系。另一方面,if the backup can't be done when the computer would otherwise be idle, 那么速度也是个问题。
可得到是明显必要的,因为你无法使用不存在的备份介质。不太明显的是要在将来还能得到这种介质,并且能在其他计算机上使用。否则灾害之后,你可能无法恢复你的备份。
可用性是决定备份周期的主要因素。备份越容易使用越好。备份介质不能难以使用。
一般用软盘和磁带。软盘很便宜,还算可靠,不太快,很容易得到,但数据量大时不容易使用。磁带也很便宜,还算可靠,还算快,很容易得到,而且,依赖于磁带的容量,使用很轻松。
还有其他选择。但通常可得性不好,但如果这不成问题,有时也不错。例如,磁光盘同时具有软盘(随机存取,可以快速地恢复单个文件)和磁带(大容量)的优点.
选择备份工具
备份有很多工具,传统的
UNIX备份工具是tar 、 cpio 和dump 。另外,还可以使用大量第三方软件包(包括freeware和商业版)。备份介质的选择可能影响工具的选择。
tar 和cpio 类似,从备份来看二者基本等效。都能将文件存到磁带并取出文件。都能使用几乎所有介质,因为核心设备驱动处理低级设备操作,对用户级程序看来所有设备都差不多。有写
Unix版本的tar 和cpio 对不是普通文件可能有问题(符号连接、设备文件、极长路径名的文件等等),但
Linux的能正确处理所有文件。
dump 不同,它直接读文件系统,而不通过文件系统。 It is also written specifically for backups; tar 和cpio are really for archiving files, although they work for backups as well.
直接读文件系统有些优点,它可能不考虑time stamps备份所有文件;对于tar 和cpio ,必须先将文件系统只读安装。直接读文件系统更有效,如果所有东西都要备份,因为它使磁头移动最少。它的主要缺点是每个文件系统种类需要特定的备份程序, Linux的dump 程序只理解ext2文件系统。
dump 也直接支持备份级(下面讨论);对tar 和cpio ,这必须用其他工具实现。
第三方备份工具的比较超出了本书的范围。Linux Software Map列出了许多freeware的。
简单备份
一个简单的备份方案是一次备份所有东西,然后备份上次备份后改变的所有东西。第一个备份叫全备份full backup,后来的叫i增量备份ncremental backups。全备份比增量备份费时费力,因为有更多的东西写到磁带,而且全备份可能不能放如一盘磁带中(更别说软盘了)。回存增量备份比全备份可能要花更多的时间。备份可以这样优化,就是自上次全备份以后,总用增量备份保存所有改过的文件。这样,备份可能需要多一些的工作,但你只需回存一个全备份和一个增量备份。
如果有6盘磁带想每天备份,可以用磁带1做第一个全备份(比如在星期五),用磁带2-5做增量备份(周一到周四)。然后用磁带6做新的全备份(第二个周五),然后再用磁带2-5做增量备份。在做完新的全备份之前不要覆盖旧的全备份(磁带1),一面在做全备份的时候出现问题。有了新的全备份磁带6以后,最好在另一个地方保存磁带1,这样如果有一个全备份磁带在火灾中损失了,还能有一个。当再做下一个全备份是,再用磁带1而保存磁带6。
如果你有多于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/
....
#
失败的备份检查意味着如果你丢失了原始数据,备份也无法恢复。
增量备份可用带-newer (-N)选项的tar 来实现:
# 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
#
不幸的是,tar 不能知道一个文件的i节点信息变化,例如,文件的权限位变化,或文件名变化。这可用find 命令和比较当前文件系统状态和先前备份的文件列表。用于此的Scripts和程序可以在Linux FTP站点上找到。
用tar回存
tar 的-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 永远是顺序读一个备份卷,因此大的卷会很慢。使用磁带机或其他顺序介质时不可能使用随机存取数据库技术。
tar 不处理删除文件属性。如果你需要从一个全备份和一个增量备份恢复一个文件系统,并且2个备份之间你删除了一个文件,当你恢复完后,这个文件又存在了。如果这个文件包含应该删除的敏感数据,这是个大问题。
多级备份
上面的章节概述了简单备份的方法,对个人使用或小的站点使用。对于多数重负荷的使用,多级备份更适用。
简单备份有2个备份级:全备份和增量备份。通常可以有任意数量的备份级。全备份是0级,不同级别的增量备份是1、2、3...级,每个增量备份级备份同一或上一级别的上次备份后改变的所有东西。
这样多的目的是更便宜地允许更长的备份历史backup history。在前面的例子中,备份历史追溯到上一个全备份。可以增多磁带来扩展备份历史,但每个新磁带扩展一周,这样可能太贵。更长的备份历史是有用的,因为删除或损坏的文件可能长时间未被发现。即使不是一个文件的最新版本,也比没有好。
多级备份可以更便宜地扩展备份历史。例如,如果你有10盘磁带,可用磁带1和2做月备份(每月的第一个周五),磁带3-6做周备份(其他周五,因为每月最多可能有5个周五,因此需要4盘磁带),磁带7-10做日备份(周一到周四)。只增加了4盘磁带,就将2周的备份历史扩展到2个月。诚然,我们无法恢复这2个月中每个文件的所有版本,但这样恢复的经常是足够好了。
备份级可使文件系统恢复用最少的时间。如果你有许多只是单调增长级别数的增量备份,要恢复整个文件系统,你需要回存所有备份。而如果级别数不是单调增长,可以减少备份和回存的数目。
为了将回存需要的磁带数据减至最小,可以用小的级别做每个增量磁带。然而,这样做每个增量备份的时间会增加(每个备份拷贝了上次全备份后改变的所有东西)。一个好的方案建议在dump man页中给出,并在表 9.2中说明。 Use the following su
clearcase/" target="_blank" >ccession of backup levels: 3, 2, 5, 4, 7, 6, 9, 8, 9... 这使备份和回存所用的时间保持较少。 The most you have to backup is two day's worth of work. 恢复所需磁带数有赖于全备份的间隔,但它比简单的方案少。
一个好的方案降低了工作量,并能追寻更多的东西。You must decide if it is worth it.
dump 对备份级有内置的支持。而tar 和cpio 则必须用shell scripts实现。
备份什么?
你可能想尽多备份。主要的例外是容易重安装的软件, 但即使是它们,也有配置文件,对备份很重要,以免对这些软件全部重新配置。另一个主要的例外是/proc 文件系统,因为他们只包含通常由核心自动产生的数据,备份它们绝不是个好主意。特别是/proc/kcore 文件更是不必要,因为它只是你当前物理内存的映象,而且很大。
Gray areas include the news spool, log files, and many other things in /var . 你必须决定重点考虑什么。
备份最明显的是用户文件(/home )和系统配置文件(/etc ,但还可能有散落在文件系统其他地方的其他东西。
压缩备份
备份占用大量空间,要花费大量金钱。为了降低空间
需求,备份可以压缩。有几种方法。有些程序内置支持压缩。例如GNU tar 的-gzip (-z)选项,通过管道(pipe),在写到备份介质前,先用 gzip 压缩程序压缩。
不幸的是,压缩备份可能导致问题。由于压缩工作的原理,如果一个bit错误,可能导致所有其他压缩数据不可用。有些备份程序内置错误校正,但没有办法处理大量的错误。就是说,如果用GNU tar 压缩备份,一个单独的错误回导致整个备份丢失。备份必须可靠,这样的压缩方法不好。
还有一个方法是单独压缩每个文件,这也回导致一个文件的丢失,但不会影响其他文件。丢失的文件可能已经因为什么原因损坏,因此这种情况比不使用压缩差不了多少。 afio 程序(cpio 的一个变种)可以这样。
压缩需要时间,which may make the backup program unable to write data fast enough for a tape drive. 这可以靠输出缓冲来避免(如果备份程序足够智能,可以内置,否则可以通过其他程序), but even that might not work well enough. 这只会在慢的计算机上是个问题。
原文转自:http://www.ltesting.net