20120325

14条原则 (3) 一定要备份服务器

14条原则 (3) 一定要备份服务器

这条原则的全文不是如标题所示。它的全文是:一定要备份服务器,一定要备份
服务器,一定要备份服务器,然后还要验证备份正确与否。

其他的原则我都记不清全文,唯独这一条例外。太多故事反复验证这一条的重要
性。

我的博士导师牛老师。一次我提到数据很重要,而硬盘很贵。他老人家教导我,
数据比硬盘宝贵。他有很多块硬盘,有些数据备份了不止一份。他的学生发表论
文的时候,要求把凡与此论文相关的实验数据全刻一张光盘上,然后他还要把这
些数据备份到硬盘里。有一些文献,在不同的项目或领域中都需要用到,他不是
做快捷方式键接过去,而是再复制一份。

他说:数据比硬盘宝贵。所以,我从那以后更坚定地实施版本控制。当时还没有
git和cvs,我把每一版本起个这样的名字,xxx.20050315.221034.zip,全保存起
来。

尽管如此,我还是丢过东西。丢东西有时仅仅是没有找到,而我那次比这个严
重,最后也没有找到。因为我备份了错误的东西。一段时间,因为要频繁地实
验,与电化学设备连接在线调试程序,而连设备的那台机器上不能安装编译环
境,所以我也备份可执行程序。结果,某个可执行程序终于验证是正确的了,但
是我却不知道它对应哪个源代码版本。

我试图编译所有的源代码版本,把编译结果与验证了的版本进行二进制比对,这
时才深刻地直观感受,VC每一次编译的结果都是打了时间标记的,所以全都不一
样,每次编译都不一样。

只好重新编译,重复所有的验证实验,直到找到某个源代码的编译结果与要求完
全相同。也即,把那些实验重做了N次。时间,青春,我感叹。

所以,在程序设计中,应该备份且只备份源代码,因为二进制是可以随时编译出
来的。丢失二进制,需要花费的时间不过是编译的时间;如果多一个二进制版
本,就要回归测试了。

在备份代码比较大的时候,备份不利丢些东西还有情可缘。比如鲁迅先生 (还是
他的弟子?) 就遗憾地提到他因为搬家遗失了重要的书信、书籍。我当时奇怪
过,那么重要的东西为什么不随身携带,贴心口窝放好?后来才知道,重要的东
西太多了,心口窝那块地方不太够。而那个时代,备份挺困难的,抄书费时间,
想留存手迹却没有数码相机。

但是时代不同了,现在备份容易多了。带来的一个副作用是,大家以为容易的东
西就不值钱了。

张老师有一次中毒,硬盘里的文件夹全变成隐藏的那种病毒。她说,"我这硬盘里
的东西真的很重要。"我说,"不重要。不然你怎么会把硬盘插在别人的机器上呢?"

"可是,我要给别人拷东西啊。"

那就只能让他把硬盘插在你的机器上,而且,还要事先关闭U盘自动播放,还要不
使用资源管理器,而使用TotalCommander之类的文件管理器。不要相信任何人告
诉你说他的机器没有毒。因为你相信他的同时意味着两件事情,你相信他的人品
不会有意骗你,还相信了他的技术。详见此系列后文"永远不要相信你的用户"。

就用一次硬盘没问题吧?其实病毒感染跟狂犬病差不多,感染率有多高不好说,
可能还挺低,但是致死率几乎百分之百。有位仁兄说过,"侥幸是悲催之母",回
答的就是这个问题。

有个著名的墨菲法则,说的也是这个。它说,如果蛋糕掉到地上,一定是有奶油
那面朝下。为了避免这种情况,计算机的电源插座设计成D型,反了的话,就插不
进去;计算机的显示器、硬盘、PS/2口、USB口统统设计成了这种形式,反了,就
插不过去。因为如果设计成反了也能插进去,那就一定会有人这么干。Intel
586还是486就能转90度插进去,效果是烧掉。我烧过一个,非常烫手,还没等反
应出来就直接扔出去了。

