PowerRC's Blog

Posted by:
PowerRC

码农,吃货,偶尔飙车和摄影,应该属于危险人物。

11,587

Intel RAID (FakeRaid) 在ubuntu下的安装与使用初探

简单介绍下环境
系统=》ubuntu linux 12.04 LTS 3.11 kernel (用最新的内核版本,是因为我选的主板的网卡比较新,老内核识别不了)
主板=》supermicro C7Z87 (pc主板来说,他价格很贵,比华硕技嘉之流的贵不少,但是他胜在有8个SATA ,和两个网卡)
硬盘=》西数 1TB 绿盘 3个,2个用来组raid,一个用来热替换 (以下分别用sda,sdb,sdc来标注,其中,sda和sdb是用来组raid的)
其实主要就是系统和主板需要留意下,其中主板用的是INTEL Z87芯片组,所以用的raid是intel的raid (所谓的intel rapid storage technology)

初始化设置。
把硬盘接上主板芯片组的ISATA 0~5 的随便两个端口 ,不要接在ASATA 0~1上,因为这两个接口是主板上第三方芯片扩展出来的,没有raid功能。开机一闪过BIOS界面后,马上狂按键盘CTRL +I ,进入intel raid设置界面。这个设置很简单,就是选择硬盘,选择raid模式,我选的是RAID1,这里建议下,raid名字不要写太长,因为后面会用到,然后保存重启就OK了。

2.系统安装。
前面的安装步骤,和安装在普通硬盘上的步骤一样。唯一有区别的地方,在于选择磁盘分区的时候,会有一个对话框,问你是否启用sata raid.这个必须选yes,否则安装程序不会加载INTEL RAID 驱动,后面就没法玩了。加载后,intel的raid 盘,会被辨认成路径类似这样的盘符/dev/mapper/isw_xxxxxxxxxxxxx .
后面这串XXXXXXXXX,由你的RAID ID和RAID 名字组成。当你第一眼看到的时候,最好马上抄下来,或者用手机拍照存根。
分区之类的不太重要,所以这里不赘述,不懂的同学可以选择自动分区,除了SWAP外,其他都分到/分区下。
之后会问你是否需要格式化和保存分区表,这个和正常流程一样,都选yes后。
最关键的一步来了,就是问你是否安装GRUB到master boot record.
这里不知道是不是debian/ubuntu的installer的bug,还是什么原因导致程序无法辨认raid盘,而必须手动指定。所以在遇到这个对话框的时候,要先选no,然后在紧接着,让选选择需要安装grub盘符的对话框里,填入刚才记下来的 /dev/mapper/isw_xxxxxxxxxxxxxxxx 这串东西。
如果安装程序根本没有辨认出任何可用的分区,会略过让你是否安装grub的这个对话框,而让你直接指定需要安装grub的分区。
之后就和正常流程一样,大工告成了。
吐嘈一下,linux对intel的soft raid的支持,十分差。以前我在windows下弄过,只要驱动能加载,根本没有问题,性能也还行。但是过去几年来,每每我遇到需要在linux下配置inte raid,去google,看到的说法都是要放弃intel的soft raid,有linux内核开发者甚至建议自己手动弄软raid来替代。但是这样要做到热切换,一堆命令要敲(并非不可行)。国外的linux 内核大牛都管intel raid称之为fake raid,认为仅是一个噱头,没有任何意义。所以基本上遇到问题的人,如果像我一样google到debian的document的时候,大都会放弃使用intel fakeraid。
那么实际上,intel raid是否真的如此不堪?

3.测试
系统安装好后,在/dev下能看到,不仅有类似硬raid那样的DM-0,DM-1的盘符,还有类似没有设置raid的sda , sdb 之类的盘符。(就是一样的系统,我后来用另外一张marvel的soft raid卡测试,发现只要组raid后,系统不会认出单独的硬盘。)这个其实也是linux intel raid 驱动的一个bug。只要小心使用,不要去碰分别认出来的盘符,就不会有问题。
然后我直接拔了intel raid中的第一个硬盘(sda),终端马上报错,表示无法写入信息至sda。此时系统陷入了死机状态。
重启后,intel raid信息显示状态是degrade,但是系统能进入,数据也没丢,一切操作正常,这时可以看到,系统实际上是加载着sdb,而不是raid。我这时去download了几个文件,看看等下rebuild之后会不会丢。

