鸟哥的 Linux 私房菜 -- 浅谈备份策略

since2012/04/23

     
 
最近更新日期:2005/10/25
本文已不再维护,更新文章请参考此处
万一不幸你的 Linux 被黑客入侵了、或是你的 Linux 系统由于硬件关系 ( 不论是天灾还是人祸 ) 而挂掉了!这个时候,请问如何快速的回复你的系统呢?呵呵!当然啰,如果有备份数据的话, 那么回复系统所花费的时间与成本将降低相当的多!平时最好就养成备份的习惯, 以免突然之间的手足无措!此外,哪些档案最需要备份呢?又,备份是需要完整的备份还是仅备份重要数据即可? 嗯!确实需要考虑看看呦!

大标题的图示谁需要备份数据
前面的章节我们提到了相当多的 Linux 系统基础,这个时候我们再来谈一谈:『 若您的系统由于不预期的伤害,导致系统发生错误,该如何修复? 』这可是个相当大的问题呀!怎么说呢?又什么叫做『不预期的伤害?』 好了,假如您的 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 的朋友们互相建立交流起来的数据流通网,如果死掉了, 那么不是让这些热血青年的热情付之一炬了吗?!所以啰,建立备份的策略是相当的重要的。

基本上,『计算机是一个相当不可靠的机器』这句话在大部分的时间内还是成立的! 常常会听到说『要计算机正常的工作,最重要的是要去拜拜!』嘿嘿!不要笑!这还是真的哩! 尤其是在日前一些计算机周边硬件的生产良率 ( 就是将硬件产生出来之后,经过测试, 发现可正常工作的与不能正常工作的硬件总数之比值 ) 越来越差的情况之下,计算机的不稳定状态实在是越来越严重了!

举个例子来说,鸟哥曾经同时买过同一厂牌的 IxM 30GB 硬盘三颗,回来之后经过一个星期,嘿嘿!挂掉了两颗!其中一颗是有坏轨,另外一颗是『完全死掉』, 拿去公司要求修理,结果呢?嗯!店家直接拿了一棵新的给我,害我吓一跳,店家的工程师说 『唉呀!目前这个牌子的良率太差了,所以代理商为了怕麻烦,都会直接拿新的替换给我们啦!』 要晓得的是,当初那一颗完全死掉的硬盘,是我用来备份我的主机数据的.... 好在当时我将备份的资料放在三四个地方,还好....

所以啰!由于计算机 ( 尤其是目前的计算机,操作频率太高、硬件良率太差、使用者操作习惯不良、 『某些』操作系统的当机率太高.... ) 的稳定性较差,所以啰!备份的工作就越来越重要了!