凡可能出错的,必然出错。我们所应该做的,不是做好准备承受出错的后果,而
避免出错。备份就是避免出错的一种有效手段。

我有师妹曾经希望我帮助她恢复NTFS中的数据,那是她孩子的照片。我当时没有
找到解决之道。这些数据的宝贵之处在于,她的孩子不会再来一次这段年龄,那
种微笑和大哭永远不会有机会记录。

程序员的代码丢了而没有备份,他对老板说,我的代码被猫吃了。一位出租车司
机师傅告诉我,他的手机丢了,通信录也就没了,所有电话一个也没记住。这些
只是小事。图书馆借书数据如果坏了而没有备份,就意味着同学们还书就要靠自
觉了,尤其是大四学生马上就要毕业的时候。教务处选课系统的数据如果没有备
份,同学们就只好跑上来重选,花上一两个小时。这些事情都发生过。有的数据
后来找回来了,有的,就没有那么幸运。

一定要备份服务器,一定要备份服务器,一定要备份服务器,然后还要验证备份
正确与否。备份的介质多种多样,取决于你希望留存多久,数据量有多大。我们
用磁带增量备份,用光盘,用移动硬盘,用U盘,用网盘。

有这样几条原则。1.多次备份,不同的介质。光盘是会老化的,有一天可能就读
不出来了,或者没有光驱可用;2.除非写保护,否则不允许读。移动硬盘或U盘,
如果没有写保护,除非只在你的机器上用,而且你是个小心谨慎的人,否则感染
病毒以后跟你把所有数据都写到/dev/null上没有什么一个样,纯粹是浪费感
情;3.本地,你自己随时可以访问。网盘,除非有对商家的惩罚条款,否则你怎
么能指望他像你一样重视你的数据。

硬盘的价格在数据面前,不值一提;硬盘的投入在人的素质面前也是一样。中日
甲午海战的时候,双方用的舰船据说没有时代的差别,而我们又听说中国海军的
士兵会在炮管上晾被子。

你就是买了世界上最贵的服务器又怎么样,如果没有会使用它的技术人员。那不
过就是金属和塑料的组合。没有了人的眼睛,天空的颜色不过就是一种波长,又
有何美感可言。可叹很多领导仍然停留在以设备指标的年代,虽然,他们比把机
器都装库房里怕用坏了的那些要好上很多。不过,他们似乎并不太明白,没有
AK47的战士是低杀伤力的战士,没有战士的AK47却一点杀伤力也没有。

同一把枪,甚至不同级别的枪,不同的人使用,区别甚大。相信打CS的同学对此
都深有体会。

备份的要考虑的因素:丢失数据损失的时间 (恢复,下载,重写) 和机会成本,
保存的代价。所以,在写东西的时候,我每个段落保存一次,有时备份当天的所
有文档。因为我比较脆弱,不能承受一代段落几十个字的损失,虽然我打字并不
慢。

备份应该有多可靠?参见攀岩。保护措施,要一直持续地做,而且要一直可靠。
备份的系统要跟正在运行的系统一样可靠,甚至更可靠,而且一天也不能停止备
份。备份无效而却在它的身上托付终身,比没有备份可危险。

顺便说一句,"备份"的另一个含义是"后援"。

古龙讲过一个故事,贯彻了极佳的备份原则。在某人的床下有个竖直的洞,洞下
是一条水道,上面有条船,船里24X7有个人在等着时刻开船。等这个家伙万一哪
一天遇刺的时候从这里逃跑。

因为这个备份系统代价是生命,所以它如此可靠一直可靠。我们备份失败的代
价,其实也是生命。备份失败的代价是时间,恢复数据的时间。而时间,正是生
命中最不可恢复的部分,而且不可备份。

No comments: