AI智能
改变未来

Linux基础-day23-Linux系统磁盘阵列raid

Linux系统磁盘阵列raid

一. raid磁盘阵列概述

raid(Redundant Array of Independent Disk),独立冗余磁盘阵列。其方式是将多块独立的磁盘按照不同的方式组合成一个逻辑磁盘,从而提高存储容量,提升存储性能或提供数据备份功能。

raid分为软件raid和硬件raid两种。软件raid可以实现硬件raid相同的功能,但是没有独立的硬件控制功能,性能不如硬件raid,但是实现简单。硬件raid有独立的硬件设备。硬件raid通常需要raid卡,raid卡本身会有独立的控制件和内存,不占用系统资源,效率高,性能强。市面上很多主板已集成raid卡。

二、raid级别

2.1 raid0(不含效验与冗余的条带存储)

多块磁盘组合为raid0后,数据被分割并分别写入多块硬盘,所以能最大的提升存储性能和存储空间,但无法容错,raid0至少需要2块硬盘,不要求磁盘容量相同。

优点:磁盘使用率100%,磁盘容量为所有磁盘总容量。

缺点:无校验与备份,有一块磁盘损坏,即磁盘中的任意一个数块损坏就将导致整个文件无法读取。

如下图:数据data1与data2被分别写入两块不同磁盘。其他依此类推。

2.2 raid1(不含校验的镜像存储)

多块磁盘组合为raid1后,数据被同时写入每块硬盘,raid1至少需要2块硬盘,该级别的raid1只要有一块磁盘可用,即可正常工作,该级别的阵列安全性最好,磁盘利用率最低,要求磁盘容量相同。

优点:安全性最高。

缺点:写入速率低,磁盘使用率低。如果使用两块磁盘,容量为一块大小。资源浪费,成本高。总容量n/2*s。(n为磁盘数量;s为磁盘大小).

如下图:数据data1同时写入两块磁盘。其他数据依此类推。

2.3 raid2(位级别的效验式条带存储)

多块磁盘组合为raid2后,数据以位(bit)单位同步式分别存储在不同硬盘上,并采用海明码(海明码是一种具有纠错功能的校验码)对数据进行校验与恢复。至少需要3块硬盘。要求磁盘大小相同,总容量为(n-1)*s(n为磁盘数量;s为磁盘大小)。

优点:允许3块盘中,任何一块损坏,可通过未损坏的2块磁盘数据进行运算还原已损坏磁盘的数据。对大数据读写性能较高。

缺点:对少量数据读写性能较差。

如下图所示:有数据存入raid2,该数据被分为数据位,分别同步写入不同的磁盘,数据data1、data2进行海明码运算后写入校验盘,其他数据以此类。

2.4 raid5(数据块级别的分布式校验条带存储)

多块磁盘组合为raid5后,数据以块(block)单位同步式分别存储在不同硬盘上,并采用海明码(海明码是一种具有纠错功能的校验码)对数据进行校验与恢复,其海明码被写入不同的磁盘。至少需要3块硬盘。要求磁盘大小相同,总容量为(n-1)*s(n为磁盘数量;s为磁盘大小)。

优点:容错,允许坏一块。

2.5 raid6

raid6是再raid5的基础上为了加强数据保护而设计的。可允许损坏2块硬盘。总容量为(n-2)*s(n为磁盘数量;s为磁盘大小).

2.6 raid10(镜像与条带存储)

raid10是有raid0与raid1结合而成,raid10既有raid0的快速高效,同时有raid1的数据安全。raid10至少需要4块硬盘.raid10通常有两种组合方式,raid0+1或raid1+0.raid1+0,首先使用4块硬盘组合成两个独立的raid1,然后将两个raid1组合为1个raid0.

优点:兼顾安全性和速度,允许2块故障。

缺点:raid10磁盘利用率低,只有50%。

如下图:raid1+0方式

三、软raid创建与管理

3.1 Mdadm命令详解

madam是用于创建和管理软件RAID的命令,Linux内核中有一个md(multiple devices)模块在底层管理RAID设备,它会在应用层给我们提供一个应用程序的工具mdadm。

详细参数:

-a:检测设备名称

-n:指定设备数量

-l:指定RAID级别

-C:创建

-v:显示过程

-f:模拟设备损坏

-r:移除设备

-Q:查看摘要信息

-D:查看详细信息

-S:停止RAID磁盘阵列

-x:热备盘个数

3.2创建raid5(3块硬盘)

Linux中创建软raid,可以将硬盘直接进行raid创建,也可以对硬盘进行分区,指定不同的分区创建不同级别的raid。

(1)安装mdadm命令

[root@localhost ~]# yum -y install mdadm

(2)查看磁盘信息(fdisk -l)

[root@localhost ~]# ls /dev/sd*

