存储 频道

RAID-5磁盘阵列故障分析

  【IT168 技术】RAID-5磁盘阵列是现在使用最普遍的磁盘阵列方式。在RAID- 5这个磁盘阵列模式中,数据平均分布在每个硬盘中。所以即使某个硬盘损坏了,仍然可以凭借其他硬盘上的内容恢复损坏硬盘中的数据。不过,当有两个以上硬盘同时出现故障时,那么硬盘中的数据将无法修复。

  为了让磁盘阵列发挥其应用的作用,Linux系统管理员需要对磁盘阵列的容错性能力进行分析。通常情况下,根据企业对待数据损失的不同,每个一个季度或者半年进行测试一次,以保障磁盘阵列能够正常工作。

  一、测试磁盘阵列是否在起作用

  有时候要测试磁盘阵列是否在起作用年,要对磁盘阵列进行“破坏性”测试。这里的破坏性测试笔者是打上了引号的,不是真的去损坏硬盘。为了测试RAID-5磁盘阵列是否有硬盘损坏的情况,需要先把服务器关掉。然后把其中一块硬盘的线拔掉,让系统找不到这块硬盘。如此的话系统就会认为这块硬盘损坏了。会尝试使用其他硬盘中的数据来恢复损害的硬盘中的内容。重新启动Linux系统后,由于只是去掉了一块硬盘,故系统仍然可以启动RAID-5 磁盘阵列。而且采用了磁盘阵列之后,数据会自动恢复。即少了一块硬盘之后,一切仍然可以正常运行。通过查看磁盘阵列的状态记录文件,可以查看相关的信息。

  在Linux系统下,磁盘阵列状态文件保存在/proc/mdstat下。在这个状态文件中,可以看出当前磁盘阵列中启用了几块硬盘,会指明当前硬盘的序号。虽然说同时损坏两块以上硬盘就无法恢复数据,但是,这种情况毕竟还是少数。同时损坏2个硬盘的几率并不是很高。故磁盘阵列在安全性上还是有比较高的利用价值。

  在Linux下部署磁盘阵列的时候,还有一个好处。就是即使有两块硬盘损害了,虽然不能够修复数据,但是仍然可以启动Linux操作系统。当两块以上硬盘损坏时,重新启动之后,系统会发出警告信息。此时管理员可以利用ROOT帐号进行登陆。然后更改配置文件/ETC/RAIDTAB的文件名字再重新启动,就可以顺利登陆到Linux系统中。不过可惜的是,此时硬盘上的数据将无法恢复。

  二、通过配用硬盘提高磁盘阵列的安全性

  由于2个硬盘以上的损坏将无法恢复数据。所以Linux系统管理员就会考虑,能否在Linux系统中再挂载一个备用硬盘。平时的时候这块硬盘不会包含到磁盘阵列中。当磁盘阵列中某块硬盘出现损坏时,就利用这块备用硬盘替补。如此的话,即使管理员暂时没有发现损坏的硬盘,对企业的影响也不会很大。

  大部分的磁盘阵列技术都支持采用备用硬盘。当某个硬盘工作不正常时,磁盘阵列会立刻启动备用硬盘。并通过一定的容错技术,将数据恢复到正常状态。但是并不是所有的磁盘阵列技术都支持这个备用硬盘。笔者在上篇文章中介绍过几个常用的磁盘阵列方式。其中就提到过Linear模式。由于这种模式并不会分散存储数据,而是一块硬盘存储空间满了以后再存储到另一块硬盘中,故并没有容错机制。此时备用硬盘也就不会起作用。不过在RAID-5 模式下,其是分散存储数据的,具有很高的容错性。所以此时若配置一块额外的备用硬盘,能够让磁盘阵列的安全性更上一层楼。另外这里需要注意的是,当操作系统启动的时候,备用硬盘也会随之启动。只是平时的数据不会存储到这一块硬盘中。而只有当某一个硬盘损坏时,才会这块备用硬盘中存入数据。

  如果系统管理员需要在已有的磁盘阵列中加入备用硬盘的话,则需要修改磁盘阵列的配置文件/etc/raidtab。其实这个更改也很简单。通常情况下只需要向这个配置文件中加入两条语句即可。

  第一条语句:nr-spare-disk 1。这条语句主要用来说明这个硬盘是备用硬盘。除非其他硬盘损坏了否则的话磁盘阵列不会往这个硬盘中存入数据。

  第二条语句:device /dev/had。这一条语句用来指定备用硬盘的分区名称。我们知道,Linux系统跟微软操作系统下的磁盘阵列技术有一个很大的不同。在微软操作系统下,它是以硬盘为单位的。但是在Linux操作系统下,则是以分区为单位的。故在Linux操作系统中,即使只有一块硬盘也可以实现磁盘阵列技术,只是不能够实现相关的功能而以。所以,这里除了要指明硬盘外,还需要指明硬盘分区的名字。

  另外还有一个注意事项。有些Linux管理员可能担心多个硬盘会同时损坏。所以他们会为磁盘阵列配置多个备用硬盘。此时如果硬盘有损坏的话,系统就会考虑需要首先采用哪块硬盘。此时可以利用spare-disk语句来指定首先采用哪块硬盘。如果编号设置为0,就表示这块备用硬盘是此磁盘阵列所使用的第一顺序备用硬盘。其他的配置跟磁盘阵列的常规配置相同,这里就不做重复介绍了。

  编辑推荐:强力推荐Linux下的五大BT下载工具

  不过注意当添加完备用硬盘之后,备用硬盘并不是马上生效的。修改完成磁盘阵列的配置文件之后,需要先利用Raidstop命令停用磁盘阵列;然后再利用Mkriad命令重新初始化磁盘阵列。在这个初始化的过程中,系统会在后台同步所有的硬盘数据。所以这个过程会随着硬盘数据的多少而变化。当硬盘中数据比较多时,这个过程可能会比较久。在这个过程中,千万不要重新启动Linux系统。设置好备用硬盘之后,如果磁盘阵列中有某一块硬盘出现了损坏,则系统会自动启动备用硬盘。并且会根据其他硬盘上的数据重建此备用硬盘上的数据。重建后的数据相当于是损坏硬盘数据的一个拷贝。通过这种方式,就可以提高磁盘阵列的容错性能。

  三、注意磁盘阵列空间的使用率

  磁盘空间的容量是不是几块硬盘容量的总合呢?其实不是。如在RAID-5磁盘阵列中,跟普通硬盘存储数据不同,磁盘阵列技术会自动产生一个同位校验码。这个同位校验码主要用来解决硬盘损坏时数据恢复问题。这里要特别注意,RAID-5并不会特别保留固定的一个硬盘来保存同位校验码,而是将同为校验码分散存储在所有的硬盘当中。所以这种方式并不会因为保存同位校验码在同一个硬盘上而造成整体系统性能的瓶颈。

  但是,虽然RAID-5 不会特别保留固定的一个硬盘来保存同位校验码,但是他会使用一个硬盘的容量来保存同位校验码。这是什么意思呢?也就是说,假设现在有四块硬盘组成了一个磁盘阵列,其中每块硬盘的容量为120G。那么RAID-5 并不会把全部的同位校验码都保存在同一块硬盘上。可是其会在这四块硬盘上分别占用30G的空间,总共120G的容量。也就是说,此时真正可以存储数据的数量为三块硬盘的容量,即360G。对于这个容量,Linux管理员要有一个充分的认识。特别是刚刚接触磁盘阵列的人会有疑问,明明没有这么多的数据,为什么硬盘就这么快满了呢?难道有病毒吗?总之管理员要记住,同位校验码需要占用一个硬盘的容量。不过其并不是单独保存在一个硬盘中,而是在各个硬盘上都获取一定的空间。

  另外需要注意,同位校验码不仅需要牺牲磁盘的容量,而且还会对硬盘的读写性能有不利的影响。读写数据时,磁盘阵列会将一个文件切割成一个个小块,再以小的区块为单位同时向硬盘中读取数据。所以磁盘阵列可以提高硬盘的输入输出效率。从理论上讲,如果有5个硬盘组成磁盘阵列,磁盘陈列会同时从4个硬盘中读写数据。故存取速率可以提高4倍。但是实际工作过程中,由于多处来了一个同位校验码。这个同位校验码的生成、保存也需要牺牲一定的系统资源,故最终的效率并不会达到这么高。不过从这里也可以说明一件事情,就是硬盘数量越多,其硬盘数据读取效率里会越高。

  故架设磁盘阵列时需要耗费比较多的CPU、内存等硬件资源。如果这些硬件资源跟不上的话,磁盘阵列不但不能够起到其应有的作用,而且反而会增加Linux服务器的风险。所以在磁盘阵列安全性分析时,也要考虑CPU、内存等硬件资源能否支持磁盘阵列顺利运转。

0
相关文章