写在前面:

    博客书写牢记5W1H法则:What,Why,When,Where,Who,How。


本篇主要内容:

● RAID简介及各RAID级别特点

● 软RAID的创建使用


RAID简介

   最早时候RAID为Redundant Arrays of Inexpensive Disks,即廉价磁盘冗余阵列;后将Inexpensive替换为Independent,即独立磁盘冗余阵列。

   优势:

      (1)易于灵活的进行容量扩展

      (2)“虚拟化”使可管理性极大的增强

      (3)“磁盘分块”技术带来性能提高

      (4)通过冗余、热备、热换提高可靠性

   磁盘冗余:

      (1)镜像冗余使用磁盘镜像技术;

      (2)磁盘镜像是一个简单的设备虚拟化技术,每个I/O操作都会在两个磁盘上执行;

      (3)磁盘冗余可提高磁盘的读性能

   校验冗余:

      (1)根据冗余算法计算阵列中成员磁盘上数据校验信息,将校验信息保存在其他的磁盘资源上;

      (2)保证磁盘可靠性;

      (3)和镜像冗余比较,校验冗余的开销更小

   异或算法(XOR);

      相同为假,不同为真

   特点:

      提高IO能力

         磁盘并行读写

      提高耐用性

         磁盘冗余来实现

   级别:多块磁盘组织在一起的工作方式不尽相同

   RAID的实现方式:

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

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

      (3)Software RAID:消耗主机资源,IO大时严重影响主机性能。

   RAID级别:

      组成RAID阵列的不同方式,不同RAID级别:

         不同的存储性能;

         不同的数据可靠性;

         不同的存储成本

      RAID 0:条带式数据分布在各个磁盘上,strip

      RAID 1:以镜像为冗余方式,mirror

      RAID 2:条带海明码奇偶校验。校验码分布在各个磁盘,提供错误检查与恢复。很少用

      RAID 3:数据块划分为更小的块并行传输到各个成员磁盘,计算的XOR校验放到专用校验磁盘上。大量连续数据可提供很好速率,随机数据,奇偶盘成为瓶颈。

      RAID 4:以数据块为单位,其他与RAID3相同。数据恢复难度大,控制器难设计,不常用。

      RAID 5:独立存取,校验信息均匀分散到阵列的各个磁盘上

      RAID 10:先镜像,再整体条带

      RAID 50:先RAID5,再整体条带

      补充:JBOD(Just a Bunch Of Disks)可实现多块磁盘合并为一个大的连续空间。

RAID级别RAID 0RAID 1RAID 3RAID 5RAID 10
别名条带镜像专用奇偶位条带分布奇偶位条带镜像阵列条带
容错性
冗余类型
镜像奇偶校验奇偶校验镜像
备盘
读性能较单盘略高
随机写性能低,叫单盘差不多最低,比单盘还低
连续写
磁盘数2+2N,N>=13+3+2N,N>=2
可用容量全部N50%N-1
N-150%

   软RAID实现

      mdadm(MD adm)

         manage MD devices aka Linux Software RAID

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

         -C, --create:创建模式

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

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

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

            -c CHUNK_SIZE: 指明块大小;4K整数倍

            -x #: 指明空闲盘(替补盘)的个数;

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

            mdadm -D /dev/md#

         -A, --assemble:装配

         -F, --follow, --monitor:监控

         -S, --stop:停用MD设备,释放所有磁盘

            mdadm -S /dev/md#

         管理模式

            -f, --force:标记指定磁盘为坏

            -a, --add:添加磁盘

            -r, --remove:移除磁盘

            <raiddevice>: /dev/md#

            <component-devices>: 任意块设备或分区

         观察MD状态:

            cat /proc/mdstat

   watch

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

      watch -n# `COMMAND`


   实例:

  #创建5个100M大小的磁盘分区,修改分区类型为fd(Linux raid auto)

