MD(一)数据结构

本文介绍了MD数据结构中的关键组件,包括mddev_s、mdk_rdev_s和mdk_personality结构。重点关注mdk_rdev_s的same_set、size、mddev和flags字段,以及它们在RAID设备中的作用。接下来的篇章将深入MD内部机制,从resync调度开始。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这些文章已经写了好几年了,可能已经过时了。在MSN space和QQzone几经辗转之后,我想也许这些技术文章还是放在搞技术的博客中更能帮助人。于是做了一个艰难的决定,把这些文章一篇篇搬过来!绝对是原创的。

 

要看MD的数据结构,那就得看md_k.h了。这里有最主要的三个结构定义:mddev_s这是MD本身的结构;mdk_rdev_s这是对应于MD中子设备的结构;mdk_personality这是个有函数指针组成的结构,各函数交由各RAID级自己去实现。

 

首先来说说mdk_rdev_s,我觉得其中最重要的有这么几个字段:
 struct list_head same_set; /* RAID devices within the same set */
 sector_t size; /* Device size (in blocks) */
 mddev_t *mddev; /* RAID array if running */
 unsigned long flags;
 int desc_nr; /* descriptor index in the superblock */
 int raid_disk; /* role of device in array */
same_set相当于一个链表节点,通过它一个rdev可以被组织到一个md中。size就是这个rdev的容量大小。mddev则是其所在的MD的指针。在RAID-5中我们提到过flags的一些内容,注释里对这些状态的解释其实都很清楚了。desc_nr其实就是cat /proc/mdstat中看到的[]中索引值,大多数情况下其值是与raid_disk是一致的,但是当它没有正式加入到RAID中时,raid_disk的值是-1,而此时desc_nr就是一个不同的值。所以raid_disk的值就是rdev在RAID中的索引。

 

关于mddev_s,由于里面的东西太多了,一个个摘取出来分门别类介绍也是个精细活儿,偷个懒,还是放到后面去,碰到需要解释的字段再花力气去解释更好些。mdk_personality在RAID-5中也有介绍,这里也不多说,又碰到要讲的再说。

上一篇已经提到了一些MD中我能想到的比较重要的一些内容,由于是从RAID-5讲起的,有点从下到上的意思,所以下一篇打算从resync的调度为切入点,进入到MD内部。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值