RAID特性详解,及RAID创建详细操作

写在前面–命令总览:创建RAID:mdamd  -C [-l级别  -n盘数量  -cchunk  -a是否询问]

查看RAID: mdadm –D   停止RAID:mdadm –S  管理RAID:-f标记损坏  -r删除  -a添加

watch  文件:/proc/mdstat   操作简要流程在尾部

 

RAID特性

RAID全称为独立磁盘冗余阵列(Redundant Array of Independent Disks),基本思想就是把多个相对便宜的硬盘组合起来,成为一个硬盘阵列组,使性能达到甚至超过一个价格昂贵的硬盘。

 

RAID优点如下:

把多块硬盘组合成更大的硬盘当做一块硬盘使用

提高IO能力:磁盘并行读写

提高耐用性:通过磁盘冗余来实现

拥有独立内存和自我供电能力,在突然断电时能靠电池把内存中的数据写入磁盘,一定程度上防止数据丢失。

 

RAID的实现方式:

外接式磁盘阵列:通过扩展卡提供适配能力

内接式RAID:主板集成RAID控制器

上述两种方式:RAID配置在BIOS中

software RAID:但现在几乎没人用了

 

RAID级别:level,多块磁盘组织在一起的工作方式不同,而不是性能好坏之分

单一类型:

RAID-0:条带卷。chunk

搜狗截图20151220180904.png

假如,有两块硬盘A和B,把数据存储到这两块硬盘上。就把数据切割成到四数据块,把数据块1存储到A盘上,数据块2存储到B盘上,把数据块3再存储到A盘上,把数据块4存储到B盘上。这样A和B盘可以同时存储,整个数据存储的时间就减半了。相同的,读取时从两盘一起读数据,读取的时间也减半了。

但是,假如一块磁盘坏掉的可能性为1/4,那么两块盘坏掉一块的概率就为1/2,坏掉任何块盘都会导致整个数据的损坏,所以使用磁盘越多,虽然IO能力越强,但风险也越大。上述数据块1,数据块2等称为chunk。这种方式一般存放不是很重要的数据。

特性:

读写能力提升

可用空间:n*min 假如有三块硬盘分别为10G,12G,15G 大小,可用空间为3x10G=30G。

无容错(冗余)能力,反而增加风险

需要磁盘数量:2块以上

 

RAID-1:镜像卷。

搜狗截图20151220181322.png

把数据分别写入A和B两块盘内,相当于把数据存了两份,这两个盘内的数据完全一样。这样,即便有一块盘坏掉,另一块盘也能保存好完成数据。读取是从两块盘一起读,所以读取能力上升。但是写入数据时需要把数据写两遍,所以写入能力下降。

特性:

写性能下降

读性能提升

可用空间:1*min,只有一块盘有用,其他盘只是做备份

有容错能力

最少磁盘数:2

 

RAID-4:校验盘技术。假如有四块盘,拿三块盘A,B,C分别存储小数据块chunk,拿最后一块盘D做校验盘,存储前面三块盘数据的校验码(校验码可以理解为前三块盘数据的总和但占用空间却没增加)。这样就允许坏一块盘,无论任何一块盘坏掉,通过另外三块盘都可以找回丢失的数据。但是校验盘D存储数据多,压力大,而且前ABC三块盘任何一块坏掉,校验盘D就不得不扛起那块坏掉的盘的工作,压力很大,所以坏掉的可能性最大。所以通常就为校验盘D做一块备胎盘E,E时刻监视D的一举一动,哪一天D坏掉了,备胎E就会自动自告奋勇,挑起大梁。

RAID-5:三块盘轮流做校验盘。

比如第一轮存储把chunk1存储到A上,chunk2存储到B上,chunk3存储到C上,校验码存储到D上。第二轮存储校验码存到C上,chunk存储到ABD上,第三轮存储把校验码存储到B上,chunk存储到ACD上,第四轮把校验码存储到A上,以此类推。这样就不会有哪一块盘的压力特别大了。

读写性能提升

可用空间:n-1,相当于一块拿来做校验盘

容错能力:1块盘

最少磁盘数:3

 

RAID-6

拿两个盘做校验盘,这样可以允许坏两块磁盘,但效果不如RAID10

读写性能提升

可用空间:n-2

容错能力:2块盘

最少磁盘数:4

 

混合类型

RAID-10:先做1再做0,先组合下层,才能组合上层

搜狗截图20151220181853.png

假如6个盘分成三组,AB为一组,CD二组,EF三组。简称把数据分成三个chunk,每一组一个chunk,

读写性能提升。一组拿到chunk后把自己的chunk分别存到A,B盘上,这样A和B就互为镜像了。这样每个小组内都允许坏掉一块盘,比如ACE同时坏掉都没事。

可用空间:1/2

有容错能力:每组只能坏一块

最少磁盘数:4

RAID-01

搜狗截图20151220182311.png

