手稿核心章节技术架构 - md5 位图机制

本文详细介绍了MD5位图机制,从原理到核心数据结构,包括Bitmap_info、Bitmap_page、Bitmap及其super_t结构。内容涵盖Bitmap文件、位图结构、初始化、设置与清除流程,以及状态变迁。位图用于跟踪md设备数据块的写入状态,确保数据一致性与恢复。

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

1   Bitmap实现

1.1 bitmap原理

简单的说,bitmap的工作原理就是使用一个位图,每个位对应md设备的一个数据块,在md设备有数据写入时,设置该数据块对应的位,等待写入完成后,再清除该数据块对应的位。

当需要进行数据同步/恢复时,参照bitmap的位图,只有设置了位对应的数据块才需要进行同步/恢复操作。

1.2 核心数据结构

1.2.1 Bitmap_info结构

此结构定义在mddev结构中,其核心部分为:

核心成员

描述

struct file *file

描述bitmap file,当指定为md自身时,为NULL

loff_t offset

可以为负,不能为0,描述bitmap文件存放在超级块之前还是之后,为负,就在超级块前

struct default_offset

当md设备创建后,再指定bitmapfile时会使用

unsigned long chunksize

存放bitmap chunksize

int external

有cli传入,这里传入internal时,此值为0

 

1.2.2 Bitmap_page结构

核心成员

描述

void *map

指向一个page的指针起始位置,一个page中每2B的大小保存一个16位的bimtap_counter描述一个chunk的状态

unsigned in hijacked:1

当map申请失败时会被使用

unsigned int count:31

描述在这个page中有dirty位的bit个数

 

1.2.3 Bitmap结构

以下列出bitmap结构的核心部分:

核心成员

描述

struct bitmap_page *bp

申请为一个数组,每个元素对应一个bitmap内存页

unsigned long pages

描述bp数组元素的个数

unsigned long chunkshift

通过bitmap-chunk计算出来的shift值

unsigned long chunks

底层磁盘大小计算出来的chunk个数

spinlock_t lock

Bitmap的自旋锁,保护filemap 的page

struct page *sb_page

存放md的bitmap的superblock的信息

struct page **filemap

描述整个bitmap file的信息,以页的形式保存

unsigned long *filemap_attr

每4bit

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值