[root@localhost ~]# fdisk /dev/sda
...省略步骤...记得修改分区类型为fd
[root@localhost ~]# partx -a /dev/sda
[root@localhost ~]# fdisk -l /dev/sda
...省略部分输出...看重点
/dev/sda5            8513        8526      112423+  fd  Linux raid autodetect
/dev/sda6            8527        8540      112423+  fd  Linux raid autodetect
/dev/sda7            8541        8554      112423+  fd  Linux raid autodetect
/dev/sda8            8555        8568      112423+  fd  Linux raid autodetect
/dev/sda9            8569        8582      112423+  fd  Linux raid autodetect

  #创建MD设备/dev/md0,其中4块活动设备,RAID级别为5,自动创建,tunck大小为1M,1块备用盘,使用/dev/sda5-9 5块盘分区

[root@localhost ~]# mdadm -C /dev/md0 -n 4 -l 5 -a yes -c 1M  -x 1 /dev/sda{5,6,7,8,9}
mdadm: /dev/sda5 appears to contain an ext2fs file system
       size=5253220K  mtime=Tue Mar 15 13:50:48 2016
Continue creating array? y
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md0 started.
[root@localhost ~]# mdadm -D /dev/md0
/dev/md0:
        Version : 1.2
  Creation Time : Tue Mar 15 19:19:04 2016
     Raid Level : raid5
     Array Size : 328704 (321.05 MiB 336.59 MB)
  Used Dev Size : 109568 (107.02 MiB 112.20 MB)
   Raid Devices : 4
  Total Devices : 5
    Persistence : Superblock is persistent

    Update Time : Tue Mar 15 19:19:15 2016
          State : clean 
 Active Devices : 4
Working Devices : 5
 Failed Devices : 0
  Spare Devices : 1

         Layout : left-symmetric
     Chunk Size : 1024K

           Name : localhost.localdomain:0  (local to host localhost.localdomain)
           UUID : b477152a:6867fa49:d72e3b5c:efbe2709
         Events : 18

    Number   Major   Minor   RaidDevice State
       0       8        5        0      active sync   /dev/sda5
       1       8        6        1      active sync   /dev/sda6
       2       8        7        2      active sync   /dev/sda7
       5       8        8        3      active sync   /dev/sda8

       4       8        9        -      spare   /dev/sda9

  #格式化并挂载使用,存入文件

[root@localhost ~]# mkfs.ext4 /dev/md0
...省略输出...
[root@localhost ~]# mkdir /mnt/md0
[root@localhost ~]# mount /dev/md0 /mnt/md0
[root@localhost ~]# cd /mnt/md0
[root@localhost md0]# dd if=/dev/zero of=datafile bs=1M count=100
100+0 records in
100+0 records out
104857600 bytes (105 MB) copied, 0.287878 s, 364 MB/s
[root@localhost md0]# ls -l 
total 102413
-rw-r--r-- 1 root root 104857600 Mar 15 19:26 datafile
drwx------ 2 root root     12288 Mar 15 19:20 lost+found

  #查看可用空间:(4-1)*100M=300M

[root@localhost md0]# df -h /dev/md0
Filesystem      Size  Used Avail Use% Mounted on
/dev/md0        303M  103M  185M  36% /mnt/md0

  #制坏其中一块活动设备,备用设备立即启用。查看数据无损失

[root@localhost md0]# mdadm /dev/md0 -f /dev/sda8
mdadm: set /dev/sda8 faulty in /dev/md0
[root@localhost md0]# mdadm -D /dev/md0
...省略部分输出...
          State : clean 
 Active Devices : 4
Working Devices : 4
 Failed Devices : 1
  Spare Devices : 0
  ...省略部分输出...
    Number   Major   Minor   RaidDevice State
       0       8        5        0      active sync   /dev/sda5
       1       8        6        1      active sync   /dev/sda6
       2       8        7        2      active sync   /dev/sda7
       4       8        9        3      active sync   /dev/sda9

       5       8        8        -      faulty   /dev/sda8
[root@localhost md0]# ls -lh
total 101M
-rw-r--r-- 1 root root 100M Mar 15 19:26 datafile
drwx------ 2 root root  12K Mar 15 19:20 lost+found

  #继续制坏

