免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 4511 | 回复: 1
打印 上一主题 下一主题

利用 raidtools 模拟 mdadm 的 spare-group 功能 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-04-12 01:14 |只看该作者 |倒序浏览

**************************************************************************************
注 :该文章参考了如下内容 :

A)Software-RAID HOWTO :http://www.tldp.org/HOWTO/html_single/Software-RAID-HOWTO/

作者 :ailms <ailms{@}qq{dot}com>

版本 :v1

最后修改 :2007/04/12 01:01
**************************************************************************************


   raidtools 和 mdadm 我想大家应该都很熟悉了,都是用于建立/管理 software-RAID 的工具。raidtools 在 RHEL

已经被 mdadm 替换掉了,但我还是比较习惯使用 raidtools 。

   mdadm 能够提供 spare-group 的功能,这点是 raidtools 所没有的。就是多个 Software-RAID 共享一个 spare 盘。

当有一个RAID有某个设备失效(failed)时,就从和它同一个 spare-group 的其他 RAID 中找寻合适的 spare 盘加入到

该故障 RAID中。这个功能也是 mdadm 少数需要用到 /etc/mdadm.conf 的地方之一 (--scan 一般也会用到)

  不过 raidtools 也提供了 raidhotadd、raidhotremove、raidsetfaulty 这三个命令。其实 spare 的自动切换也就是通过

这三个步骤来实现的。只不过中间需要多一些判断而已。如何利用 raidtolls 来实现“接近” mdadm 的 spare-group功能呢?

  另外一个原因就是 :我在 RH9 (2.4.20-8 内核)下,mdadm 的 spare-group 功能在多次实验后还是无法实现,无奈之下

也只能放弃了。

  综合以上两个原因,所以决定自己动手用 raidtools 来实现这个功能。

  你可以把这个脚本放入 crontab 中,通过邮件的方式定时收取;也可以通过 MRTG + shell 的方式,来把这个功能用 web 来监控,

这样甚至把 rebuild 进度也纳入监控范围内,不过这需要修改该脚本。

  由于是在 en 的环境下写的脚本,所以输出的信息和脚本的注释还没有来得及改为 zh_CN,如有语法错误,也请多多见谅。

  BTW :这个脚本的适用作用和意义有多大并不是我关心的,我只想通过这个过程使自己对 Software-RAID 和如何编写 shell 脚本

          有一个更深的认识。欢迎更多的朋友一起学习,讨论,指正 。 ^_^


一、脚本功能

  spare_switch.sh 用于模拟 mdadm 的 spare-group 功能。在系统某个支持 Spare 盘的 Software-RAID 的某个成员设备

出现故障,变成 failed 状态时,搜索整个系统中可用的 spare 盘,如果大小合适,且可以被移动,则把该 spare 盘从原来

的 Software-RAID 中分离出来,加入到故障 RAID 中,删除故障盘,并观察 rebuild 的情况。

  和 mdadm 的 spare-group 不同的是,mdadm 可以定义多个 spare group,但该脚本暂时不作该区分,就当作全部 spare 盘

都是可以在多个 Software-RAID 中任意移动的。



二、测试环境

OS : RH9

Kernel : 2.4.20-8 (RAID-support 是 built-in 的方式)

bash :2.05b.0(1)
               

三、结构

由 5 个函数组成 :

        1)scan :用于扫描整个系统的 Software-RAID ,并分类为

           raid.info :存放类似 /etc/raidtab 的信息

           device.info :所有 RAID 的成员设备的具体信息

           spare.info :所有可用/不可用的 spare 盘的 信息。所谓不可用,就是 spare 盘被 mount 或者所在的 RAID 没有被激活

                               注意,spare 盘状态为可用并不意味着出现故障盘时可以被使用,还要考虑大小是否合适,这点放在 sapre_switch 中处理。

           unknown.info :所有被 remove 的旧的 software-RAID 成员设备

           failed.info :所有当前状态为 failed 的 RAID 成员设备

        2)scan_log :用于把 sacn 函数执行的结构写入日志,便于日后检查

                             日志位于 /root/auto_spare/log/<year>/<month>/<day>/scan.og

        c)update_info:用于在每次对故障操作后更新 Software-RAID 的信息
       
                               上面提到的5个 info 文件位于 /root/auto_spare/info/ 目录下

        d)spare_switch :用于执行具体的操作 :(移动 spare 盘、添加 spare 盘、删除故障盘)

        e)spare_switch_log :用于记录 spare_switch 函数所作的内容到日志,便于日后检查

        f)rebuild_watch :用于查看 rebuild 进程的信息。rebuild_watch 函数只是检查一次,而不是

                                 象 daemon 那样定期检查 /proc/mdstat ,以后考虑把它独立成为一个脚本,

                                 放入 crontab ,定期观察有没有 rebuild 动作发生

