Linux软RAID基本操作介绍


    RAID全称是 “A Case for Redundant Arrays of Inexpensive Disks (RAID)”,称为“廉价磁盘冗余阵列”,由加州大学伯克利大学在1987年发表的论文中而来。RAID的主要思想就是把若干小容量物理磁盘组成一个大容量虚拟存储设备,以提高磁盘存储的读、写效率,并提供冗余以提高数据存储的安全性。

    根据应用方向的不同,RAID也分为不同级别,常用的有RAID-0、RAID-1、RAID-5、RAID-10。
    RAID-0也称为条带模式(striping),即把连续的数据分散到多个磁盘上存取,最少需要磁盘数大于等于2。当系统有数据请求就可以被多个磁盘并行的执行,每个磁盘执行属于它自己的那部分数据请求。这种数据上的并行操作可以充分利用总线的带宽,显著提高磁盘整体存取性能。因为读取和写入是在设备上并行完成的,读取和写入性能将会增加,这也通常是使用RAID-0的主要原因。但RAID-0没有数据冗余,如果驱动器出现故障,那么将无法恢复任何数据,所以一般主要用在对设备读取要求高,但对数据安全性不做要求的业务中。

      RAID-1又称为镜像(Mirroring),RAID-1要求至少有2的整数倍块硬盘,并使用0块或更多的备用磁盘。每次写数据时会同时写入镜像盘。这种阵列可靠性很高,但其有效容量减小到总容量的一半,同时这些磁盘的大小应该相等,否则总容量只具有最小磁盘的大小。这种方法完整备份了数据,对数据的写入速度稍有降低,而且磁盘的利用率只有二分之一。但其优点是对数据的容错很好,对数据的读取有较大的提高。


      RAID-5具有和RAID-0相近似的数据读取速度,同时磁盘空间利用率也要比RAID1高。属于是RAID-0和RAID-1的折中方案,是一种存储性能、数据安全和存储成本兼顾的存储解决方案。由于存储成本相对较低,是目前运用较多的一种解决方案。
      RAID-5阵列中数据的分布与RAID-0类似,数据也是分布到每块硬盘上,但Raid-5没有独立的奇偶校验盘,他通过将校验的数据循环存储并分散放在所有磁盘上,其中任意N-1块磁盘上都存储完整的数据,也就是说有相当于一块磁盘容量的空间用于存储奇偶校验信息。因此当RAID5能够支持在一块盘离线的情况下保证数据的正常访问,不会影响数据的完整性,从而保证了数据安全。当损坏的磁盘被替换后,RAID还会自动利用剩下奇偶校验信息去重建此磁盘上的数据,来保持RAID5的高可靠性。
      RAID-5的组建,至少需要三块或更多的磁盘,并可以使用0块或更多的备用磁盘,其数据安全保障程度要比RAID1低,写入数据的速度比对单个磁盘进行写入速度稍慢。如果有两块或两块以上硬盘同时离线,或者RAID信息出错等原因,阵列便会失效,这时就需要对数据进行重组。并且做raid 5阵列所有磁盘容量必须一样大,当容量不同时,会以最小的容量为准。 同时,最好硬盘转速一样,否则会影响性能。

      RAID 1+0也被称为RAID-10标准,实际是将RAID-0和RAID-1标准结合的产物,是先对磁盘先进行RAID-1,然后RAID-0,这种方法即提供了冗余,而且也提升了速度。
      在连续地以位或字节为单位分割数据并且并行读/写多个磁盘的同时,为每一块磁盘作磁盘镜像进行冗余。它的优点是同时拥有RAID-0的超凡速度和RAID-1的数据高可靠性,但是CPU占用率同样也更高,而且磁盘的利用率比较低。由于利用了RAID-0极高的读写效率和RAID-1较高的数据保护、恢复能力,使RAID-10成为了一种性价比较高的等级,目前几乎所有的RAID控制卡都支持这一等级。


      但是,RAID-10对存储容量的利用率和RAID-1一样低,只有50%。因此,RAID10即高可靠性与高效磁盘结构它是一个带区结构加一个镜象结构,可以达到既高效又高速的目的,RAID 10能提供比RAID 5更好的性能,使用此方案比较昂贵。