那么一般我们在备份时考虑的因素有哪些呢?
  1. 备份哪些档案:
    例如在账号管理那一篇当中,我们知道最起码主机的帐户信息在 /etc/* 及 /home/* 等等档案都是重要的!

  2. 选择什么备份的媒介:
    是可擦写光盘、另一棵硬盘、同一颗硬盘的不同 partition、还是使用网络备援系统? 哪一种的速度最快,最便宜,可将数据保存最久?

  3. 考虑备份的方式:
    是完全备份(类似 ghost)还是部分备份即可?

  4. 备份的频率:
    例如 MySQL 数据库是否天天备份、若完全备份,需要多久进行一次?

  5. 备份使用的工具为何:
    是 tar 还是 cpio 等等?
底下我们就来谈一谈这些问题的解决之道吧! ^_^


大标题的图示哪些 Linux 数据具有备份的意义
具有备份意义的档案通常可以粗分为两大类,一类是系统、一类则是类似网络服务的数据, 那么各有哪些档案需要备份的呢?我们就来稍微分析一下。

  • 主机系统需要备份的档案:
  • 这方面的档案主要跟『账号与系统配置文件』有关系! 主要有哪些账号的档案需要备份呢?就是 /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 这个目录可就相当的重要了!这里我们假设我们提供的服务套件都是使用原厂的 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 这个目录是在记录目前系统上面正在跑的程序 ( processes ) ,这个数据根本就不需要记录的呢!所以就把他拿掉!此外,外挂的机器,例如 /mnt 或 /media 里面都是挂载了其他的硬盘装置、光驱、软盘驱动器等等,这些也不需要备份吧!? 所以啰!底下有些目录可以不需要备份啦!
    • /dev :这个随便你要不要备份
    • /proc:这个真的不需要备份啦!
    • /mnt :根据版本不同,有的是 /media 如果你没有在这个目录内放置你自己系统的东西,也不需要备份
    • /tmp :干嘛存暂存档!不需要备份!

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

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

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

  • 速度要求
  • 『备份』基本上在 Linux 主机上面也是蛮耗系统资源的!因为需要将系统的数据拷贝到其他装置上面去,这个时候 CPU 几乎是 loading 100%!您总不希望系统就这样给他挂点吧!?此外,有些系统的数据实在太多咯, 怎么样也备份不完!所以啰,越快的储存装置是越好的!如果您是个重视速度甚于一切的人, 那么我觉得抽取式硬盘是个不错的方式,只不过.....目前我知道的抽取式硬盘都需要冷启动才行,不太符合 Linux 主机 24 小时全年无休的状态....

    但是硬盘真的越来越大、越来越便宜了,不使用速度快的硬盘来备份实在很可惜~ 加上目前的火线 (IEEE 1394) 以及 USB 2.0 外接式硬盘盒技术已经相当的成熟, 传输速度又快,又可以直接热拔插 (Plug and Play),接上 USB 硬盘, 整个复制一下,传输速度理论上可达 480Mbps (约 60 MBytes/second) ,快的哩! 复制完毕,又可以将硬盘带走,不需要与主机放置在一起,还可以避免同时被偷,真是不错。

    但是,硬盘还是有一定的困扰,那就是『不接电源的硬盘需要很好很好的保养』。 我们知道计算机最好的保养就是常常开机去运作一下,免得长期不开机,造成受潮而损坏。 这个携带式硬盘只是偶而才会连上主机来进行备份的数据,除非您额外购买一部防潮箱来放置硬盘, 否则很容易损坏ㄟ!所以,近年来速度越来越快的 DVD-RW 就变的很方便啰!至于 tap ,在速度上完全是落后的.....至于使用第二颗硬盘备份,类似 Raid, 或者是安装一颗备份的硬盘在 Linux 系统当中,这个方案也很好, 而且速度上绝对是最具优势的!但是就如同我们刚刚提到的,万一你的机器被偷了,连带的, 这颗备份的硬盘自然也就不见了.....

  • 储存容量
  • 这也是一个需要考虑的因素!而且常常是最大考虑的因素呢!虽然目前硬盘越来越便宜, 但是毕竟就如同前面说的,抽取式硬盘需要将系统冷启动,而建构在系统内的硬盘又同时具由不安全的成分在, 携带式硬盘可能又有不容易保存的特性,这个时候一个大容量的替代方案就显的很重要了!虽然 CD-RW 与 DVD-RW 可以提供不错的速度,但是其容量毕竟不足 (目前的 DVD-RW 片最大虽然可以突破 8.7GB ,但是,贵的很哩~期待新规格赶紧定义出来呢!), 所以说,具有大容量的 tap (磁带容量最小的一款也可以到达 8 GB 左右!) 就相当的具有这方面的优势了!而且携带方便,存放也容易!更可以带着走~~

  • 经费与资料可靠性
  • 在经费不短缺的情况下,我们当然会建议您上面的几个装置都买一买, 然后分别在不同的时间进行不同的备份作业(底下我们有些建议的啦! ^_^)!但是如果经费也是需要考虑的话,那么磁带机这个目前还算贵重的物品可能暂时还动不到! 这个时候近来渐渐便宜的 DVD-RW 就显的活跃的多了!而且光盘片也可以保存很久的ㄋㄟ~ 当然,目前应该不会有人以软盘来备份了吧!?呵呵!软盘可是相当不安全的 (每次我看到有人拿软盘拷贝数据,我都会要他 copy 完成之后,立刻到另外一部计算机 copy 出来试看看,果不其然,十次里面有八次对方的软盘片都有问题~)

    无论如何,如果经费够的话, Tape 备份数据真的是一个不错的点子!因为他的高容量让我好满意! 再来,如果经费稍微短缺的话,那么 DVD-RW 经常性的将数据刻录下来,这也是蛮好的,尤其 DVD 片又不占空间!再来,如果还是没有办法,那么一颗内建在 Linux 的硬盘用来备份也是不错的!什么!!连备份的硬盘都没有,唉!怎么跟我一样~ 这个时候没办法啦,用原来的安装系统的硬盘,多留一个 partition 用来当作备份之用吧(这也是目前鸟哥常用的方法之一!)底下我们来看一看一些常见的装置代号!
    • 光驱: /dev/cdrom
    • 磁带机: /dev/st0 ( SCSI 界面 ), /dev/ht0 ( IDE 界面 )
    • 软盘驱动器: /dev/fd0, /dev/fd1
    • 硬盘机: /dev/hd[a-d][1-16] ( IDE 界面 ), /dev/sd[a-p][1-16] ( SCSI 界面 )
    • 抽取式 USB 规格硬盘机: /dev/sd[a-p][1-16] (别怀疑,刚好与 SCSI 接口相同!)
    • 打印机: /dev/lp[0-2]
    特别留意的是磁带机呦!如果你有钱的话,那么买一部磁带机是相当不错的建议!没钱的话,买 IDE 或 SATA 接口的硬盘也很不错!! ^_^


    大标题的图示备份的种类
    讲了好多口水了,还是没有讲到重点,真是的....好了,再来提到那个备份的种类, 其实前面已经提到一些了!基本上,备份就可以直接分为『完全备份』与『部分备份』这两方面:

  • 完全备份(Full Backup):
  • 完全备份就是将根目录『 / 』里头所有的数据都给他一股脑儿的备份下来,不过, 这个时候所需要的『时间与备份装置的容量』 就显的相当的重要了!用在大型的企业是有一定的需求的,但是像我们这一种小网站的话, 完整的备份似乎太过于浪费的(毕竟我们可以用时间换取金钱....了不起又重新安装了....)。

    但是刚刚完成的系统(还没有对外 Internet 上面服务)通常可以的话,就赶快给他备份一下吧! 这样的一个备份是最干净的!用在系统的最干净还原是相当有帮助的!这是因为有的时候我们的系统被入侵了,但是 root 并不知道,这个时候老是拿最近的备份数据来还原也没有用呀!因为连同被 cracker 修改过的档案也被我们备份下来了呀!呵呵!所以啰, 将一个最原始的系统的数据备份下来还是有其必要性的!此外, 这种完整备份的频率可不能太高,因为太耗系统资源了

  • 部分备份(Implement backup)
  • 部分备份就如同上面提过的,备份那些最重要的数据就好了!反正系统不见的话, 只要重新安装就回来了,数据只要妥善的备份重点数据,那么系统的复原还是一个很快速的工作! 以鸟哥为例,我通常都喜欢仅备份最重要的信息,因为重新安装一次系统时间花的并不长 (一个钟头内一定可以搞定!)而账号、服务设定、原本系统的数据库、等等,几乎都只要 copy 回来就 OK 了!

    例如:我们这个网站在开始营运初期,虽然交通流量很大了,还是常出状况, 那个时候重新安装了好几次(似乎是硬件的问题!),每次都是一个下午就搞定了!所以啰, 鸟哥是一直认为『重点备份』就真的是蛮重要的! 尤其很多时候,你的数据被吃掉都只是『某个网络服务』, 那么如果仅进行完整备份的工作时,呵呵!单单是将系统先读出来,再取出所要还原的部分, 呵呵!就可以累死你了....

    如同上面提到的,这两个方式各有优缺点啦!那么如果可能的话,是否两个都来进行一下最好呢?呵呵! 答对了!给你拍拍手!我们通常的规划就是这样,重点部分的备份频率较高,可能每天都需要备份的! 至于如果是完整备份的话,那么一个星期、甚至一个月在备份一次都可以!目前鸟哥的系统上面就是每天备份 MySQL 数据库,然后每个星期备份所有的重要数据!


    大标题的图示备份的工具选择
    好了,选定了备份的装置与备份的频率之后,那么我要使用什么方式来备份呀!呵呵! 这个也要跟备份的种类相互配合呢!通常鸟哥在备份的时候,除非有磁带机或者有特殊的功用,否则通常我只使用 tar 啦!但是这里我们介绍一下 cpio 这个东西!如果你有磁带机的话, cpio 可是相当好用的一个指令呢! ^_^ ,呵呵! 由于这两个指令我们早在『压缩工具』当中稍微提过了, 请再自行过去瞧一瞧去啰!另外,您或许会问道:『那么我为什么不直接给他 copy 过去备份的地点就好了呢!?』呵呵!既然可以在 copy 的过程里面增加压缩的功能来减低整个储存空间的消耗,为何不压缩?!那当然还是压缩一下比较好啰! 所以啊!鸟哥还是比较喜欢 tar, cpio 的啦!

  • 完整备份的工具:
  • 在完整备份的工具里面,三个工具 tar, cpio 与 dump 都很常被使用!此外,那个 dd 也是不错的指令喔! 至于 cpio 的话,他最大的好处就是『 cpio 连一般的装置文件都可以 copy 过来!』很棒吧!所以使用 cpio 进行完整备份是很棒的一个选择。不过需要注意的是,由于 cpio 需要配合 find 才可以正常的动作!这里请特别留意啰!另外,使用 cpio 常常配合另一颗完全用来备份的硬盘或者是磁带机才好!至于完整的指令用法请到 『压缩工具』 那一篇去查看啰!备份与反备份分别可以这样使用:
    # 1. 使用 cpio 来备份与还原:
    [root@linux ~]# find / -print | cpio -covB > /dev/st0  <==备份到磁带机
    [root@linux ~]# cpio -iduv < /dev/st0                  <==还原
    
    # 2. 使用 tar 来备份与还原
    [root@linux ~]# tar --exclude /proc --exclude /mnt --exclude /tmp \
    > -zcvpf host.tgz /
    [root@linux ~]# tar -zxvf host.tgz
    
    # 3. 用 dd 来备份一颗完全一模一样的硬盘:
    [root@linux ~]# dd if=/dev/hda of=/dev/hdb
    # 完整的将 /dev/hda 通通备份到 /dev/hdb 当中去!
    
    这几个工具都蛮好用的!尤其鸟哥特喜欢 tar 的用途!因为他相当的适合于另一颗硬盘的备份呢! 当然,如果您有完全相同的两颗硬盘时,用 dd 会是一个很不错的完整备份的方案喔! ^_^

  • 部分备份的基础工具:
  • 至于部分备份方面,我们就以简单的 tar 来说明一下吧!!假如我们需要备份的数据是每天的 MySQL 数据库时,由于我想让每天的数据都存成不同的档案,而要分别档案的新旧又以日期来分别最简单了! 所以我就可以这样做:
    [root@linux ~]# tar -zpcvf mysql.`date +%Y-%m-%d`.tgz /var/lib/mysql
    # 如果忘记了上面的指令代表什么意思,那么请回到 bash 那一章去瞧一瞧吧!
    
    [root@linux ~]# tar -N '2005/10/25' -zpcvf home.tgz /home
    只有在比 2005/10/25 还要新的档案,在 /home 底下的档案才会被打包进 home.tgz 中!
    
    这样就能将 mysql 的数据库压缩备份至 mysql.2005-10-25.tgz 这个档案, 并且日期会每天都不一样!呵呵!这样一来如果系统的数据库出了问题,就可以马上的回复了! 而且还有很多的档案可供回复呢!不错吧!此外,也可以利用类似上面的第二个范例的例子, 将最新的数据备份就好,其他的资料则不予以更动!嘿嘿!提供了更完善的方式呢!

    大致的工具就是这样了!此外,由于备份是长长久久的事业,所以我们需要的是『系统可以自己动作』的方式, 您说是吧!所以呢,这个时候就需要使用到 cron 的服务啦!还记得我们先前讲过的 例行性命令的建立 吗?赶快再去复习一下呀!

    大标题的图示鸟哥的备份策略
    其实鸟哥在备份的策略相当的简单,我并没有想要将整个系统完全的备份下来,因为太耗时间了! 而且就我的立场而言,似乎也没有这个必要,所以通常鸟哥只备份较为重要的档案而已!不过,由于我需要备份 /home 与网页数据,如果天天都备份,我想,系统迟早会受不了 (因为这两个部分就已经快要占去 1GB 的硬盘空间...) ,所以鸟哥就将我的备份分为两大部分,一个是每周备份,一个则是每日备份,备份的时间点都选择在凌晨的 3~4 点左右!这个时候我就写了两个简单的 scripts ,分别来储存我的数据。所以针对鸟哥的网站 (简称『鸟站』哈哈!)我的备份策略是这样的:
    1. 使用一颗加挂的硬盘来进行备份的功能,挂在 /disk2 当中;
    2. 每周进行的备份有 /home, /var, /etc, /boot, /usr/local 等目录;
    3. 每日进行的目前仅有 MySQL 数据库;
    4. 利用 /etc/crontab 来自动提供备份的功能;
    5. 在每周或每月定期的将数据分别 (a)刻录到光盘上面 (b)使用网络传输到另一部机器上面。
    那就来看看鸟哥是怎么备份的吧! ^_^


    小标题的图示日常备份行为:
    底下提供鸟哥的备份的 scripts ,希望对大家有点帮助! 我的动作是:1) 先将所有的数据通通丢到 /disk2/backup 底下去,然后 2) 进行压缩打包,并且传送到内部的 192.168.1.100 那部主机上面去。
    # 1. 每周备份的资料的 script 啊!
    [root@linux ~]# mkdir /disk2/backup
    [root@linux ~]# vi /disk2/backup/backupweekly.sh
    #!/bin/bash
    # ==============================================================
    # 说明:
    # 这支程序是用来备份鸟哥的网站数据的! 当然啦,数据量很大的!
    # 我将他分为几个部分:
    #       第一部份是系统的服务与受服务的配置文件,
    #       第二部分则是与用户有关的重要信息部分了! ^_^
    # ==============================================================
    # History
    # When          Who     What
    # 2000/12/16    VBird   first time to release
    # 2002/03/26    VBird   Adding ftp services' backup in /disk2/backup/ftp
    # 2003/07/03    VBird   发现解压缩之后会有一些错误数据发生!
    #                       所以将 tar 加入 -p 的参数!
    # 2005/01/02    VBird   怀疑可能因为备份期间硬盘运转的问题导致当机,
    #                       所以,加上多个 sleep 以及 sync 的功能!
    # ==============================================================
    PATH=/bin:/usr/bin:/sbin:/usr/sbin; export PATH
    LANG=C; export LANG
    LC_ALL=C; export LC_ALL
    
    # 设定路径来备份
    basedir=/disk2/backup
    named=$basedir/named
    postfixd=$basedir/postfix
    vsftpd=$basedir/vsftp
    sshd=$basedir/ssh
    sambad=$basedir/samba
    wwwd=$basedir/www
    others=$basedir/others
    userinfod=$basedir/userinfo
    
    # ===============================================================
    # 1.  系统的相关服务,主要服务有:
    #     (1) BIND server: 
    #     (2) Postfix:
    #     (3) vsftp:
    #     (4) sshd:
    #     (5) samba:
    #     (6) WWW:
    #     (7) Others:其他系统必须要的一些信息!
    
    # 1.1 系统的 BIND 套件,主要是 DNS 的配置文件备份!
    cp -a /var/named/chroot/etc     $named/chroot
    cp -a /var/named/chroot/var     $named/chroot
    
    # 1.2 系统的 Postfix Server 相关的文件备份数据!
    cp -a /etc/postfix/*            $postfixd 2> /dev/null
    cp -a /etc/rc.d/init.d/postfix  $postfixd
    cp -a /etc/dovecot.conf         $postfixd
    
    # 1.3 系统的 vsftpd 服务器的仅有的配置文件喔!
    cp -a /etc/vsftpd/*             $vsftpd
    cp -a /etc/vsftpd.*             $vsftpd
    
    # 1.4 系统的 sshd 服务器的配置文件案!
    cp -a /etc/ssh/*                $sshd
    
    # 1.5 系统的 Samba 所动用的档案
    cp -a /etc/samba/*              $sambad
    
    # 1.6 WWW
    cp -a /etc/my.cnf                       $wwwd
    cp -a /etc/php.ini                      $wwwd
    cp -a /etc/httpd/conf/httpd.conf        $wwwd
    cp -a /etc/httpd/conf.d                 $wwwd
    cp -a /etc/httpd/conf.d/vbird.conf*     $wwwd
    cd /usr/local
       tar -pcf $wwwd/counter-data.tar  Counter/data
    cd /var/lib
       tar -pcf $wwwd/mysql-lib.tar  mysql --exclude mysql/mysql.sock
    cd /var
       tar -pcf $wwwd/www-cgi-icon.tar  www/cgi-bin www/icons
    
    # 1.7 Others
    cp -a /etc/hosts                $others
    cp -a /etc/hosts.allow          $others
    cp -a /etc/hosts.deny           $others
    cp -a /etc/modprobe.conf*       $others
    cp -a /etc/fstab                $others
    cp -a /etc/resolv.conf          $others
    cp -a /etc/shells               $others
    cp -a /etc/wgetrc               $others
    cp -a /etc/crontab              $others
    cp -a /etc/sysconfig/i18n       $others
    cp -a /etc/sysconfig/network    $others
    cp -a /etc/sysconfig/network-scripts/ifcfg-eth0 $others
    cd /
       tar -pcf $others/etc.tar etc
    cd /usr
       tar -pcf $others/local.tar local
    
    sleep 5s
    sync; sync
    
    # ============================================================================
    # 2.  主机的重要数据与数据库系统
    #     (1) 用户的信息  重点在 /etc/passwd, shadow, group 以及电子邮件、家目录
    
    # 2.1
    cp -a /etc/passwd  $userinfod
    cp -a /etc/shadow  $userinfod
    cp -a /etc/group   $userinfod
    
    cd /var/spool
       tar -pcf $userinfod/mail.tar mail
    
    cd /
       tar -pcf $userinfod/home.tar home --exclude home/lost+found
    
    sleep 5s
    sync; sync
    
    # ============================================================================
    # 3. 将主机的重要数据复制到 192.168.1.100 那部机器上面去!
    
    # 3.1 压缩与打包
    cd $basedir
       tar -zpcf backupweekly.tar.gz * --exclude backupweekly.tar.gz
    
    sleep 5s
    sync; sync
    
    # 3.2 ftp 到 192.168.1.100
    id="username"
    pw='yourpassword'
    cd $basedir
    ftp -n 192.168.1.100 > $basedir/backup.ftp.log 2>&1 <<EOC
    user    $id     $pw
    binary
    cd      /disk2/backup/
    put     backupweekly.tar.gz
    bye
    EOC
    sync; sync
    
    当然啰,上面的 script 是适合鸟哥的状态,所以,你要使用的话,还得要修修改改呦! 不要照着使用,会有问题的!另外,上面的 script 当中,我已经加上了远程储存的功能了, 那就是 #3.2 的 FTP 部分,藉由这个简单的动作,就可以将我这一部机器上面的数据, 整个传送到 192.168.1.100 那部机器上面,够简单吧! ^_^


    小标题的图示每日备份资料 scripts:
    再来,继续提供一下每日备份的数据:
    # 提供的是每日备份的 script 啊
    [root@linux ~]# vi /disk2/backup/backupdaily.sh
    #!/bin/bash
    #
    # This program is created by VBird 2002/06/13
    #
    # What is this program?
    #       This program will backup the following messages:
    #       1. MySQL data files ( /var/lib/mysql );
    #       2. HTTP's CGI-directory ( /var/www/cgi-bin )
    #
    # HOW TO RUN THIS PROGRAM?
    #       Just put the file into /etc/crontab job,
    #       or put this file's link file to /etc/cron.daily!
    #
    ###############################################################
    # History
    #  Date         What                                    Who
    #==============================================================
    # 2002/06/13    First time to run this program
    #               The only backup files are MySQL and CGI VBird
    #==============================================================
    # 0. Get the date messages and backup directory
    day=`date +%Y-%m-%d`
    basedir="/disk2/backup/daily"
    
    # 1. MySQL  ( PATH = /var/lib/mysql )
    /etc/rc.d/init.d/mysqld stop
    cd /var/lib
    tar -zcf "$basedir"/mysql."$day".tar.gz mysql 2> /dev/null
    /etc/rc.d/init.d/mysqld start
    
    # 2. CGI ( PATH = /var/www/cgi-bin )
    cd /var/www
    tar -zcf "$basedir"/cgi-bin."$day".tar.gz cgi-bin 2> /dev/null
    
    好啦!这样一来每天的 MySQL 数据库就可以自动的被记录在 /disk2/backup/daily 里头啦!而且还是文件名会自动的改变的呦!呵呵!我很喜欢!OK!再来就是开始让系统自己跑啦! 怎么跑?!就是 /etc/crontab 呀!提供一下我的相关设定呦!
    [root@linux ~]# vi /etc/crontab
    # 加入这两行即可 ( 请注意您的档案目录!不要照抄呦! )
    # backup scripts
    30 3 * * 0 root /disk2/backup/backupweekly.sh
    30 2 * * * root /disk2/backup/backupdaily.sh
    
    这样系统就会自动的在每天的 2:30 进行 MySQL 的备份,而在每个星期日的 3:30 进行重要档案的备份!呵呵!您说,是不是很容易呢!?但是请千万记得呦!还要将 /disk2 当中的资料 copy 出来才行耶!否则整部系统死掉的时候....那可不是闹着玩的!

    Tips:
    有些时候,您在进行备份时,被备份的档案可能同时间被其他的网络服务所修改喔! 举例来说,当您备份 MySQL 数据库时,刚好有人利用您的数据库发表文章,此时, 可能会发生一些错误的讯息。要避免这类的问题时, 可以在备份前,将该服务先关掉,备份完成后,再启动该服务即可! 感谢网页 duncanlo 提供这个方法!
    鸟哥的图示

    小标题的图示远程备援系统:
    除此之外,那么还有没有保险的方式呢?呵呵!刚刚前面不是提过远程备援吗? 最简单的说法就是『使用因特网的方法,将你的数据送到远程主机去备份!』那样就 OK 啦!那么我们怎么使用远程备份的方法呢?那就用最简易的 FTP 吧!详细的资料, 其实上面我们就已经提到的,您可以自行参考一下。这里仅提供一个简单的说明:
    1. 备份的资料最好『越精简越好』;
    2. 远程主机必需提供 FTP 服务(当然,其他的服务例如 sftp 也是可以的,只要能够将数据传上去就好了!)
    3. 远程主机必需要可以符合你上传的属性设定,例如 quota 容量、储存目录的属性等等!
    如果你想要有自己的简单的自动 FTP scripts 来帮我们达成自动档案上传的功能,那就这样吧!
    #!/bin/bash
    #
    # WHAT IS THIS:
    # This program will automatically put the backup file
    # from this host to another hosts
    #
    # HISTORY
    # When          Who     What
    # 2002/10/14    VBird   First time to release
    #
    ###################################################################
    # 1. input your FTP's ID and PassWord
      host="192.168.1.100"
      id="testing"
      pw='your.passwd'
    
    # 2. what is the correct and remote working directory
      basedir="/disk2/backup"              # 本机上面的欲上传档案路径
      remodir="/disk2/backup_testinghost"  # 远程主机欲备份的目录
    
    # 3. the tar file
      filename="backup.testinghost.tar"
    
    # 4. starting tar work
    # 因为我将所有预备被传送的数据都分门别类的放置在 
    # /disk2/backup 这个目录中, 但是FTP传送档案的时候,
    # 毕竟一个档案送完会比较容易与快速,所以我先将好几个档案 tar 成一个!
      cd $basedir
      tar -cvf $filename *
    
    ###################################################################
    # 5. 底下就是 ftp 自动联机并操作上传手续的 script !
      ftp -n "$host" > "$basedir"/"$filename".log 2>&1 <<EOC
      user    $id         $pw
      binary
      cd      $remodir
      put     $filename
      bye
      EOC
    
    好了!大家赶紧写一个适合自己的备份 script 来进行备份的行为吧!重要重要喔! 如果不想要使用 FTP 而想要利用其他方式的话,或许可以 man rsync 这个指令来达成喔!

    大标题的图示如何还原系统的考虑
    既然有备份,自然就得要考虑到还原啰~一般来说,我们针对备份与还原的考虑通常有这两种:
    • 我的主机需要在『很短的时间内』立刻就能够还原上线;
    • 我的主机希望能够在查询到挂点的原因后,才正式上线;
    以第一种类来说,例如您的公司是提供数千甚至数万人连上来的企业, 那么贵公司的服务器是『没有休假的权力』的。所以啰,除非真的是天灾,否则只要系统发生问题, 您都应该要在很短的时间内将该伺服器重新 on-line 才行啊! 这个时候,一部一模一样的备份机器,或者是一份一模一样的完整备份数据,就显的很重要! 因为即使是被入侵,反正先上线,然后用那部被入侵的机器赶紧进行修复与还原的工作, 这样才能够达到公司正常营运的目的啊!

    那如果仅是一般个体户呢?例如鸟哥的网站,就是这样的代表。 那么我当然不必要选择完整备份了,因为即使我完整备份了,但是备份之初的数据如果就已经被入侵, 那我还原一个被入侵的数据有什么好处?加上目前的硬件等级都很高, 网络带宽都很够的前提之下,重新安装最新版 Linux 与更新到最新的套件,其实速度上是很快的。 如此一来,反正系统如果挂了,刚好整个 distribution 一起进行升级~似乎也不错啊~ ^_^

    总之,备份工具是死的,使用的您是活的,您在使用 tar, cpio, dd 等工具时, 必须要优先考虑您所想要达到的『目的』是什么,再根据这个目的,以及您所可以利用的『资源与经费』, 选择适当的备份方式与媒体,这样就足够啦!大家加油啦! ^_^

  • 关于储存架构的考虑
  • 在这个章节当中,我们提到的大概都是属于中小企业环境所使用到的备份动作, 如果您所在的公司是大型企业的环境,那么不妨考虑外接式,或者是拥有完整备份储存网络的架构, 例如 SAN (Storage Area Network) 及 NAS (Network Attached Storage) 设备, 这样才能够更快速与高效率的储存与备份啊!^_^

    不过,这两种架构当中,都需要比较高价位的光纤信道,或者是新技术的 iSCSI 协议的需求, 鸟哥还无缘碰到。除了 iSCSI 有接触到一部机器之外, SAN 还真是没有碰过..... 这两部分的企业应用,就有待您自行与相关的厂商接触了解啰! ^_^

    大标题的图示本章习题练习
    ( 要看答案请将鼠标移动到『答:』底下的空白处,按下左键圈选空白处即可察看 )
    • 你所看到的常见的储存设备有哪些?
    • Floppy, Mo, Zip, CD-RW, DVD-RW, 外接式 USB 硬盘, Tape, 外接式储存数组 (RAID),额外的储存架构,如 SAN, NAS 等。

    2002/07/06:第一次完成
    2003/02/12:重新编排与加入 FAQ
    2005/10/25:旧版的数据已经移动到 此处
    2005/10/25:主要是增加了一些简单的说明,以及将一些不合时宜的数据拿掉而已!
     
         
    http://linux.vbird.org is designed by VBird during 2001-2011. ksu.edu 

    本网页主要以Firefox配合解析度 1024x768 作为设计依据     鸟哥自由软件整合应用研究室