免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: Boson
打印 上一主题 下一主题

如何让软RAID在出故障后重新运行起来 [复制链接]

论坛徽章:
0
11 [报告]
发表于 2006-02-08 18:05 |只看该作者
你是怀疑我的三个硬盘的空间大小不一样是吧,

我用fdisk -l 看过了,扇区数都一样,容量也是一样,
sfdisk我不会用啊:(

论坛徽章:
0
12 [报告]
发表于 2006-02-08 18:25 |只看该作者
老大,我现在就只想让RAID5跑起来就行了,

比如把坏的硬盘插回去,让RAID跑起来,应该可以通过什么手段,强行让这个失败的RAID活过来吧,

cat /proc/mdstat只要是能显示RAID up就行了,我就有办法替换新硬盘了,

论坛徽章:
0
13 [报告]
发表于 2006-02-08 18:27 |只看该作者
把坏的插回去能跑起来吗?
信的数据盘和坏的在结构上有什么区别?
报错的时候提示什么,你又是如何做的?

论坛徽章:
0
14 [报告]
发表于 2006-02-08 18:38 |只看该作者
哈哈,我现在是把坏的插回去,可是也md0也跑不起来了,所以我才烦啊,

如何是好,????帮帮想想办法吧,数据很重要啊,

论坛徽章:
0
15 [报告]
发表于 2006-02-08 18:53 |只看该作者
我今天晚上用虚拟机跑一下研究研究,明天给你答复

论坛徽章:
5
荣誉会员
日期:2011-11-23 16:44:17CU大牛徽章
日期:2013-09-18 15:15:15CU大牛徽章
日期:2013-09-18 15:15:45未羊
日期:2014-02-25 14:37:19射手座
日期:2014-12-26 22:55:37
16 [报告]
发表于 2006-02-08 20:25 |只看该作者
看看modprobe md
然后用raidhotadd看看

论坛徽章:
0
17 [报告]
发表于 2006-02-08 20:41 |只看该作者
OS:RH 7.3
硬盘:hda1   [ hdb1   hdc1   hdd1]后三块做成软RAID5

我把我RAID出错的经过说一遍吧:
1。年后回来上班,发现机器启动不了,检查发现是md0失败,RAID5加载不了,hdb1出故障了,BIOS也认不到这个盘了,
2。找资料,准备恢复,准备好同样大小、速度的新硬盘,
3。关机,然后把坏盘取出来,把新硬盘装入同一IDE位置,
4。对新硬盘进行分区及指定分区类型,fdisk /dev/hdb ,指定了fd类型,屏幕显示linux raid autodetect样子,
5。再检查了/etc/raidtab文件,觉得没什么问题了,就直接raidstart /dev/md0,
6。结果系统提示md0已经在运行,我cat /proc/mdstat 显示md0也是在运行,于是我二话不说,就来了一个raidstop /dev/md0,因为我以为要增加新硬盘,就要把RAID停了先,(我估计我就错在这一步,没有用心去考虑,且网上有些文章让我晕了)
7。然后,我再用任何命令,也不行让md0活过来了,也无法将hdb1加进RAID中了,

整个过程就这样,真是失败啊,这个md0怎么停了以后,就无法再恢复出错时的状态了呢,真是烦啊,难道我的数据就真的要全丢了吗?

谢谢platinum 先了,非常感谢你的帮助

论坛徽章:
0
18 [报告]
发表于 2006-02-08 22:31 |只看该作者
我做了一遍,所有盘(3块)的所有分区都是 softraid
Disk /dev/hda: 858 MB, 858993152 bytes
32 heads, 63 sectors/track, 832 cylinders
Units = cylinders of 2016 * 512 = 1032192 bytes

   Device Boot    Start       End    Blocks   Id  System
/dev/hda1   *         1        33     33232+  fd  Linux raid autodetect
/dev/hda2            34       766    738864   fd  Linux raid autodetect
/dev/hda3           767       831     65520   fd  Linux raid autodetect

Disk /dev/hdb: 858 MB, 858993152 bytes
32 heads, 63 sectors/track, 832 cylinders
Units = cylinders of 2016 * 512 = 1032192 bytes

   Device Boot    Start       End    Blocks   Id  System
/dev/hdb1   *         1        33     33232+  fd  Linux raid autodetect
/dev/hdb2            34       766    738864   fd  Linux raid autodetect
/dev/hdb3           767       831     65520   fd  Linux raid autodetect

Disk /dev/hdc: 858 MB, 858993152 bytes
16 heads, 63 sectors/track, 1664 cylinders
Units = cylinders of 1008 * 512 = 516096 bytes

   Device Boot    Start       End    Blocks   Id  System
/dev/hdc1   *         1        66     33232+  fd  Linux raid autodetect
/dev/hdc2            67      1532    738864   fd  Linux raid autodetect
/dev/hdc3          1533      1662     65520   fd  Linux raid autodetect

/proc/mdstat 的内容是这样的
Personalities : [raid1] [raid5]
read_ahead 1024 sectors
Event: 3
md2 : active raid5 hda3[0] hdb3[1] hdc3[3]
      130816 blocks level 5, 64k chunk, algorithm 0 [3/3] [UUU]

md1 : active raid5 hda2[0] hdb2[1] hdc2[3]
      1477504 blocks level 5, 64k chunk, algorithm 0 [3/3] [UUU]

md0 : active raid1 hda1[0] hdb1[1] hdc1[3]
      32640 blocks [3/3] [UUU]

unused devices: <none>

对应的映射是这样的(/dev/md2 是 swap)
/dev/md1  on  /         type  ext3    (rw)
/dev/md0  on  /boot     type  ext3    (rw)

由于引导区只能是 RAID1,所以我把三块盘的引导部分一起弄成了 RAID1 格式
当我关机后,删除一块硬盘后,只剩 hda 和 hdb
之后我重新添加一块硬盘,fdisk 看到的 hdc 是没有分过区的
此时 /proc/mdstat 内容如下
Personalities : [raid1] [raid5]
read_ahead 1024 sectors
Event: 3
md2 : active raid5 hda3[0] hdb3[1]
      130816 blocks level 5, 64k chunk, algorithm 0 [3/3] [UU_]

md1 : active raid5 hda2[0] hdb2[1]
      1477504 blocks level 5, 64k chunk, algorithm 0 [3/3] [UU_]

md0 : active raid1 hda1[0] hdb1[1]
      32640 blocks [3/3] [UU_]

unused devices: <none>

我用 sfdisk -d /dev/hda > disk.dat
再用 sfdisk /dev/hdc < disk.dat 直接将 hda 的分区结构复制到 hdc 中,fdisk 可以看到三块盘一模一样
只后,我用
raidhotadd /dev/md0 /dev/hdc1
raidhotadd /dev/md1 /dev/hdc2
raidhotadd /dev/md2 /dev/hdc3
来进行磁盘同步
此时 /proc/mdstat 内容如下(md0 和 md2 已经同步好,正在同步 md1)
Personalities : [raid1] [raid5]
read_ahead 1024 sectors
Event: 9
md2 : active raid5 hda3[0] hdb3[1] hdc3[3] hdd3[2]
      130816 blocks level 5, 64k chunk, algorithm 0 [3/3] [UUU]

md1 : active raid5 hdc2[3] hda2[0] hdc2[1]
      1477504 blocks level 5, 64k chunk, algorithm 0 [3/2] [UU_]
      [=======>.............]  recovery = 35.7% (264496/738752) finish=1.0min speed=7282K/sec
md0 : active raid1 hda1[0] hdb1[1] hdc1[3] hdd1[2]
      32640 blocks [3/3] [UUU]

unused devices: <none>

接下来,继续做了一个有趣的试验,我给 vmware 又添加了一块硬盘 hdd,并且也把 hda 的分区结构写了进去,之后
raidhotadd /dev/md0 /dev/hdd1
raidhotadd /dev/md1 /dev/hdd2
raidhotadd /dev/md2 /dev/hdd3
再看 /proc/mdstat
Personalities : [raid1] [raid5]
read_ahead 1024 sectors
Event: 3
md2 : active raid5 hda3[0] hdb3[1] hdc3[3] hdd3[2]
      130816 blocks level 5, 64k chunk, algorithm 0 [3/3] [UUU]

md1 : active raid5 hda2[0] hdb2[1] hdc2[3] hdd2[2]
      1477504 blocks level 5, 64k chunk, algorithm 0 [3/3] [UUU]

md0 : active raid1 hda1[0] hdb1[1] hdc1[3] hdd1[2]
      32640 blocks [3/3] [UUU]

unused devices: <none>

可以看到,每个 md 分区都有 4 块硬盘,其中后加进去的是 spare 备份盘
接着,我人为设置 /dev/hdc2 失效,结果有意思的事情发生了
[root@platinum root]# raidsetfaulty /dev/md1 /dev/hdc2
[root@platinum root]# cat /proc/mdstat
Personalities : [raid1] [raid5]
read_ahead 1024 sectors
Event: 13
md2 : active raid5 hda3[0] hdb3[1] hdc3[3] hdd3[2]
      130816 blocks level 5, 64k chunk, algorithm 0 [3/3] [UUU]

md1 : active raid5 hdd2[3] hda2[0] hdb2[1] hdc2[2](F)
      1477504 blocks level 5, 64k chunk, algorithm 0 [3/2] [UU_]
      [>....................]  recovery =  2.2% (16872/738752) finish=6.4min speed=1874K/sec
md0 : active raid1 hda1[0] hdb1[1] hdc1[3] hdd1[2]
      32640 blocks [3/3] [UUU]

unused devices: <none>

hdd2 自动开始同步,来顶替坏掉了的 hdc2

经过我的分析,可以判断两点
1、你的分区还有 ext3,不是所有都是软 RAID 结构,因此你可以 raidstop,否则会报告 busy 的
2、你不该 raidstop,那样的话,如果不在重启前 raidstart,系统恐怕就起不来了,第六步你做错了

如果真的用于生产的话,一定要多研究多试验才能用,除非你有足够的信心相信自己没有问题,后果有能力承担

论坛徽章:
0
19 [报告]
发表于 2006-02-09 08:47 |只看该作者
我用 sfdisk -d /dev/hda > disk.dat
再用 sfdisk /dev/hdc < disk.dat 直接将 hda 的分区结构复制到 hdc 中,fdisk 可以看到三块盘一模一样 ...


你的意思是不是类似重构新硬盘的superblock,把原RAID硬盘上的superblock信息写到新硬盘上呢?

论坛徽章:
0
20 [报告]
发表于 2006-02-09 09:33 |只看该作者
原帖由 Boson 于 2006-2-9 08:47 发表


你的意思是不是类似重构新硬盘的superblock,把原RAID硬盘上的superblock信息写到新硬盘上呢?

和 superblock 无关,是复制磁盘分区表过去,就是硬盘 0 道 0 面 1 扇区里面靠后的主分区表和与之关联的逻辑分区链表结构
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP