第25章、Linux 备份策略

25.1. 备份要点
备份是个很重要的工作,很多人总是在系统损毁的时候才会发现备份资料的可爱! 但是备份其实也非常可怕!因为你的重要数据都在备份文件里面,如果这个备份被窃取或遗失,其实对你的系统资安影响也非常大! 同时,备份使用的媒体选择也非常多样,但是各种储存媒体各有其功能与优劣,所以当然得要选择!来谈谈备份吧!

25.1.1. 备份资料的考虑
备份是系统损毁时等待救援的救星 !因为你需要重新安装系统时, 备份的好坏会影响到你系统复原的进度!不过,我们想先知道的是,系统为什么会损毁啊?是人为的还是怎样产生的啊? 事实上,系统有可能由于不预期的伤害而导致系统发生错误 ! 什么是不预期的伤害呢?这是由于系统可能因为不预期的硬件损坏,例如硬盘坏掉等等,或者是软件问题导致系统出错, 包括人为的操作不当或是其他不明因素等等所致。底下我们就来谈谈系统损坏的情况与为何需要备份吧!

一、造成系统损毁的问题-硬件问题
基本上,『计算机是一个相当不可靠的机器』这句话在大部分的时间内还是成立的 ! 常常会听到说『要计算机正常的工作,最重要的是要去拜拜!』不要笑!这还是真的! 尤其是在日前一些计算机周边硬件的生产良率 (就是将硬件产生出来之后,经过测试, 发现可正常工作的与不能正常工作的硬件总数之比值) 越来越差的情况之下,计算机的不稳定状态实在是越来越严重了!
举个例子来说,我曾经同时买过同一厂牌的 30GB 硬盘三颗,回来之后经过一个星期!挂掉了两颗! 其中一颗是有坏轨,另外一颗是『完全死掉』,拿去公司要求修理,结果呢?店家直接拿了一颗新的给我, 害我吓一跳,店家的工程师说『唉呀!目前这个牌子的良率太差了,所以代理商为了怕麻烦,都会直接拿新的替换给我们!』 要晓得的是,当初那一颗完全死掉的硬盘,是我用来备份我的主机数据的…. 好在当时我将备份的资料放在三四个地方,还好…
一般来说,会造成系统损毁的硬件组件应该要算硬盘吧!因为其他的组件坏掉时,虽然会影响到系统的运作, 不过至少我们的数据还是存在硬盘当中的!为了避免这个困扰,于是乎有可备份用的 RAID1, RAID5 等磁盘阵列的应用!但是如果是 RAID 控制芯片坏掉呢?这就麻烦了~所以如果有 RAID 系统时, 我个人还是觉得需要进行额外的备份才好的!如果数据够重要的话。

二、造成系统损毁的问题-软件问题
根据分析,其实系统的软件伤害最严重的就属使用者的操作不当啦!像最近这几天才在鸟园讨论区发现, 有网友手滑了一下,结果在指令列输入了『 rm -rf /home 』,这造成什么后果?就造成用户家目录被删光光~ 因为当时下达指令的身份是 root 啊~为了避免这方面的『手滑』问题,备份是重要的!
软件伤害除了来自主机上的用户操作不当之外,最常见的可能是资安攻击事件了。 假如你的 Linux 系统上面某些 Internet 的服务软件是最新的! 这也意味着可能是『相对最安全的』, 但是,这个世界目前的闲人是相当多的,你不知道什么时候会有所谓的『黑客软件』被提供出来,万一你在 Internet 上面的服务程序被攻击,导致你的 Linux 系统全毁,这个时候怎么办?当然是要复原系统吧?
那如何复原被伤害的系统呢?『重新安装就好啦 !』或许你会这么说, 但是,像我管理的几个网站的数据,尤其是 MySQL 数据库的数据,这些都是弥足珍贵的经验资料, 万一被损毁而救不回来的时候,不是很可惜吗?这个还好,万一你是某家银行的话, 那么数据的损毁可就不是能够等闲视之的!关系的可是数千甚至上万人的身家财产!这就是备份的重要性了! 他可以最起码的稍微保障我们的数据有另外一份 copy 的备援以达到『安全回复』的基本要求!

