您的位置:首页 > 运维架构 > Linux

Linux磁盘阵列

2012-03-06 23:07 176 查看
RAID(Redundant Array of Independent Disk,独立冗余磁盘阵列)是一种把多块独立的硬盘(物理硬盘)按不同的方式组合起来形成一个硬盘组(逻辑硬盘),从而提供比单个硬盘更高的存储性能与数据备份能力的技术。RAID特色是N块硬盘同时读取速度加快及提供容错性(Fault Tolerant)。RAID磁盘阵列系统,是由美国加州大学伯克利分校Patterson教授,于1988年首先提出的。为什么会提出这个磁盘阵列系统呢?

因为在计算机发展的初期,大容量磁盘的价格还相当高。满足数据存储大容量需求和解决存储安全问题的主要方法,是使用磁带机等设备进行备份。这种存储方法虽然可以满足较大容量的数据存储需求,保证了一定程度上的数据安全,但查阅和存储工作都相当繁琐。1987年,Patterson、Gibson和Katz三位工程师,在加州大学伯克利分校发表了题为《A Case of Redundant Array of Inexpensive Disks(廉价磁盘冗余陈列方案)》的论文,其基本思想就是将多个容量较小的、相对廉价的磁盘驱动器进行有机组合,使其性能超过一个昂贵的大磁盘。这一设计思想很快被业界接受。从此,RAID技术得到了广泛应用,数据存储进入了更快速、更安全和更廉价的新时代。

另外,RAID有好几个级别,不同的RAID级别对应于不同的性能、容量和可靠性,它们各自的侧重点不同。常见的有Raid0--Raid7,还有组合的Raid10、Raid50等。现在说下我所了解的几种常用的级别:

RAID0:将多块磁盘组合起来,在逻辑上成为一块使用。要实现RAID0必须要有两个以上的磁盘。其保存数据的特点是:将数据分成特定大小的数据片(chunk)保存在不同的磁盘上。而且其读取数据的方式也是同时从不同磁盘上读取的。所以这个级别的raid的性能是最高的,写入速度快,读取速度快。但是其风险也高,因为只要其中有一块磁盘坏了,那保存的数据也就不完整来了,那么所有的数据也就不可用了,而且也没有冗余功能。所以说RAID0的特点是:性能高,风险高;

RAID1:镜像结构。要实现RAID1需要的磁盘必须是2的倍数,最少两块。其保存数据的特点是:将数据同时完整的写入到两块磁盘上,所以其写入速度就会慢点了。不过读取速度会快点,因为其也是从多块磁盘是同时读取的,这个磁盘读取前半部分,另一个读取后半部分,所以速度会快点了。又由于数据在保存的时候是保存两份的,所以其磁盘利用率只有1/2了。不过其数据安全性是最高的,因为一块磁盘坏了,另一块磁盘里依然还有完整的数据。RAID1的特点是:数据安全性最好,磁盘利用率最低(只有磁盘利用率的50%)。

RAID4:带奇偶校验码的结构。要实现RAID4最少需要3块磁盘。其中一块磁盘用来存储奇偶校验码,其数据存储的方式也是将数据分成特定大小的数据片(chunk)保存在剩下的磁盘上。它是以数据的校验位来保证数据的安全的。所以它兼有raid0和raid1的优点,不过当数据损坏时,就需要占用大量的资源来计算校验码来恢复数据了,由于每次都需要进行计算才能得出数据,所以此时读取数据的速度就慢的多了。而且也会对存放校验码的那块磁盘造成很大的压力,使其比其他磁盘容易损坏。

RAID5:循环奇偶校验码的结构。要实现RAID5最少也需要3块磁盘。与RAID4不同的是其校验码不再是全放在一块磁盘上的,而是循环的存放在不同的磁盘上的。这样,任何一个硬盘损坏,都可以根据其它硬盘上的校验位来重建损坏的数据。RAID5的优点是提供了冗余性(支持一块盘掉线后仍然正常运行),磁盘空间利用率较高(N-1/N),读写速度较快(N-1倍)。其最大的好处就是第一个了,就是在一块磁盘掉线的情况下,依然可以正常工作。

RAID6:两种奇偶校验码的结构。要实现RAID6最少需要4块磁盘。其中两块磁盘用来存放奇偶校验码。其它的就不多说了,其最大的优点是当两块磁盘同时出现故障的时候,依然可以保证数据的安全。