四、事件以及编号

scan () 可能产生的事件有  :

        ※)系统不支持 Software-RAID  :事件1 (exit 1)

        ※)没有发生任何 RAID :事件2  (exit 2)

        ※)没有任何 spare 盘存在 :事件 3 (exit 3)

        ※)spare 盘存在,且没有 failed 盘,没有 missing 盘,没有 offline 阵列 :事件 0 (exit 0)

        ※)发现错误 :事件4 (分多个子事件)

              ※)有 spare 盘存在,发现有离线阵列 : 事件 4_1

            ※)有spare 盘存在,发现有 unknown 设备 : 事件 4_2

            ※)有spare 盘存在,发现 failed 盘:事件 4_3

            ※)发现 failed 盘,有 spare 盘存在,但处于不可用的状态(所在的 raid 没有激活):事件4_4

            ※)发现 failed 盘,有 spare 盘存在,且处于可用的状态 :事件 4_5

        ※)发生有新的设备 :[未实现]

        ※)发现新阵列 : [未实现]

        ※)发现少了阵列 : [未实现]

        ※)发现阵列配置的改变 :[未实现]          
               

spare_switch()可能产生的事件 :

        ※)failed 磁盘所在的阵列自己有 spare 盘 : 事件10       

        ※)failed 设备所在的阵列没有 spare 盘,其他 RAID 有 spare 盘且可用,但所有 spare 盘大小都不合适 : 事件11

        ※)为 failed 设备找到一个合适的 spare 盘 :事件12

        ※)spare 盘从原 RAID 分离成功 :事件13

        ※)spare 盘添加成功 :事件14

        ※)失效盘删除成功 : 事件15

        ※)rebuild 过程开始/进行中 :通过 grep /proc/mdstat 的 recovery = 字符。事件 16

        ※)rebuild 过程结束 :如果 spare 盘添加成功,且 lsarid 没有发现 failed 或者 missing 设备,则表示已经结束。事件 17 [ 未实现 ]


五、屏幕截图

        ※)没有发生任何 RAID :事件2

       

        ※)没有任何 spare 盘存在 :事件 3

       

        ※)spare 盘存在,且没有 failed 盘,没有 missing 盘,没有 offline 阵列 :事件 0

       

        ※)有 spare 盘存在,发现有离线阵列 : 事件 4_1

       

        ※)有spare 盘存在,发现有 unknown 设备 : 事件 4_2

       

        ※)发现 failed 盘,有 spare 盘存在,但处于不可用的状态(所在的 raid 没有激活):事件4_4
       
       

        ※)failed 磁盘所在的阵列自己有 spare 盘 : 事件10
       
       

        ※)failed 磁盘所在的阵列没有 spare 盘 : 事件12-16

       

        ※)系统有 failed 盘存在,但已经没有 spare 盘可用了。

               
               
        ※)三个 RAID,多个 failed 盘的情况-(1)
       

        ※)三个 RAID,多个 failed 盘的情况-(2)
       

        ※)三个 RAID,多个 failed 盘的情况-(3)
       

[ 本帖最后由 ailms 于 2007-4-12 01:42 编辑 ]

论坛徽章:
0
2 [报告]
发表于 2007-04-12 01:25 |只看该作者
由于发贴字数的限制,只能以 chm 附件的形式把代码放上来,请各位朋友见谅.^_^

也请多多指出错误和需要改进的地方。

myscripts.CHM

14.79 KB, 下载次数: 164

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP