常用RAID级别原理和Linux中软RAID实现方式

本文参考http://www.178linux.com/12262;并且自己实现一次。

RAID简介

            RAID(Redundant Arrays of Independent Disks)独立冗余阵列。由一篇论文:A case for Redundent Arrays of Inexpensive Disks RAID

            作用:提高I/O能力、提高耐用性,读写,冗余性

RAID分为硬件RAID和软件RAID

    硬件RAID通过RAID卡连接多个硬盘、或者主板中集成了RAID控制器来实现RAID的相关功能。

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

                内接式磁盘阵列:主板集成RAID控制器

    软件RAID则通过软件层面模拟实现RAID的相关功能。


级别:多块磁盘阵列组织在一起的工作方式有所不同。

因此我们开始介绍常用的RAID级别:

RAID-0

         将多块硬盘平行组织起来并行处理以提高性能。

          简单来说就是将要处理的数据块(chunk)分别在两个硬盘上同时处理, Disk0处理A1,Disk1处理A2,从而实现提高硬盘性能,但是这样的话硬盘性能虽然提高了但是可靠性大大降低,由于RAID-0的特性,只要有一块硬盘损坏,这个磁盘阵列上的所有数据都可能会丢失,生产环境中一般不会使用。

         

RAID-0总结

    1、提高了磁盘读、写、IO性能,理论:硬盘原速度的*硬盘数

    2、无容错能力

    3、最少使用2块硬盘

    4、硬盘可用空间,为所有硬盘中空间最小的硬盘空间乘以硬盘总数, 公式 N*min(Disk0..DiskN)

本文图片转自维基百科



RAID-1

           将多个硬盘相互做成镜像,提高冗余能力,读取速度,但是写性能略有下降;

           简单的来说就是两个(一般情况下RAID-1都是两个硬盘组成)或多个硬盘做成镜像,例如:给Disk0写入数据的时候,Disk1也写入数据,当Disk0损坏,Disk1的数据还保存着。这样极大提高了冗余能力,读取时两个硬盘也可以并行读取来提高读取性能,但是写入速度略有下降。

RAID-1总结

    1、提高了读性能,写性能下降

    2、极大提高了容错能力

    3、最少使用2块硬盘

    4、硬盘可用空间,为所有硬盘中空间最小硬盘的空间大小, 公式 1*min(Disk0..DiskN)

本文图片转自维基百科


RAID-4

         由3块或3块以上设备组成,并行处理提高磁盘性能,一个硬盘存储冗余校验码,通过异或运算还原数据.

         简单来说就是三个或三个以上的硬盘组成一组设备可以实现当某一个硬盘损坏可以使其数据通过异或运算还原,通过读写并行处理提高性能,但是因为冗余校验码都是存放在单一硬盘上,所以此硬盘性能可能会很差,并且易损坏。

RAID-4总结:

    1、提高了读写、IO性能,但是存放校验码的硬盘性能差

    2、提高硬盘容错能力,但是使用一块硬盘存放校验码,要是此硬盘损坏后果可想而知

    3、最少使用3块硬盘

    4、最大硬盘使用空间,为所有硬盘中空间最小的硬盘的空间大小乘以硬盘数减去1, 公式 (N-1)*min(Disk1..DiskN)

本文图片转自维基百科


RAID-5

     相比于RAID-4而言,冗余校验码分别存放在每个硬盘中

     简单的来说,RAID-5就是RAID-4的升级版,弥补了RAID-4的缺陷,将RAID-4中被诟病的缺点:“冗余校验码存放在一个硬盘上”得以解决,RAID-5采用将冗余校验码分别存放在每一个磁盘上来达到负载均衡的效果,而且极大的提高了整体性能,但是只能提供一块硬盘的冗余.

    

RAID-5总结

    1、提高了读写、IO性能

    2、提高了容错能力,相比于RAID-4而言提高整体稳定性

    3、最少使用3块硬盘

    4、最大硬盘使用空间,为所有硬盘中空间最小的硬盘的空间大小乘以硬盘数减去1, 公式 (N-1)*min(Disk1..DiskN)

本文图片转自维基百科


RAID-10/01

         简单的来说,RAID-10/01是两种混合型RAID,RAID-10先将所有硬盘分成N组组成RAID-1提高冗余性,然后将其按组组成RAID-0提高硬盘性能,最多可支持半数硬盘损坏而不丢失数据。RAID-01先将所有硬盘分成N组组成RAID0提高性能,然后将其按组组成RAID-1提高冗余性,运气不好两块硬盘损坏就可能导致全部硬盘数据丢失。

RAID-10总结

    1、提高了读写、IO性能

    2、提高了容错能力,最多支持半数硬盘损坏

    3、最少使用4块硬盘

    4、最大硬盘使用空间,为所有硬盘中空间最小的硬盘的空间大小乘以2, 公式(N*min(Disk0..Disk1))/2

RAID-01总结

    1、提高了读写、IO性能

    2、提高了容错能力,但是效果不是很好,因为先使用不可靠的RAID-0再使用可靠的RAID1,就好像建房子地基偷工减料,而顶层却建的很结实

    3、最少使用4块硬盘

    4、最大硬盘使用空间,为所有硬盘中空间最小的硬盘的空间大小乘以2, 公式 (N*min(Disk0..Disk1))/2

本文图片转自维基百科本文图片转自维基百科

实战:在CentOS中使用mdadm建立软RAID

mdadm介绍:

         Linux中可以通过md模块来实现软RAID,我们在用户空间用mdadm来管理创建软RAID设备。

mdadm:

命令的语法格式:mdadm [mode] <raiddevice> [options] <component-device>
支持的RAID级别:LINEAR, RAID0, RAID1, RAID4, RAID5,RAID6,RAID10
模式:
创建模式:-C
装配模式:-A<span style="display: none; width: 0px; height: 0px;" id="transmark"></span>
监控模式:-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:当作错误的磁盘来对待
-r:移除
-a:添加磁盘</span>

系统环境:

分区信息
[root@server2 ~]# <span style="color:#FF0000;">fdisk -l</span>
Disk /dev/sda: 21.5 GB, 21474836480 bytes
255 heads, 63 sectors/track, 2610 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x0002777c
   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *           1          26      208813+  83  Linux
/dev/sda2              27        1985    15735667+  83  Linux
/dev/sda3            1986        2247     2104515   82  Linux swap / Solaris
Disk /dev/sdb: 21.5 GB, 21474836480 bytes
255 heads, 63 sectors/track, 2610 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0xdee177d5
   Device Boot      Start         End      Blocks   Id  System
实现目标:创建一个可用空间为8G的RAID1设备, 要求其chunk大小为128K, 文件系统为ext4, 开机可自动挂载至/backup目录
1.创建相应分区


[root@server2 ~]# <span style="color:#FF0000;">fdisk /dev/sdb</span>
WARNING: DOS-compatible mode is deprecated. It's strongly recommended to
         switch off the mode (command 'c') and change display units to
         sectors (command 'u').
Command (m for help): n   #创建一个新分区
Command action
   e   extended
   p   primary partition (1-4)
p                         #定义为扩展分区
Partition number (1-4): 1  #第一个分区
First cylinder (1-2610, default 1): 
Using default value 1
Last cylinder, +cylinders or +size{K,M,G} (1-2610, default 2610): +8G  # 大小8G
Command (m for help): n
Command action
   e   extended
   p   primary partition (1-4)
p
Partition number (1-4): 2
First cylinder (1046-2610, default 1046): 
Using default value 1046
Last cylinder, +cylinders or +size{K,M,G} (1046-2610, default 2610): +8G
Command (m for help): t
Partition number (1-4): 1
Hex code (type L to list codes): fd  #创建软RAID必须要将FileSystem ID调整为fd,
                                       否则在使用过程中可能会出错,如果不知道先<span style="color:#FF0000;">l</span>
Changed system type of partition 1 to fd (Linux raid autodetect)
Command (m for help): t    #将<span style="color:#FF0000;">FileSystem ID</span>调整为fd
Partition number (1-4): 2
Hex code (type L to list codes): fd
Changed system type of partition 2 to fd (Linux raid autodetect)
Command (m for help): w
The partition table has been altered!
Calling ioctl() to re-read partition table.
WARNING: Re-reading the partition table failed with error 16: Device or resource busy.
The kernel still uses the old table. The new table will be used at
the next reboot or after you run partprobe(8) or kpartx(8)
Syncing disks.
2.通告内核重读分区表
[root@server2 ~]# <span style="color:#FF0000;">partx -a /dev/sdb</span>   #执行两次
BLKPG: Device or resource busy
error adding partition 1
BLKPG: Device or resource busy
error adding partition 2

