RAID

=============================================================================

概述:

   RAID(Redundant Array of Independent Disk,RAID)独立冗余磁盘阵列,技术是加州大学伯克利分校1987年提出,最初是为了组合小的廉价磁盘来代替大的昂贵磁盘,同时希望磁盘失效时不会使对数据的访问受损失而开发出一定水平的数据保护技术。RAID就是一种由多块廉价磁盘构成的冗余阵列,在操作系统下是作为一个独立的大型存储设备出现。RAID可以充分发 挥出多块硬盘的优势,可以提升硬盘速度,增大容量,提供容错功能够确保数据安全性,易于管理的优点,在任何一块硬盘出现问题的情况下都可以继续工作,不会 受到损坏硬盘的影响。

=============================================================================

RAID的实现方式

外接式磁盘阵列:

  • 通过扩展提供适配能力;

内接式RAID:

  • 主板集成RAID控制器

Software RAID

  • 软件方式实现RAID功能

硬RAID技术:

  • 基于硬件raid解决方案比基于软件raid技术在使用性能和服务性能上会更胜一筹,具体表现在检测和修复多位错误的能力,错误磁盘自动检测和阵列重建等方面,从安全性能考虑,基于硬件的raid解决方案也是更安全的,因此,在实际的生产场景工作中,基于硬件的raid解决方案应该是我们的首选,互联网公司常用的生产dell服务器,默认就会支持raid0,1。如果raid5,10就需要买raid卡(或者个别配置自带有,购买前,看参数)

软RAID技术:

  • 在Linux下安装系统的过程中或者安装系统后通过自带的软件就能实现raid功能,使用软raid可省去购买硬件raid控制器和附件就能极大地增强磁盘的IO性能和可靠性,由于是用软件实现的raid功能,所以它配置灵活,管理方便,同时使用软件raid,还可以将几个物理磁盘合并成一个更大的虚拟设备,从而达到性能改进和数据冗余的目的

如何操作实现RAID

在安装操作系统之前通过BIOS进行设置

  • 此种方试主要目的在于将操作系统安装在RAID之上

在安装操作系统之后通过BIOS或软件进行设置

  • 此种方式主要目的在于将操作系统和其他专用分区(如数据盘)独立开来

为什么选用RAID

原因

  • 磁盘阵列可以把多个磁盘驱动器通过不同的连接方式连接在一起协同办公,大大提高了读写速度,同时把磁盘系统的可靠性提高到接近无措的境界,使其可靠性极高。

用raid最直接的好处是:

  • 提高数据安全性 ;

  • 提升数据读写性能 ;

  • 提供更大的单一逻辑磁盘数据容量存储

RAID级别

 1.简介

level

  • RAID-0:0级别,条带卷,strip;

  • RAID-1:1级别,镜像卷,mirror

  • RAID-2

  • ...

  • RAID-5

  • RAID-6

  • RAID-10

  • RAID-01

 1.RAID-0 (又称为Stripe或Striping--分条)

认识:

  • 即Data Stripping数据分条技术。RAID 0可以把多块硬盘连成一个容量更大的硬盘群,可以提高磁盘的性能和吞吐量。RAID 0没有冗余或错误修复能力,成本低,要求至少两个磁盘,一般只是在那些对数据安全性要求不高的情况下才被使用。

RAID 0的工作方式:

  • 如下图所示:系统向三个磁盘组成的逻辑硬盘(RADI 0 磁盘组)发出的I/O数据请求被转化为3项操作,其中的每一项操作都对应于一块物理硬盘。我们从图中可以清楚的看到通过建立RAID 0,原先顺序的数据请求被分散到所有的三块硬盘中同时执行。

  • 从理论上讲,三块硬盘的并行操作使同一时间内磁盘读写速度提升了3倍。 但由于总线带宽等多种因素的影响,实际的提升速率肯定会低于理论值,但是,大量数据并行传输与串行传输比较,提速效果显著显然毋庸置疑。

6.RAID(廉价冗余磁盘阵列)_RAID


RAID 0的特点

  • 在读写的时候可以实现并发,所以相对其读写性能最好,每个磁盘都保存了完整数据的一部分,读取也采用并行方式,磁盘数量越多,读取和写入速度越快。因为没有冗余,一个硬盘坏掉全部数据丢失。至少两块硬盘才能组成Raid0阵列。 

  • 读写性能提升;

  • 可用空间:N*min(S1,S2...)

  • 无容错能力;

  • 最少磁盘数:2,2+

生产应用场景

