Fake RAID 不能碰

上个月和硬盘一起订购的内存条终于到了,16根 Sun 服务器原装 2GB DDR2 667 (PC2 5300) ECC 内存条用来升级4台 Sun Fire X2100 M2,升级后每台 8GB,可惜 X2100 M2 只有4个插槽,每个插槽最大只支持 2GB DIMM. 第二批内存还在等待中,用来升级部分 X2200 M2, X2200 M2 有16个内存插槽,每个插槽可以支持 4GB DIMM,最大可以使用 64GB.

sun 2gb memory

今天升级内存出现问题,不知道什么原因开机后 Nvidia RAID 报错:

navidia raid error

上个月用服务器自带的 Nvidia RAID 做了双硬盘 RAID0,现在系统启动不了了,提示找不到硬盘。解决办法是把当前的 RAID array 删除后重建一个,千万不能选择 “clear data”,然后重启后发现 Linux 内核可以启动但是不能挂载 root,检查 grub 发现系统的时候企图启动挂载原来的 raid 分区 root=/dev/mapper/nvidia_bfbbbhdf2,但是重建 raid 后设备名称改了,所以应该挂载新的设备名到 root:

# mkdir /mnt
# mount -t ext3 /dev/mapper/nvidia_ebhbbgdh2 /mnt/

挂载后就可以看到原来的硬盘内容了,也可以使用原硬盘的程序了,用 vi 修改 grub:

# /mnt/bin/vi /mnt/boot/grub/menu.lst
root=/dev/mapper/nvidia_ebhbbgdh2

重启后就应该可以正常启动了,有惊无险。使用 RAID0 是非常危险的举动,坏个硬盘、控制器什么的整个系统数据就受到威胁,运气不好就会丢失所有数据。不过既然要做 RAID0,早就应该有心理准备和打算,并且任何时候都不能应用 RAID0 到关键服务器上,如果一定要做 RAID 的话首选硬件 RAID,其次是 Linux software RAID,最好不要碰 Fake RAID,冗余方式推荐 RAID10 和 RAID5。

RAID 0 和 RAID 1 的性能

raid0

上个星期订购的硬盘到了,8个 Seagate 500GB SATA 2 硬盘用来升级几台 SUN 服务器,替换上面的几个 250GB 老硬盘。VPSee 一直在服务器上用的是 RAID 10 和 RAID 5,传说中 RAID 0 的 IO 性能有很大提高,VPSee 对 RAID 0 的 IO 性能向往已久,今天刚好有多余的硬盘,可以测试一下。理论上来说,RAID 0 实现了一个线性的磁盘阵列,数据被切分成块(blocks)后分别写入各自硬盘,分散了 IO 负载,IO 性能会有很大提高,如果磁盘阵列里的每个磁盘控制器都只对应一个硬盘,充分分散 IO,那么 IO 性能应该更好。今天的测试结果发现不管是硬件 RAID 0 还是软件 RAID 0 性能都很差,差得自己都不能解释,理论上双硬盘 RAID 0 的性能应该是无 RAID 0的2倍,VPSee 的实际测试数据结果刚好相反,无 RAID 0 的性能是有 RAID 0 的2倍。测试结果还显示硬件 RAID 和 软件 RAID 性能接近,这一点很好解释,测试用的是 SunFire X2100 M2 服务器,上面自带的是 Nvidia RAID,被称为 “FakeRAID”,FakeRAID 其实也是一种软件实现,和 Software RAID 一样都会消耗 CPU,其性能和 Software RAID 相似不奇怪。

10月15日更新:10月13日测试结果显示不带 RAID 0 的性能比带 RAID 0 的还好得多,原因查明是因为其中的一个硬盘有问题,没料到没拆封的新硬盘居然还会有故障,导致先前的测试环境不公平,测试的结果无法合理解释。换了硬盘重新测试硬件 RAID 0,新的测试结果显示 RAID 0 的 IO 性能有较大提高,与理论相符;软件 RAID 1 用 CPU 模拟 RAID 功能,导致系统负载(load average)保持较高状态,和理论相符。(下面的数据已经更新)

双硬盘 + 普通挂载

无 RAID 0 测试也是设置的两块硬盘,一个硬盘用来装系统,另外一个硬盘挂上去。分别用 hdparm,bonnie++,iozone 测试:

# /sbin/hdparm -Tt /dev/sda
/dev/sda:
 Timing cached reads:   4076 MB in  2.00 seconds = 2036.86 MB/sec
 Timing buffered disk reads:  162 MB in  3.00 seconds =  53.97 MB/sec

