soft raid5阅读笔记之九--MD中的superblock

本节开始讨论一下MD设备中的superblock操作,关于superblock的说明如下(/include/linux/raid/md_p.h):
/*
* RAID superblock.
*
* The RAID superblock maintains some statistics on each RAID configuration.
* Each real device in the RAID set contains it near the end of the device.
* Some of the ideas are copied from the ext2fs implementation.
* RAID的superblock包含了每个RAID配置的一些统计信息。
* 在RAID设备中的每个成员设备都包含一份,放置在成员设备的末尾。
* 一些信息从ext2fs实现中拷贝而得。
*
* We currently use 4096 bytes as follows:
*
*     word offset     function
*
*        0  -    31     Constant generic RAID device information.     恒定的通用RAID设备信息
*        32  -    63   Generic state information.                              通用的状态信息
*       64  -   127     Personality specific information.                    个性特有的信息
*     128  -   511     12 32-words descriptors of the disks in the raid set.     在RAID设备中成员磁盘的12个32字描述符
*     512  -   911     Reserved.         
*     912  -  1023     Disk specific descriptor.                                   磁盘特有的描述符
*/
/*
* If x is the real device size in bytes, we return an apparent size of:     如果x是成员磁盘的大小,我们将返回一个合适的大小如下:
*
*     y = (x & ~(MD_RESERVED_BYTES - 1)) - MD_RESERVED_BYTES     y是64K内的偏移
*
* and place the 4kB superblock at offset y.          并且在偏移位置y处开始存放4KB的superblock
*/
#define MD_RESERVED_BYTES          (64 * 1024)          MD设备的保留字节数
#define MD_RESERVED_SECTORS          (MD_RESERVED_BYTES / 512)      MD设备的保留扇区数    

#define MD_NEW_SIZE_SECTORS(x)          ((x & ~(MD_RESERVED_SECTORS - 1)) - MD_RESERVED_SECTORS)     MD设备实际包含的扇区数

#define MD_SB_BYTES               4096          MD设备superblock的字节大小
#define MD_SB_WORDS               (MD_SB_BYTES / 4)     MD设备superblock字大小
#define MD_SB_SECTORS               (MD_SB_BYTES / 512)     MD设备superblock包含的扇区数
/*
* The following are counted in 32-bit words
*/
#define     MD_SB_GENERIC_OFFSET          0     //下面宏定义参考上面关于superblock中关于信息位置的注释
#define     MD_SB_PERSONALITY_OFFSET     64
#define     MD_SB_DISKS_OFFSET          128
#define     MD_SB_DESCRIPTOR_OFFSET          992

#define MD_SB_GENERIC_CONSTANT_WORDS     32
#define MD_SB_GENERIC_STATE_WORDS     32
#define MD_SB_GENERIC_WORDS          (MD_SB_GENERIC_CONSTANT_WORDS + MD_SB_GENERIC_STATE_WORDS)
#define MD_SB_PERSONALITY_WORDS          64
#define MD_SB_DESCRIPTOR_WORDS          32
#define MD_SB_DISKS               27
#define MD_SB_DISKS_WORDS          (MD_SB_DISKS*MD_SB_DESCRIPTOR_WORDS)
#define MD_SB_RESERVED_WORDS          (1024 - MD_SB_GENERIC_WORDS - MD_SB_PERSONALITY_WORDS - MD_SB_DISKS_WORDS - MD_SB_DESCRIPTOR_WORDS)
#define MD_SB_EQUAL_WORDS          (MD_SB_GENERIC_WORDS + MD_SB_PERSONALITY_WORDS + MD_SB_DISKS_WORDS)




介绍几个宏定义:
#define MD_CHANGE_DEVS     0     /* Some device status has changed     设备状态已经改变 */
#define MD_CHANGE_CLEAN 1     /* transition to or from 'clean'                转换到clean状态或是从clean状态转换到其他状态*/
#define MD_CHANGE_PENDING 2     /* superblock update in progress      superblock正在更新*/


此外,mdk_rdev_s->sb_loaded变量说明superblock是否加载到内存中,该变量有三种情况:
0:superblock不在内存中,不需要更新;
1:superblock在内存中,需要更新;
2:superblock在内存中,但不需要更新;

superblock在内存中的表现根据version不同分为两种:
1)version=0.90.0:
typedef struct mdp_superblock_s {
     /*
     * Constant generic information
     */
     __u32 md_magic;          /*  0 MD identifier                      */
     __u32 major_version;     /*
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值