第十二章 系统的备份与恢复.docx
《第十二章 系统的备份与恢复.docx》由会员分享,可在线阅读,更多相关《第十二章 系统的备份与恢复.docx(14页珍藏版)》请在冰豆网上搜索。
第十二章系统的备份与恢复
第十二章系统的备份与恢复
【目标】
系统的备份与恢复是Linux系统管理一项不可缺少的工作。
备份工作的目的是为了尽可能快速和方便地恢复单个文件或整个文件系统及相关数据,备份对于文件和数据的安全恢复是非常重要的。
一名系统管理员平时养成良好的备份习惯,将对于以后的系统遇到意外紧急故障能否安全恢复运行是非常关键的。
通过本章的学习,可以使读者了解在为系统进行数据备份的重要意义、如何定制数据备份的策略、如何使用数据备份命令及工具以及如何掌握在Linux系统上进行数据备份和恢复的方法等等。
【重点内容】
为什么要备份
备份什么
备份级别
备份策略
备份命令的选择
磁带机的介绍及使用
第三方备份软件
试验案例
本章小结
专家答疑
好了,现在就让我们继续学习这一章的内容吧!
11.1为什么要备份
系统中的数据不论对用户还是企业来说,是最有意义和价值的,如果因为系统故障或其它意外,导致数据丢失,那么要花很多时间和精力才能恢复。
而且有时一些重要的数据没有任何的档案记录,根本无法恢复,这样对于个人或企业来说,无疑是一个重大的损失。
而且有些重要数据,可能是某个企业赖以生存的关键,例如一些银行、电信行业的公司中常年积累下来的客户数据和资源,如果发生某种意外,致使数据丢失,而且无法找回,那么将会面临重大的经济损失,更有甚者,可能会导致某些企业面临倒闭。
让我们列举个真实的案例,北京一家著名的远程教育行业的企业,在全国各地有众多的学员,学员都通过网络远程访问此家企业的课件资源。
这家企业将所有学员的资料和平时学习记录都存放在企业的服务器中,然而一次意外的服务器硬盘故障,导致此家企业的数据库服务器中所有学员的数据全部丢失!
而且此家企业为各地的学员发放了近十几万张学习光盘,每个学员都要通过网络从据库中获取用户口令认证才可以使用光盘的资料,但是由于数据库中学员数据全部丢失,所有的学员都无法正常使用光盘中的课件资料上课。
这家企业一下子面临所十几万张光盘全部报废,而且学员数据和资料无法恢复的危机。
但万幸的是,由于该公司的一名系统管理员在发生故障的几天前,对数据库系统的资料做过备份,并将备份的数据存放到了磁带机的磁带中,于是他们更换了新的硬盘,通过重新搭建系统,将磁带中数据导回数据库,仅用了一天的时间,就将全部数据恢复了,从而避免了面临重大经济损失甚至公司倒闭的危险!
由此可见,平时对数据备份是多么的重要。
如果不是上面例子中那家公司的系统管理员,平时养成良好的数据备份习惯,这家公司要遭受的损失可能是无法估计的!
而对于我们来说,如果系统中的一些数据十分重要,我们一定要经常的对其进行数据备份,不要有侥幸的心理,因为一旦发生意外(意外是随时都可以发生的!
),造成重要数据的丢失,那么后果将不堪设想,尤其对一些企业来说,更要重视对重要数据的经常备份。
11.2备份什么
我们在上面的内容中已经了解了数据备份的重要性,那么接下来,你可能会问,到底要备份什么数据才可以万无一失呢?
这个问题很好回答,我们首先将数据分成两类,一类是系统中的数据,另一类是用户的数据,接下来我们要做的是对这两种数据进行备份就可以了。
对系统数据备份,其实就是实现对操作系统和应用程序的备份;而对用户数据的备份,就是现对系统中用户现有的文件和资料的备份。
在下面的内容中我们会看到,系统数据备份和用户数据备份应该区别对待。
系统数据备份
系统数据备份就是对操作系统和应用程序的备份,进行系统备份的原因是尽量在系统崩溃以后能快速简单完全地恢复系统的运行。
进行有效备份的最有效的方法是备份那些对于系统崩溃恢复所必需的数据。
例如在Linux系统中,有很多重要的与系统和服务相关的配置文件位于/etc目录之下,如:
/etc/passwd:
系统中所有的用户信息,如用户主目录,登录shell等;
/etc/shadow
:
包含系统中所有用户口令隐藏加密的信息
/etc/group
:
包含系统中所有组用户信息;
/etc/fstab:
配置系统中有哪些文件系统,及它们的信息;
/etc/inittab:
配置各种进程在不同运行级别下分别如何启动系统;
/etc/hosts:
基于主机的域名解析的配置信息;
/etc/xinetd.conf:
进程控制信息;
/etc/printcap:
配置如何与打印机通信;
/etc/XF86Config:
包含XFree86的初始配置;
等等……,上面这些重要的配置文件都需要定期的作备份。
不同的系统可能有很多其他的的重要配置文件,可以看到/etc目录下的配置文件非常重要,包含在该目录下的文件可能是数小时的工作成果。
当然,某些程序使用了其他目录下的一些文件,但是Linux的基本配置文件绝大多数都位于/etc目录下。
很多人曾经花费了好长时间才正确的配置了XF86Config文件,想到如果重新再做一遍,就很费时费力。
再举个例子,/etc目录下的passwd文件,如果误操作,将此文件更改,或删除了,则整个系统用户无法正常登陆,如果定期或及时的对其备份,遇到上面的情况后,就可以非常快速的恢复了。
如果修改了某个程序所使用的配置文件,一般不能将其搬移到其它的地方,因为程序通常在固定的地方寻找配置文件。
因此记录对系统所做的修改也非常重要,无论所做的修改如何的微小,这样当系统崩溃时才能轻松的恢复系统。
记录对系统的修改的最好的工具是一杆笔和一张纸。
记录下对系统进行了哪些修改的详细描述及为什么要进行修改是非常必要的。
不要自以为是的认为经过六个月你仍然能记得你如何编译安装了某个应用,或你为什么你要修改某个配置,而实际情况是你往往会忘记。
即使你在一个单独的目录下安装了一个新的软件(比较容易查找修改),也应详细的记录如何安装的程序,什么时候安装的及是否有任何事情还不是非常清楚。
系统中的数据备份除了一些重要配置文件外,还有日志文件、系统设备文件等等,可以根据要求恢复的程度来选择对这些文件的备份。
shapeid="图片_x0020_156"o:
spid="_x0000_i1031"type="#_x0000_t75"
alt="
style='width:
18pt;height:
18pt;visibility:
visible;mso-wrap-style:
square'>
提示:
如果需要对系统中的各种用户账户的配置信息进行备份,以便发生系统故障时,使用系统备份的文件就可以及时恢复,保障用户继续对系统的使用,一般则需要我们备份/etc目录下的passwd、shadow、group三个文件即可。
用户数据备份用户数据备份不同于系统备份,因为用户的数据变动更加频繁一些,因此几乎不可能建立某个用户的精确到每分钟的备份。
当备份用户数据时,只是为用户提供一个虚拟的安全网络空间,合理的放置最近用户数据文件的备份,当出现任何问题如误删除某些文件或者硬盘发生故障时,使用户可以恢复自己的数据。
一般用户的数据都存放在这个用户所属的主目录下,所以我们只要掌握这个规律,平时经常对用户的主目录内容做到备份就可以了。
当然,有时用户的权限被放开时,用户也会将自己的数据存放在主目录以外的地方,这就需要系统管理员要经常留心系统中各个目录和文件内容的情况了。
用户备份应该比系统备份更加频繁,也许是每天都进行备份(cron程序提供了自动定期运行某个程序的方法,关于这个程序的使用会在下面的内容中介绍)。
但不要因为复杂麻烦,而不去工作,因为只有谨慎而习惯的去适应备份的工作,才能保证重要的数据不会丢失!
11.3备份级别备份是分级别的。
一般可以分为三种:
计算机内全部文件系统的备份单个文件系统的备份某些重要文件的备份我们可能需要对昨天修改的文件进行备份,也可能是对过去一周的文件进行备份,有时也会对整个系统中所有的文件进行备份。
不同的备份级别涉及到需要不同的存储介质以及备份所需要的时间。
对一般的文件而言,最简单的备份是将要备份的文件用tar或是gzip等工具将文件打包后存入一个软盘或是磁带中。
比较麻烦的是有选择地对文件进行备份或是让系统自动来完成这一工作。
恢复一个文件要比备份一个文件要困难一些。
如果对整个系统而言,备份的工作往往并不是必须的,因为存有系统的cd-rom和启动盘已经是比较好的备份了,但要恢复系统则往往会浪费一些时间。
当然,对于初学者来说,重新安装一遍系统是恢复系统最简单的方法了。
把所有的文件都备份是没有必要的,大部分系统文件都完整地放在安装cd-rom或是安装盘中。
一般来讲,用户会在/etc或是/usr目录下更改文件。
/etc目录中多是一些系统文件,包括网络设置、设备管理或是其他系统文件。
一旦更改了系统文件,应该马上对相关文件进行备份。
而/usr目录下的内容多是自己的一些程序或是文件,最好在关机前将文件做一个备份。
11.4备份策略不管系统是多么可靠,总会发生一些意想不到的事情。
经常进行数据备份能够减少偶然破坏造成的损失,保证系统能够从错误中恢复正常运行。
它是作为系统管理必不可少的工作。
但在着手之前一定要进行详细的考虑和计划。
在进行备份之前,首先要选择合适的备份策略,这将决定何时需要进行备份,以及出现故障时进行恢复的方式。
通常使用的备份方式有三种:
完全备份:
每隔一定时间就对系统进行一次全面的备份,这样在备份间隔期间出现数据丢失等问题,可以使用上一次的备份数据恢复到前次备份时情况。
这是最基本的备份方式,但是每次都需要备份所有的数据,并且每次备份的工作量也很大,需要大量的备份介质,因此这种备份不能进行的太频繁,只能每隔一段较长时间才进行一次完整的备份,例如以一个月为一个备份周期。
但是这样一旦发生数据丢失,只能恢复到上次备份的数据,这个月内更新的数据就有可能丢失。
增量备份:
首先进行一次完全备份,然后每隔一个较短时间进行一次备份,但仅仅备份在这个期间更改的内容。
当经过一个较长的时间后再重新进行一次完全备份,开始前面的循环过程。
由于只有每个备份周期的第一次进行完全备份,和其他只进行改变的文件的备份,因此工作量小,可以进行频繁的备份。
例如以一个月为一个周期,一个月进行一次完全备份,每天晚上0点进行这一天改变的数据备份。
这样一旦发生数据丢失,首先恢复前一个完全备份,然后按日期一个一个恢复每天的备份,就能恢复到前一天的情况。
这种备份方法比较经济。
累计备份:
这种备份方法与增量备份相似,首先每月进行一次完全备份,然后每天进行一次更新数据的备份。
但不同在于,增量备份是备份该天更改的数据,而累计备份是备份从上次进行完全备份后更改的全部数据文件。
一旦发生数据丢失,可以使用前一个完全备份恢复到前一个月的状态,再使用前一个累计备份恢复到前一天的情况。
这样做的缺点是每次做累计备份工作的任务比增量备份的工作量要大,但好处在于,增量备份每天都有备份,因此要保存数据备份数量太多,而累计备份则不然,只需保存一个完全备份和一个累计备份就可以恢复故障以前的状态。
另外在进行恢复工作时,增量备份要顺序进行多次备份的恢复,而累计备份只需两次恢复,因此它的恢复工作相对简单。
增量备份和累计备份都能以比较经济的方式对系统进行完全备份,在这些不同的策略之间进行选择不但与系统数据更新的方式相关,也依赖于管理员的习惯。
通常在系统数据更新不是太频繁的话,可以选用更新备份的方式。
但是如果系统数据更新太快,使每个备份周期后面几次累计备份的数据量已经相当大,这样使用累计份已经不太经济了。
这时候可以考虑增量备份或混用更新备份和增量备份的方式,或者缩短备份周期。
我们下面举个以一周时间为备份周期的例子,则备份任务策略的定制可作如下安排:
星期一:
完全备份(备份文件为A)星期二:
增量备份(备份文件为B)星期三:
增量备份(备份文件为C)星期四:
增量备份(备份文件为D)星期五:
累计备份(备份文件为E)星期六:
增量备份(备份文件为F)星期日:
增量备份(备份文件为G)如果在星期日,系统遭到意外破坏,系统管理员可按以下步骤来恢复系统:
第一步:
使用最近一周的完全备份(星期一的A文件)进行完全恢复;第二步:
使用最近一周的累计备份(星期五的E文件)进行累计恢复;第三步:
先后使用最近一周的增量备份(星期六的E文件和星期日的G文件)进行增量备份,即可恢复到接近系统被意外破坏时间的数据;shapeid="图片_x0020_157"o:
spid="_x0000_i1030"
type="#_x0000_t75"alt="
style='width:
18pt;height:
18pt;visibility:
visible;mso-wrap-style:
square'>
提示:
一名系统管理员可根据完全备份、增量备份和累计备份不同的备份方式,制定适合自己的备份策略,例如需要对系统中的数据库进行数据备份,这三种备份方式策略的合理定制就显得尤为重要。
在本章最后的实例应用中有关于进行数据库数据备份的具体介绍,请大家参考。
11.5备份命令的选择在Linux系统中,进行数据备份时有很多命令工具可以选择,一般最常用的备份工具有tar、cpio和dump等命令,这些工具通常还需要一些辅助工具的帮助,例如压缩工具gzip和compress及定期任务工具cron等来完成备份数据的任务。
下面我们逐一介绍这些工具的的应用方法。
11.5.1tar的使用tar命令最初是为了制作磁带备份而设计的(把文件和目录复制到磁带中,然后从备份中提取或恢复文件),而现在的应用中可以把它用于任何设备。
它是Linux系统中一个非常实用的程序,也是数据备份中最常用的命令之一。
和其它备份工具相比较来说,tar命令更易于使用,而且安全和可靠,它几乎可以在任何Linux或UNIX系统上读取文件,并进行数据的合理备份。
下面具体介绍tar命令的使用方法:
(1)格式:
tar[-选项][参数]<file><file2>……<fileN>
(2)参数:
-c:
用于创建备份(Create)。
-v:
表示回显模式(Verbose),将产生一系列所备份的文件列表。
-f:
指定使用备份的文件,即为输出的备份文件名。
-x:
将备份文件展开。
-t:
显示备份文件的内容。
-r:
增量写入备份文件内容-T:
后面跟随一个文件参数,指定从这个文件中读取要备份的各个文件的路径。
如果不使用T参数,那么就需要一个参数,指明进行备份文件和目录的路径。
-Z:
是使用压缩方式创建和解开备份文件,这是GNU的新版tar的功能,系统需要同时支持gzip功能。
(3)说明:
<file>到<fileN>是往档案文件中增加或从档案文件中展开的文件列表。
(4)举例:
#tarcvfbackup.tar/etc上面的命令行将/etc下的所有文件打包成tar档案文件backup.tar。
tar的第一个参数“cvf”。
是tar的命令参数,“c”告诉tar创建一个档案文件;“v”选项迫使tar采用冗长模式,即在存档时打印每个文件名;“f”选项告诉tar下一个参数backup.tar是创建的备份文件名。
shape
id="图片_x0020_158"o:
spid="_x0000_i1029"type="#_x0000_t75"alt="
style='width:
20.25pt;height:
25.5pt;visibility:
visible;mso-wrap-style:
square'>
技巧:
使用tar命令时,参数前“-”符号可以省略。
下面一行的命令将tar文件backup.tar解开并放到当前工作目录下。
必须说明的是这样做是有危险的,因为在从tar文件中解开文件时,旧文件将被覆盖。
#tarxvfbackup.tar在解开tar文件之前,要知道在何处打开文件是非常重要的。
例如,假设存档以下文件:
/etc/hosts,/etc/group和/etc/passwd。
如果用下述命令行:
#tarcvfbackup.tar/etc/hosts
/etc/group/etc/passwd目录/etc会被加到每个文件名前。
为了将文件展开到正确位置,需要用下述命令:
#cd/#tarxvfbackup.tar这是因为文件从备份文件中抽取出路径名,如果用下述命令存档文件:
#cd/etc#tarcvfhosts
grouppasswd这样目录名就不存在档案文件中,因此需要在展开文件之前用“cd/etc”命令进入目录etc。
由此可见,tar文件的创建方式与在何处展开是有很大关系的。
再看下面的命令行:
#tartvfbackup.tar在解开tar文件之前显示tar文件的索引,用这种方式可以看到档案文件中与文件名有关的目录名,从而在正确位置上展开档案文件。
11.5.2gzip和compress有时需要我们备份的文件会占用系统中的大量磁盘空间,例如tar命令在存档过程中并不压缩文件。
因此,如果存储两个100MB的文件,那么tar文件大小为200MB,这时我们可以使用gzip或compress命令来压缩文件,以节省存储空间。
例如:
#gzip-9backup.tar#compress-9backup.tar-11.5.3联合使用介绍了上面tar和几个压缩命令之后,我们来尝试组合使用这些命令来实现数据的备份。
例如为了压缩存储一组文件,可以用下述命令:
#tarcvfbackup.tar/etc#gzip–9backup.tar上面两行命令的结果是形成文件backup.tar.gz文件。
将展开该文件时,要用相反的命令:
#gunzipbackup.tar.gz#tarxvfbackup.tarshape
id="图片_x0020_159"o:
spid="_x0000_i1028"type="#_x0000_t75"alt="
style='width:
20.25pt;height:
25.5pt;visibility:
visible;mso-wrap-style:
square'>
技巧:
tar命令还包括“z”选择项,它会自动采用gzip压缩算法来联机压缩/解压文件。
例如,下列命令:
#tarcvfzbackup.tar.gz/etc#gzipbackup.tar而命令行:
#tarxvfzbackup.tar.Z等价于下面的命令行:
#uncompressbackup.tar.Z#tarxvfbackup.tar应用实例:
利用一个简单的脚本文件来实现数据备份下面我们利用上面介绍的命令,编写了一个简单的脚本文件来作为一个同时实现完全和增量累计备份的自动化模型。
在使用该脚本以前,请注意检查脚本头定义的环境变量以满足自己的需要。
#!
/bin/sh
#
#######################################
#
#TARbackupscript
tocoverdailyandweeklybackupsononetape.
#GenericUNIX
version-editvariablesasrequired
#
#Forthistowork,
itMUSTbestartedonaMonday!
#
#Copyright(c)
1999,TimJones
#Permission
grantedforuse/modification
#
#TimJones/Linux
Magazineprovidethisshellscriptwithnowarranty
#(impliedor
otherwise)
#
########################################
DOW=`date+%w`
DATE=`date+%D`
DAY=`date+%A`
DEVICE="MY
REWINDTAPE"#Rewindingtapedrive
NDEVICE="MY
NO_REWINDTAPE"#non-rewindingtapedrive
REWIND="mt-f$DEVICE
rewind"
EOD="mt-f$NDEVICEeod"
FSF="mt-f$NDEVICEfsf"
MAILLIST="root"
#listofuserstoreceivebackupnotice
if[$DOW=
"6"]
then
#ThisisSaturday,
soappendandwritethewholesystem!
$EOD
echo$DATE>/tmp/.LASTFULL
tar-cvvf$NDEVICE/
>/tmp/backup.txt
$REWIND
$FSF5
tar-dvf$NDEVICE>>
/tmp/backup.txt
$REWIND
cp/tmp/.LASTFULL
/etc/.LASTFULL
else
#thisisnot
Saturday
case$DOWin
0)
#it'sSunday-
nothingtodo
exit0
;;
1)
#Monday,Letthe
taperewindforthedifferenceverification
echo$DATE>/tmp/.LASTINC
tar-cvvf$DEVICE--newer`cat
/etc/.LASTFULL`/>/tmp/backup.txt
cp/tmp/.LASTINC
/etc/.LASTINC
;;
*)
#OtherDays,must
rewindmanuallyandInspect,-i
$EOD
echo$DATE>/tmp/.LASTINC
tar-cvvf$NDEVICE--newer`cat
/etc/.LASTINC`/>/tmp/backup
$REWIND
$FSF`expr$DOW-1`
echo
"************Verifying${DAY}'sbackup">>/tmp/backup.txt
tar