几个小时前,Ubuntu 12.04 系统崩溃了。我们检查了所有日志文件,没有发现任何可疑原因。
最后记录的是一些 dovecot 活动。没有内核崩溃消息。什么都没有。
这是一台新服务器(新硬件),我们正在生产前进行测试。由于它是新硬盘,我怀疑问题可能是由某些硬件故障引起的。
我们已经运行了 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……但也包括用户帐户(非 root)在 CRON 中运行的 php 脚本输出的一些日志。
那么,您知道为什么崩溃期间所有打开的文件都写入了这些字符吗?这非常糟糕,因为崩溃损坏了许多文件(我们甚至不知道还有哪些文件可能受到影响)。我们怀疑崩溃时所有打开的文件(可能处于写入模式)都插入了所有这些符号。这是为什么呢?
顺便说一句 [希望有帮助],系统在崩溃后自动重启,但 Apache 没有启动。/var/apache2/*log 中没有记录 Apache 为什么没有启动。运行“service apache2 start”后,它启动正常。此外,我们手动重启了机器,Apache 也在重启时启动。但它在崩溃后没有启动,也没有报告任何错误。
多谢你们!
答案1
这些^@
几乎肯定是二进制零。也就是说,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 ................
写入操作已发送给内核,但内容从未刷新到磁盘。因此,文件已扩展,以备写入,因此文件无意中变得稀疏。
如果你没有使用日志文件系统,那么这种情况尤其可能发生,因为日志应该如果写入操作没有正确完成(因为崩溃导致写入操作没有正确完成),则会导致写入操作回滚。