soft raid5阅读笔记之八--磁盘扩展(reshape)

本文详细记录了Linux软RAID5使用reshape功能进行磁盘扩展的过程,探讨了reshape的条件和限制,包括必须存在spare备用磁盘但可以不指定backup备份文件。在superblock版本1.2时,reshape操作的具体步骤涉及stripe的处理,包括数据的读取、拷贝和校验。此外,分析了reshape_request()函数的工作原理,展示了在reshape过程中如何处理源和目标stripes,以及如何保证数据安全和metadata更新。
摘要由CSDN通过智能技术生成
我们先来看看如何使用raid的reshape功能,在网上查资料说必须在有spare备用磁盘且必须指定backup备份文件的条件下,才可以进行磁盘扩展reshape,下面是我的使用记录:
1、如果磁盘没有spare备用磁盘则提示如下错误:

2、未指定backup备份文件,在superblock1.2版本下,可以正确扩展磁盘:

从上面的使用可以看出,在superblock的版本号为1.2时,必须存在spare备用磁盘,但是可以不用指定备份文件。具体原因不知道,难道是superblock版本的问题??
当然,在reshape后必须重新修改/etc/mdadm.conf文件,主要是修改就是修改成员磁盘的数量;
修改完后,执行如下:

从上面的使用,得出如下结论:linux软raid只支持最多一块磁盘数量的增加,并且必须存在spare备用磁盘的情况下才可以。
接下来,开始分析linux内核中软raid的实现:

下面我们进入reshape_request()函数(函数开始的注释应该重点看一下,说明了reshape具体是怎么操作的):
static sector_t reshape_request(mddev_t *mddev, sector_t sector_nr, int *skipped)
{
     /* reshaping is quite different to recovery/resync so it is
     * handled quite separately ... here.
     * reshape操作和recovery/resync完全不同,因此,它需要在这里进行单独处理
     * On each call to sync_request, we gather one chunk worth of
     * destination stripes and flag them as expanding.
     * Then we find all the source stripes and request reads.
     * As the reads complete, handle_stripe will copy the data
     * into the destination stripe and release that stripe.
     * 每次调用sync_request()时,我们搜集一个chunk大小的目的stipes并且标记它们为需要扩展
     * 然后我们找到所有的源stripes以及读这些stripes的请求,当读请求完成时,handle_stripe()
     * 将会拷贝这些数据到目的stripes,并释放掉源stripes
     */
     raid5_conf_t *conf = (raid5_conf_t 
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值