# ./bonnie++
Version 1.03e ------Sequential Output------ --Sequential Input- --Random-
                    -Per Chr- --Block-- -Rewrite- -Per Chr- --Block-- --Seeks--
Machine  Size K/sec %CP K/sec %CP K/sec %CP K/sec %CP K/sec %CP  /sec %CP
bang       4G 63786  98 68561  64 33488  16 35061  80 100811  19 232.2   0
              ------Sequential Create------ --------Random Create--------
              -Create-- --Read--- -Delete-- -Create-- --Read--- -Delete--
        files  /sec %CP  /sec %CP  /sec %CP  /sec %CP  /sec %CP  /sec %CP
           16 +++++ +++ +++++ +++ +++++ +++ +++++ +++ +++++ +++ +++++ +++
bang,4G,63786,98,68561,64,33488,16,35061,80,100811,19,232.2,0,16,+++++,+++,+++++,+++,+++++,+++,+++++,+++,+++++,+++,+++++,+++

# ./iozone -s 100M
                                                  random  random    bkwd   record   stride                                   
    KB  reclen   write rewrite    read    reread    read   write    read  rewrite     read   fwrite frewrite   fread  freread
102400       4  340155  508979   586930   599212  566258  520126  534720   590170   563886   320739   433341  528295   520245

双硬盘 + 硬件 RAID 0(FakeRaid)

分别用 hdparm,bonnie++,iozone 测试:

# /sbin/hdparm -tT /dev/mapper/nvidia_igcjceec3
/dev/mapper/nvidia_igcjceec3:
 Timing cached reads:   1766 MB in  2.00 seconds = 883.57 MB/sec
 Timing buffered disk reads:  374 MB in  3.01 seconds = 124.24 MB/sec

# ./bonnie++
Version 1.03e ------Sequential Output------ --Sequential Input- --Random-
                    -Per Chr- --Block-- -Rewrite- -Per Chr- --Block-- --Seeks--
Machine  Size K/sec %CP K/sec %CP K/sec %CP K/sec %CP K/sec %CP  /sec %CP
bang       4G 58566  92 116851  66 50132  30 27333  86 149623  35 364.4   1
              ------Sequential Create------ --------Random Create--------
              -Create-- --Read--- -Delete-- -Create-- --Read--- -Delete--
        files  /sec %CP  /sec %CP  /sec %CP  /sec %CP  /sec %CP  /sec %CP
           16 +++++ +++ +++++ +++ +++++ +++ +++++ +++ +++++ +++ +++++ +++
bang,4G,58566,92,116851,66,50132,30,27333,86,149623,35,364.4,1,16,+++++,+++,+++++,+++,+++++,+++,+++++,+++,+++++,+++,+++++,+++

# ./iozone -s 100M
                                                  random  random    bkwd   record   stride                                   
    KB  reclen   write rewrite    read    reread    read   write    read  rewrite     read   fwrite frewrite   fread  freread
102400       4  149748  507946   937291   798155  792109  399647  852672   524171   802494   254962  1249892 1514190  1291883

双硬盘 + 软件 RAID 1(Software RAID)

分别用 hdparm,bonnie++,iozone 测试,系统负载 load average 居高不下:

# /sbin/hdparm -tT /dev/sda
/dev/sda:
 Timing cached reads:   2236 MB in  2.00 seconds = 1118.92 MB/sec
 Timing buffered disk reads:   86 MB in  3.05 seconds =  28.19 MB/sec

# ./bonnie++
Version 1.03e ------Sequential Output------ --Sequential Input- --Random-
                    -Per Chr- --Block-- -Rewrite- -Per Chr- --Block-- --Seeks--
Machine  Size K/sec %CP K/sec %CP K/sec %CP K/sec %CP K/sec %CP  /sec %CP
bang       16G  4735  10  4831   2  4117   1 18128  50 48536   7 344.5   1
               ------Sequential Create------ --------Random Create--------
               -Create-- --Read--- -Delete-- -Create-- --Read--- -Delete--
        files  /sec %CP  /sec %CP  /sec %CP  /sec %CP  /sec %CP  /sec %CP
           16 17649  47 +++++ +++ +++++ +++ +++++ +++ +++++ +++ +++++ +++
bang,16G,4735,10,4831,2,4117,1,18128,50,48536,7,344.5,1,16,17649,47,+++++,+++,+++++,+++,+++++,+++,+++++,+++,+++++,+++

# ./iozone -s 100M
                                                  random  random    bkwd   record   stride                                   
    KB  reclen   write rewrite    read    reread    read   write    read  rewrite     read   fwrite frewrite   fread  freread
102400       4  285771  558272   910466  1622948 1803419  919134 1026424  1561120  1785501   327527   768025 1131377  1174904