这些文章已经写了好几年了,可能已经过时了。在MSN space和QQzone几经辗转之后,我想也许这些技术文章还是放在搞技术的博客中更能帮助人。于是做了一个艰难的决定,把这些文章一篇篇搬过来!绝对是原创的。
说完启动再来看它的结束。同样是在md_check_recovery中,但我们会发现处理结束的代码处于处理启动的代码之前。其中的逻辑其实也很好理解,无非就是先处理已经启动的线程,但是由于我在阅读这部分代码时花了点时间,所以多罗嗦几句。实际上,光是md_check_recovery中的代码实际上并没有完全结束resync和recovery,只是结束了syncd,从这段代码注释中的“double check”就可以看出来。我们还是先看看syncd是如何结束的,再看resync和recovery如何停止。结束syncd很简单,既然启动它用的是md_register_thread,那结束它用md_unregister_thread就行。每次结束syncd都要做一次检查,就是检查是否需要将spare激活。这是针对recovery的动作,所谓激活spare,就是调用各RAID中的spare_active函数来将完成recovery的spare转换为正式与其他设备同步的设备,它内部是怎么工作可以参考RAID-5。当然,