3.使用mdadm命令创建RAID1

[root@server2 ~]# <span style="color:#FF0000;">mdadm -C /dev/md0 -a yes -c 128 -n 2 -l 1 /dev/sdb{1,2}</span> #这里用分区创建RAID,不推荐,为了实验效果,请见谅
mdadm: /dev/sdb1 appears to contain an ext2fs file system
       size=10490412K  mtime=Mon Jan  4 13:26:31 2016
mdadm: Note: this array has metadata at the start and
    may not be suitable as a boot device.  If you plan to
    store '/boot' on this device please ensure that
    your boot-loader understands md/v1.x metadata, or use
    --metadata=0.90
Continue creating array?<span style="color:#FF0000;"> y</span>
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md0 started.

4.查看创建的RAID设备

[root@server2 ~]# <span style="color:#FF0000;">mdadm -D /dev/md0</span>
/dev/md0:
        Version : 1.2
  Creation Time : Mon Jan  4 13:28:54 2016
     Raid Level : raid1
     Array Size : 8385728 (8.00 GiB 8.59 GB)
  Used Dev Size : 8385728 (8.00 GiB 8.59 GB)
   Raid Devices : 2
  Total Devices : 2
    Persistence : Superblock is persistent
    Update Time : Mon Jan  4 13:29:36 2016
          State : clean 
 Active Devices : 2
Working Devices : 2
 Failed Devices : 0
  Spare Devices : 0
           Name : server2.example.com:0  (local to host server2.example.com)
           UUID : a6177d12:198d6c82:3e2f5ac9:5f3925b3
         Events : 17
    Number   Major   Minor   RaidDevice State
       0       8       17        0      active sync   /dev/sdb1
       1       8       18        1      active sync   /dev/sdb2

5.格式化RAID设备

<code class="bash plain">[root@server2 ~]</code><code class="bash comments">#</code><span style="color:#FF0000;">mke2fs -t ext4 /dev/md0</span>
mke2fs 1.41.12 (17-May-2010)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
524288 inodes, 2096432 blocks
104821 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=2147483648
64 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks: 
32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632
Writing inode tables: done                            
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done
This filesystem will be automatically checked every 20 mounts or
180 days, whichever comes first.  Use tune2fs -c or -i to override.

6.设置RAID设备开机自动挂载

[root@server2 ~]#<span style="color:#FF0000;"> blkid /dev/md0    #建议使用UUID方式挂载</span>
/dev/md0: UUID="f1f1a7f7-ea47-4bff-b28f-65e74fcdc0a0" TYPE="ext4" 
[root@server2 ~]# <span style="color:#FF0000;">vim /etc/fstab </span>
#
# /etc/fstab
# Created by anaconda on Sat Jan  2 05:05:04 2016
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
UUID=3f5cfd75-ff54-4784-9aa3-47cbc77eed5a /                       ext4    defaults        1 1
UUID=0f99960c-0db8-44a9-81b6-f1adfcb0fc6c /boot                   ext4    defaults        1 2
UUID=bbcb90b4-d4a4-4a72-b66c-061afc7ce4e6 swap                    swap    defaults        0 0
tmpfs                   /dev/shm                tmpfs   defaults        0 0
devpts                  /dev/pts                devpts  gid=5,mode=620  0 0
sysfs                   /sys                    sysfs   defaults        0 0
proc                    /proc                   proc    defaults        0 0
<span style="color:#FF0000;">UUID="f1f1a7f7-ea47-4bff-b28f-65e74fcdc0a0" /backup ext4 defaults 0 0</span>

7.验证是否能够挂载


[root@server2 ~]# <span style="color:#FF0000;">mkdir /backup</span>
[root@server2 ~]#<span style="color:#FF0000;"> mount -a</span>
[root@server2 ~]# <span style="color:#FF0000;">df</span>
Filesystem     1K-blocks    Used Available Use% Mounted on
/dev/sda2       15357672 3527392  11043500  25% /
tmpfs             502384       0    502384   0% /dev/shm
/dev/sda1         198123   36589    151094  20% /boot
<span style="color:#FF0000;">/dev/md0         8123000   18420   7685296   1% /backup</span>

