MD设备主要包含了LINUX内核的软RAID实现。本文分析都是基于2.6.32,该版本实现了RAID0,RAID1,RAID10,RAID4,RAID5,RAID6。
MD设备既可被编译为模块,也可以被编进内核。由于模块的入口比较清晰,因此以模块的方式来分析MD的代码。
一、很明显,模块的入口是md_init,主要做了以下几件事:
1)调用register_blkdev,这个接口已经逐步弃用。目前还调用该函数是基于习惯,完成2件事:
1.获得设备号
2.在/proc/devices下创建目录项。
调用完毕后,可以通过cat /proc/devices查看相关设备了。
2)调用blk_register_region,建立MD块设备的映射域,在这之中将md_probe注册为回调函数。md_probe非常重要,相当于MD设备的start函数。
3)调用register_reboot_notifier,利用内核的通知机制,异步接收重起的事件
4)调用md_geninit,创建/proc/mdstat,操作表为md_seq_fops
阅读(1150) | 评论(0) | 转发(0) |