Linux软RAID基本操作介绍


      由于RAID的使用性很高,而对硬盘的使用内核需要识别,在最新的内核中已经默认加载了对常见RAID卡的驱动。RAID设备在linux系统中会被识别成/dev/md[N] N是数字。使用mdadm命令能够对RAID设备配置。
  目前 RAID技术大致分为两种:基于硬件的RAID技术和基于软件的RAID技术。其中在Linux下通过自带的软件就能实现RAID功能,由于是用软件去实现的RAID功能,所以它配置灵活、管理方便。同时使用软件RAID,还可以实现将几个物理磁盘合并成一个更大的虚拟设备,从而达到性能改进和数据冗余的目的。
      Linux软RAID是在linux操作系统层面进行的软件RAID配置,虽然也能对数据进行保护,但是在实际生产环境中,还是建议使用存储中磁盘阵列和硬RAID实现磁盘存储冗余。基于硬件的RAID解决方案比基于软件RAID技术在使用性能和服务性能方面不仅更胜一筹,而且在检测和修复多位错误的能力、错误磁盘自动检测和阵列重建等方面更有安全保障。

基本操作命令总结:
创建模式:
    -C:创建md0
    -n#:指明创建raid所需要的磁盘个数

    -#:指明 创建raid的级别

    -c:指明创建的块大小

    -x:指明冗余(空闲)磁盘的个数
    -a{yes|no}:自动创建目标raid设备的设备文件

管理模式:
    -f:标记模拟指定磁盘为损坏

    -a:向raid里面添加磁盘

    -r:移除磁盘

    -S:停止阵列
    -A -s:激活阵列

    -D -s:生成配置文件(mdadm -D -s >> /etc/mdadm.conf)
    mdadm -zero-superblock /dev/sdb1(删除raid信息)

监控模式:
    -F:(一般不怎么常用)

装配模式:
    软raid是基于系统的,当我们原系统损坏了,那么我们此时就需要重新装配raid
    -A (例如:mdadm -A /dev/md1 /dev/sdb5 /dev/sdb6)