8.测试RAID1的效果

[root@server2 ~]# <span style="color:#FF0000;">cd /backup/</span>
[root@server2 backup]# ls
lost+found
[root@server2 backup]# <span style="color:#FF0000;">touch RAID-1-TEST   </span> #在RAID设备中创建文件
[root@server2 backup]# <span style="color:#FF0000;">ls</span>
lost+found  RAID-1-TEST
[root@server2 backup]# <span style="color:#FF0000;">cd /</span>
[root@server2 /]# <span style="color:#FF0000;">mdadm -f /dev/md0 /dev/sdb1</span>    #模拟sdb1损坏
mdadm: set /dev/sdb1 faulty in /dev/md0
[root@server2 /]# <span style="color:#FF0000;">mdadm -D /dev/md0</span>    #查看md0信息
/dev/md0:
        Version : 1.2
  Creation Time : Mon Jan  4 13:28:54 2016
     Raid Level : raid1
     Array Size : 8385728 (8.00 GiB 8.59 GB)
  Used Dev Size : 8385728 (8.00 GiB 8.59 GB)
   Raid Devices : 2
  Total Devices : 2
    Persistence : Superblock is persistent
    Update Time : Mon Jan  4 13:36:04 2016
          State : clean, degraded 
 Active Devices : 1
Working Devices : 1
 Failed Devices : 1
  Spare Devices : 0
           Name : server2.example.com:0  (local to host server2.example.com)
           UUID : a6177d12:198d6c82:3e2f5ac9:5f3925b3
         Events : 44
    Number   Major   Minor   RaidDevice State
       0       0        0        0      removed
       1       8       18        1      active sync   /dev/sdb2
       2       8       17        -      faulty   /dev/sdb1        #提示报错
[root@server2 /]# <span style="color:#FF0000;">cd /backup/</span>
[root@server2 backup]# <span style="color:#FF0000;">ls </span>   #发现数据并未丢失
lost+found  <span style="color:#FF0000;">RAID-1-TEST</span>
总结:RAID的确可以提高生产环境中磁盘的性能和可靠性,但是不推荐使用软RAID的方式来实现,数据无价!

最后总结一个表格,方便大家记忆

RAID级别

组织方式

优点

缺点

可用空间

0

将要处理的数据块(chunk)分别在两个硬盘上同时处理

提高了磁盘读、写、IO性能,理论:硬盘原速度的*硬盘数

只要有一块硬盘损坏,这个磁盘阵列上的所有数据都可能会丢失

N*min(Disk0..DiskN)

最少使用2块硬盘

1

将多个硬盘相互做成镜像

提高冗余能力,读取速度

写性能略有下降

1*min(Disk0..DiskN)

最少使用2块硬盘

4

由3块或3块以上设备组成,并行处理提高磁盘性能,一个硬盘存储冗余校验码,通过异或运算还原数据.

提高了读写、IO性能,提高硬盘容错能力

使用一块硬盘存放校验码,要是此硬盘损坏后果可想而知

(N-1)*min(Disk1..DiskN)

最少使用3块硬盘

5

相比于RAID-4而言,冗余校验码分别存放在每个硬盘中

提高了读写、IO性能,提高了容错能力,相比于RAID-4而言提高整体稳定性

 

(N-1)*min(Disk1..DiskN)

最少使用3块硬盘

10

RAID-10先将所有硬盘分成N组组成RAID-1提高冗余性,然后将其按组组成RAID-0提高硬盘性能,最多可支持半数硬盘损坏而不丢失数据。

提高了读写、IO性能,提高了容错能力,最多支持半数硬盘损坏

 

 

(N*min(Disk0..Disk1))/2

最少使用4块硬盘

01

RAID-01先将所有硬盘分成N组组成RAID0提高性能,然后将其按组组成RAID-1提高冗余性

提高了读写、IO性能提高了容错能力

 

先使用不可靠的RAID-0使用可靠的RAID1

(N*min(Disk0..Disk1))/2

最少使用4块硬盘

 









  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值