Linux|系统管理|WEB开发

关注Linux,系统管理,WEB开发以及开源世界

这两天折腾的事情

| Comments

Update: 已经补充完了,不容易!

这两天没有发帖子,因为处理一个紧急的事情去了。
up的一个朋友的服务器崩溃了,想让我看看,数据是否有恢复的可能。

于是登录去看了看,系统已经重新安装了,原来的根分区dd了出来16G的样子,mount发现是ext2的文件系统,AS4 updater 2的默认文件系统会是ext2吗?

还好至少mount上来,可惜什么都没有,要从这个分区找数据,可能性不大。

考虑服务器上主要是跑web和mail,用户催得比较紧,因此先把服务搭建起来,而且管理员还说有一些备份。
但是痛苦的是,网管刚接收这台服务器,他对这台服务器的了解和我的了解一样—都是空白。而了解这台机器的人早走了。 因此我拿不到任何有价值的东西,包括网站的架构,邮件的架构。
于是只能从目前还能找得到的数据去猜测当时的架构了。
网站比较好说,从httpd.conf文件可以知道大概。这个就放到后面去解决。
先解决邮件,首先我能看到的是用户采用了squirremail程序作为邮件的web界面。 squirrelmail我以前了解过一些,他是目前很多linux发行版本自带的一个webmail。可扩展性非常强,而且链接邮件的方式不是采用通常的pop3,而是IMAP。
从采用IMAP的角度我想他应该采取了cyrus-imap之类的应用库,这也是系统自带的,而cyrus-imap一般都是配合cyrus-sasl来做的,因此我猜测估计会有cyrus-sasl的参与。
同时我还看到有postfixadmin程序,因此估计MTA采用的是postfix而不是sendmail。 综合上面的考虑,我估计原来的邮件服务器的架构是:

+---------------------------------------------------+|                            ||  25/25    25/25     110/993  143/995    80/443    ||
Incoming Outgoing     POP3     IMAP    WEB-MAIL   ||    
/       /         /       /        /      
||    ||       ||         ||       ||        ||      ||    
/       /         /       /        /      |+-------------------+---------------+---------------+|    
    Postfix        |               | squirremail   ||                   |               +---------------+|                  
     |      Cyrus-IMAP               ||       +-----------+-------------------------------+|       
     |                  Cyrus-SASL               ||       +-------------------------------------------+|       |                  saslauthd                ||       +-------------------------------------------+|       
     |                     PAM     |+-------+-------------------------------------------+|                      MySQL                        |+---------------------------------------------------+

这是我目前折腾的最复杂的邮件服务器架构了。以前弄过一些,不过都没使用mysql来做认证,而是采用cyrus-sasl自己的数据库sasldb2。那就要简单很多。 不管怎么样,先从mysql这层恢复,先前的数据库结构就无法得知了,没有任何备份,后来从一个角落里翻除了一个.sql文件,打开一看,嗯,是针对mysql的,有数据库,有表,还有一些数据,不过是05年12月份的,但是至少数据库结构应该差不多了,不过随也不能保证1一你的时间没有修改过,而且问题是没有人告诉你这个sql文件就是当时的一个备份,为了确认,我又去找postfixadmin程序的说明和对数据库的操作代码,结果在docs目录下看到一个MYSQL_DATABASE.TXT的问题,里面描述了如何使用mysql做为用户的存储介质,其描述的数据库名称,表名称和那个sql文件一致,这样看来,当时很有可能就是按照这个文档来做的,这也是死马当活马医了,先导入再说。

导入过期数据,配置postfixamdin,访问postfixadmin正常,给管理员看,他确认域和导入的帐户都没有问题,那就是他了。ok,web界面的管理配置搞定了。 接下来就是pam认证的问题,以前没有听说过mysql是否支持pam认证或者说是否有这类的插件,但是找遍了mysql的官方站点,一无所获,googling一下,找到了一个家伙写的插件。这样一来,我原来构造的架构有了变化,需要加上一层,变成这样了。

