【Linux应用】存储技术Multi-Disk(MD)模块

1. 简介

RAID技术是利用多个块设备来模拟一个单个的块设备。Linux内核在多个块设备的基础上,注册了一个特殊的块设备,称为Multi-Disk(MD)设备,这个MD设备形成了一个逻辑层,支持不同级别的RAID技术。

2.分层架构

MD分层架构
Linux内核中RAID功能的实现属于MD模块。MD模块是一个虚拟块设备层,它属于块I/O子系统中的块设备驱动层,架构于物理块设备层,比如SCSI磁盘驱动之上。MD模块分为两层:
• RAID共性层:也被称为RAID公共层,它提取各种级别的RAID的公共特性,依照块设备的实现模板向上层注册,同时向RAID个性层提供公共函数,以及接口注册函数;
• RAID个性层:是各种级别RAID的个性体现,它向RAID公共层注册个性接口,利用RAID公共层提供的公共函数,基于低层实现个性化功能。RAID个性以独立模块的形式实现,可以动态加载。

3.RAID模块对象

核心MD设备结构mddev_t及其成员磁盘设备结构mdk_rdev_t是系统中的两个关键结构。核心MD设备结构mddev_t是内核中RAID设备保存自身信息的结构体,它包括了完整的RAID设备的信息。成员磁盘设备结构mdk_rdev_t反映了组成MD设备的底层块设备的信息。两个结构相互关联。
MD设备通过块设备号和块设备描述符(block_device)关联起来,低层成员磁盘也指向和它相对应的块设备描述符,正是以块设备描述符为“纽带”,使得MD可以构建在其他的物理或虚拟磁盘设备之上,成为一个“栈式”块设备。
在这里插入图片描述

4. 初始化

MD模块加载时,它的初始化函数md_init将被执行,md_init的代码如程序6-1所示。 函数md_init()代码(文件drivers/md/md.c)。所有块设备模块初始化时,都应该调用这个register_blkdev函数。例如对于SCSI磁盘模块,对应的代码在其初始化函数(init_sd)中。
注册的节点结构md_notifier中,给出了节点优先级,以及一个回调函数。由于MD设备需要在底层磁盘之前停止,因此优先级数值设置得较大(为INT_MAX)。回调函数md_notify_reboot的实现也在文件drivers/md/md.c中,它仅仅是遍历所有的MD设备,停止之。接下来,调用register_sysctl_table注册MD模块的系统控制表,主要用于设置用于控制同步速度的内核参数。然后,调用md_geninit创建/proc/mdstat,关于MD设备的状态都是通过这个proc项来输出的。、

5.设备创建

在加载MD模块后,用户可以通过管理工具创建MD设备。实际上,管理工具内部执行的是open和ioctl系统调用。
用户在mdadm命令行中给定RAID设备名。标准的设备名格式为/dev/md#或/dev/mdp#,其中#代表一个数值。mdadm根据设备名md或mdp可以解析出主设备编号,以#作为次设备编号。之后调用mknod创建具有上述设备编号的块设备文件/dev/md#或/dev/mdp#。

6.参考书目

《存储技术原理分析》

7. 加入讨论

在这里插入图片描述

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值