Linux 备份策略------经典呀!
时间:2006-10-18 来源:mzwindy
万一不幸你的 Linux 被黑客入侵了、或是你的 Linux 系统由于硬件关系 ( 不论是天灾还是人祸 ) 而挂掉了!这个时候,请问如何快速的回复你的系统呢?呵呵!当然啰,如果有备份数据的话, 那么回复系统所花费的时间与成本将降低相当的多!平时最好就养成备份的习惯, 以免突然之间的手足无措!此外,哪些档案最需要备份呢?又,备份是需要完整的备份还是仅备份重要数据即可? 嗯!确实需要考虑看看呦!
1. 谁需要备份数据
2. 哪些 Linux 数据具有备份的意义
3. 选择的备份装置
4. 备份的种类: 完整备份(full backup), 部分备份(Implement backup)
5. 备份的工具选择: tar, dd, cpio...
6. VBird 的备份策略与 scripts:
6.1 系统备份
6.2 每日备份
6.3 远程备份 谁需要备份数据 前面的章节我们提到了相当多的 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 硬盘三颗,回来之后经过一个星期,嘿嘿!挂掉了两颗!其中一颗是有坏轨,另外一颗是『完全死掉』,拿去公司要求修理,结果呢?嗯!店家直接拿了一棵新的给我,害我吓一跳,店家的工程师说 『唉呀!目前这个牌子的良率太差了,所以代理商为了怕麻烦,都会直接拿新的替换给我们啦!』要晓得的是,当初那一颗完全死掉的硬盘,是我用来备份我的主机数据的.... 好在当时我将备份的资料放在三四个地方,还好....
所以啰!由于计算机 ( 尤其是目前的计算机,操作频率太高、硬件良率太差、使用者操作习惯不良、 『某些』操作系统的当机率太高.... ) 的稳定性较差,所以啰!备份的工作就越来越重要了!
那么一般我们在备份时考虑的因素有哪些呢?
至于 /home 底下是每个人的家目录,自然也需要来备份一番!再来,由于使用者会有邮件吧!所以呢,这个 /var/spool/mail 内容也需要备份呦!另外,由于如果您曾经自行更动过核心,那么 /boot 里头的信息也就很重要啰!所以啰,这方面的数据您必须要备份的档案为:
这个时候,所谓的『远程备援系统』就显的相当的重要了! 什么是远程备援呀!说的太文言了!呵!简单的说,就是将你的系统数据『备份』到其它的地方去, 例如说我的机器在台南,但是我还有另一部机器在高雄老家,这样的话,我可以将台南机器上面重要的数据都给他定期的自动的 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 用来当作备份之用吧(这也是目前鸟哥常用的方法之一!)底下我们来看一看一些常见的装置代号!
但是刚刚完成的系统(还没有对外 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 常常配合另一颗完全用来备份的硬盘或者是磁带机才好!至于完整的指令用法请到『压缩工具』 那一篇去查看啰!备份与反备份分别可以这样使用:
这几个工具都蛮好用的!尤其鸟哥特喜欢 tar 的用途!因为他相当的适合于另一颗硬盘的备份呢! 当然,如果您有完全相同的两颗硬盘时,用 dd 会是一个很不错的完整备份的方案喔! ^_^
· 部分备份的基础工具:
至于部分备份方面,我们就以简单的 tar 来说明一下吧!!假如我们需要备份的数据是每天的 MySQL 数据库时,由于我想让每天的数据都存成不同的档案,而要分别档案的新旧又以日期来分别最简单了! 所以我就可以这样做:
这样就能将 mysql 的数据库压缩备份至 mysql.2005-10-25.tgz 这个档案,并且日期会每天都不一样!呵呵!这样一来如果系统的数据库出了问题,就可以马上的回复了! 而且还有很多的档案可供回复呢!不错吧!此外,也可以利用类似上面的第二个范例的例子,将最新的资料备份就好,其它的资料则不予以更动!嘿嘿!提供了更完善的方式呢!
大致的工具就是这样了!此外,由于备份是长长久久的事业,所以我们需要的是『系统可以自己动作』的方式, 您说是吧!所以呢,这个时候就需要使用到 cron 的服务啦!还记得我们先前讲过的 例行性命令的建立 吗?赶快再去复习一下呀! 鸟哥的备份策略 其实鸟哥在备份的策略相当的简单,我并没有想要将整个系统完全的备份下来,因为太耗时间了! 而且就我的立场而言,似乎也没有这个必要,所以通常鸟哥只备份较为重要的档案而已!不过,由于我需要备份 /home 与网页数据,如果天天都备份,我想,系统迟早会受不了 (因为这两个部分就已经快要占去 1GB 的硬盘空间...) ,所以鸟哥就将我的备份分为两大部分,一个是每周备份,一个则是每日备份,备份的时间点都选择在凌晨的 3~4 点左右!这个时候我就写了两个简单的 scripts ,分别来储存我的数据。所以针对鸟哥的网站 (简称『鸟站』哈哈!)我的备份策略是这样的:
当然啰,上面的 script 是适合鸟哥的状态,所以,你要使用的话,还得要修修改改呦! 不要照着使用,会有问题的!另外,上面的 script 当中,我已经加上了远程储存的功能了, 那就是 #3.2 的 FTP 部分,藉由这个简单的动作,就可以将我这一部机器上面的数据, 整个传送到 192.168.1.100 那部机器上面,够简单吧! ^_^
每日备份资料 scripts:
再来,继续提供一下每日备份的数据:
好啦!这样一来每天的 MySQL 数据库就可以自动的被记录在 /disk2/backup/daily 里头啦!而且还是文件名称会自动的改变的呦!呵呵!我很喜欢!OK!再来就是开始让系统自己跑啦! 怎么跑?!就是 /etc/crontab 呀!提供一下我的相关设定呦!
这样系统就会自动的在每天的 2:30 进行 MySQL 的备份,而在每个星期日的 3:30 进行重要档案的备份!呵呵!您说,是不是很容易呢!?但是请千万记得呦!还要将 /disk2 当中的资料 copy 出来才行耶!否则整部系统死掉的时候....那可不是闹着玩的!
远程备援系统:
除此之外,那么还有没有保险的方式呢?呵呵!刚刚前面不是提过远程备援吗? 最简单的说法就是『使用因特网的方法,将你的数据送到远程主机去备份!』那样就 OK 啦!那么我们怎么使用远程备份的方法呢?那就用最简易的 FTP 吧!详细的资料,其实上面我们就已经提到的,您可以自行参考一下。这里仅提供一个简单的说明:
好了!大家赶紧写一个适合自己的备份 script 来进行备份的行为吧!重要重要喔!如果不想要使用 FTP 而想要利用其它方式的话,或许可以 man rsync 这个指令来达成喔!
如何还原系统的考虑
既然有备份,自然就得要考虑到还原啰~一般来说,我们针对备份与还原的考虑通常有这两种:
那如果仅是一般个体户呢?例如鸟哥的网站,就是这样的代表。 那么我当然不必要选择完整备份了,因为即使我完整备份了,但是备份之初的数据如果就已经被入侵,那我还原一个被入侵的数据有什么好处?加上目前的硬件等级都很高, 网络频宽都很够的前提之下,重新安装最新版 Linux 与更新到最新的套件,其实速度上是很快的。如此一来,反正系统如果挂了,刚好整个 distribution 一起进行升级~似乎也不错啊~ ^_^
总之,备份工具是死的,使用的您是活的,您在使用 tar, cpio, dd 等工具时, 必须要优先考虑您所想要达到的『目的』是什么,再根据这个目的,以及您所可以利用的『资源与经费』,选择适当的备份方式与媒体,这样就足够啦!大家加油啦! ^_^ · 关于储存架构的考虑 在这个章节当中,我们提到的大概都是属于中小企业环境所使用到的备份动作, 如果您所在的公司是大型企业的环境,那么不妨考虑外接式,或者是拥有完整备份储存网络的架构,例如 SAN (Storage Area Network) 及 NAS (Network Attached Storage) 设备, 这样才能够更快速与高效率的储存与备份啊!^_^
不过,这两种架构当中,都需要比较高价位的光纤信道,或者是新技术的 iSCSI 协议的需求, 鸟哥还无缘碰到。除了 iSCSI 有接触到一部机器之外, SAN 还真是没有碰过..... 这两部分的企业应用,就有待您自行与相关的厂商接触了解啰! ^_^
1. 谁需要备份数据
2. 哪些 Linux 数据具有备份的意义
3. 选择的备份装置
4. 备份的种类: 完整备份(full backup), 部分备份(Implement backup)
5. 备份的工具选择: tar, dd, cpio...
6. VBird 的备份策略与 scripts:
6.1 系统备份
6.2 每日备份
6.3 远程备份 谁需要备份数据 前面的章节我们提到了相当多的 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 硬盘三颗,回来之后经过一个星期,嘿嘿!挂掉了两颗!其中一颗是有坏轨,另外一颗是『完全死掉』,拿去公司要求修理,结果呢?嗯!店家直接拿了一棵新的给我,害我吓一跳,店家的工程师说 『唉呀!目前这个牌子的良率太差了,所以代理商为了怕麻烦,都会直接拿新的替换给我们啦!』要晓得的是,当初那一颗完全死掉的硬盘,是我用来备份我的主机数据的.... 好在当时我将备份的资料放在三四个地方,还好....
所以啰!由于计算机 ( 尤其是目前的计算机,操作频率太高、硬件良率太差、使用者操作习惯不良、 『某些』操作系统的当机率太高.... ) 的稳定性较差,所以啰!备份的工作就越来越重要了!
那么一般我们在备份时考虑的因素有哪些呢?
- 备份哪些档案:
例如在账号管理那一篇当中,我们知道最起码主机的账号信息在 /etc/* 及 /home/* 等等档案都是重要的! - 选择什么备份的媒介:
是可擦写光盘、另一棵硬盘、同一颗硬盘的不同 partition、还是使用网络备援系统? 哪一种的速度最快,最便宜,可将数据保存最久? - 考虑备份的方式:
是完全备份(类似 ghost)还是部分备份即可? - 备份的频率:
例如 MySQL 数据库是否天天备份、若完全备份,需要多久进行一次? - 备份使用的工具为何:
是 tar 还是 cpio 等等?
至于 /home 底下是每个人的家目录,自然也需要来备份一番!再来,由于使用者会有邮件吧!所以呢,这个 /var/spool/mail 内容也需要备份呦!另外,由于如果您曾经自行更动过核心,那么 /boot 里头的信息也就很重要啰!所以啰,这方面的数据您必须要备份的档案为:
- /etc/ 整个目录
- /home 整个目录
- /var/spool/mail
- /boot
- /root
- 如果您自行安装过其它的套件,那么 /usr/local/ 或 /opt 也最好备份一下!
- 数据设定档案:
/etc/ 整个目录 /usr/local/ 整个目录 - 系统 www + MySQL:
WWW 资料:/var/www 整个目录或 /srv/www 整个目录,及系统的使用者家目录
MySQL : /var/lib/mysql 整个目录 - 其它你在 Linux 主机上面提供的数据库数据文件!
- /boot
- /etc
- /home
- /root
- /usr/local(或者是 /opt 及 /srv 等)
- /var(注:这个目录当中有些暂存目录则可以不备份!)
- /dev :这个随便你要不要备份
- /proc:这个真的不需要备份啦!
- /mnt :根据版本不同,有的是 /media 如果你没有在这个目录内放置你自己系统的东西,也不需要备份
- /tmp :干嘛存暂存档!不需要备份!
这个时候,所谓的『远程备援系统』就显的相当的重要了! 什么是远程备援呀!说的太文言了!呵!简单的说,就是将你的系统数据『备份』到其它的地方去, 例如说我的机器在台南,但是我还有另一部机器在高雄老家,这样的话,我可以将台南机器上面重要的数据都给他定期的自动的 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]
但是刚刚完成的系统(还没有对外 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 当中去! |
[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 中! |
大致的工具就是这样了!此外,由于备份是长长久久的事业,所以我们需要的是『系统可以自己动作』的方式, 您说是吧!所以呢,这个时候就需要使用到 cron 的服务啦!还记得我们先前讲过的 例行性命令的建立 吗?赶快再去复习一下呀! 鸟哥的备份策略 其实鸟哥在备份的策略相当的简单,我并没有想要将整个系统完全的备份下来,因为太耗时间了! 而且就我的立场而言,似乎也没有这个必要,所以通常鸟哥只备份较为重要的档案而已!不过,由于我需要备份 /home 与网页数据,如果天天都备份,我想,系统迟早会受不了 (因为这两个部分就已经快要占去 1GB 的硬盘空间...) ,所以鸟哥就将我的备份分为两大部分,一个是每周备份,一个则是每日备份,备份的时间点都选择在凌晨的 3~4 点左右!这个时候我就写了两个简单的 scripts ,分别来储存我的数据。所以针对鸟哥的网站 (简称『鸟站』哈哈!)我的备份策略是这样的:
- 使用一颗加挂的硬盘来进行备份的功能,挂在 /disk2 当中;
- 每周进行的备份有 /home, /var, /etc, /boot, /usr/local 等目录;
- 每日进行的目前仅有 MySQL 数据库;
- 利用 /etc/crontab 来自动提供备份的功能;
- 在每周或每月定期的将数据分别 (a)烧录到光盘上面 (b)使用网络传输到另一部机器上面。
# 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 啊 [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 |
[root@linux ~]# vi /etc/crontab # 加入这两行即可 ( 请注意您的档案目录!不要照抄呦! ) # backup scripts 30 3 * * 0 root /disk2/backup/backupweekly.sh 30 2 * * * root /disk2/backup/backupdaily.sh |
Tips: 有些时候,您在进行备份时,被备份的档案可能同时间被其它的网络服务所修改喔! 举例来说,当您备份 MySQL 数据库时,刚好有人利用您的数据库发表文章,此时, 可能会发生一些错误的讯息。要避免这类的问题时, 可以在备份前,将该服务先关掉,备份完成后,再启动该服务即可! 感谢网页 duncanlo 提供这个方法! |
- 备份的资料最好『越精简越好』;
- 远程主机必需提供 FTP 服务(当然,其它的服务例如 sftp 也是可以的,只要能够将数据传上去就好了!)
- 远程主机必需要可以符合你上传的属性设定,例如 quota 容量、储存目录的属性等等!
#!/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 |
- 我的主机需要在『很短的时间内』立刻就能够还原上线;
- 我的主机希望能够在查询到挂点的原因后,才正式上线;
那如果仅是一般个体户呢?例如鸟哥的网站,就是这样的代表。 那么我当然不必要选择完整备份了,因为即使我完整备份了,但是备份之初的数据如果就已经被入侵,那我还原一个被入侵的数据有什么好处?加上目前的硬件等级都很高, 网络频宽都很够的前提之下,重新安装最新版 Linux 与更新到最新的套件,其实速度上是很快的。如此一来,反正系统如果挂了,刚好整个 distribution 一起进行升级~似乎也不错啊~ ^_^
总之,备份工具是死的,使用的您是活的,您在使用 tar, cpio, dd 等工具时, 必须要优先考虑您所想要达到的『目的』是什么,再根据这个目的,以及您所可以利用的『资源与经费』,选择适当的备份方式与媒体,这样就足够啦!大家加油啦! ^_^ · 关于储存架构的考虑 在这个章节当中,我们提到的大概都是属于中小企业环境所使用到的备份动作, 如果您所在的公司是大型企业的环境,那么不妨考虑外接式,或者是拥有完整备份储存网络的架构,例如 SAN (Storage Area Network) 及 NAS (Network Attached Storage) 设备, 这样才能够更快速与高效率的储存与备份啊!^_^
不过,这两种架构当中,都需要比较高价位的光纤信道,或者是新技术的 iSCSI 协议的需求, 鸟哥还无缘碰到。除了 iSCSI 有接触到一部机器之外, SAN 还真是没有碰过..... 这两部分的企业应用,就有待您自行与相关的厂商接触了解啰! ^_^
相关阅读 更多 +