扫一扫
关注微信公众号

Linux服务器上的备份和恢复
2006-06-27   Linux伊甸园

  进行一般的备份应该是负责任的系统管理者的最高优先考虑。虽然Linux 是一个高度可靠的作业系统, 系统失效仍然可能发生。可能因为硬体故障,电源中断,或其他不可预料的问题。

  更常见的这些问题是来自人为的错误,不当的变动,甚至因为删除重要的档案。如果您负责管理系统上的用户, 一定可能常被要求重建因为不小心误删的档案。

  如果您进行一般备份,以每日为基础较好 (至少对更动频繁的使用者档案),您将会有助於减少档案的损失,并且增加复原程度。

  最安全的备份方法是将他们纪录於不同的媒体中,例如磁带,抽取式硬碟,可写式 cd .等。 然後将您的备份和您的 Linux系统分开存放。有时候这可能并不实际 -- 也许在您可以存放备份磁带的地方没有防火室 ! 或是在第一优先的地点没有办法存取这样的外部备份系统。虽然如此,仍然可以进行备份,只是会受到一点限制。

  在我服务的单位,我在几个 Linux 系统上进行备份。按情况的不同,有些备份存放在磁带,其他则写入位於网路上的不同伺服器中,然而有一些仍然使用 cron 自动作业 (可能因为伺服器位在远端,在那里每天进行磁带备份是不切实际或不可能的),简单的放在分别不同磁碟上的分割区中 (例如,放在 ``/archive/'' 档案系统) 。

  在家里,我没有外部的备份系统,我也没有大量的磁碟空间去存放备份影像档。因此,我改为只备份在``/home/'' 的我的使用者档案,同样的还有一些在 ``/etc/''的自订设定档,将备份存放在分别不同的磁碟分割区中。

  伺服器备份程序

  进行Linux备份有几种不同的方法,其中包括所有 Linux 发行版本中都有的命令列工具,例如 ``dd'', ``dump'', ``cpio''以及 ``tar''。其他还有文字型态工具,例如 ``Amanda'' 及 ``Taper'',这些是被设计来在备份及回存过程中加入更友善的使用者介面。当然也有图形介面的工具,像是``KDat''。最後,还有商业化的备份工具,像是 ``BRU'' 和 ``PerfectBackup+''。这些备份计划中任何之一都足以提供您宝贵资料的保护。

  这里有一些包括哪里可以获得工具的列表,可以在“Linux Applications and Utilities Page”找到,位於http://www.xnet.com/~blatura/linapp2.html#back. 当决定好备份方式,您可能要考虑下列几点因素:

  可携性 - 备份的可携性 (亦即. 从一个 Linux 发行版本或应用 Unix备份然後回存到另外一个; 例如从Solaris 到 Red Hat Linux) 对您而言是否重要 ? 如果是,可能想要选择一个命令列的工具 (亦即. ``dd'',``dump'', ``cpio'', 或 ``tar''),因为您可以相当地确定该工具可以在另一个 *nix 系统上找到。

  无人或自动备份 - 定期自动进行备份而不需人力介入之能力,对您而言是否重要 ? 如果是,您可能需要能支援该方案的工具及备份媒体。

  使用者友善 - 使用者友善的介面对您而言是否重要 ? 如果是,您可能想要选择一个文字或图形介面的工具。商业的应用程式可以提供最简便的介面及技术支援。

  远端备份 - 从远端机器进行备份及回存的能力对您而言是否重要 ? 如果是,您可能想要选择命令列或文字模式的工具而不是图形介面(除非您有相当快的网路连结及执行远端 X sessions 的能力)。

  网路备份 - 从网路主机进行备份及回存对您而言是否重要 ? 如果是,您可能要用一些支援从网路存取备份设备的命令列工具(像是 ``tar''),或是专用工具程式例如 ``Amanda'' 或是一些商业工具程式。

  媒体型态 - 备份可以储存在很多不同的媒体,像是磁带,外接式硬碟,ZIP 磁碟,或可读写 CD。考虑售价及可靠性,储存容量,及传送速度。

  警告: 当备份您的系统时, 不要包括 ``/proc'' 伪档案系统 ! /proc 中的档案并非真的档案,而仅是看起来像档案的描述,而且指向核心资料结构的连结。备份 ``/proc/kcore'' ,这事实上这是一个伪装档案,包含记忆体中所有的资料,会浪费很多的磁带 ! 您可能也需要避免备份 ``/mnt'' 档案系统,除非您有从 CD-ROM,软碟机,网路分享档案,或其他安装设备上备份的特殊需求。

  明显地,备份及回存的过程会因您所选择的备份方法而有所不同。然而,在这一节,我将会讨论我最常使用的两种工具备份的方法 : ``tar'' (其名称源於“Tape ARchiver”),这是一个命令列式的工具,在 *nix 系统中具有很高的可携性 ; 以及 ``KDat'',一个来自於 KDE 套件的图形介面磁带备份工具。

  最後,我应该补充一点,依您所选择的备份方式,即使该工具没有建立於自动备份时间表上的能力,您仍然可以利用 cron 功能进行该自动备份。 参考使用Cron 和 Crontab 档进行自动作业 有关使用 cron 的细节以及如何建立 crontab 行程表档案。

  使用 ``tar''备份:如果您选择 ``tar'' 作为您的备份方案,您可能要花点时间去了解种种的指令选项 ; 键入 “man tar” 有更深入的明细。您还需要了解如何存取适当的备份媒体 ; 虽然在 Unix 的世界中对待所有的装置就像处理档案一样,如果您写入到一个字元设备像是磁带,“档案”的名称就是设备本身的名称 (亦即. ``/dev/nst0'' 是一个SCSI介面的磁带机)。

  下面的指令会将您的整个 Linux 系统备份於 ``/archive/'' 档案系统,除了 ``/proc/'' 伪装档案系统,``/mnt/'', ``/archive/'' 档案系统 (没必要备份我们的备份档 !),还有 Squid 很大的快取资料档 (是的,依我之见,浪费备份媒体而且不需要去备份)之外的任何已挂载的档案系统 :

  tar -zcvpf /archive/full-backup-`date '+%d-%B-%Y'`.tar.gz

  --directory / --exclude=mnt --exclude=proc --exclude=var/spool/squid .

  不要被上面的指令吓到 ! 当我们将其分为两部分,您将会发现这个强力工具之美。

  上列的指令指定了选项 ``z'' (压缩; 备份资料经由 ``gzip''压缩), ``c'' (建立; 一个 archive 档开始被建立),``v'' (verbose; 显示出已经备份好的档案), ``p'' (允许保存;保护的资料将会被 “记忆” ,可以被回复)。``f'' (档案) 选项後面接的是的要写入的 archive 档 (或装置)名称,注意包含资料的档名是如何得到的,只要用两个後引号将``date'' 指令圈起来。 一般的命名惯例是在未压缩过的档案後面加上 `` .tar'' ,压缩的档案加上 ``tar.gz'' ``--directory'' 选项告知 tar 在开始备份前首先跳到以下的档案路径 ( 在本例中是``/''目录 )。 ``--exclude'' 选项告知 tar 不要备份所指定的档案或目录。最後, ``.'' 符号告知 tar 要备份目前目录中的所有东西。

  注意: 有一点很重要必须了解的就是 tar 的选项是大小写不同的 ! 此外,大部分的选项可以用助记符号加以简化(亦即. ``f''), 或者使用较易记忆的选项全名 (亦即. ``file'')。 助记符号前用一个``-'' 字元作为字首作为辨识,在全名的前面有两个这种符号的字首。参考 “man”页以得到更多有关使用 tar 的资讯。

  另一个例子,这一次只有写入指定的档案系统 (和上一个除了例外全部写入的例子相反) 到一台 SCSI 的磁带机 :tar -cvpf /dev/nst0 --label="Backup set created on `date '+%d-%B-%Y'`." --directory / --exclude=var/spool/ etc home usr/local var/spool

  在上面一行的选项,注意没有用到 ``z'' (压缩) 选项。我强烈建议反对写入压缩资料到磁带上,因为如果磁带上资料有一部份损坏,您会失去整个备份 ! 然而,未压缩的储存的 archive 档具有很高的可恢复性,即使磁带上的档案有一部份损毁。

  因为磁带机是一个字元设备,没有办法指定一个确实的档名。因此,指定给 tar 的档名可简化为装置名称,``/dev/nst0'',是在 SCSI 排汇上的第一个磁带设备。

  注意: ``/dev/nst0'' 设备在备份做好後不会回带 ; 因此有可能将好几组备份写到同一磁带。(您也可以选择``/dev/st0''这个装置,在这种情形磁带在备份完後会自动回带)

  既然我们无法对一套备份指定档名, ``--label'' 选项可以来写进档案本身一些有关这一套备份的资讯。

  最後,只有包含在 ``/etc/'', ``/home/'', ``/usr/local'', 及 ``/var/spool/'' (除了 Squid 的 快取资料档)会写进磁带。

  当使用磁带时,可以使用下列命令回带,以及退出磁带:

  mt -f /dev/nst0 rewind

  mt -f /dev/nst0 offline

  小技巧: 您将会发现到当 archive 档建立时,前面的``/'' (斜线) 符号会被 tar 去除。这是 tar 的预设操作模式, 这是故意用来保护您避免覆写这些重要档案的原先版本,以防万一您不慎在重建过程中覆写了不正确的档案。

  如果您真的不喜欢这个特性 (记住,这是特性!) 您可以指定 tar ``--absolute-paths'' 选项,这样会保留前面的斜线。然而,我不建议这样做,因为很危险 !

  使用``KDat''备份: 如果您使用 KDE 桌面环境,我相信您会发现``KDat'' 公用程式不但强大而且对使用者很友善。此外,另一个好处是KDat 利用``tar'' 作为其备份 engine。因此,用 KDat 写入的备份组不但可以用 KDat 读取,也可以用 tar ! 这使得 KDat 成为在使用者友善及备份可携性中很好的选择。

  小技巧: 即使您决定不使用也不安装完整的 KDE 套件,如果您安装了 Qt 函式馆就仍然可以使用KDE。

  当您第一次执行 KDat,您需要建立一个备份 profile。这个 profile 告诉 KDat 您想要备份系统中的哪些档案。如果您要的话,您可以建立好几个备份 profile,依照您的需求 (例如,您可以建立一个 profile 叫做“Full Backup”作系统的完全备份,或是 “Quick Backup”只备份使用者的档案)。

  要建立备份 profile,可以选择从选单栏中“File”选项选择“Create Backup Profile” (或在“Backup Profiles”文件夹上按滑鼠右键,然後选择 “Create Backup Profile”)。在右手边的是 KDat 视窗,您可以改变各种设定,像是profile 名称,archive 名称, tar 选项, 以及其他的。单击 “Help” 选单有关於这些设定的用途说明。

  要指定哪些档案应该包含在您的 backup profile, 在 ``/'' 目录文件夹旁的核对图示上敲一下左键。这会确定所有的档案及这个目录下所有东西都会备份。然後,在文件夹旁的小 ``+''符号上敲一下左键,资料夹会展开,显示档案及以下的目录。您可以排除掉所不想备份的档案;只要在您想排除的每一个档案或目录旁的核对符号上敲一下左键。例如,一个完全备份应该包含已标记的所有档案及目录,要排除 ``/proc'' (一个伪装档案系统,包含您目前运作系统的资料),``/mnt'' ( 位於CD-ROM下面的目录,软碟机,网路分享常被挂载在此),而且如果您是 Squid 使用者,``/var/spool/squid'' (Squid的快取资料档)。一旦您选好了合适的档案,在您建立好的备份 profile 上按一下左键,然後在“Files >>” 钮上按一下左键将选好的档案移进您的备份 profile。

  注意: 如果您的伺服器资料到巨大到无法实际存放到磁带中,您需要建立分别的备份 profiles,备份组中每部份一个。

  实际进行备份时,将磁带放入,从 “File” 选单中选择 “Mount Tape” (或是用滑鼠敲一下看起来像磁带的图示)。

  这样会 “挂载” 磁带 (事实上,因为磁带机是字元装置,事实上无法挂载它 -- 其实 KDat 只是先回带,试着去读取开头资讯,如果成功,找寻磁带机上符合的索引。否则,KDat 会提醒您格式化磁带。

  (注意: 如果 KDat 持续反映没有磁带在磁带机但事实上有,您应该确定在参数中指定的磁带机名称正确,在选单栏中用滑鼠敲一下 “Edit” 选项然後选择“User Preferences”.)

  一旦 KDat 已经挂载好磁带,在您开始备份前必须选择备份的 profile。当打算开始备份,只要在您要的备份 profile上敲一下右键,然後在“Backup”上敲一下左键。KDat 会先显示一个对话框告诉您有关您所选择备份 profile 的细节 ;在“Ok” 上敲一下左键就会开始备份。

  当备份开始进行,KDat 会显示一个有各种状态资讯的对话框 (经过时间,备份大小,备份比率,估计剩馀时间,档案数量及总共写入 bytes 数),以及已经备份档案的列表。一个包含好几 gigabyte 资料的完全备份可能需要花上好几个小时。必要的话,在备份过程中任何时候您可以在“Abort” 钮上敲一下左键放弃备份。

  一旦备份完成,您可以在选单栏中选择 “Edit”,再选 “Unmount Tape”以解挂载磁带,或在磁带图示上敲一下,这样磁带会回带然後跳出。

  无疑地, 比例行备份更重要的事就是当问题发生後能让重要档案正常回复 !

  明显地,就像伺服器备份程序所讨论的,进行回存的程序依您所选择的备份方案而有所不同。在这一节,我将会讨论由 ``tar'' 及 ''KDat''所备份的回存方法。

使用 ``tar'' 回存:

  下面的指令会从 ``full-backup-09-October-1999.tar.gz'' 回存所有的档案,这是我们 Linux 系统的备份例 (按照在 使用``tar'' 备份 一节中的命令例所做的):tar -zxvpf /archive/full-backup-09-October-1999.tar.gz

  上面的命令会从 archive 档中取出所有的档案,保留原档案的拥有者及权限。 ``x'' 选项用来作解出(其他的选项在 使用``tar'' 备份 这节中有提到:)

  警告: 从一个 tar 的 archive档中解出档案可能是一件危险的事,因此必须谨慎进行。也许这些档案作时并未包括准备好的路径 (有一些被误导或未被告知的发展者散他们的档案时可能会这样),表示档案会被解到目前的目录下。也许档案压缩时有加上 ``/'' 斜线 (当备份档建立时指定 ``--absolute-paths'' 选项),表示档案会被回存到绝对位置 (即使您不愿意)。或者也许档案压缩时未加上 ``/'' 斜线, 表示档案会被解到目前的目录下 (即使您不愿意这样)。当然,全看备份是如何建立的。因为这个缘故,我强烈建议先在 ``tar''命令加上``t'' (type) 选项加以测试,然後当您完全确定命令会依您预期进行後将 ``t'' 换成``x'' (extract) 。

  如果您不需要回存 archive 中所有的档案,您可以指定一个或更多的档案,按照下面例 :

  tar -zxvpf /archive/full-backup-09-October-1999.tar.gz etc/profile usr/local/bin/tolower

  上面的命令会从例的档案回存 ``etc/profile'' 及 ``usr/local/bin/tolower''

  如果您只试着从您的 archive 档中回存一个或几个档案,除非您确实地指定和 archive 档中所存放相同的档名及路径,否则不会成功。 下面的例会帮您解决问题:

  tar -ztvpf /archive/full-backup-09-October-1999.tar.gz | grep -i profile

  在上面的例,所有在 archive 档中的档案都以档名列出。所有的结果都会输出到 ``grep'' 指令 (使用 grep的``i'' 选项可忽略混杂的情况),显示``profile''中任何档案的目录及档名。当您确实决定要回存的档名时,您可以用一般的 tar 指令表达指定所要回存的档案。

  就像在 伺服器备份程序 所提到的,当建立一个 archive 档时, tar 会从档案路径去除前面的 ``/'' (斜线)符号。

  这表示档案回存时可能不会在和备份时相同的位置结束。因此,不要改变到 ``/'' root 目录或者``--directory /'' 选项。

  注意: 一个更安全的方法是在不同的目录回存档案 (例如您的 home 目录),然後比对,搬移及更新档案到之後的原始位置。

  使用``KDat''回存:

  要从 KDat 建立的备份组回存一个或更多档案,将备份磁带放进磁带机,从“File”选单项目选择“Mount Tape”(或在磁带的图示上按下滑鼠左键) KDat 会试着从磁带读入开头资讯,如果成功的话,会试着找寻符合开头资讯的磁带索引。这个索引存在硬碟,是由 KDat 为所格式化的每一个备份磁带所做的唯一档案,每一次进行备份就会更新。如果符合的档案索引遗失了(也许您回存的备份组是由另一部机器所备份的,或是因为硬碟损毁而删除了索引档), KDat 会通知您这件事,并且如果可以读取磁带重建索引的话会询问您。由於您必须在您回存档案前先重建索引,按左键选择“Yes”是有意义的。

  (注意: 一但磁带重新索引过,名称会变成“Reindexed Tape”。 您可以将它重新命名成原来的样子)

  当磁带索引成功地读入,可以用来选择您想从备份组回存的档案或目录,和您建立备份档时所用的方法十分相同(查看 伺服器备份程序 有关选择档案过程的详细说明)。

  当您选择好合适的档案,您可以从目录页中的“File”选项选择“Restore...”开始回存程序 (或在磁带回存的图示上按滑鼠左键)。KDat会显示一个对话框,让您确认要回存的档案。此外,您有指定回存的档案所到目录的选项。这让您回存重要档案到您的 home 目录下,然後可以和预期位置中的档案做比较,移动或是更新。这实际上是最安全的回存档案方法。

  要开始回复程序,在“Okay”钮上按一下,KDat 会扫描磁带并且开始回存选定好的档案。

  有时,您会发现不使用 KDat 回存一个用 KDat 备份过的档案是必须或有帮助的。也许您想要在不提供图形介面的系统上回存这些档案,或是您的网路速度很慢而透过它执行 KDat 是不切实际。幸运地, KDat 使用 ``tar'' 工具写入备份资料, 在任何 *nix 系统都有的命令列工具。

  如果您打算用 tar 回存用 KDat 建立的备份组,就像您回存用 tar 本身备份的普通备份组所做的选项一样。记住,资料组并未以压缩格式储存。

  注意: 当您试着使用 tar 存取由 KDat 所做的备份组时,一定会得到错误讯息。这是因为当磁带第一次格式化时 KDat 加入了开头及其他资讯。重 tar 指令两三次就会跳到档案真正开头的地方。

热词搜索:

上一篇:几个重要的Linux内核文件
下一篇:中小企业开发硬件防火墙的主要步骤

分享到: 收藏