Chinaunix首页 | 论坛 | 博客
  • 博客访问: 11589
  • 博文数量: 9
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 75
  • 用 户 组: 普通用户
  • 注册时间: 2015-04-25 10:43
文章分类
文章存档

2015年(9)

我的朋友

分类: 数据库开发技术

2015-05-09 18:16:46

之所以说思考,是因为不太懂,如果懂,标题就应该叫"一次RAID0崩溃的分析"了!
  一个多月前,换了新主板,华硕的P5Q,南桥是ICH10R,于是买了5个全新的WD3202ABYS-01B7A0组RAID0,用了一个多月没出现任何问题,直到有一天.....
  由于需要增加1张PCI网卡和2条内存,于是拆机,拆机之前已拔掉220V电源线,并完全放电;为了操作方便,5个硬盘的数据线全都拔下来了;
  装好之后,接上所有的硬盘数据线,然后通电开机;主板检测硬盘的时候,第 5 个硬盘检测了很久(平时5个硬盘的检测都是1、2秒钟的事情),好像一直卡在哪里一样,我当时没太在意,后来主板还是对这个硬盘检测通过,并识别出了型号;到了RAID控制器那里,这是通电后第一次到RAID控制器那里,我已经忘记了当时RAID BIOS到底有没有什么提示了,我只记得RAID BIOS过后,系统无法启动;
  我的第一反应就是,第 5 个硬盘(这个硬盘的序列号尾数为 3921 )应该没插好线;于是我就强制关机,重新检查; 重新插拔了 3921 这个硬盘的数据线,并且还发现第 1 硬盘与第 2 硬盘的顺序对调了,重新校正后,再次通电开机;
  可能是由于上次强制关机,主板BIOS提示超频错误(我原来是设置了超频的),并自动恢复了原设置(现在华硕主板都有这个超频错误的自动恢复功能)。接着,主板自检...... 5个硬盘很快地顺利地通过了检测;到了RAID控制器那里,RAID控制器提示磁盘阵列 Failed! , 并且提示 3921 这个硬盘为 Non-RAID Disk , 这里我印象特别深刻;
  很明显,原来是 5个硬盘的阵列,现在 3921 这个为 Non-RAID Disk, 阵列当然要 Failed ; 也就是说 RAID信息表已经丢失!!!
  对于RAID,由于知识的缺乏,我当时能做的工作只有再次检查各个磁盘的顺序和接线,并且经历了好多次关机->开机,断电重新开机..... 但是一切都无济于事;期间我还逐个硬盘试了一下,即, 将硬盘全部拔下来,然后只接一个硬盘,逐个硬盘接上去开机,结果就是,只有4个硬盘能被RAID控制器识别出来是 Number-Disk, 唯有 3921 这个硬盘,如何弄,RAID控制器都识别不出它来;
  至此,我当时在猜想,就是,其实磁盘阵列中的每一个成员磁盘都记录了父阵列的信息,并且它有自身的标记,证明自己是属于这个阵列的;而 3921 这个硬盘,正是丢失了这部分信息!!!
  对于RAID0, 当时的我不知道还能怎么做,那里剩下最后一线希望,就是重建,按照原来一模一样的设置来重建一次,然后,恢复分区表,或许还有点希望;
  于是我重建,重建之后恢复分区表;我备份出来的分区表是前一次的,但是第 1 、 2个分区一直以来都没有改变,如,我备份出来的分区表是 C D E F, 但是后来我把 E F 合并重新调整了分区大小,并在 E 扩展出了2个分区,按照我对硬盘分区表的理解,这样并不会更改 C D 盘的分区信息,而我需要的资料,正在 D 盘;我认为,无论是新的分区表,还是旧的分区表,D盘的物理起始地址与结束地址都是一样的;
  于是我恢复了分区表,磁盘阵列可以引导了,但是系统崩溃,我只能重装;重装后启动,系统的磁盘检测侦测到 E F分区有错误,修复了一个多小时,无奈就是检不到D盘(我也够黑的了)。进去系统后一看,系统的磁盘检测工具修复了很多E F盘的文件,而D盘? 系统显示文件系统严重破坏,对于系统来说,D盘已经没有修复的余地了;
  我尝试过很多数据恢复的软件,包括很火的EasyRecovery,结果EasyRecovery对于D盘,无论哪种恢复,一丁点的作用都没有,真的尝试了很多数据恢复软件.... 无奈之下,对D盘快速格式化一次(以我的知识,快速格式化不会擦除物理数据),意在重建文件系统,看那些数据恢复软件能不能起点作用,结果,还是一丁效果都没有;
  最后,还是找到了GetDataBack,我常在想,要是我第一次就找到这个软件,而没有格式化过D盘,恢复出来的数据会不会好一点,但是过去就是过去了;GetDataBack完整地找出了所有的目录,以及几乎是99%的文件!我另存出来,发现到少有30%的数据已经损坏或丢失,例如好像有些记事本,打开只有乱码,这是无法修复的;但总比一个文件也找不回来要好得多;