例如把6个盘分成两组,ABC为第一组,DEF为第二组。把数据给第一组,再把相同的数据给第二组。第一组拿到数据后把数据切成三个chunk,分别存储到A、B、C、上。第二组拿到数据后也执行与第一组相同的操作。表面看两组互为镜像,但由于组拿到数据后又进行了切割,两个组的切割方式几乎不可能完全相同,所以如果 第一组和第二组都各自坏掉一块盘,数据基本就找不回来了,所以只允许有一组出错,一组内全部坏掉都没事,但不允许两组同时出现坏盘。

 

RAID-50:至少6块盘,最多坏一个

RAID-7:

 

JBOD:just a bunch of disks

最简单的将多块磁盘空间合并成一个大的可用空间

可用空间:sum,不论是否一样大

无容错能力

 

常用级别:RAID-0,RAID-1,RAID-10,RAID-50,JBDO

一般用10,和50,或0,其他不好用

 

centos6上软RAID的实现;

结合内核中的md(multi device)

 

mdadm:模式化工具

支持LINEAR, RAID0,RAID4,RAID5,RAID6,RAID10

创建:-C     查看 –D     管理-f,-r,-a    停用,删除-S    装配-A   监控-F

-C:创建RAID

mdadm –C /dev/md0 –l  5  –n  3 –x 1 –c  128K  -a  yes /dev/sda{5,6,7}

 

-n #:使用#块设备创建此RAID

-l #:指明RAID级别

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

-c chunk_size:指明块大小

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

-D:显示raid的详细信息

mdadm -D /dev/md0

观察md状态:

cat /proc/mdstat

watch命令:

watch –n1 'command'

watch -n1 'cat /proc/mdstat'

 

管理模式:

-f:标记磁盘为损坏

           mdadm  /dev/md0 -f /dev/sda6

-a添加磁盘

           mdadm /dev/md0 -a /dev/sda5

-r移除磁盘

           mdadm /dev/md0 -r /dev/sda5

 

-S停止,删除md设备

mdadm -S /dev/md0  ———删除md0

下面为创建RAID5的详细过

 [root@localhost ~]# mdadm -C /dev/md0 -l 5 -n 3 -x 1 -c 128K -a yes /dev/sda{7,8,9,10}

mdadm: /dev/sda7 appears to contain an ext2fs file system   —————-创建/dev/md0

       size=2099724K  mtime=Thu Jan  1 08:00:00 1970

mdadm: largest drive (/dev/sda9) exceeds size (2097664K) by more than 1%

Continue creating array? y

mdadm: Defaulting to version 1.2 metadata

mdadm: array /dev/md0 started.

 

 [root@localhost ~]# cat /proc/mdstat

Personalities : [raid6] [raid5] [raid4]

md0 : active raid5 sda9[4] sda10[3](S) sda8[1] sda7[0]

      4195328 blocks super 1.2 level 5, 128k chunk, algorithm 2 [3/3] [UUU]

unused devices: <none>

[root@localhost ~]# mke2fs -t ext4 /dev/md0  ———–格式化md0

[root@localhost ~]# mkdir /mydata

[root@localhost ~]# mount /dev/md0 /mydata

[root@localhost ~]# mdadm -D /dev/md0  —-可以看到一共有4块设备组成/dev/sda{7,8,9}和/dev/sda10

[root@localhost ~]# mdadm /dev/md0 -f /dev/sda7  ——–把/dev/sda7标记损坏

mdadm: set /dev/sda7 faulty in /dev/md0

[root@localhost ~]# mdadm -D /dev/md0

    Number   Major   Minor   RaidDevice State

       3       8       10        0      spare rebuilding   /dev/sda10

       1       8        8        1      active sync   /dev/sda8 ——–可看到/dev/sda10自动替换到了

—————————/dev/sda7的位置,正在同步数据

4       8        9        2      active sync   /dev/sda9

 

       0       8        7        –      faulty   /dev/sda7

[root@localhost ~]# mdadm /dev/md0 -f /dev/sda8   —–再标记坏一块盘

mdadm: set /dev/sda8 faulty in /dev/md0

[root@localhost ~]# cd /mydata  

[root@localhost mydata]# ll

总用量 16

drwx——. 2 root root 16384 12月 20 17:11 lost+found ————-原来数据还能查看

[root@localhost mydata]# mdadm /dev/md0 -r /dev/sda7  ———移除/dev/sda7

mdadm: hot removed /dev/sda7 from /dev/md0

[root@localhost mydata]# mdadm /dev/md0 -r /dev/sda8

mdadm: hot removed /dev/sda8 from /dev/md0

[root@localhost mydata]# mdadm -D /dev/md0  ——发现只剩两块盘

………………………………………………..

    Number   Major   Minor   RaidDevice State

       3       8       10        0      active sync   /dev/sda10

       2       0        0        2      removed

       4       8        9        2      active sync   /dev/sda9