RAID10:它是RAID1和RAID0的组合,就是先镜像再组合。最少也是四块磁盘,且是偶数个磁盘才能使用。我们以四块为例,将四块磁盘分成两组,每组两块。先将这两组分别做成RAID1,然后将这两个RAID1再做成RAID0。RAID10有着不错的读取速度,而且拥有比RAID0更高的数据安全性。除非做成RAID1的一组磁盘同时坏掉,不然RAID10就可以正常工作。

有冗余功能:1、4、5、6、1
提高写入功能:0、4、5、6、10

上面简单的介绍了下RAID的相关知识,下面就来看看如何实现RAID吧!

实现RAID有两种方式,一种是基于软件,另一种就是基于硬件的了。基于软件的这种就是将其做成内核的功能模块,然后通过一些命令与内核交互来实现RAID;基于硬件的是将其固化在主板上,将其功能写入到raid芯片上。两者哪儿个好呢?那肯定是基于硬件的了,不过其成本比较高。在这里我们来看下软raid的实现方法。

RAID在系统上的标识:Hard:/dev/sd# ; ; Soft:/dev/md#

实现软raid我们使用的是mdadm这个模式化命令。简单的介绍下mdadm这个命令吧!

MODES(模式):

Assemble:装配模式;将一个已经停掉的软raid重新识别成raid设备,使其可以正常使用;
Create:创建模式;建立新的软raid设备;
Follow or Monitor:监控模式;监控raid的工作状态;
Grow:扩展模式;新增磁盘;
Manage:管理模式;用于raid的配置的,可以实现raid的停用、删除、更换。

OPTION(选项):

-A:标识工作于装配模式;
-C:标识工作于创建模式;
-F:标识工作于监控模式;
-G:标识工作于扩展模式;
--add
--fail
--remove:可以自动识别工作于管理模式;
-v,--verbose:表示详细信息;
-s,--scan:扫描;

Create、Grow这两种模式的常用选项:

-n:用于指定创建raid设备时使用的磁盘个数;
-x:用于指定创建raid设备时使用的空闲盘的个数;功能是当某块磁盘坏了的时候,自动替代掉坏的磁盘;
-c:用于指定数据片(chunk)的大小,默认是64k;
-l:用于指定创建的是哪儿个级别的RAID;

了解了mdadm的简单知识,下面我们就来看看如何创建RAID吧!这里我们在虚拟机上用同一磁盘的不同分区做介绍,但是在实际操作中是不可以这样做的。我们这里只是为了方便了解其使用方法,以创建RAID0为例:

1、创建磁盘分区

在这就不演示怎么创建分区了,就是使用fdisk这个命令进行分区的。需要注意的是在创建分区的时候选择的类型是:fd;并且在创建分区以后不能直接格式化。

2、创建RAID设备、格式化、挂载

#mdadm –C /dev/md1 –a yes –l 1 –n 2 –x 1 /dev/sda{5,6,7}
#mke2fs –j /dev/md1
#mkdir /mnt/md1
#mount /dev/md1 /mnt/md1

-a yes:表示的是没有这个设备的时候创建该设备。其它选项的意思可以看上面的介绍。在格式化的时候我们可以使用一个选项,以避免以后每次存储都要计算数据片与需要的块。#mke2fs –j –b 2048 –E stride=32 /dev/md1

当我们创建好RAID设备以后可以使用下面两个方式查看其信息:

#cat /proc/mdstat
#mdadm --detail /dev/md1

在虚拟机上我们可以故意搞坏某个分区,来看那个空闲分区如何变化的:

#mdadm /dev/md1 --fail /dev/sda5

我们也可以将坏的磁盘移除出去:

#mdadm /dev/md1 --remove /dev/sda5

也可以新加一块磁盘:

#mdadm /dev/md1 --add /dev/sda5

知道如何创建了,那么也需要知道是如何停用该设备的:

1、卸载设备

#umount /mnt/md1

2、停用raid设备

#mdadm –S /dev/md1

停用以后,我们又想重新使用怎么办呢?使用装配模式给重新启用就ok了:

#mdadm –A /dev/md1 /dev/sda6 /dev/sda7

这种方式是因为我们系统上没有记录这些raid设备信息。

#mdadm –D –s >> /etc/mdadm.conf
#mdadm –A /dev/md1

这种方式是在我们未停用raid设备时将其信息写入到mdadm.conf文件中。重新装配的时候就不需要再指定磁盘了。

跟菜鸟我一起多加练习吧!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息