三、主机角色不同,备份任务也不同
由于软硬件的问题都可能造成系统的损毁,所以备份当然就很重要!问题是,每一部主机都需要备份吗? 多久备份一次呢?要备份什么数据呢?
如果是针对个人桌面计算机使用的数据,那么 Norton 的『 Ghost 』应该算是一套好到不行的备份大师了! 最主要是 Ghost 可以针对整个 partition 来进行备份,所以 我们可以将 Windows 系统当中的整个 C 或者是整个 D 槽完整的备份下来。甚至在还原方面也是非常的快速,而且操作简便! 另外,由于个人桌面计算机所使用的数据量通常不大,所以当 ghost 完成之后,通常只要将数据刻录到光盘片当中,大约只要一至两片的光盘片也就绰绰有余! 那么将光盘片保存好,这就是最简易的数据备份模式! 此外,由于个人的数据变动性不大,所以数据的备份频率方面也不需要非常的频繁!
但是,万一你的主机有提供 Internet 方面的服务呢?又该如何备份啊?举个例子来说,像是我们 Study Area 团队的讨论区网站 http://phorum.study-area.org 提供的是类似 BBS 的讨论文章, 虽然数据量不大,但是由于讨论区的文件是天天在增加的,每天都有相当多的信息流入, 由于某些信息都是属于重要的人物之留言,这个时候,我们能够让机器死掉吗?或者是能够一季三个月才备份一次吗? 这个备份频率需求的考虑是非常重要的!
再提到 2002 年左右我的讨论区曾经挂点的问题,以及 2003 年初 Study-Area 讨论区挂点的问题,讨论区一旦挂点的话,该数据库内容如果损毁到无法救回来!要晓得讨论区可不是一个人的心血!有的时候 (像 Study-Area 讨论区) 是一群热心 Linux 的朋友们互相建立交流起来的数据流通网,如果死掉了,那么不是让这些热血青年的热情付之一炬了吗? 所以建立备份的策略 (频率、媒体、方法等) 是相当的重要的。