RAID 0具有的特点,使其特别适用于对性能要求较高,而对数据安全不太在乎的领域,如图形工作站等。对于个人用户,RAID 0也是提高硬盘存储性能的绝佳选择。

  • 负载均衡集群下面的多个相同RS节点服务器

  • 分布式文件存储下面的主节点或CHUNK server;

  • MySQL主从复制的多个slave服务器;

  • 对性能要求很高,对冗余要求很低的相关业务

 2.RAID-1

RAID-1 的工作方式:

  • 如图所示:当读取数据时,系统先从RAID1的源盘读取数据,如果读取数据成功,则系统不去管备份盘上的数据;如果读取源盘数据失败,则系统自动转而读取备份盘上的数据,不会造成用户工作任务的中断。当然,我们应当及时地更换损坏的硬盘并利用备份数据重新建立Mirror,避免备份盘在发生损坏时,造成不可挽回 的数据损失。

附图:

6.RAID(廉价冗余磁盘阵列)_RAID_02


RAID-1 的特点

  • 由于对存储的数据进行百分之百的备份,在所有RAID级别中,RAID 1提供最高的数据安全保障。同样,由于数据的百分之百备份,备份数据占了总存储空间的一半,因而Mirror(镜像)的磁盘空间利用率低,存储成本高。 Mirror虽不能提高存储性能,但由于其具有的高数据安全性,使其尤其适用于存放重要数据,如服务器和数据库存储等领域。

  • 读性能提升,写性能略有下降;

  • 可用空间:1*min(S1,S2...)

  • 磁盘利用率为50%,即2块100G的磁盘构成RAID1只能提供100G的可用空间。

  • 有冗余能力;

  • 最少磁盘数:2

 3.RAID-4

  • 多块数据盘异或运算值,存于专用校验盘。单块盘做集中校验盘(有性能瓶颈)。支持多接一块盘,做备用盘(热备)。

 4.RAID-5

RAID-5 的工作方式:

 和RAID-4 工作原理相同,只不过是多个磁盘轮流做校验盘

  • RAID 5 是一种存储性能、数据安全和存储成本兼顾的存储解决方案。 以四个硬盘组成的RAID 5为例,其数据存储方式为,图中,Ap为A1,A2和A3的奇偶校验信息,其它以此类推。由图中可以看出,RAID 5不对存储的数据进行备份,而是把数据和相对应的奇偶校验信息存储到组成RAID5的各个磁盘上,并且奇偶校验信息和相对应的数据分别存储于不同的磁盘 上。当RAID5的一个磁盘数据发生损坏后,利用剩下的数据和相应的奇偶校验信息去恢复被损坏的数据。

附图:

6.RAID(廉价冗余磁盘阵列)_RAID_03


RAID-5 的特点

  • 读、写性能提升;

  • 可用空间:(N-1)*min(S1,S2,...);

  • 有容错能力:允许最多1块磁盘损坏;

  • 最少磁盘数:3, 3+

 5.RAID-10

认识

  • Raid10(Raid1+Raid0)是现在比较常用的一种磁盘阵列级别,它的容错好,读写数据效率较高,但经费相对也较高。

RAID-10 的工作方式:

  • 如下图所示,把磁盘两两拆成一组,做RAID-1,然后把RAID-1组合成 RAID-0。数据存储时,首先在 RAID-0 级别,将数据拆解成两部分,然后分配到两组 RAID-1的磁盘中,各 RAID-1 再将各自存储的那部分数据,分别存储在下面的两块磁盘中。

附图:

6.RAID(廉价冗余磁盘阵列)_RAID_04

RAID-10 的特点

  • 读、写性能提升;

  • 可用空间:N*min(S1,S2,...)/2;

  • 有容错能力:每组镜像最多只能坏一块;

  • 最少磁盘数:4, 4+

 6.其他方式

RAID-7:

  • 可以理解为一个独立存储计算机,自身带有操作系统和管理工具,可以独立运行,理论上性能最高的RAID模式

JBOD:Just a Bunch Of Disks

  • 功能:将多块磁盘的空间合并一个大的连续空间使用;

  • 可用空间:sum(S1,S2,...)

CentOS 6 上的软件RAID的实现

主要用到的命令:mdadm

mdadm 的作用:

  • 为软RAID提供管理界面;

  • 为空余磁盘添加冗余;

  • 结合内核中的md(multi devices);

  • RAID设备可命名为/dev/md0、/dev/md1、/dev/md2、/dev/md3等等

mdadm 模式化的工具

命令的语法格式:

  • mdadm[mode] <raiddevice> [options] <component-devices>

支持的RAID级别:

  • LINEAR, RAID0, RAID1, RAID4, RAID5, RAID6, RAID10

