一、Linux 备份恢复基础
1、什么是备份
最简单的讲,备份数据的过程就是拷贝重要的数据到其他的介质之上(通常是可移动的),以保证在原始数据丢失的情况下可以恢复数据。一次备份可能是简 单的 cp命令,将一个文件复制到其他目录下,也可能是使用特定的程序将数据流写进一个特定的设备中的复杂过程。很多情况下是将要备份的数据写入到磁带机中,但 有些情况也不是这样的。在Linux环境下,或其他Unix系统,备份可以是将文件拷贝到已存在的文件系统,可替换的文件系统,磁带机,远程文件系统,甚 至是远程系统的上的磁带机。当然,从用户的角度来看,并不存在磁带机或RAID驱动器的概念,而仅仅是文件而已。如下的诸多因素将有可能导致系统的崩溃或 数据丢失。
* 系统硬件故障 * 软件故障 * 电源故障 * 用户的误操作 * 人为破坏 * 缓存中的内容没有及时的写入磁盘 |
2、备份的重要性
备份是保护数据的一种方法。有数据的多个备份,就不怕某个损坏(所需做的仅仅是从备份中恢复丢失的数据)。因此,正确地做好备份并确保备份有效、可 用是很重要的。由于硬件的损坏、人为误操作和灾难事件等造成的数据丢失是每个企业所需要避免的,其中最常用的方法是进行数据备份。数据备份的重要性是如何 强调都不过分的,如果企业认为数据的丢失是不可接受的,那么请备份这些数据。并对备份数据和出现数据丢失后进行恢复工作需要的时间,以及花费的成本进行综 合评估。如果数据的离线备份仍然不能满足企业运作连续性的需要,那么企业就需要考虑在线实时备份,即本地高可用性集群或异地灾难备份方案。
二、 Linux服务器数据备份恢复策略
1、备份前需考虑的因素
在对系统进行备份或者恢复操作之前,有几个因素必须先考虑清楚。当然,进行备份操作的一个最佳时机就是安装好Linux操作系统,并确信所有的设备 (如声卡、显卡或者磁带机等) 都能够正常工作的时候。必须清楚备份和档案文件之间是有区别的。备份是定期进行的操作,用来保存重要的文档、文件或者整个系统;而对文件归档则是为了长期 保存重要的文档、文件或者整个系统进行的操作。要进行成功的备份,就必须首先考虑到所有的因素并设计出一个进行备份操作的策略,例如:
● 可移植性(即在Red Hat Linux系统下执行的备份在另外一个系统上恢复的能力)。 ● 是否自动备份。 ● 执行备份的周期。 ● 需要把归档的备份保存多长时间。 ● 用户界面的友好性(决定是否需要选择基于GUI界面的工具还是基于文本的)。 ● 是否需要使用压缩技术、直接复制或者加密技术。 ● 备份介质(需要从价格、性能、存储能力上考虑)。 ● 是否远程备份或网络备份。 ● 是保存一个文件、一个子目录还是整个系统。 |
2、备份介质的选择
有很多介质可以用来进行备份。目前3种常用的备份介质是CD-R(DVD-R)、磁带和硬盘。下面介绍一些可选择的备份介质:
软盘
如果要把重要文件快速备份,或者将其带到家中,这时软盘仍旧是一种可选的备份介质(现在该介质已经步入淘汰阶段)。
光盘写入器
随着光盘写入器变得越来越可靠,价格也越来越低,光盘本身也非常便宜。选用此项的一个好处是光盘不容易被损坏,它备份的可靠性很高。 用光盘写入器有两点不利因素:它们速度较慢,并且只能保存大约650MB。
可重写的光盘
可重写光盘驱动器比光盘写入器要贵得多,工作方式与其类似。但是,这些光盘是可被重写的,并且它比只能写一次的光盘贵许多。可重写光盘其它的特性都与光盘写入器类似。
Jaz和Zip
Zip驱动器很流行,已经成为许多PC机的标准配置,同时它的磁盘和驱动器也都不贵。它一张磁盘可容纳100MB的数据,是一种用于快速、可移动备份的很好选择。
Jaz磁盘可以容纳上G字节的数据,并且使用更先进的技术以获得更好的表现。Jaz驱动器和Jaz磁盘都比较贵。 Jaz和Zip的缺陷是都容易损坏,并且保持时间相对要短。
磁带机
磁带备份设备是大多数Linux服务器的标准配置。磁带是可靠的,并且很少出现错误,它几乎比其它介质存储时间都要长。
对于点对点工作组网络和中型网络,Travan和高端数字音频磁带(DAT)通常是最好的选择。Travan驱动器经过压缩可以处理8GB数据,这 对于具有5-10个PC机的小型网络来说足够了。DAT驱动器有更好的表现,可以处理24GB的数据。DAT驱动器比Travan驱动器昂贵,但它磁带的 价格要比Travan QIC磁带卷便宜。 表1中对介质(包括一些新的介质,如只读光盘和可读写光盘)在可靠性、速度、可用性和易用性方面进行了评价。
选择备份介质时,要从可靠性、速度、费用、易保管性等方面综合考虑。
三、Linux 备份策略
选择了存储备份软件、存储备份技术(包括存储备份硬件及存储备份介质)后,首先需要确定数据备份的策略。备份策略指确定需备份的内容、备份时间及备份方式。各个单位要根据自己的实际情况来制定不同的备份策略。目前被采用最多的备份策略主要有以下三种。
1、完全备份(full backup)
每隔一段时间对系统进行一次完全的备份,这样在备份时间间隔内,一旦系统发生故障使得数据丢失时,就可以用上一次的备份数据恢复到上一次备份时的情 况。例如,星期一用一盘磁带对整个系统进行备份,星期二再用另一盘磁带对整个系统进行备份,依此类推。这种备份策略的好处是:当发生数据丢失的灾难时,只 要用一盘磁带(即灾难发生前一天的备份磁带),就可以恢复丢失的数据。然而它亦有不足之处,首先,由于每天都对整个系统进行完全备份,造成备份的数据大量 重复。这些重复的数据占用了大量的磁带空间,这对用户来说就意味着增加成本。其次,由于需要备份的数据量较大,因此备份所需的时间也就较长。对于那些业务 繁忙、备份时间有限的单位来说,选择这种备份策略是不明智的。
优点:备份的数据最全面、最完整。恢复快,当发生数据丢失的灾难时,只要用一盘磁带就可以恢复全部的数据。
缺点:数据量非常大,占用备份的磁带设备比较多,备份时间比较长。
2、增量备份(incremental backup)
首先进行一次完全备份,然后每隔一个较短时间进行一次备份,但仅备份在这个期间更改的内容。这样一旦发生数据丢失,首先恢复到前一个完全备份,然后 按日期逐个恢复每天的备份,就能恢复到前一天的情况。例如在星期天进行一次完全备份,然后在接下来的六天里只对当天新的或被修改过的数据进行备份。这种备 份策略的优点是节省了磁带空间,缩短了备份时间。但它的缺点在于,当灾难发生时,数据的恢复比较麻烦。例如,系统在星期三的早晨发生故障,丢失了大量的数 据,那么现在就要将系统恢复到星期二晚上时的状态。这时系统管理员就要首先找出星期天的那盘完全备份磁带进行系统恢复,然后再找出星期一的磁带来恢复星期 一的数据,然后找出星期二的磁带来恢复星期二的数据。很明显,这种方式很繁琐。另外,这种备份的可靠性也很差。在这种备份方式下,各盘磁带间的关系就象链 子一样,一环套一环,其中任何一盘磁带出了问题都会导致整条链子脱节。比如在上例中,若星期二的磁带出了故障,那么管理员最多只能将系统恢复到星期一晚上 时的状态。
优点:备份速度快,没有重复的备份数据,节省磁带空间,又缩短了备份时间。
缺点:恢复时间长。如果系统在星期四的早晨发生故障,管理员需要找出从星期一到星期三的备份磁带进行系统恢复。各磁带间的关系就像链子一样,一环套一环,其中任何一盘磁带出了问题,都会导致整条链子脱节。
3、差分备份(differential backup)
首先每月进行一次完全备份,然后备份从上次进行完全备份后更改的全部数据文件。一旦发生数据丢失,使用一个完全备份和一个差分备份就可以恢复故障以 前的状态。管理员先在星期天进行一次系统完全备份,然后在接下来的几天里,管理员再将当天所有与星期天不同的数据(新的或修改过的)备份到磁带上。差分备 份策略在避免了以上两种策略的缺陷的同时,又具有了它们的所有优点。首先,它无需每天都对系统做完全备份,因此备份所需时间短,并节省了磁带空间,其次, 它的灾难恢复也很方便。系统管理员只需两盘磁带,即星期一磁带与灾难发生前一天的磁带,就可以将系统恢复。
增量备份可以减少备份时间,有效地利用处理器资源和备份I/O带宽,而完全备份在恢复上有很大的优势。现在一些企业备份管理软件提供了一个折衷的办 法:将一个基本完全备份和几个增量备份合成为一个较新的“完全备份”。合成的完全备份是通过整合完全备份和增量备份的内容,随后写入不同的介质生成新备 份。这个新的合成完全备份成为以后增量备份的基准。
合成完全备份从物理资源(磁带、磁带驱动器和带宽)和时间来看消耗很大,但是简化了恢复过程。
在实际应用中,备份策略通常是以上几种的结合。例如每周一至周六进行一次增量备份或差分备份,每周日进行全备份,每月底进行一次全备份,每年底进行一次全备份。
4、确定要备份的内容
在备份和还原系统时,Linux 基于文件的性质成了一个极大的优点。在 Windows 系统中,注册表与系统是非常相关的。配置和软件安装不仅仅是将文件放到系统上。因此,还原系统就需要有能够处理 Windows 这种特性的软件。在 Linux 中,情况就不一样了。配置文件是基于文本的,并且除了直接处理硬件时以外,它们在很大程度上是与系统无关的。硬件驱动程序的现代方法是,使它们以动态加载 的模块的形式可用,这样内核就变得更加与系统无关。不同于让备份必须处理操作系统如何安装到系统和硬件上的复杂细节,Linux 备份处理的是文件的打包和解包。
一般情况下,以下这些目录是需要备份的:
• /etc
包含所有核心配置文件。这其中包括网络配置、系统名称、防火墙规则、用户、组,以及其他全局系统项。
• /var
包含系统守护进程(服务)所使用的信息,包括 DNS 配置、DHCP 租期、邮件缓冲文件、HTTP 服务器文件、db2 实例配置,等等。
• /home
包含所有用户的默认用户主目录。这包括他们的个人设置、已下载的文件和用户不希望失去的其他信息。
• /root
是根(root)用户的主目录。
• /opt
是安装许多非系统文件的地方。IBM 软件就安装在这里。OpenOffice、JDK 和其他软件在默认情况下也安装在这里。
有些目录是应该考虑不 备份的。
• /proc
应该永远不要备份这个目录。它不是一个真实的文件系统,而是运行内核和环境的虚拟化视图。它包括诸如 /proc/kcore 这样的文件,这个文件是整个运行内存的虚拟视图。备份这些文件只是在浪费资源。
• /dev
包含硬件设备的文件表示。如果计划还原到一个空白的系统,那就可以备份 /dev。然而,如果计划还原到一个已安装的 Linux 系统,那么备份 /dev 是没有必要的。
其他目录包含系统文件和已安装的包。在服务器环境中,这其中的许多信息都不是自定义的。大多数自定义都发生在 /etc 和/home 目录中。包括:
在 UNIX 或 Linux 系统中,大部分系统配置文件位于 /etc 目录,但是您应该考虑对所有可能的文件(以及可能的位置)进行备份,具体包括:
DNS 域信息 (/var/bind) ; NIS/NIS+ 文件和配置 (/var/yp) Apache 或其他 Web 服务器配置(/var/apache、/etc/apache 或 /usr/local/apache) ; 邮件文件或文件夹(/var/mail 和 /usr/mail) Lightweight Directory Access Protocol (LDAP) 服务器数据(/var/ldap 或 /usr/local/ldap) ; 安全证书 ; 自定义内核驱动程序 ; 内核配置或构建配置和参数 ; 许可密钥和序列号 ; 自定义脚本和应用程序 ; 用户/root 登录脚本 ; 邮件配置; |
特别是,如果您使用了像 Cyrus Internet Message Access Protocol (IMAP) 这样的解决方案,其中对用户邮件文件夹进行了特殊的记录和索引。
5、 Linux 常用备份恢复命令
a)tar
tar工具是以前备份文件的可靠方法,几乎可以工作于任何环境中,Linux老用户一般都信赖它。 Linux中以.tar结尾的文件都是用tar创建的。它的使用超出了单纯的备份,可用来把许多不同文件放到一起组成一个易于分开的文件。tar是从 Tape ARchiver备份工具起步的。 tar是一个基于文件的命令,它本质上是连续地、首尾相连地堆放文件。使用tar可以打包整个目录树,这使得它特别适合用于备份。归档文件可以全部还原, 或从中展开单独的文件和目录。备份可以保存到基于文件的设备或磁带设备上。文件可以在还原时重定向,以便将它们重新放到一个与最初保存它们的目录(或系 统)不同的目录(或系统)。tar是与文件系统无关的,它可以使用在ext2、ext3、jfs、 Reiser和其他文件系统上。
tar命令格式
备份:tar <选项> <-cf 备份文件或设备> <备份路径> 恢复:tar <选项> <-xf 备份文件或设备> [-C 恢复路径] |
常用选项:
-M:分卷处理 -p:保留权限 -T filename:指定备份文件列表 -N DATE:备份指定日期之后修改的文件 -z:用GNU的gzip压缩文件或解压。 -Z:用compress压缩文件或解压。 -j:用bzip2压缩文件或解压。 |
tar 命令操作举例
1. 跨越多张软盘备份系统/usr/local下的所有内容,同时进行写入校验
# tar -cWMf /dev/fd0 /usr/local
2. 备份/目录下自04/11/2006改过的文件到磁带设备/dev/st0中
# tar -cvf /dev/st0 -N 04/11/2006
3.保持文件权限备份/目录(不包括/proc)到磁带设备/dev/st0中
# tar -cpf /dev/st0 / –exclude=/proc
4. 恢复恢复备份到/
# tar -xpf /dev/st0 -C /
5.从备份文件恢复指定的文件etc/passwd
# tar -xpf /dev/st0 etc/passwd
6.做一个完全备份
# tar -zcvf /backup/bp_full.tar.gz /
7.每隔7天做增量备份
# tar -c -T /tmp/filelist -f /backup/bp_add.tar.gz
b)cpio命令
GNU cpio工具像tar一样从命令提示行启动程序。与tar相比cpio更复杂,但是也更为可靠。因为如果一个tar文件中某处有一个坏块,就不能对备份文 件的其它部分进行访问,而使用cpio,只有坏块不能被访问。 cpio创建一个称为copy-out mode的备份,备份存档中包含了文件和所有者、时间及访问许可等信息。cpio需要一个假定要备份的文件列表。创建列表的一个最方便的方法就是使用ls 命令。
cpio 命令操作举例
1. 拷贝当前目录中所有文件到磁带设备 /dev/rmt0,输入:
find . | /usr/sysv/bin/cpio -oc >/dev/rmt0 |
2. 从 cpio 归档中只抽取一个常规文件中的文件列表,使用下列命令:
cat ar | /usr/sysv/bin/cpio -i -E Efile |
3. 把/home目录备份到SCSI磁带设备中,输入下面的命令:
$ls /home | cpio -o > /dev/st0 |
你也可以对cpio的备份进行计划,用crontab工具设置成基于任何时间的有规律地运行。例如,要在每晚2点把/ home目录备份到SCSI磁带驱动器中,把下面的语句添加到root的crontab文件中即可:
00 02 * * * ls /home | cpio -o > /dev/st0 |
C)dump
dump为备份工具程序,可将目录或整个文件系统备份至指定的设备,或备份成一个大文件。dump 可以执行类似 tar 的功能。然而,dump 倾向于考虑文件系统而不是个别的文件。下面是引自 dump 手册文件中的内容:“dump 检查 ext2 文件系统上的文件,并确定哪些文件需要备份。这些文件将出于安全保护而被复制到给定的磁盘、磁带或其他存储媒体上……大于输出媒体容量的转储将被划分到多 个卷。在大多数媒体上,容量是通过一直写入直至返回一个 end-of-media 标记来确定的。”
dump命令格式:
dump [-cnu][-0123456789][-b <区块大小>][-B <区块数目>][-d <密度>][-f <设备名称>][-h <层级>][-s <磁带长度>][-T <日期>][目录或文件系统] 或 dump [-wW]
主要选项:
-0123456789 备份的层级。 -b<区块大小> 指定区块的大小,单位为KB。 -B<区块数目> 指定备份卷册的区块数目。 -c 修改备份磁带预设的密度与容量。 -d<密度> 设置磁带的密度。单位为BPI。 -f<设备名称> 指定备份设备。 -h<层级> 当备份层级等于或大雨指定的层级时,将不备份用户标示为"nodump"的文件。 -n 当备份工作需要管理员介入时,向所有"operator"群组中的使用者发出通知。 -s<磁带长度> 备份磁带的长度,单位为英尺。 -T<日期> 指定开始备份的时间与日期。 -u 备份完毕后,在/etc/dumpdates中记录备份的文件系统,层级,日期与时间等。 -w 与-W类似,但仅显示需要备份的文件。 -W 显示需要备份的文件及其最后一次备份的层级,时间与日期。 |
dump命令操作举例:
1.执行一个完全 Linux 备份,它把所有 ext2 和 ext3 文件系统备份到一个 SCSI 磁带设备。
dump 0f /dev/nst0 /boot dump 0f /dev/nst0 / |
说明:在这个例子中,系统中有两个文件系统。一个用于 /boot,另一个用于 / ,这是常见的配置。它们必须在执行备份时单独地引用。 /dev/nst0 引用第一个 SCSI 磁带驱动器,不过是以非重绕的模式引用。这样确保各个卷在磁带上一个接一个地排列。dump 的一个有趣特性是其内置的增量备份功能。在上面的例子中,0 表示 0 级或基本级备份。这是完全系统备份,您要定期执行以保存整个系统。对于后续的备份,您可以使用其他数字(1-9)来代替 0,以改变备份级别。1 级备份会保存自从执行 0 级备份以来更改过的所有文件。2 级备份会保存自从执行 1 级备份以来更改过的所有文件,以此类推。使用 tar 和脚本可以执行相同的功能,但要求脚本创建人员提供一种机制来确定上次备份是何时执行的。dump 具有它自己的机制,即它在执行备份时会输出一个更新文件(/etc/dumpupdates)。这个更新文件将在每次执行 0 级备份时被重设。后续级别的备份会保留它们的标记,直至执行另一次 0 级备份。如果您在执行基于磁带的备份,dump 会自动跟踪多个卷。
2. 配合使用 find 命令复制整个目录
$ find . |cpio -ov >archive.cpio |
d) restore命令
配合 dump 的程序是 restore,它用于从转储映像还原文件。restore 命令执行转储的逆向功能。可以首先还原文件系统的完全备份,而后续的增量备份可以在已还原的完全备份之上覆盖。可以从完全或部分备份中还原单独的文件或者目录树。
Restore命令举例
从磁带备份中提取 /etc 目录,可使用以下命令:
restore -xf /dev/nst0 /etc |
e)dd命令
dd 是一个文件系统复制实用工具,它产生文件系统的二进制副本。dd 还可用于产生硬盘驱动器的映像,类似于使用诸如 Symantec 的 Ghost 这样的产品。然而,dd 不是基于文件的,因此您只能使用它来将数据还原到完全相同的硬盘驱动器分区。
dd命令举例
1.把第一个硬盘的前 512 个字节存为一个文件:
dd if=/dev/hda of=disk.mbr bs=512 count=1 |
2为软盘建立镜像文件
dd if=/dev/fd0 of=disk.img bs=1440k
有趣的是,这个镜像文件能被 HD-Copy ,Winimage 等工具软件读出。
f) cp命令
命令cp是copy的缩写,用于复制文件;目录。标准的 cp 命令可用于复制整个目录树。该选项将对非标准的文件执行未知的操作。有些 UNIX 变种和 GNU cp 工具支持 -R 选项,使用该选项可以正确地复制命名管道、链接和其他的文件。
命令举例
1 将dir1下的所有目录包括子目录陆续地复制到dir2中。
#cp -a dir1 dir2 |
2.将一个目录中的内容复制到一个已有的目录中
$ cp -r /home/mc/* /export/home/mc |
总结:
Linux 是一个稳定而可靠的环境。但是任何计算系统都有无法预料的事件,比如硬件故障。拥有关键配置信息的可靠备份是任何负责任的管理计划的组成部分。在 Linux 中可以通过各种各样的方法来执行备份。所涉及的技术从非常简单的脚本驱动的方法,到精心设计的商业化软件。备份可以保存到远程网络设备、磁带驱动器和其他 可移动媒体上。备份可以是基于文件的或基于驱动器映像的。可用的选项很多,您可以混合搭配这些技术,为您的环境设计理想的备份计划。备份关键文件涉及到确 定相关文件,并找到一种合适的方法存储和备份这些信息。文件可能存储在许多不同的位置,而您应该多加小心,以确保包含重要的、但经常被遗忘的内容,比如内 核驱动程序、库和相关配置。