Linux管理员手册(8)--备份

硬件不愿定是可靠的   软件确定是不可靠的   人不愿定是不可靠的   而天然确定是可靠的   本张说明为何、如何、什么时候要作备份,及如何回存备份的东西。   备份的重要   数据是有价值的。从新产生它须要你花费时间和努力,而且要花费金钱或至少伤心和眼泪,有时甚至不可能从新产生,例如一些实验结果。因为数据是一种投资,你必须保护它,并采起措施避免丢失。   丢失数据通常有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级,不一样级别的增量备份是一、二、3...级,每一个增量备份级备份同一或上一级别的上次备份后改变的全部东西。   这样多的目的是更便宜地容许更长的备份历史backup history。在前面的例子中,备份历史追溯到上一个全备份。能够增多磁带来扩展备份历史,但每一个新磁带扩展一周,这样可能太贵。更长的备份历史是有用的,由于删除或损坏的文件可能长时间未被发现。即便不是一个文件的最新版本,也比没有好。   多级备份能够更便宜地扩展备份历史。例如,若是你有10盘磁带,可用磁带1和2作月备份(每个月的第一个周五),磁带3-6作周备份(其余周五,由于每个月最多可能有5个周五,所以须要4盘磁带),磁带7-10作日备份(周一到周四)。只增长了4盘磁带,就将2周的备份历史扩展到2个月。诚然,咱们没法恢复这2个月中每一个文件的全部版本,但这样恢复的常常是足够好了。   备份级可以使文件系统恢复用最少的时间。若是你有许多只是单调增加级别数的增量备份,要恢复整个文件系统,你须要回存全部备份。而若是级别数不是单调增加,能够减小备份和回存的数目。   为了将回存须要的磁带数据减至最小,能够用小的级别作每一个增量磁带。然而,这样作每一个增量备份的时间会增长(每一个备份拷贝了上次全备份后改变的全部东西)。一个好的方案建议在dump man页中给出,并在表 9.2中说明。 Use the following succession 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. 这只会在慢的计算机上是个问题。