模式:

  • 创建:-C;

  • 装配: -A;

  • 监控: -F;

  • 管理:-f, -r, -a

<raiddevice>/dev/md#

<component-devices>:任意块设备

-C:创建模式

  • -n #:使用#个块设备来创建此RAID;

  • -l #:指明要创建的RAID的级别;

  • -a {yes|no}:自动创建目标RAID设备的设备文件;

  • -c CHUNK_SIZE:指明块大小;

  • -x #:指明空闲盘的个数;

-D:显示raid的详细信息;

  •  mdadm -D /dev/md#

管理模式:

  • -f:标记指定磁盘为损坏;

  • -a:添加磁盘;

  • -r:移除磁盘

观察md的状态:

  • cat /proc/mdstat

停止md设备:

  • mdadm-S /dev/md#

试验步骤如下:

1.fdisk t fd(分区类型)
2.创建raid设备
   mdadm -C /dev/md0 -a yes -l 5  -n 4 -x1 /dev/sd{b,c,d,e,f}1
   mdadm -D /dev/md0 显示详细信息
    cat /proc/mdstat  查看md设备

3.mkfs.ext4 /dev/md0  格式化
4.vim /etc/fstab  写到文件中,开机自动挂载
   UUID="b92ddd51-c555-4948-b1d5-8563b697a2f1" /mnt/raid ext4 defaults 0 0                
5.mdadm  -Ds /dev/md0 > /etc/mdadm.conf 生成配置文件
   mdadm -S /dev/md0 停止raid
   mdadm -A /dev/md0 启动raid

6.测试
   mdadm /dev/md0 -f /dev/sdf1 模拟损坏
   mdadm /dev/md0 -r /dev/sdf1 删除成员
   mdadm /dev/md0 -a /dev/sdf1 增加
   mdadm -G /dev/md0 -n 6 -a /dev/sdd4 增加成员

7.删除raid
   umount /mnt/raid
   mdadm -S /dev/md0 停止raid
   rm -f /etc/mdadm.conf
   vi /etc/fstab
   fdisk /dev/sda
   mdadm --zero-superblock /dev/sdd1

watch命令

watch 命令:

  • watch -n# 'COMMAND'

  • -n #:间隔刷新,单位是秒

示例:

  • watch -n1 'ifconfig'

dd命令

dd 命令

作用:

语法:

  • dd if=/PATH/FROM/SRC of=/PATH/TO/DEST(if为源文件,of为目标文件)

  • bs=#:block size, 复制单元大小

  • count=#:复制多少个bs

用法:

1)磁盘拷贝:

  • dd if=/dev/sda of=/dev/sdb

2)备份MBR

  • dd if=/dev/sda of=/tmp/mbr.bak bs=512 count=1

3)破坏MBR中的bootloader

  • dd if=/dev/zero of=/dev/sda bs=256 count=1 

4)有一个大与2K的二进制文件fileA。现在想从第64个字节位置开始读取,需要读取的大小是128Byts。又有fileB, 想把上面读取到的128Bytes写到第32个字节开始的位置,替换128Bytes,请问如何实现?

  • #dd if=fileA of=fileB bs=1 count=128 skip=63 seek=31 conv=notrunc

其他用法:

1)拷贝内存资料到硬盘

  • dd if=/dev/mem of=/root/mem.bin bs=1024

  • 将内存里的数据拷贝到root目录下的mem.bin文件

2)从光盘拷贝iso镜像

  • dd if=/dev/cdrom of=/root/cd.iso

  • 拷贝光盘数据到root文件夹下,并保存为cd.iso文件

3)销毁磁盘数据

  • dd if=/dev/urandom of=/dev/sda1

  • 利用随机的数据填充硬盘,在某些必要的场合可以用来销毁数据。执行此操作以后,/dev/sda1将无法挂载,创建和拷贝操作无法执行。

4)测试硬盘读写速度

  • dd if=/root/1Gb.file bs=64k | dd of=/dev/null

  • dd if=/dev/zero of=/root/1Gb.file bs=1024 count=1000000

  • 通过上两个命令输出的执行时间,可以计算出测试硬盘的读/写速度

5)修复硬盘

  • dd if=/dev/sda of=/dev/sda

  • 当硬盘较长时间(比如1,2年)放置不使用后,磁盘上会产生消磁点。当磁头读到这些区域时会遇到困难,并可能导致I/O错误。当这种情况影响到硬盘的第一个扇区时,可能导致硬盘报废。上边的命令有可能使这些数据起死回生。且这个过程是安全,高效的。

两个特殊设备

/dev/null:数据黑洞

/dev/zero:吐零机