当试图将一个相当大的文件夹(450G)备份到仅作为备份目标rdiff-backup (版本1.2.8 – 最后标记为stable )的2TB驱动器时,会导致内核崩溃。
系统:
Linux giorgio 3.2.0-4-amd64 #1 SMP Debian 3.2.51-1 x86_64 GNU/Linux
磁盘:2个1TB磁盘,软件镜像RAID模式,1个2TB磁盘,仅用于备份。
我有一个怀疑:服务器上的内存是2G内存+ 2G交换= 4G。 有大小达16G的文件。 在某些时候, rdiff-backup可能会将整个文件加载到内存中吗?
在任何情况下,内核恐慌都不应该发生(因为rdiff进程被杀害了,所以内存应该再次可用?),所以我想我的问题有两个部分,一个是关于我的怀疑,二是关于内核恐慌。
顺便说一句,最近恐慌开始了,相当多的备份已经成功了 – 完整的和渐进的 – 那些大的GB文件已经在那里。 所以我想这是新的Debian内核的错误,而不是rdiff-backup的?
日志文件部分在发生恐慌的时候http://pastebin.com/e9a5fQdh
最后一件事情在屏幕上: 
编辑/更新:我只是尝试创build一个20GB的交换文件(从/ dev /零dd)和服务器再次closures,没有反应ping 。
从查看日志:看起来内核已经杀死了一些进程 – 包括我怀疑已经造成这一切的进程(rdiff-backup) – 但是却说“用完了可以进行的进程”。 看来杀死进程并没有释放内存?
它没有杀死rdiff-backup,它应该有,但是它的oom_score_adj是-1000。
这是由sshd中的一个错误引起的。 这个错误是固定的,但是直到下一个版本是openssh 6.5才能使用。
如果重新加载它,sshd将无法将其创build的新shell的oom_score_adj设置为0,从而导致您通过SSH产生的所有subprocess(因此您的bash shell和任何创build的subprocess)拥有-1000个oom_score_adj ,记忆没有凶手杀死他们。
最快的方法来解决这个问题(假设7567是你的情况下sshd的pid): –
echo 0 >/proc/7567/oom_adj_score 不要重新加载sshd,重新启动它,直到修复到位。 (openssh 6.5应该有)
这个bug报告并且在这里修复。 https://bugzilla.mindrot.org/show_bug.cgi?id=2156