以下,我分两种情况测试。

情况一:把sda原封不动的接回去。
我把sda接回去,终端报错无法影射这个磁盘(linux不支持硬盘热插拔,否则盘符会被改变)
再重启,intel raid信息显示rebuild。这时,系统也能进入,刚才degrade时download的文件都消失了,从系统挂载的情况看,系统是用了raid来挂载。此时整个系统的速度极慢,因为rebuild过程中,两个盘会处于对拷状态,从iostat可以看出,这时单个硬盘的读写速度高达120mb/s,倒是没怎么占用CPU资源。而且他的rebuild机制极傻,虽然硬盘是1tb的大小,但是实际上只有1.2G左右的数据,居然也全盘对拷。这时能看出来,系统从sdb往sda灌数据。不过很明显,这个rebuild过程是扇区复制,不管你实际上有没有数据。于是,这个1tb的raid,rebuild过程花了超过2个小时。1tb的硬盘,100MB/S左右的速度对拷,为什么会花费超过2个小时?不得而知

rebuild过程可以通过这个命令"dmsetup status"来看,例如我的就是
isw_cajfeaehgg_SYSTEM_RAID1p6: 0 31250432 linear
isw_cajfeaehgg_SYSTEM_RAID1p5: 0 1726932992 linear
isw_cajfeaehgg_SYSTEM_RAID1: 0 1953497352 mirror 2 8:0 8:16 5172/14905 1 AA 1 core
isw_cajfeaehgg_SYSTEM_RAID1p2: 0 2 linear
isw_cajfeaehgg_SYSTEM_RAID1p1: 0 195309568 linear
5172/14905 表示的是进度。在我这个例子里,当他变成14905/14905的时候,就说明rebuild完。

等rebuild好之后,再重启,发现系统依然在rebuild,而且是从头开始rebuild。此时,系统从sda往sdb灌数据。而且刚才第一次rebuild过程中的下载的文件全部都丢失了。这样没完没了地rebuild,应该也是一个bug。不过实际上,如果raid挂了其中一个硬盘,会像我这样把原来的硬盘接回去的可能是不存在的。那么,来看看我的第二步测试。

情况二:把全新的sdc替换sda。
由于彻底替换了sda。raid的meta信息已经被彻底破坏,此时必须先进入raid bios设置,设置新添加的盘(硬raid也必须如此)。
进入intel raid bios,系统自动提醒要设置新替换的硬盘,简单设置之后,raid状态就会从degrade 变成rebuild。这时raid bios还提示,rebuild的过程和结果会在OS系统启动后提示。那就是可以在后台自动rebuild咯?
保存退回出,在引导linux的时候死机了。其实也不是死机,可以看到这时是在rebuild,两盘对拷中。硬盘灯常亮。我等了大概一个小时,发现电脑还是没有反应,就失去耐性了。实际上,如果服务器down 机这么久时间,也是不可接受的。

4.总结
总的来说,我觉得intel这个raid在linux下,没有实际意义,虽然有基本的degrade与rebuild机制,但是只要硬盘挂了,一切都玩完。我这里测试的场景是sda挂掉,如果实际上是sdb挂掉,可能结果稍好,但是这不足以证明intel raid能用。
然而在windows下,他应该是能用,因为intel指的所有相关管理工具,都跑在windows下,这里我就不测试了,我的服务器是用来跑云存储的,不可能用windows。
归根到底,只是linux下,对intel的raid支持不善。redhat开发了专门的工具来配套intel raid,就是dmraid,可惜这个工具由于某种原因,于2010年停止开发,所以bug无数且没人fix,是理所当然。
于此同时,intel有专门的文档,推荐各位在linux下用mdadm来管理intel raid。但是mdadm是soft raid管理工具,用他,我就不必用你的intel raid了。随便接几个ahci的硬盘,都能组soft raid。
于是,就有了我的下一篇文章《intel raid centos实战》

版权申明

若文中未注明,则本文由 PowerRC 原创,转载请注明出处。

分享

发表评论

*

code

back up ↑