/dev/sda  /dev/sda1  /dev/sda2  /dev/sdb  /dev/sdc  /dev/sdd

[root@localhost ~]# partprobe /dev/sd*

(3)创建raid5(无备用盘)

[root@localhost ~]# mdadm -Cv /dev/md0 -l 5 -n 3  /dev/sd{b,c,d}

mdadm: layout defaults to left-symmetric

mdadm: layout defaults to left-symmetric

mdadm: chunk size defaults to 512K

mdadm: size set to 5238784K

mdadm: Defaulting to version 1.2 metadata

mdadm: array /dev/md0 started.

[root@localhost ~]#

有备用盘创建:

[root@localhost ~]# mdadm -Cv /dev/md0 -l 5 -n 3 -x 1 /dev/sd{b,c,d,e}

(4)查看已创建的raid5信息

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

/dev/md0:

        Version : 1.2

  Creation Time : Sat Mar 21 20:45:38 2020

     Raid Level : raid5

     Array Size : 10477568 (9.99 GiB 10.73 GB)

  Used Dev Size : 5238784 (5.00 GiB 5.36 GB)

   Raid Devices : 3

  Total Devices : 3

    Persistence : Superblock is persistent

 

    Update Time : Sat Mar 21 20:46:05 2020

          State : clean

 Active Devices : 3

Working Devices : 3

 Failed Devices : 0

  Spare Devices : 0

         Layout : left-symmetric

     Chunk Size : 512K

           Name : localhost.localdomain:0  (local to host localhost.localdomain)

           UUID : c6fa3589:6ab1babb:213f4b64:a5c5f1c7

         Events : 18

    Number   Major   Minor   RaidDevice State

       0       8       16        0      active sync   /dev/sdb

       1       8       32        1      active sync   /dev/sdc

       3       8       48        2      active sync   /dev/sdd

[root@localhost ~]#

(5)格式化raid5

[root@localhost ~]# mkfs.xfs /dev/md0

meta-data=/dev/md0               isize=512    agcount=16, agsize=163712 blks

         =                       sectsz=512   attr=2, projid32bit=1

         =                       crc=1        finobt=0, sparse=0

data     =                       bsize=4096   blocks=2619392, imaxpct=25

         =                       sunit=128    swidth=256 blks

naming   =version 2              bsize=4096   ascii-ci=0 ftype=1

log      =internal log           bsize=4096   blocks=2560, version=2

         =                       sectsz=512   sunit=8 blks, lazy-count=1

realtime =none                   extsz=4096   blocks=0, rtextents=0

[root@localhost ~]#

(6)挂载

[root@localhost ~]# mkdir /tmp/test

[root@localhost ~]# mount /dev/md0 /tmp/test

(7)模拟磁盘损坏

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

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

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

/dev/md0:

        Version : 1.2

  Creation Time : Sat Mar 21 20:45:38 2020

     Raid Level : raid5

     Array Size : 10477568 (9.99 GiB 10.73 GB)

  Used Dev Size : 5238784 (5.00 GiB 5.36 GB)

   Raid Devices : 3

  Total Devices : 3

    Persistence : Superblock is persistent

 

    Update Time : Sat Mar 21 20:59:03 2020

          State : clean, degraded

 Active Devices : 2

Working Devices : 2

 Failed Devices : 1

  Spare Devices : 0

 

         Layout : left-symmetric

     Chunk Size : 512K

 

           Name : localhost.localdomain:0  (local to host localhost.localdomain)

           UUID : c6fa3589:6ab1babb:213f4b64:a5c5f1c7

         Events : 20

 

    Number   Major   Minor   RaidDevice State

       –       0        0        0      removed

       1       8       32        1      active sync   /dev/sdc

       3       8       48        2      active sync   /dev/sdd

 

       0       8       16        –      faulty   /dev/sdb

[root@localhost ~]#

(8)raid性能测试

radi5写入模拟:进入挂载目录/tmp/test

[root@localhost test]# time dd if=/dev/zero of=text bs=1M count=1000

记录了1000+0 的读入

记录了1000+0 的写出

1048576000字节(1.0 GB)已复制,3.92296 秒,267 MB/秒

 

real    0m3.991s

user    0m0.000s

sys     0m2.492s

[root@localhost test]#

正常硬盘测试:

[root@localhost tmp]# time dd if=/dev/zero of=text bs=1M count=1000

记录了1000+0 的读入

记录了1000+0 的写出

1048576000字节(1.0 GB)已复制,18.7634 秒,55.9 MB/秒

 

real    0m19.160s

user    0m0.010s

sys     0m1.910s

[root@localhost tmp]#

公众号:

赞(0) 打赏
未经允许不得转载:爱站程序员基地 » Linux基础-day23-Linux系统磁盘阵列raid