曾长模式:

    用于增加磁盘,为阵列实现扩容

    -G (例如:[root@localhost ~]# mdadm -G /dev/md2  -n 4)

查看:
  mdadm -D /dev/md#(显示raid阵列详细信息)
    cat /proc/mdstat(查看raid的状态)

--------------------------------------------------------------------------------
下面我们就来具体操作试试吧!!

一、添加了4块磁盘,我们来查看下是否存在:

[root@bkjia.com ~]# fdisk -l
 
Disk /dev/sda: 128.8 GB, 128849018880 bytes, 251658240 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0x000271fa
 
  Device Boot      Start        End      Blocks  Id  System
/dev/sda1  *        2048      976895      487424  83  Linux
/dev/sda2          976896  196288511    97655808  83  Linux
/dev/sda3      196288512  200194047    1952768  82  Linux swap / Solaris
/dev/sda4      200194048  251658239    25732096    5  Extended
/dev/sda5      200196096  239257599    19530752  83  Linux
 
Disk /dev/sdd: 128.8 GB, 128849018880 bytes, 251658240 sectors(第四块空磁盘)
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
 
 
Disk /dev/sdc: 128.8 GB, 128849018880 bytes, 251658240 sectors(第三块空磁盘)
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
 
 
Disk /dev/sdb: 128.8 GB, 128849018880 bytes, 251658240 sectors(第二块空磁盘)
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
 
 
Disk /dev/sde: 128.8 GB, 128849018880 bytes, 251658240 sectors(第五块空磁盘)
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes

二、将添加的几块空闲磁盘创建成raid阵列
[root@bkjia.com ~]# mdadm -C /dev/md0 -n3 -l5 -x1 /dev/sd{b,c,d,e}
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md0 started.

三、查看下我们创建好的raid阵列的状态
[root@bkjia.com ~]# cat /proc/mdstat ##显示阵列的状态
Personalities : [raid6] [raid5] [raid4] 
md0 : active raid5 sdd[4] sde[3](S) sdc[1] sdb[0]
      251527168 blocks super 1.2 level 5, 512k chunk, algorithm 2 [3/3] [UUU]
      bitmap: 0/1 pages [0KB], 65536KB chunk##此处我们可以看到阵列已经同步完成了! 
     
[root@bkjia.com ~]# mdadm -D /dev/md0 ###显示下我们阵列的详细信息
/dev/md0:
        Version : 1.2
  Creation Time : Sat Jun  4 10:17:02 2016
    Raid Level : raid5  ##raid级别
    Array Size : 251527168 (239.88 GiB 257.56 GB)
  Used Dev Size : 125763584 (119.94 GiB 128.78 GB)
  Raid Devices : 3
  Total Devices : 4
    Persistence : Superblock is persistent
 
  Intent Bitmap : Internal
 
    Update Time : Sat Jun  4 10:27:34 2016
          State : clean  ##状��正常
 Active Devices : 3  ##活动设备的磁盘块数量
Working Devices : 4  ##总共工作设备的磁盘数量
 Failed Devices : 0  ##没出现损坏的磁盘
  Spare Devices : 1  ##备份的磁盘数量
 
        Layout : left-symmetric
    Chunk Size : 512K
 
          Name : bkjia.com:0  (local to host bkjia.com)
          UUID : 0ad970f7:f655d497:bbeeb6ad:aca1241d
        Events : 127
 
    Number  Major  Minor  RaidDevice State
      0      8      16        0      active sync  /dev/sdb
      1      8      32        1      active sync  /dev/sdc
      4      8      48        2      active sync  /dev/sdd
 
      3      8      64        -      spare  /dev/sde ##此硬盘处于空闲状态

 

四、将磁盘格式化
[root@bkjia.com ~]# mkfs.ext4 /dev/md0 
mke2fs 1.42.9 (28-Dec-2013)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=128 blocks, Stripe width=256 blocks
15720448 inodes, 62881792 blocks
3144089 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=2210398208
1919 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, 2654208, 
    4096000, 7962624, 11239424, 20480000, 23887872
 
Allocating group tables: done                           
Writing inode tables: done                           
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done  ##格式成功!

五、挂载设备然后我们使用看看是否正常
[root@bkjia.com ~]# mkdir /md0dir 
[root@bkjia.com ~]# mount /dev/md0 /md0dir/
[root@bkjia.com ~]# mount 
tmpfs on /run/user/0 type tmpfs (rw,nosuid,nodev,relatime,seclabel,size=100136k,mode=700)
/dev/md0 on /md0dir type ext4 (rw,relatime,seclabel,stripe=256,data=ordered)##临时挂载成功
 
[root@bkjia.com ~]# vim /etc/fstab ##设置开机自动挂载设备
# /etc/fstab
# Created by anaconda on Wed May 11 18:44:18 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=267aae0a-088b-453f-a470-fec8fcdf772f /                      xfs    defaults        0 0
UUID=d8d9403c-8fa1-4679-be9b-8e236d3ae57b /boot                  xfs    defaults        0 0
UUID=7f62d6d9-9eda-4871-b2d7-2cbd2bc4cc89 /testdir                xfs    defaults        0 0
UUID=abba10f4-18b3-4bc3-8cca-22ad619fadef swap                    swap    defaults        0 0
/dev/md0                                /md0dir                  ext4    defaults      0 0
~   
[root@bkjia.com ~]# mount -a  ##使fsta文件中没挂载的都挂上来                                                                                   
[root@bkjia.com ~]# cd /md0dir/  ##进入挂载目录中创建文件测试正常!
[root@bkjia.com md0dir]# ls
lost+found
[root@bkjia.com md0dir]# touch 1.txt 
[root@bkjia.com md0dir]# ls
1.txt  lost+found
[root@bkjia.com md0dir]#

六、现在我们来模拟下磁盘出现故障,然后看看raid会有什么变化
[root@bkjia.com md0dir]# mdadm /dev/md0 -f /dev/sdd ##标记/dev/sdd为损坏
mdadm: set /dev/sdd faulty in /dev/md0
 
[root@bkjia.com md0dir]# mdadm -D /dev/md0 ##显示下raid的信息看看
/dev/md0:
        Version : 1.2
  Creation Time : Sat Jun  4 10:17:02 2016
    Raid Level : raid5
    Array Size : 251527168 (239.88 GiB 257.56 GB)
  Used Dev Size : 125763584 (119.94 GiB 128.78 GB)
  Raid Devices : 3
  Total Devices : 4
    Persistence : Superblock is persistent
 
  Intent Bitmap : Internal
 
    Update Time : Sat Jun  4 11:55:39 2016
          State : clean, degraded, recovering 
 Active Devices : 2
Working Devices : 3
 Failed Devices : 1  ####此处的状态也跟前的不一样了,标记了损坏的块数
  Spare Devices : 1
 
        Layout : left-symmetric
    Chunk Size : 512K
 
 Rebuild Status : 0% complete
 
          Name : bkjia.com:0  (local to host bkjia.com)
          UUID : 0ad970f7:f655d497:bbeeb6ad:aca1241d
        Events : 129
 
    Number  Major  Minor  RaidDevice State
      0      8      16        0      active sync  /dev/sdb
      1      8      32        1      active sync  /dev/sdc
      3      8      64        2      spare rebuilding  /dev/sde
                                                          ##此时/dev/sdd开始rebuild数据
 
      4      8      48        -      faulty  /dev/sdd##/dev/sdd损坏了
 
 
 
[root@bkjia.com md0dir]# cat /proc/mdstat 
Personalities : [raid6] [raid5] [raid4] 
md0 : active raid5 sdd[4](F) sde[3] sdc[1] sdb[0]
      251527168 blocks super 1.2 level 5, 512k chunk, algorithm 2 [3/2] [UU_]
      [>....................]  recovery =  2.2% (2847492/125763584) finish=10.0min speed=203392K/sec  ##开始同步数据了!
      bitmap: 0/1 pages [0KB], 65536KB chunk
 
unused devices: <none>
 
 
[root@bkjia.com md0dir]# cd 
[root@bkjia.com ~]# cd /md0dir/
[root@bkjia.com md0dir]# ls
1.txt  lost+found
[root@bkjia.com md0dir]# touch 2.txt 
[root@bkjia.com md0dir]# ls
1.txt  2.txt  lost+found ###看来一切正常,嘻嘻。

七、接下了我们把刚刚损坏的磁盘给移除掉

[root@bkjia.com md0dir]# mdadm /dev/md0 -r /dev/sdd 
mdadm: hot removed /dev/sdd from /dev/md0
 
[root@bkjia.com md0dir]# mdadm -D /dev/md0 
/dev/md0:
        Version : 1.2
  Creation Time : Sat Jun  4 10:17:02 2016
    Raid Level : raid5
    Array Size : 251527168 (239.88 GiB 257.56 GB)
  Used Dev Size : 125763584 (119.94 GiB 128.78 GB)
  Raid Devices : 3
  Total Devices : 3
    Persistence : Superblock is persistent
 
  Intent Bitmap : Internal
 
    Update Time : Sat Jun  4 12:07:12 2016
          State : clean 
 Active Devices : 3
Working Devices : 3
 Failed Devices : 0
  Spare Devices : 0
 
        Layout : left-symmetric
    Chunk Size : 512K
 
          Name : bkjia.com:0  (local to host bkjia.com)
          UUID : 0ad970f7:f655d497:bbeeb6ad:aca1241d
        Events : 265
 
    Number  Major  Minor  RaidDevice State
      0      8      16        0      active sync  /dev/sdb
      1      8      32        1      active sync  /dev/sdc
      3      8      64        2      active sync  /dev/sde
                                ##此时我们就只有三块盘在raid阵列中了

八、如果在坏一块盘那我们数据将会有损坏,所有我们在添加一块盘来做备份
[root@bkjia.com md0dir]# mdadm /dev/md0 -a /dev/sdd ##由于我磁盘不够了所有就把移走那块添加了
mdadm: re-added /dev/sdd   
 
[root@bkjia.com md0dir]# mdadm -D /dev/md0 
/dev/md0:
        Version : 1.2
  Creation Time : Sat Jun  4 10:17:02 2016
    Raid Level : raid5
    Array Size : 251527168 (239.88 GiB 257.56 GB)
  Used Dev Size : 125763584 (119.94 GiB 128.78 GB)
  Raid Devices : 3
  Total Devices : 4
    Persistence : Superblock is persistent
 
  Intent Bitmap : Internal
 
    Update Time : Sat Jun  4 12:11:54 2016
          State : clean 
 Active Devices : 3
Working Devices : 4
 Failed Devices : 0
  Spare Devices : 1
 
        Layout : left-symmetric
    Chunk Size : 512K
 
          Name : bkjia.com:0  (local to host bkjia.com)
          UUID : 0ad970f7:f655d497:bbeeb6ad:aca1241d
        Events : 266
 
    Number  Major  Minor  RaidDevice State
      0      8      16        0      active sync  /dev/sdb
      1      8      32        1      active sync  /dev/sdc
      3      8      64        2      active sync  /dev/sde
      4      8      48        -      spare  /dev/sdd##ok我们又有备份盘了
       
       
接下我们就把raid给停止服务吧,,由于我之前挂载了,所有我们先卸载然后在停止服务。
[root@bkjia.com ~]# umount /md0dir/
[root@bkjia.com ~]# mdadm -S /dev/md0 
mdadm: stopped /dev/md0

如何在Linux上构建 RAID 10阵列 

Debian软RAID安装笔记 - 使用mdadm安装RAID1

常用RAID技术介绍以及示例演示(多图)

Linux实现最常用的磁盘阵列-- RAID5

RAID0+1和RAID5的性能测试结果

Linux入门教程:磁盘阵列(RAID)

本文永久更新链接地址

相关内容