[root@localhost md0]# mdadm /dev/md0 -f /dev/sda9
mdadm: set /dev/sda9 faulty in /dev/md0
[root@localhost md0]# mdadm -D /dev/md0
...省略部分输出...状态变成了clean,degraded
          State : clean, degraded 
 Active Devices : 3
Working Devices : 3
 Failed Devices : 2
  Spare Devices : 0
...省略部分输出...
    Number   Major   Minor   RaidDevice State
       0       8        5        0      active sync   /dev/sda5
       1       8        6        1      active sync   /dev/sda6
       2       8        7        2      active sync   /dev/sda7
       6       0        0        6      removed

       4       8        9        -      faulty   /dev/sda9
       5       8        8        -      faulty   /dev/sda8

  #移除制坏的设备

[root@localhost md0]# mdadm  /dev/md0 -r /dev/sda9
mdadm: hot removed /dev/sda9 from /dev/md0
[root@localhost md0]# mdadm  /dev/md0 -r /dev/sda8
mdadm: hot removed /dev/sda8 from /dev/md0
[root@localhost md0]# mdadm -D /dev/md0
...省略部分输出...
          State : clean, degraded 
 Active Devices : 3
Working Devices : 3
 Failed Devices : 0
  Spare Devices : 0
...省略部分输出...
    Number   Major   Minor   RaidDevice State
       0       8        5        0      active sync   /dev/sda5
       1       8        6        1      active sync   /dev/sda6
       2       8        7        2      active sync   /dev/sda7
       6       0        0        6      removed

  #做数据改动

[root@localhost md0]# dd if=/dev/zero of=datafile2 bs=1M count=80
80+0 records in
80+0 records out
83886080 bytes (84 MB) copied, 0.1969 s, 426 MB/s
[root@localhost md0]# ls -lh
total 181M
-rw-r--r-- 1 root root 100M Mar 15 19:26 datafile
-rw-r--r-- 1 root root  80M Mar 15 19:41 datafile2
drwx------ 2 root root  12K Mar 15 19:20 lost+found

  #模拟添加新硬盘,查看同步状态

[root@localhost md0]# mdadm /dev/md0 -a /dev/sda9
mdadm: added /dev/sda9
[root@localhost md0]# mdadm /dev/md0 -a /dev/sda8
mdadm: added /dev/sda8
[root@localhost md0]# mdadm -D /dev/md0
...省略部分输出...状态变成了clean, degraded, recovering
          State : clean, degraded, recovering 
 Active Devices : 3
Working Devices : 5
 Failed Devices : 0
  Spare Devices : 2
...省略部分输出...
 Rebuild Status : 72% complete
...省略部分输出...
    Number   Major   Minor   RaidDevice State
       0       8        5        0      active sync   /dev/sda5
       1       8        6        1      active sync   /dev/sda6
       2       8        7        2      active sync   /dev/sda7
       4       8        9        3      spare rebuilding   /dev/sda9

       5       8        8        -      spare   /dev/sda8

  #稍后片刻,同步数据完成

[root@localhost md0]# mdadm -D /dev/md0
...省略部分输出...
          State : clean 
 Active Devices : 4
Working Devices : 5
 Failed Devices : 0
  Spare Devices : 1
...省略部分输出...
    Number   Major   Minor   RaidDevice State
       0       8        5        0      active sync   /dev/sda5
       1       8        6        1      active sync   /dev/sda6
       2       8        7        2      active sync   /dev/sda7
       4       8        9        3      active sync   /dev/sda9

       5       8        8        -      spare   /dev/sda8

  #实验完成,打扫战场。/dev/md0会自动消失的

[root@localhost ~]# umount /dev/md0
[root@localhost ~]# mdadm -S /dev/md0
mdadm: stopped /dev/md0

  #如果后悔了,现在还能装载回来

[root@localhost ~]# mdadm -A /dev/md0 /dev/sda{5..9}
mdadm: /dev/md0 has been started with 4 drives and 1 spare.
[root@localhost ~]# mount /dev/md0 /mnt/md0
[root@localhost ~]# ls /mnt/md0
datafile  datafile2  lost+found