首页 > 代码库 > 16.文件系统——软RAID的实现(三)(RAID5、装配RAID、JBOD)

16.文件系统——软RAID的实现(三)(RAID5、装配RAID、JBOD)

一、RAID5的实现过程

前文介绍了软RAID0和软RAID1创建过程,本文将演示一个大小为2G的软RAID5的实现过程。

由于RAID5至少需要3块盘,其中有一块盘作为备份,因此只有两块盘是真正用来存放数据的,故这三块盘的大小都必须为1G,才能保证有效使用空间为2G

在创建带热备份的RAID1时,已经使用了3块盘,现在可以先将这三块盘停止使用,然后用来创建RAID5

[root@localhost ~]# umount /mnt

# 卸载设备/dev/md1


[root@localhost ~]# mdadm -S/dev/md1

# 停用设备/dev/md1
mdadm: stopped /dev/md1

[root@localhost ~]# mdadm -C/dev/md1 -a yes -l 5 -n 3 -c 256 /dev/sdb7 /dev/sd{c,d}2

# 创建一个RAID5设备,chunk大小为256k
mdadm: /dev/sdb7 appears to bepart of a raid array:
    level=raid1 devices=2 ctime=Tue Aug 1221:01:59 2014
mdadm: /dev/sdc2 appears to bepart of a raid array:
    level=raid1 devices=2 ctime=Tue Aug 1221:01:59 2014
mdadm: /dev/sdd2 appears to bepart of a raid array:
    level=raid1 devices=2 ctime=Tue Aug 1221:01:59 2014
Continue creating array? Y
# 由于磁盘中有数据,故提示是否覆盖
mdadm: Defaulting to version 1.2metadata
mdadm: array /dev/md1 started.

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

Personalities : [raid0] [raid1][raid6] [raid5] [raid4]
md1 : active raid5 sdd2[3]sdc2[1] sdb7[0]
      2118144 blocks super 1.2 level 5, 256kchunk, algorithm 2 [3/2] [UU_]
      [===>.................]  recovery = 15.4% (164224/1059072)finish=1.5min speed=9660K/sec
      # 成功创建了RAID5设备/dev/md1
md0 : active raid0 sdd1[1]sdc1[0]
      10506240 blocks super 1.2 512kchunks     
unused devices: <none>

 

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

/dev/md1:
        Version : 1.2
 Creation Time : Tue Aug 12 22:39:03 2014
     Raid Level : raid5
     Array Size : 2118144 (2.02 GiB 2.17 GB)
 Used Dev Size : 1059072 (1034.42 MiB 1084.49 MB)
  Raid Devices : 3
 Total Devices : 3
    Persistence : Superblock is persistent
 
    Update Time : Tue Aug 12 22:40:37 2014
          State : clean, degraded, recovering
 Active Devices : 2
Working Devices : 3
 Failed Devices : 0
 Spare Devices : 1
 
 Layout : left-symmetric
#左对称
     Chunk Size : 256K
 
 Rebuild Status : 93% complete
 
   Name : localhost.localdomain:1  (local to host localhost.localdomain)
   UUID :832c784c:06027e93:3d9f1f3f:553714a2
   Events : 15
 
    Number  Major   Minor   RaidDevice State
       0      8       23        0     active sync   /dev/sdb7
       1      8       34        1     active sync   /dev/sdc2
       3      8       50        2     spare rebuilding   /dev/sdd2

 

[root@localhost ~]# mke2fs -text4 /dev/md1

#格式化设备/dev/md1
mke2fs 1.41.12 (17-May-2010)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=64 blocks, Stripewidth=128 blocks
132464 inodes, 529536 blocks
26476 blocks (5.00%) reserved forthe super user
First data block=0
Maximum filesystemblocks=545259520
17 block groups
32768 blocks per group, 32768fragments per group
7792 inodes per group
Superblock backups stored onblocks:
        32768, 98304, 163840, 229376, 294912
 
Writing inode tables: done                           
Creating journal (16384 blocks):done
Writing superblocks andfilesystem accounting information: done
 
This filesystem will beautomatically checked every 22 mounts or
180 days, whichever comesfirst.  Use tune2fs -c or -i to override.

[root@localhost ~]# mount/dev/md1 /mnt

#将新建的RAID5设备挂载到/mnt


[root@localhost ~]# cp/etc/inittab /mnt


[root@localhost ~]# cat/mnt/inittab

#能读取其中的文件,说明设备能够正常工作

# inittab is only used by upstartfor the default runlevel.
# ADDING OTHER CONFIGURATION HEREWILL HAVE NO EFFECT ON YOUR SYSTEM.
# System initialization isstarted by /etc/init/rcS.conf
# Individual runlevels arestarted by /etc/init/rc.conf
# Ctrl-Alt-Delete is handled by/etc/init/control-alt-delete.conf
# Terminal gettys are handled by/etc/init/tty.conf and /etc/init/serial.conf,
# with configuration in/etc/sysconfig/init.

 

RAID5也可以在其中一块磁盘损坏的情况下继续使用

[root@localhost ~]# mdadm/dev/md1 -f /dev/sdc2

mdadm: set /dev/sdc2 faulty in/dev/md1
#模拟/dev/sdc2坏了的情况


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

/dev/md1:
        Version : 1.2
 Creation Time : Tue Aug 12 22:39:03 2014
     Raid Level : raid5
     Array Size : 2118144 (2.02 GiB 2.17 GB)
 Used Dev Size : 1059072 (1034.42 MiB 1084.49 MB)
  Raid Devices : 3
 Total Devices : 3
    Persistence : Superblock is persistent
 
    Update Time : Tue Aug 12 22:50:48 2014
          State : clean, degraded
 Active Devices : 2
