分类: LINUX
2009-08-14 09:15:20
下面几篇文章是对2.6.21的RAID1代码进行走读和分析的记录。
Run函数在MD设备启动时调用,完成如下工作:
1. 申请raid1私有数据区conf。私有数据区中还申请了一个mempool,为磁阵读写缓存使用。
2. 初始化私有数据区,包括:
a) 使用MD信息对磁阵中的磁盘rdev赋值
b) 关联MD和raid1私有数据区
c) 私有数据区的锁和队列的初始化
3. 检查磁阵中磁盘状态,如果有磁盘不存在或者磁盘和磁阵中其他磁盘不处于一致状态(In_syn),则设置磁阵需要全部同步,处于降级状态。如果全部磁盘都不正常,则启动失败。如果仅一个盘可以正常工作,则设置标志禁止同步操作。
4. 找到第一个可用的磁盘,作为读均衡算法的起点。因为RAID1是多个磁盘组成镜像,每个磁盘的内容是一样的,为提高读效率(以及提高磁盘使用寿命?),可以将读操作分配在不同的磁盘上,读均衡算法进行这个分配。而设置了WriteMost的磁盘是不参与读均衡算法的。
5. 初始化MD结构中的一些信息,包括:
a) 注册守护进程RAID1
b) 注册unplug回调
c) 注册拥塞处理函数