四、备份因素考虑
由于计算机 (尤其是目前的计算机,操作频率太高、硬件良率太差、使用者操作习惯不良、 『某些』操作系统的当机率太高….) 的稳定性较差,所以备份的工作就越来越重要了! 那么一般我们在备份时考虑的因素有哪些呢?

  • 备份哪些档案: 哪些数据对系统或用户来说是重要的?那些数据就是值得备份的数据!例如 /etc/* 及 /home/* 等。
  • 选择什么备份的媒介: 是可擦写光盘、另一颗硬盘、同一颗硬盘的不同 partition、还是使用网络备援系统? 哪一种的速度最快,最便宜,可将数据保存最久?这都可以考虑的。
  • 考虑备份的方式: 是以完整备份(类似 ghost)来备份所有数据,还是使用差异备份仅备份有被更动过的数据即可?
  • 备份的频率: 例如 MySQL 数据库是否天天备份、若完整备份,需要多久进行一次?
  • 备份使用的工具为何: 是利用 tar 、 cpio 、 dd 还是 dump 等等的备份工具?

底下我们就来谈一谈这些问题的解决之道吧!

25.1.2. 哪些 Linux 数据具有备份的意义
一般来说,我比较喜欢备份最重要的档案而已 (关键数据备份),而不是整个系统都备份起来 (完整备份, Full backup) !那么哪些档案是有必要备份的呢?具有备份意义的档案通常可以粗分为两大类,一类是系统基本设定信息、一类则是类似网络服务的内容数据。 那么各有哪些档案需要备份的呢?我们就来稍微分析一下。

一、操作系统本身需要备份的档案:
这方面的档案主要跟『账号与系统配置文件』有关系! 主要有哪些账号的档案需要备份呢?就是 /etc/passwd, /etc/shadow, /etc/group, /etc/gshadow, /home 底下的用户家目录等等, 而由于 Linux 预设的重要参数档都在 /etc/ 底下,所以只要将这个目录备份下来的话, 那么几乎所有的配置文件都可以被保存的!
至于 /home 目录是一般用户的家目录,自然也需要来备份一番!再来,由于使用者会有邮件吧!所以这个 /var/spool/mail/ 内容也需要备份!另外,由于如果你曾经自行更动过核心,那么 /boot 里头的信息也就很重要!所以这方面的数据你必须要备份的档案为:

  • /etc/ 整个目录
  • /home 整个目录
  • /var/spool/mail
  • /boot
  • /root
  • 如果你自行安装过其他的套件,那么 /usr/local/ 或 /opt 也最好备份一下!

二、网络服务的数据库方面:
这部份的数据可就多而且复杂了,首先是这些网络服务软件的配置文件部分, 如果你的网络软件安装都是以原厂提供的为主,那么你的配置文件案大多是在 /etc 底下,所以这个就没啥大问题!但若你的套件大多来自于自行的安装,那么 /usr/local 这个目录可就相当的重要了!
再来,每种服务提供的数据都不相同,这些数据很多都是人们提供的!举例来说,你的 WWW 服务器总是需要有人提供网页档案吧?否则浏览器来是要看啥咚咚?你的讨论区总是得要写入数据库系统吧? 否则讨论的数据如何更新与记载?所以,使用者主动提供的档案,以及服务运作过程会产生的数据, 都需要被考虑来备份。若我们假设我们提供的服务软件都是使用原厂的 RPM 安装的!所以要备份的数据文件有:

  • 软件本身的配置文件案,例如:/etc/ 整个目录,/usr/local/ 整个目录 ;
  • 软件服务提供的数据,以 WWW 及 MySQL 为例: WWW 资料:/var/www 整个目录或 /srv/www 整个目录,及系统的用户家目录 MySQL : /var/lib/mysql 整个目录 ;
  • 其他在 Linux 主机上面提供的服务之数据库档案!

三、推荐需要备份的目录:
由上面的介绍来看的话,如果你的硬件或者是由于经费的关系而无法全部的数据都予以备份时, 我建议你至少需要备份这些目录!

  • /boot
  • /etc
  • /home
  • /root
  • /usr/local(或者是 /opt 及 /srv 等)
  • /var(注:这个目录当中有些暂存目录则可以不备份!)

四、不需要备份的目录:
有些数据是不需要备份的!例如我们在第六章档案权限与目录配置里头提到的 /proc 这个目录是在记录目前系统上面正在跑的程序,这个数据根本就不需要备份的!此外,外挂的机器,例如 /mnt 或 /media 里面都是挂载了其他的硬盘装置、光驱、软盘驱动器等等,这些也不需要备份吧? 所以底下有些目录可以不需要备份!

  • /dev :这个随便你要不要备份;
  • /proc:这个真的不需要备份啦!
  • /mnt 与 /media:如果你没有在这个目录内放置你自己系统的东西,也不需要备份 ;
  • /tmp :干嘛存暂存档!不需要备份!

25.1.3. 备份用储存媒体的选择
用来储存备份数据的媒体非常的多样化,那该如何选择呢?在选择之前我们先来讲个小故事先!

一、一个实际发生的故事
在备份的时候,选择一个『数据存放的地方』也是很需要考虑的一个因素! 什么叫做数据存放的地方呢?讲个最简单的例子好了,我们知道较为大型的机器都会使用 tape 这一种磁带机来备份数据,而如果是一般个人计算机的话,很可能是使用类似 Mo 这一种可擦写式光盘片来存取数据!但是你不要忘记了几个重要的因素,那就是万一你的 Linux 主机被偷了呢?
这不是不可能的,之前我在成大念书时,隔壁校区的研究室曾经遭小偷, 里面所有的计算机都被偷走了!包括『Mo 片』,当他们发现的时候,一开始以为是硬件被偷走了,还好, 他们都有习惯进行备份,但是很不幸的,这一次连『备份的 MO 都被拿走了!』怎么办?!只能道德劝说小偷先生能够良心发现的将硬盘拿回来了!

二、异地备援系统
这个时候,所谓的『异地备援系统』就显的相当的重要了! 什么是异地备援呀!说的太文言了!简单的说就是将你的系统数据『备份』到其他的地方去, 例如说我的机器在台南,但是我还有另一部机器在高雄老家,这样的话, 我可以将台南机器上面重要的数据都给他定期的自动的透过网络传输回去! 也可以将家里重要的数据给他丢到台南来!这样的最大优点是可以在台南的机器死掉的时候, 即使是遭小偷,也可以有一个『万一』的备份所在!
缺点就是~带宽严重的不足 ! 在这种状态下,所能采取的策略大概就是『仅将最重要的数据给他传输回去 !』 至于一些只要系统从新安装就可以回复的咚咚!那就没有这个必要了!当然如果你的网络是属于 T1 与线的话,那么完整备份将数据丢到另一地去,也是很可行的!

三、储存媒体的考虑
在此同时,我们再来谈一谈,那么除了异地备援这个『相对较为安全的备份』方法之外, 还有没有其他的方法可以储存备份的呢?毕竟这种网络备援系统实在是太耗带宽了!如果像我们一般家用的 ADSL 根本就是吃不消!那么怎么办?那就只好使用近端的装置来备份! 这也是目前我们最常见到的备份方法!例如一般我们使用的 Tape, Mo, Zip, CD-RW, DVD-RW 还有备份用抽取式硬盘与携带式硬盘等等! 那么在选择上需要注意些什么呢?需要注意的地方有几点:

  • 备份速度要求 – 思考硬盘用途:
    『备份』在 Linux 主机上面也是蛮耗系统资源的!因为需要将系统的数据拷贝到其他装置上面去,这个时候 I/O 与 CPU 的负载都会大!你总不希望系统就这样给他挂点吧!此外,有些系统的数据实在太多, 怎么样也备份不完!所以越快的储存装置是越好的 !如果你是个重视速度甚于一切的人, 那么我觉得抽取式硬盘是个不错的方式,只不过…..目前我知道的抽取式硬盘都需要冷启动才行,不太符合 Linux 主机 24 小时全年无休的状态….
    但是硬盘真的越来越大、越来越便宜了,不使用速度快的硬盘来备份实在很可惜~ 加上目前的火线 (IEEE 1394) 以及 USB 2.0 外接式硬盘盒技术已经相当的成熟, 传输速度又快,又可以直接热拔插 (Plug and Play),接上 USB 硬盘, 整个复制一下,传输速度理论上可达 480Mbps (约 60 MBytes/second) ,快的! 复制完毕,又可以将硬盘带走,不需要与主机放置在一起,还可以避免同时被偷,真是不错。
    但是,硬盘还是有一定的困扰,那就是『不接电源的硬盘需要很好很好的保养』。 我们知道计算机最好的保养就是常常开机去运作一下,免得长期不开机,造成受潮而损坏。 这个携带式硬盘只是偶而才会连上主机来进行备份的数据,除非你额外购买一部防潮箱来放置硬盘, 否则很容易损坏!所以,近年来速度越来越快的 DVD-RW 就变的很方便!至于磁带 (tape),在速度上完全是落后的…..
    至于使用直接安装在主机上的第二颗硬盘来备份,类似 RAID 或者是安装一颗备份的硬盘在 Linux 系统当中,这个方案也很好, 而且速度上绝对是最具优势的!但是就如同我们刚刚提到的,万一你的机器被偷了,连带的, 这颗备份的硬盘自然也就不见了…..

  • 储存容量 – 磁带备份考虑:
    这也是一个需要考虑的因素!而且常常是最大考虑的因素!虽然目前硬盘越来越便宜, 但是毕竟就如同前面说的,抽取式硬盘需要将系统冷启动,而建构在系统内的硬盘又同时具有不安全的成分在, 携带式硬盘可能又有不容易保存的特性,这个时候一个大容量的替代方案就显的很重要了!虽然 CD-RW 与 DVD-RW 可以提供不错的速度,但是其容量毕竟不足 (虽然有高达几十 GB 的蓝光 DVD 可用,但目前 (2009) 尚未普及, 光盘片太贵了!) 所以说,具有大容量的 tape (磁带容量最小的一款也可以到达 8 GB 左右!) 就相当的具有这方面的优势了!而且携带方便,存放也容易!更可以带着走~~

  • 经费与数据可靠性 – DVD 的使用,可保存 10 年左右:
    在经费不短缺的情况下,我们当然会建议你上面的几个装置都买一买, 然后分别在不同的时间进行不同的备份作业 (底下我们有些建议的) !但是如果经费也是需要考虑的话,那么磁带机这个目前还算贵重的物品可能暂时还动不到! 这个时候近来渐渐便宜的 DVD-RW 就显的活跃的多了!而且光盘片也可以保存很久的ㄋㄟ~

无论如何,如果经费允许的话, Tape 备份数据真的是一个不错的点子!因为他的高容量让我好满意! 再来,如果经费稍微短缺的话,那么 DVD-RW 经常性的将数据刻录下来,这也是蛮好的,尤其 DVD 片又不占空间 !再来,如果还是没有办法,那么一颗内建在 Linux 的硬盘用来备份也是不错的! 什么!连备份的硬盘都没有,唉!怎么跟我一样~这个时候没办法,用原来的安装系统的硬盘,多留一个 partition 用来当作备份之用吧 (这也是目前我常用的方法之一!)底下我们来看一看一些常见的装置代号!

  • 光驱: /dev/cdrom (其实应该是 /dev/sdX 或 /dev/hdX);
  • 磁带机: /dev/st0 (SCSI 界面), /dev/ht0 (IDE 界面);
  • 软盘驱动器: /dev/fd0, /dev/fd1;
  • 硬盘机: /dev/hd[a-d][1-16] (IDE), /dev/sd[a-p][1-16] (SCSI/SATA);
  • 外接式 USB 硬盘机: /dev/sd[a-p][1-16] (与 SCSI 相同);
  • 打印机: /dev/lp[0-2] ;

特别留意的是磁带机!如果你有钱的话,那么买一部磁带机是相当不错的建议!没钱的话,买 IDE 或 SATA 接口的硬盘也很不错!

25.2. 备份的种类、频率与工具的选择
再来提到那个备份的种类,因为想要选择什么储存媒体与相关备份工具, 都与备份使用的方式有关!那么备份有哪些方式呢?一般可以粗略分为『累积备份』与『差异备份』这两种 (注1)。当然如果你在系统出错时想要重新安装到更新的系统时,仅备份关键资料也就可以了!

25.2.1. 完整备份之累积备份 (Incremental backup), 使用软件
备份不就是将重要数据复制出来即可吗?干嘛需要完整备份 (Full backup) 呢?如果你的主机是负责相当重要的服务, 因此如果有不明原因的当机事件造成系统损毁时,你希望在最短的时间内复原系统。此时,如果仅备份关键数据时, 那么你得要在系统出错后,再去找新的 Linux distribution 来安装,安装完毕后还得要考虑到数据新旧版本的差异问题, 还得要进行数据的移植与系统服务的重新建立等等,等到建立妥当后,还得要进行相关测试! 这种种的工作可至少得要花上一个星期以上的工作天才能够处理妥当!所以仅有关键数据是不够的!

一、还原的考虑
但反过来讲,如果是完整备份的话呢?若硬件出问题导致系统损毁时,只要将完整备份拿出来,整个给他倾倒回去硬盘, 所有事情就搞定了!有些时候 (例如使用 dd 指令) 甚至连系统都不需要重新安装!反正整个系统都给他倒回去,连同重要的 Linux 系统档案等,所以当然也就不需要重新安装!因此,很多企业用来提供重要服务的主机都会使用完整备份, 若所提供的服务真的非常重要时,甚至会再架设一部一模一样的机器!如此一来, 若是原本的机器出问题,那就立刻将备份的机器拿出来接管!以使企业的网络服务不会中断!
那你知道完整备份的定义了吧?没错!完整备份就是将根目录 (/) 整个系统通通备份下来的意思! 不过,在某些场合底下,完整备份也可以是备份一个文件系统 (filesystem) !例如 /dev/sda1 或 /dev/md0 或 /dev/myvg/mylv 之类的文件系统就是了。

二、累积备份的原则
虽然完整备份在还原方面有相当良好的表现,但是我们都知道系统用的越久,数据量就会越大!如此一来, 完整备份所需要花费的时间与储存媒体的使用就会相当麻烦~所以,完整备份并不会也不太可能每天都进行的! 那你想要每天都备份数据该如何进行呢?有两种方式,一种是本小节会谈到的累积备份,一种则是下个小节谈到的差异备份。
所谓的累积备份,指的是在系统在进行完第一次完整备份后,经过一段时间的运作, 比较系统与备份文件之间的差异,仅备份有差异的档案而已。而第二次累积备份则与第一次累积备份的数据比较, 也是仅备份有差异的数据而已。如此一来,由于仅备份有差异的数据,因此备份的数据量小且快速!备份也很有效率。 我们可以从下图来说明:
这里写图片描述
假如我在星期一作好完整备份,则星期二的累积备份是系统与完整备份间的差异数据;星期三的备份是系统与星期二的差异数据, 星期四的备份则是系统与星期三的差异数据。那你得要注意的是,星期二的数据是完整备份加第一次累积备份, 星期三的数据是完整备份加第一次累积与第二次累积备份,星期四的数据则是星期一的完整备份加第一次加第二次加第三次累积备份。 由于每次都仅与前一次的备份数据比较而已,因此备份的数据量就会少很多!
那如何还原?经过上面的分析,我们也会知道累积备份的还原方面比较麻烦! 假设你的系统在星期五的时候挂点了!那你要如何还原?首先,你必须要还原星期一的完整备份,然后还原星期二的累积备份, 再依序还原星期三、星期四的累积备份才算完全复原!那如果你是经过了九次的累积备份,就得要还原到第九次的阶段, 才是最完整的还原程序!

三、累积备份使用的备份软件
完整备份常用的工具有 dd, cpio, dump/restore 等等。因为这些工具都能够备份装置与特殊档案! dd 可以直接读取磁盘的扇区 (sector) 而不理会文件系统,是相当良好的备份工具!不过缺点就是慢很多! cpio 是能够备份所有档名,不过,得要配合 find 或其他找文件名的指令才能够处理妥当。以上两个都能够进行完整备份, 但累积备份就得要额外使用脚本程序来处理。可以直接进行累积备份的就是 dump 这个指令!详细的指令与参数用法, 请前往第九章查阅,这里仅列出几个简单的范例而已。
这里写图片描述
假设 /home 为一个独立的文件系统,而 /backupdata 也是一个独立的用来备份的文件系统,那如何使用 dump 将 /home 完整的备份到 /backupdata 上呢?可以像底下这样进行看看:
这里写图片描述
这里写图片描述
除了这些指令之外,其实 tar 也可以用来进行完整备份!举例来说,/backupdata 是个独立的文件系统, 你想要将整个系统通通备份起来时,可以这样考虑:将不必要的 /proc, /mnt, /tmp 等目录不备份,其他的数据则予以备份:
这里写图片描述

25.2.2. 完整备份之差异备份 (Differential backup)
差异备份与累积备份有点类似,也是需要进行第一次的完整备份后才能够进行。只是差异备份指的是:每次的备份都是与原始的完整备份比较的结果。所以系统运作的越久,离完整备份时间越长, 那么该次的差异备份数据可能就会越大!差异备份的示意图如下所示:
这里写图片描述
差异备份常用的工具与累积备份差不多 !因为都需要完整备份嘛!如果使用 dump 来备份的话,那么每次备份的等级 (level) 就都会是 level 1 的意思!当然你也可以透过 tar 的 -N 选项来备份!如下所示:
这里写图片描述
此外,你也可以透过 rsync 来进行镜像备份! 这个 rsync 可以对两个目录进行镜像 (mirror) ,算是一个非常快速的备份工具!简单的指令语法为:
这里写图片描述
根据分析 (注2) ,差异备份所使用的磁盘容量可能会比累积备份来的大,但是差异备份的还原较快, 因为只需要还原完整备份与最近一次的差异备份即可。无论如何,请依据你自己的喜好来选择备份的方式吧!

25.2.3. 关键数据备份
完整备份虽然有许多好处,但就是需要花费很多时间!所以如果在主机提供的服务并不是一定要 24 小时提供的前提下, 我们可以仅备份重要的关键数据即可。由于主机即使当机个一两天可能也不会影响到你的正常生活时, 仅备份关键数据就好!不需要整个系统都备份。仅备份关键资料是有许多好处的! 由于完整备份可能是在系统运作期间进行,不但会花费非常多时间,而且如果备份当时系统已经被攻破, 那你备份的数据是有问题的,那还原回去也是有问题的系统!
如果仅是备份关键数据而已,那么由于系统的绝大部分执行档都可以后来重新安装,因此若你的系统不是因为硬件问题, 而是因为软件问题而导致系统被攻破或损毁时,直接捉取最新的 Linux distribution ,然后重新安装, 然后再将系统数据 (如账号/密码与家目录等等) 与服务数据 (如 www/email/crontab/ftp 等等) 一个一个的填回去! 那你的系统不但保持在最新的状态,同时也可以趁机处理一下与重新温习一下系统设定!
不过,备份关键数据最麻烦的地方其实就是在还原!上述的还原方式是你必须要很熟悉系统运作, 否则还原得要花费很多时间的!尤其近来的 Linux 强调安全性,所以加入 SELinux 了,你如果要从旧版的 Linux 升级到新版时, 原本若没有 SELinux 而换成新版则需要启动 SELinux 时,那个除错的时间会花很长一段日子! 我认为这是仅备份关键数据的一些优缺点~
备份关键数据我最爱使用 tar 来处理了!如果想要分门别类的将各种不同的服务在不同的时间备份使用不同档名, 配合 date 指令是非常好用的工具!例如底下的案例是依据日期来备份 mysql 的数据库!
这里写图片描述
备份是非常重要的工作,你可不希望想到才进行吧?交给系统自动处理就对啦!请自己撰写 script , 配合 crontab 去执行吧!这样子,备份会很轻松!

25.3. VBird 的备份策略与 scripts
每部主机的任务都不相同,重要的数据也不相同,重要性也不一样,因此,每个人的备份思考角度都不一样! 有些备份策略是非常有趣的,包括使用多个磁带机与磁带来自动备份企业数据(注3) 。
就我的想法来说,并没有想要将整个系统完整的备份下来,因为太耗时间了!而且就我的立场而言,似乎也没有这个必要, 所以通常只备份较为重要的档案而已!不过,由于需要备份 /home 与网页数据,如果天天都备份,我想,系统迟早会受不了 (因为这两个部分就已经占去数 10 GB 的硬盘空间…),所以就将我的备份分为两大部分,一个是每日备份经常性变动的重要数据, 一个则是每周备份就不常变动的信息。这个时候我就写了两个简单的 scripts ,分别来储存这些数据。
所以针对我的『鸟站』来说,我的备份策略是这样的:

  1. 主机硬件:使用一个独立的 filesystem 来储存备份数据,此 filesystem 挂载到 /backup 当中;
  2. 每日进行:目前仅备份 MySQL 数据库;
  3. 每周进行:包括 /home, /var, /etc, /boot, /usr/local 等目录与特殊服务的目录;
  4. 自动处理:这方面利用 /etc/crontab 来自动提供备份的进行;
  5. 异地备援:每月定期的将数据分别 (a)刻录到光盘上面 (b)使用网络传输到另一部机器上面。

那就来看看我是怎么备份的吧!

25.3.1. 每周系统备份的 script
底下提供我的备份的 scripts ,希望对大家有点帮助!假设你已经知道如何挂载一个新的 filesystem 到 /backup 去,所以格式化与挂载这里就不再强调。
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
上面的 script 主要均使用 CentOS 5.x (理论上, Red Hat 系列的 Linux 都是用) 默认的服务与目录, 如果你有设定某些服务的数据在不同的目录时,那么上面的 script 是还需要修改的!不要只是拿来用而已! 上面 script 可以在底下的连结取得。

25.3.2. 每日备份资料的 script
再来,继续提供一下每日备份数据的脚本程序!请注意,我这里仅有提供 MySQL 的数据库备份目录, 与 WWW 的类似留言版程序使用的 CGI 程序与写入的数据而已。 如果你还有其他的数据需要每日备份,请自行照样造句!
这里写图片描述
上面的脚本可以在底下的连结取得。这样一来每天的 MySQL 数据库就可以自动的被记录在 /backup/daily/ 目录里头!而且还是文件名会自动改变的!再来就是开始让系统自己跑啦! 怎么跑?就是 /etc/crontab 呀!提供一下我的相关设定!

这里写图片描述
这样系统就会自动的在每天的 2:30 进行 MySQL 的备份,而在每个星期日的 3:30 进行重要档案的备份!是不是很容易呢!但是请千万记得!还要将 /backup/ 当中的资料 copy 出来才行!否则整部系统死掉的时候…那可不是闹着玩的! 所以我大约一个月到两个月之间,会将 /backup 目录内的数据使用 DVD 复制一下,然后将 DVD 放置在家中保存!这个 DVD 很重要的!不可以遗失,否则系统的重要数据 (尤其是帐户信息) 流出去可不是闹着玩的!

25.3.3. 远程备援的 script
如果你有控管两部以上的 Linux 主机时,那么互相将对方的重要数据保存一份在自己的系统中也是个不错的想法! 那怎么保存啊?使用 USB 复制来去?当然不是!你可以透过网络来处置!我们假设你已经有一部主机, 这部主机的 IP 是 192.168.1.100 ,而且这部主机已经提供了 FTP 与 sshd 这两个网络服务, 同时你已经做好了 FTP 的账号,sshd 账号的免密码登入功能等 (这部分请参考服务器篇的介绍),接下来你可以这样做:

一、使用 FTP 上传备份数据
假设你要上传的数据是将 /backup/weekly/ 目录内的档案统整为一个 /backup/weekly.tar.bz2 , 并且上传到服务器端的 /home/backup/ 底下,使用的账号是 dmtsai ,密码是 dmtsai.pass 。 那么你可以这样做看看:
这里写图片描述
二、使用 rsync 上传备份数据
另一个更简单的方法就是透过 rsync ,但是你必须要在你的服务器上面取得某个账号使用权后, 并让该账号可以不用密码即可登入才行!这部分得要先参考服务器篇的远程联机服务器才行! 假设你已经设定好 dmtsai 这个账号可以不用密码即可登入远程服务器,而同样的你要让 /backup/weekly/ 整个备份到 /home/backup/weekly 底下时,可以简单这样做:
这里写图片描述
由于 rsync 可以透过 ssh 来进行镜像备份,所以没有变更的档案将不需要上传的!相当的好用!大家赶紧写一个适合自己的备份 script 来进行备份的行为吧!重要重要!

25.4. 灾难复原的考虑
之所以要备份当然就是预防系统挂点!如果系统真的挂点的话,那么你该如何还原系统呢?

一、硬件损毁,且具有完整备份的数据时
由于是硬件损毁,所以我们不需要考虑系统软件的不稳定问题,所以可以直接将完整的系统复原回去即可。 首先,你必须要先处理好你的硬件,举例来说,将你的硬盘作个适当的处理,譬如建置成为磁盘阵列之类的。 然后依据你的备份状态来复原。举例来说,如果是使用差异备份,那么将完整备份复原后, 将最后一次的差异备份复原回去,你的系统就恢复了!非常简单吧!

二、由于软件的问题产生的被攻破资安事件
由于系统的损毁是因为被攻击,此时即使你恢复到正常的系统,那么这个系统既然会被攻破, 没道理你还原成旧系统就不会被再次攻破!所以,此时完整备份的复原可能不是个好方式!最好是需要这样进行:

  1. 先拔除网络线,最好将系统进行完整备份到其他媒体上,以备未来查验;
  2. 开始查阅登录档,尝试找出各种可能的问题 ;
  3. 开始安装新系统 (最好找最新的 distribution) ;
  4. 进行系统的升级,与防火墙相关机制的制订;
  5. 根据 2 的错误,在安装完成新系统后,将那些 bug 修复;
  6. 进行各项服务与相关数据的恢复;
  7. 正式上线提供服务,并且开始测试 ;

软件资安事件造成的问题可大可小,一般来说,标准流程都是建议你将出问题的系统备份下来, 如果被追踪到你的主机曾经攻击过别人的话,那么你至少可以拿出备份数据来左证说,你是被攻击者, 而不是主动攻击别人的坏人!然后,记得一定要找出问题点并予以克服,不然的话,你的系统将一再地被攻击! 那样可就伤脑筋啰~

猜你喜欢

转载自blog.csdn.net/kk53976047/article/details/79659536
今日推荐