几个小时前,我们在Ubuntu 12.04上遇到系统崩溃.我们检查了所有日志文件,并没有任何可疑的责任.
记录的最后一些东西是一些鸽舍活动.没有内核恐慌消息.没有.
这是我们在生产之前测试的新服务器(新硬件).而且因为它很难,我怀疑问题可能是由于一些有缺陷的硬件造成的.
我们已经运行了memtester而没有检测到任何问题.我很乐意听到其他硬件测试工具(机器有SSD).
无论如何,我想问你的是另一个.奇怪的是,在崩溃发生的每一个打开的文件中,我们发现下一个符号序列被写入其中:“@ ^ @ ^ @ ^ @ ^ @ ^ @ ^ @ …”.
例如,在我们得到的syslog日志文件中:
Apr 16 15:53:56 odyssey dovecot: pop3-login: Aborted login (auth Failed,1 attempts): user=<info>,method=PLAIN,rip=46.29.255.73,lip=5.9.58.177 ^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^ [these continues for about 1000 chars...] ^@^@^@^@Apr 16 15:55:12 odyssey kernel: imklog 5.8.6,log source = /proc/kmsg started.
我们在所有打开的文件中都有这些符号.这些包括:syslog,mail.log,kern.log,…
但也有一些由PHP脚本输出的日志在用户帐户(非root用户)的CRON中运行.
那么,任何想法为什么所有打开的文件都在崩溃期间写入了这些字符?这非常糟糕,因为崩溃损坏了许多文件(我们甚至不知道哪些其他文件可能会受到影响).我们怀疑崩溃时所有打开的文件(在写入模式下)都插入了所有这些符号.这是为什么?
BTW [如果它有帮助],系统在崩溃后自动重启,但Apache没有启动. / var / apache2 / * log中没有跟踪为什么apache没有启动的痕迹.运行“service apache2 start”后,它开始没有问题.此外,我们手动重启了机器,Apache也在重启时启动.但它没有在崩溃后开始,也没有报告错误.
多谢你们!
解决方法
那些^ @几乎肯定是二进制零.也就是说,xxd corruptfile | tail -3可能会发出如下内容:
#######0: 0000 0000 0000 0000 0000 0000 0000 0000 ................ #######0: 0000 0000 0000 0000 0000 0000 0000 0000 ................ #######0: 0000 0000 0000 0000 0000 0000 0000 0000 ................
写信已通知内核,但内容从未刷新到磁盘.因此,在预期写入时文件被扩展,因此文件无意中稀疏.
如果您没有使用日记文件系统,这尤其可能,因为日志应该导致写入在未正确完成时回滚(因为它不是由于崩溃).