Working Devices : 2
 Failed Devices : 1
 Spare Devices : 0
 
         Layout : left-symmetric
     Chunk Size : 256K
 
   Name : localhost.localdomain:1  (local to host localhost.localdomain)
   UUID :832c784c:06027e93:3d9f1f3f:553714a2
   Events : 21
 
    Number  Major   Minor   RaidDevice State
       0      8       23        0     active sync   /dev/sdb7
       1      0        0        1     removed
       3      8       50        2     active sync   /dev/sdd2
 
       1      8       34        -     faulty   /dev/sdc2
#设备/dev/sdc2已经坏了


[root@localhost ~]# cat /mnt/inittab

#坏了一块盘的情况下依然可以正常工作
# inittab is only used by upstartfor the default runlevel.
# ADDING OTHER CONFIGURATION HEREWILL HAVE NO EFFECT ON YOUR SYSTEM.
# System initialization isstarted by /etc/init/rcS.conf
# Individual runlevels arestarted by /etc/init/rc.conf
# Ctrl-Alt-Delete is handled by/etc/init/control-alt-delete.conf
# Terminal gettys are handled by/etc/init/tty.conf and /etc/init/serial.conf,
# with configuration in/etc/sysconfig/init.

 

如果再坏掉一块盘,会发生什么情况呢

[root@localhost ~]# mdadm /dev/md1-f /dev/sdd2

mdadm: set /dev/sdd2 faulty in/dev/md1

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

/dev/md1:
        Version : 1.2
  Creation Time : TueAug 12 22:39:03 2014
     Raid Level :raid5
     Array Size :2118144 (2.02 GiB 2.17 GB)
  Used Dev Size :1059072 (1034.42 MiB 1084.49 MB)
   Raid Devices : 3
  Total Devices : 3
    Persistence :Superblock is persistent
 
    Update Time : TueAug 12 22:55:34 2014
          State :clean, FAILED
 Active Devices : 1
Working Devices : 1
 Failed Devices : 2
  Spare Devices : 0
 
         Layout :left-symmetric
     Chunk Size : 256K
 
     Name :localhost.localdomain:1  (local to hostlocalhost.localdomain)
     UUID :832c784c:06027e93:3d9f1f3f:553714a2
     Events : 25
 
    Number   Major  Minor   RaidDevice State
       0       8      23        0      active sync   /dev/sdb7
       1       0       0        1      removed
       2       0       0        2      removed
 
       1       8      34        -      faulty  /dev/sdc2
       3      8       50        -     faulty   /dev/sdd2
#可以看到磁盘已经坏了两块了


[root@localhost ~]# cat/mnt/inittab

# inittab is only used by upstartfor the default runlevel.
# ADDING OTHER CONFIGURATION HEREWILL HAVE NO EFFECT ON YOUR SYSTEM.
# System initialization isstarted by /etc/init/rcS.conf
# Individual runlevels arestarted by /etc/init/rc.conf
# Ctrl-Alt-Delete is handled by/etc/init/control-alt-delete.conf
# Terminal gettys are handled by/etc/init/tty.conf and /etc/init/serial.conf,
# with configuration in/etc/sysconfig/init.

 

坏了两块盘的RAID5依然可以访问其中的文件,这是不正常的现象,其原因已不在设备本身了。现在可以先卸载设备/dev/md1

[root@localhost ~]# umount /mnt

# 卸载设备/dev/md1


[root@localhost ~]# mount/dev/md1 /mnt

mount: wrong fs type, bad option, bad superblock on/dev/md1,
       missingcodepage or helper program, or other error
       In some casesuseful info is found in syslog - try
       dmesg |tail  or so
#这时无法再挂载设备/dev/md1了,说明之前看到的数据并不是来自于该设备的


 

RAID5 也支持使用备盘

 

二、装配RAID设备

到目前为止介绍的都是RAID设备的创建,那么如何装配一个现有的RAID设备呢?假设主机1上有一组RAID5设备,现在主机1坏了,要将该组RAID5设备装配到主机2上,则不可以重新创建,那样会毁坏原有数据,因此需要用到装配模式。

主机1上的RAID5设备编号为/dev/md2,它使用的三块分区可能是/dev/sd{b,c,d}2,那么将其移植到主机2上后,这三块分区所在的硬盘很有可能被识别为/dev/sd{e,f,g},且RAID编号/dev/md2已经被占用了,那么就意味着需要将其RAID编号重新指定为/dev/md3,这时就需要使用到-A选项,来重新装配RAID设备:

mdadm -A /dev/md3 -a yes -l 5 -n 3 /dev/sd{e,f,g}2

# 注意,RAID的级别一定要和原来保持一致。

 wKioL1Ps1RbRc5IUAACU_GF-qKQ832.png

三、JBOD

JBOD也是将多块硬盘组合成一个完整的设备来使用,不同之处在于JBOD不是将数据同时分配到多个设备上,而是简单的将设备连接起来使用,即填满一个设备后再使用第二个设备。比如一个数据库的文件需要500G的磁盘空间,但现有硬盘只有300G,那么就需要将两块硬盘和在一起形成一个600G的设备,使用完了第一个设备上的300G之后再使用第二个设备上的300G

JBOD在进行大数据的处理时会比较有用,比如hadoop,因为hadoop本身就具有数据冗余功能,所以没有必要使用RAID设备,但hadoop需要的存储空间又非常大,这时JBOD就派上用场了。

mdadm命令也支持JBOD


本文出自 “重剑无锋 大巧不工” 博客,请务必保留此出处http://wuyelan.blog.51cto.com/6118147/1540237