[root@localhost mydata]# mdadm /dev/md0 -a /dev/sda7 ——-/dev/sda7加上去

mdadm: added /dev/sda7

[root@localhost mydata]# mdadm -D /dev/md0 ———-/dev/sda7添加成功

    Number   Major   Minor   RaidDevice State

       3       8       10        0      active sync   /dev/sda10

       5       8        7        1      spare rebuilding   /dev/sda7

       4       8        9        2      active sync   /dev/sda9

 

 

 

下面为创建RAID5的

fdisk /dev/sda — 创建4个5G分区—用t,设备号即数字—-把磁盘类型改写fd,RAID用的磁盘类型

cat /proc/mdstat  ———此文件可查看RAID设备的信息

mdadm -C /dev/md0 -a yes -n 3 -l 5 /dev/sda{5,6,7,8,}—–  创建一个名为md0的RAID

mke2fs -t ext4 /dev/md0        ————-把RAID格式化成ext4格式

mount /dev/md0 /mydata      ———-把RAID挂载至 /mydata目录下

mount               ———-查看是否挂载成功

df –lh                  ———查看磁盘信息

blkid /dev/md0      ———–查看md0的信息

mdadm -D /dev/md0  ————查看md0的详细信息

mdadm  /dev/md0 -f /dev/sda5———损坏一块  损坏RAID md0 上的一块盘

watch -n1 'cat /proc/mdstat'      ———-监控这个文件,随时掌握RAID的信息

mdadm -D /dev/md0           ———-查看md0的详细信息

 

mdadm  /dev/md0 -f /dev/sda6–再损坏一块盘

mdadm -D /dev/md0    —————查看md0的详细信息,发现依然能访问挂载点

 

mdadm /dev/md0 -r /dev/sda5 ——-移除坏掉的盘

mdadm /dev/md0 -r /dev/sda6

mdadm -D /dev/md0

 

mdadm /dev/md0 -a /dev/sda5 ———给md0加上一块盘

mdadm -D /dev/md0  ———–查看md0的状态

 

 

 

原创文章,作者:flivfox,如若转载,请注明出处:http://www.178linux.com/10285

(0)
flivfoxflivfox
上一篇 2016-02-14 10:11
下一篇 2016-02-14 10:12

相关推荐

  • GRUB启动故障排除和内核编译

    如何进入光盘应急系统(以下修复操作仅适用于GRUB legacy, 不适用于GRUB2): 步骤一:给主机挂上安装光盘, 或者有相应启动镜像的硬盘分区(可移动的分区) 步骤二:开机时选择CDROM先启动 步骤三:进入光盘启动界面选择应急救援模式 步骤四: 不选择设置网络接口, 直接读取磁盘分区并以读写方式挂载 步骤五: 选择shell进入bash中对磁盘进行…

    Linux干货 2016-09-12
  • Linux下find命令的使用

    为什么要使用find命令?     Linux系统中有着成千上万的文件,如果你想要找到自己想要的文件,一款查找软件是必不可少的,而locate是根据其生成的数据库进行查找,虽然速度会略快,但非实时查找,有些新的文件或目录是匹配不到的,而且locate是模糊匹配,而find命令为实时查找,且为精确匹配,如果你对目录的权限…

    Linux干货 2016-08-18
  • Shell中的循环语句

    在编程语言中,循环语句是最基本的语法之一,在Shell(这里是Bash)中也不例外。把相关内容整理一下吧。 这里包括for/while/until循环,以及变量自增的语法实例。 Shell(以Bash为例)中的循环语句一般有for、while、until这几种,偶尔还有写错语法的时候,这里结合实例来自己总结一下。也为今后使用提供一个快捷的资料获取渠道。 一、…

    Linux干货 2016-08-22
  • 实现基于MYSQL验证的vsftpd虚拟用户

    马哥教育面授21期 运维 vsftpd MySQL 说明:本实验在两台CentOS主机上实现,一台做为FTP服务器,一台做数据库服务器 一、安装所需要包和包组: 在数据库服务器上安装包: yum –y install mariadb-server mariadb-devel systemctl start mariad…

    Linux干货 2016-12-21
  • 虚拟化网络之OpenvSwitch(三)

    上一篇介绍了openvswitch利用GRE协议,搭建多台宿主机的虚拟网络,接下来在利用vxlan通道搭建一个跨多宿主机的虚拟化网络,深入了解openvswitch的功能。 一、实验拓扑 ip地址分配:  A1:192.168.10.1/24  A2:192.168.10.10/24   B1:192.168.10.2…

    系统运维 2016-03-27
  • 沉舟侧畔千帆进,枯木头前万树春

    N21第五周博客作业 1、  显示/boot/grub/grub.conf中以至少一个空白字符开头的行; ~]#  grep -E "^[[:space:]]+" //boot/grub/grub.conf root (hd0,0) kernel /vmlin…

    Linux干货 2016-07-29