+---------------------------------------------------+|                                                   ||  25/25    25/25     110/993  143/995    80/443    || Incoming Outgoing     POP3     IMAP    WEB-MAIL   ||    /       /         /       /        /      ||    ||       ||         ||       ||        ||      ||    /       /         /       /        /      |+-------------------+---------------+---------------+|    Postfix        |               | squirrelmail  ||                   |               +---------------+|                   |      Cyrus-IMAP               ||       +-----------+-------------------------------+|       |                  Cyrus-SASL               ||       +-------------------------------------------+|       |                  saslauthd                ||       +-------------------------------------------+|       |                     PAM                   ||       +-------------------------------------------+|       |                  pam_mysql                |+-------+-------------------------------------------+|                      MySQL                        |+---------------------------------------------------+

于是confgiure && make && make install。 结果怎么折腾,认证死活通不过,后来找了一些文档,说cyrus-sasl默认并不支持采用密文保存的密码,如果需要,那么需要打对应的补丁,那也就意味着需要重新编译。 那还能怎样,折腾吧,于是一番configure,make,make install后,继续测试,发现还是通不过,我怀疑是不是我的配置有问题,于是将mysql先替换成sasldb2,也就是cyrus-sasl自己的数据库,添加了测试帐户,测试通过,嘿,这就不得不让我怀疑是pam插件的问题的,也就是pam_mysql的问题。 于是开始折腾pam_mysql,N个小时后,无果,于是打算放弃。

接下来就不知道怎么办了,漫无目的的敲着cd .. && ls命令,突然发现一个目录,里面有一些于邮件相关的软件源代码,看时间,应该是当时配置邮件服务器留下的,相比我的架构而言有一些不同

1)没有pam_mysql这个目录 2)多了courier_authlib,postfix,maildrop,courier_imap等程序的源代码。 这些都是这次配置所必须的吗?

又开始googling了,还真找到了这样的方案,结构大致如下:

    +--------------------------------------------------------------+|                                                              ||  25/25    25/25                110/993  143/995    80/443    || Incoming Outgoing                POP3     IMAP    WEB-MAIL   ||    /       /                    /       /        /      ||    ||       ||                    ||       ||        ||      ||    /       /                    /       /        /      |+---------------------------------+----------------+-----------+|                  Postfix        |                |squirremail||              +------------------+                +-----------+|              |    Cyrus-SASL    |        Courier-IMAP        |+----------+   +------------------+--------------+             || MailDrop |   |authdaemond.mysql |(authmysqlrc) |             |+----------+---+------------------+--------------+-------------+| MailDir/ |                   MySQL             |   MailDir/  |+----------+-------------------------------------+-------------+

这个方案也够复杂,主要是cyrus-sasl目前不能直接支持mysql(据说2.1.22版本支持,但是我编译后,还是够呛)。 第3天,用户那里也找来的一个简单的配置文档,据说是当时的配置笔记,但无法肯定。 管他呢,先照着做吧。 又重新开始折腾,又经过N个小时编译,配置,调试。收邮件没有问题了,本地发邮件也没有问题,但是在smtp认证上,无论怎么按照配置文档来配置均是认证失败。

后来用户要得级,因此就没有再继续深入了,无smtp认证是可以发邮件的。

接下来就是网站了,这个单纯一点,找不到数据库,那就是无米之炊,没辙了。

而up也在努力的尝试修复那个dd出来的大于16G的文件。得出的结论是:能看到一些文件(使用strings),但是fsck修复总是会中断,最长的一次达30分钟。从dumpe2fs的信息来看,用户是在挂载的情况下执行的fsck,甚至有可能是系统还在提供服务的情况下做的fsck,这无疑是在伤口上撒盐的做法。 如果用户当时发现了这个问题,立刻拔掉网线,或者立刻讲/文件系统重新挂载为只读,然后找人修复,或许有效。 而管理员偏偏对linux不太了解,也没有及时备份,才导致也许能挽救的信息最终丢失了。

有次可以得到两点启示:

1)备份是必须,虽然我们不知道备份是否有用,是否能恢复。 2)正确和拯救方案也是重要的,特别是在执行者对次并不了解的情况的下,这种情况下,执行者要做的事情就是”什么也别做“,应该找一个有一定经验的或者有类似经历的人,甚至是专业的技术支持公司来做这个事情,这样才能尽可能降低故障带来的损失!

这不由得让我想起的我原来的论坛,一直一来都有备份,但都是本地备份,而且也是找别人借的,结果突然某天,服务器无法访问,持续时间长达1一个月,等再能访问服务器的时候,早已经面目全非了。 所以备份不仅仅是本地,更应该是远程。所以现在服务器的上的数据都是每天本地备份一次,远程备份一次。

Comments