--------------------------- 分割线 -------------------------------
  之后,我极其详细地检查过了 3921 这个硬盘,硬盘没有任何的问题,各方面都十分良好;并且,这5个硬盘都是同一时间买的全新的正品西数企业级硬盘,才用一个多月啊;
  我很想弄清楚此次阵列崩溃的原因,我要细节,而不是大概(大概就是RAID信息丢失,知道这句话也无实际作用);才发现,国内没有一本书,是写RAID原理与技术细节的,何解?
   我就此问题咨询过华硕的技术服务,但得来的也是一句"可能3921那个硬盘的RAID信息丢失",我问该如何做和防范?回复说建议用RAID5;我没有任何收获;还是要在网上搜集资料;
   回想起原因,不外有2个,一是硬盘顺序调乱,二是3921那个成员磁盘数据线没接好;
   先来看硬盘顺序调乱;首先,我以前试过将磁盘顺序调乱,但对调的是第 3、4个,而不是第1、2个, 调乱3、4后,一样可以正常;其次,我搜集到某资料说:“最好按照原顺序接回,否则数据可能因硬盘顺序与原来的不符,磁盘阵列上的控制器不认而数据丢失!是因为硬盘的ID号乱掉所致。但是,现在的磁盘阵列产品都已有这种不要求硬盘有顺序的功能,为了防止上述的事件发生,都是不要求硬盘有顺序的。” 一开始我就不太相信是调乱顺序的原因,毕竟我以前试过调乱后没事;
   那某个成员磁盘的数据线没接好怎么会造成阵列崩溃?道理在哪?我只能用我仅有的知识思考一下;前面提到,我将5个硬盘逐个接上,单个硬盘开机,结果前4个硬盘都被RAID控制器认出是Number-Disk, 只有 3921 这个磁盘为 Non-Disk 认不了来; 可见阵列中每个成员磁盘都记录了阵列的信息与及证明自己是阵列成员的标记;那谁破坏了 3921 这个硬盘里的物理信息????主板吗?不可能,谁? 凶手正是RAID控制器自己??!!
   但也有一个可能,RAID控制器的ROM记录着阵列以及各成员的信息,如果是这样,试想当你的RAID卡坏了的时候,也意味着你的整个阵列也彻底完蛋,如果是你设计RAID卡,你想这样吗?(但也有可能真的是这样,我不敢肯定,呵)
   我仅仅找到了一篇中文的文章,它点了一下RAID卡的工作原理:
运作流程如下: 
1  初始化 RAID 卡寄存器 
2  读取 NVRAM 的上次 RAID 参数,与硬盘实际信息进行比较,显示结果 
3  发送配置提示、响应 HOST 命令进入配置界面 
4  提供配置菜单、将用户提供的 RAID 卡参数、 RAID 参数存入 NVRAM 
5  根据 RAID 参数,通过 SCSI 控制器对硬盘进行初始化写操作 
6  完成配置 
7  等待 Host 发出读写操作命令 
   就这几句话;或许能解释很多东西(如果上面的"运作流程"是大概正确的话)。上面提到RAID卡和成员磁盘都会记录阵列信息。
   以我的知识,SATA硬盘只需要4条线即可完成传输,1条送出,1条输入,1条供电,1条接地;我们猜想一下这种情况,数据线没接好,送出那条是接通了,但是输入那条却是断路的,会怎么样? 我想主板还是检测出了它,但是验证它的时候主板却颇感迷惑! 当第一次到了RAID控制器那里,RAID控制器可能还没有认为阵列崩溃, 接着:
   5  根据 RAID 参数,通过 SCSI 控制器对硬盘进行初始化写操作 
   注意这个 "初始化写操作" , 我猜想, 正是由于 3921 那硬盘的数据线没有接好,结果写错误,直接导致这个硬盘的RAID信息被破坏,或者另一种猜想,由于这个硬盘"初始化写"失败,结果导致与其它4个硬盘信息(或者与RAID卡记录的信息)不同步,第二次开机进到RAID控制器后,以致于它被认为是Non-RAID Disk。
   如果上面的猜想成立,那么请注意了: 只要有一个磁盘的数据线没接好,或者电源不稳定,或者在RAID控制器初化时突然断电,或者...  一切的或者, 只要你敢开机引导磁盘阵列,“初始化写操作失败”,整个阵列就Over!
   RAID是何其的脆弱,难道只是说RAID0脆弱吗?如果上面的理论成立,针对的就是所有RAID级别,而不只是RAID0;
--------------------- 分割线 -------------------------
   为什么按完全相同的设置重建阵列,并恢复分区表,数据还是被破坏很多?我想是因为RAID控制器是创建阵列时,会对阵列进行初始化, 这个初始化好像在每一个地方都把数据破坏了一点点, 这样已经够你受的了;所以,除非数据无关痛痒,你情愿失去也不愿意花钱送到恢复公司,你才可以重建;但还有一个办法,工具就是RAID Reconstructor 和 R-Studio , 这两个东西都可以从已丢失信息表的RAID0 或 RAID5 中抽取数据,做成一个镜像文件,具体的我没操作过;
   出现Non-RAID Disk ,阵列 Failed! 怎么办?其它RAID级别,或许还能找一个硬盘补上,或者直接用原来Non-RAID Disk 补, 我想都可以恢复, 但对于RAID0, 我现在都不知道怎么做;像我这种(ICH10R),控制器里只有4个操作,1、创建阵列;2、删除阵列;3、把一个硬盘从阵列中去除; 4、退出;  看,人家英特尔都不能怎么做,我还能怎么做?
   看到有一个贴子的一个回复说,遇到这种情况或许可以进RAID控制器那里清除RAID信息,然后再插上磁盘,看看能不能认得出来。我没有试过;问题是ICH10R只有4个菜单,到底能不能在不插磁盘的情况下进控制器,还要怀疑,即使能进控制器,2、删除阵列 这项能不能在不插磁盘的情况下给你一个成功的提示还要怀疑,我没试过; 因为我现在已经重建并存放了数据,我不想做这些实验;
   但我还是糊乱做了一些工作:现在我将每个硬盘的前204800个扇区,即100MB的数据备份了起来,共500M,刻到了光盘上,纯属是到时出现同样的问题后我就乱碰一下,反正是没办法了;刻盘后,又看到资料说Linux里,RAID的超级块,即记录RAID信息的块,是在磁盘的尾部,或许下次连每个磁盘的尾部都备份? 反正我的资源都放在中间,无所谓头尾;
   RAID的信息到底放在成员磁盘的哪里呢?头?尾? 反正不太可能是中间,或者是随机,或者是杂乱的;但备份各个磁盘的头尾到底有没有用??我也不知道,因为我对RAID的知识缺乏;
   又或许,阵列信息是只记录在RAID卡上的,成员磁盘上根本就没有RAID信息,又或许,RAID卡上记录阵列信息,磁盘上也有,但以RAID卡的为准,对比不上就阵列Failed!  -------> 如果是这样,设计RAID卡的人真该拖去枪毙,不要说是技术上的原因,是你没这个心而已;
   最后只想说,好希望国内能有一本专门讲RAID的书;
阅读(739) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~