linux内核之软RAID
文章平均质量分 62
revoer001
这个作者很懒,什么都没留下…
展开
-
soft raid5阅读笔记之七--MD中的bitmap
本节主要介绍MD中的bitmap的机制,该机制主要用于减少不必要的同步操作。在真正的数据IO写操作之前先将该chunk对应的bitmap内存中的bit位设置为1,写入磁盘文件bitmap文件中,而在真正的数据写完成之后,再将bitmap文件中的bit位清零。这样,在进行一次IO写操作中,就多了两次磁盘的写操作,势必影响IO的效率,因此,在linux内核中,关于这部分做了两个方面的优化:1)批量写入原创 2016-07-23 12:40:30 · 1518 阅读 · 0 评论 -
soft raid5阅读笔记之二--读数据流程
原创 2016-07-20 17:32:49 · 872 阅读 · 1 评论 -
soft raid5阅读笔记之三--写数据流程
原创 2016-07-20 17:35:32 · 1180 阅读 · 0 评论 -
soft raid5阅读笔记之四--读成员磁盘错误的处理
在读取成员磁盘的过程中,可能会出错,错误来自于底层报告的错误,进而将该成员磁盘标记为故障磁盘。这部分从raid5_end_read_request()函数说起。static void raid5_end_read_request(struct bio * bi, int error){ struct stripe_head *sh = bi->bi_privat原创 2016-07-20 17:36:27 · 1390 阅读 · 0 评论 -
soft raid5阅读笔记之五--同步
resync:由成员磁盘计算出校验磁盘的过程,即初始化时需要同步;recovery:当成员磁盘出现故障,由其它的磁盘和校验盘进行计算获得该故障磁盘数据的过程;md_ioctl()函数中对SET_DISK_FAULTY的处理会调用set_disk_faulty()函数,该函数的参数:mddev:指向md设备的描述符指针;dev:md设备的设备号。从函数名可以看出,该函数是要设原创 2016-07-21 20:45:11 · 2975 阅读 · 0 评论 -
soft raid5阅读笔记之七--MD中的bitmap(网上资料)
在RAID1,RAID5等存在数据冗余的磁阵结构中,数据的完整性要求冗余的数据和原始数据的信息要保证一致。磁阵的写操作是一个过程,这个过程中发生异常,可能导致冗余数据和原始数据不一致,例如磁盘更换,写盘失败,系统掉电等。 在系统要尽快使数据恢复一致,以使得磁阵后续可以正常工作,磁阵从数据不一致状态恢复的过程就是同步。假设系统重新上电后,如何知道哪些数据出于不一致状态呢?如果没有其他信转载 2016-07-21 20:52:52 · 1322 阅读 · 0 评论 -
soft raid5阅读笔记之六--修复
上一篇中提到了resync和recovery的区别,这篇主要来看看raid5对于修复的处理流程。首先先将mddev->recovery的一些状态做一些介绍:#define MD_RECOVERY_RUNNING 0 //resync或是recovery正在运行#define MD_RECOVERY_SYNC 1原创 2016-07-21 20:49:32 · 2365 阅读 · 0 评论 -
soft raid5阅读笔记之十四--resync和recovery的区别
在raid456三种情况下,根据mdadm是否添加--force参数,分为resync和recovery两种操作:resync:同步操作,是将数据块读出计算出校验和后存放到校验块中的过程(会读取所有的磁盘);recovery:相当于坏掉一块磁盘后raid的修复操作(读取N-1块磁盘,然后计算出第N个磁盘的值,写入第N个磁盘的过程);针对三种不同的级别,两者的区别如表所示:原创 2016-07-23 13:01:54 · 2616 阅读 · 0 评论 -
soft raid5阅读笔记之十三--异或操作
linux 软RAID中的异或操作,主要目录在/crypto目录下1、xor.c:主要是同步的异或操作的文件core_initcall(calibrate_xor_blocks):定义了初始化的优先级别为core(优先级为1);calibrate_xor_blocks()函数:是系统初始化时调用的创建xor模块的初始化函数;该函数的流程:分配一个两个内存页;选择异或块操原创 2016-07-23 13:00:47 · 901 阅读 · 0 评论 -
soft raid5阅读笔记之十二--DMA相关
1、异步传输描述符(linux/dmaengine.h):struct dma_async_tx_descriptor { dma_cookie_t cookie; /*本次传输的跟踪cookie,如果本次传输位于独立的链表,则设置为-EBUSY*/ enum dma_ctrl_flags flags; /* not a 'long' to pa原创 2016-07-23 12:58:45 · 1859 阅读 · 0 评论 -
soft raid5阅读笔记之十一--RAID6
1、校验和检查,如果不一致,则通过计算获取正确值,再写入到磁盘中,这里只根据状态设置相应的标志位,以便后续的操作:static void handle_parity_checks6(raid5_conf_t *conf, struct stripe_head *sh, struct stripe_head_state *s,原创 2016-07-23 12:53:50 · 1154 阅读 · 0 评论 -
soft raid5阅读笔记之十--状态标志
mddev->recovery标志位:MD_RECOVERY_NEEDED://可能需要修复操作,在md_check_recovery中根据不同的状态,再设置mddev->flags标志位:MD_CHANGE_DEVS=0;//MD设备状态 发生改变,在reshape/写失败/md_do_sync时会设置MD_CHANGE_CLEAN=1;//dirty原创 2016-07-23 12:53:03 · 579 阅读 · 0 评论 -
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原创 2016-07-23 12:49:13 · 1550 阅读 · 0 评论 -
soft raid5阅读笔记之八--磁盘扩展(reshape)
我们先来看看如何使用raid的reshape功能,在网上查资料说必须在有spare备用磁盘且必须指定backup备份文件的条件下,才可以进行磁盘扩展reshape,下面是我的使用记录:1、如果磁盘没有spare备用磁盘则提示如下错误:2、未指定backup备份文件,在superblock1.2版本下,可以正确扩展磁盘:从上面的使用可以看出,在superblock原创 2016-07-23 12:46:16 · 1861 阅读 · 0 评论 -
soft raid5阅读笔记之一--数据结构
1、raid5私有数据结构定义为raid5_conf_t:struct raid5_private_data { struct hlist_head *stripe_hashtbl; //所有的stripe_head通过hash连接件链入哈希表的哈希表头 mddev_t *mddev; //管理M原创 2016-07-20 17:31:58 · 1070 阅读 · 0 评论