linux-raid (四) raid0

源文件
        linux/src/drivers/md/raid0.h
        linux/src/drivers/md/raid0.c
        linux/src/drivers/md/md.h
        linux/src/drivers/md/md.c

RAID 0 是将数据分散存放到不同磁盘上,比如有 8 个数据块大小的数据,同时有 2 块同样大小的磁盘,这 8 块数据会将 1,3,5,7 存放到第 1 块盘上,其他数据块存放到第 2 块磁盘上。如果两块盘大小不一样,则每块盘会使用最小磁盘大小的空间;最后单独使用余下盘上的空间。RAID 0 没有冗余,1 块盘坏掉,数据也就丢失了。



mdadm --create /dev/mdX --level=stripe --raid-devices=N ...

RAID 0 的容量计量为所有磁盘的容量(chunk 大小的整数倍)总和。

linear/raid0 不支持 spare disks,也不使用 bitmap。

    static struct md_personality raid0_personality =
    {
            .name            = "raid0",
            .level             = 0,
            .owner           = THIS_MODULE,
            .make_request   = raid0_make_request,    必要时(超出 chunk 大小)将 bio 分解到不同的 rdev 上
            .run               = raid0_run,
            .stop              = raid0_stop,
            .status           = raid0_status,          显示 chunk 大小
            .size               = raid0_size,             raid0 阵列中 rdev 的容量总和,以 sector 计
            .takeover       = raid0_takeover,
                                       raid0 可以 takeover:
                                            *  raid4 - if all data disks are active.
                                            *  raid5 - providing it is Raid4 layout and one disk is faulty
                                            *  raid10 - assuming we have all necessary active disks
                                            *  raid1 - with (N -1) mirror drives faulty            
            .quiesce        = raid0_quiesce;           raid0 中只提供了空函数体
    };


RAID 0 对不同大小磁盘的支持:
        首先确定最小磁盘的大小,将所有磁盘中这块大小的空间看作属于 zone[0];
        再扫描出次大的磁盘大小,将剩余盘中这块大小的空间看作属于 zone[1];
        以此类推


如果构成阵列的所有磁盘大小都一样(近似),则 conf->nr_strip_zones 设置为 1;如果有不同尺寸,则为不同尺寸的数量,比如有 8GB/10GB/9GB 的盘,则 conf->nr_strip_zones 取值为 3。详情见 create_strip_zones 和 map_sector。

raid0 不支持磁盘的动态添加和删除:没有实现 hot add/remove 方法

* 尚未弄明白的问题
        * 什么时候会出现 takeover?
        * 整个 takeover 的过程是怎样的,数据会如何移动,谁来移动数据?
                       这里的 takeover 主要是重新构建 conf
        * takeover 过程中,对可支持的 mode,有什么样的要求,如何理解这些条件?

posted on 2012-12-22 00:48  refrag  阅读(2434)  评论(0编辑  收藏  举报

导航