linux下的软raid

在linux中,可使用软件的方法来实现raid,固然,这种软件方法的实现比不了服务器自带的阵列卡,通常X86服务器上(好比dell R720)上面就能够配一块硬件阵列卡,还能够加缓存,在回写模式下能够加速数据的读写,还有电池,能够保障缓存中的数据在忽然断电状况下不丢失。而软raid没有加速和保护的功能,但确实能实现raid。好比常见的raid 0、一、五、10。下面简单介绍一下这几种raid的原理。linux

1、JBOD,这种模式其实不是一种真正的raid.但它能把多个物理磁盘的容量堆叠起来,让它们造成一个逻辑的磁盘,数据在写满一个盘再转到下一个盘。但若是磁盘损坏的话,数据就丢失了,这种模式在企业中使用较少缓存

2、raid 0,这是一种不包含数据冗余的raid.至少使用两块硬盘来实现,它不会形成磁盘容量的减小,而且能加速磁盘的读写速度,可是数据的安全得不到保障,若是阵列中的一块硬盘故障,整个阵列中的数据都丢失了。这是一种条带化的技术,好比一个文件100M,而每一个条带大小为32K,那么它会以32K为一个单位来分开存储,即每在物理磁盘0上面写32K数据之后,再到物理磁盘1上写32K数据,依此类推。安全

3、raid 1,这是一种镜像的raid技术,至少2块硬盘,磁盘使用率为50%。由于是镜像的,因此磁盘坏一块没有关系,通常用来安装操做系统,读取速度增长,写入速度与一块磁盘持平或者稍慢服务器

4、raid 5,带有校验的条带化raid。raid 5没有专门的检验盘,它把数据和检验数据每一个盘写一部分,依此类推。磁盘使用率为(n-1)/n,即会少一块磁盘的容量,读写的速度都提升了。在企业中,此技术也使用得比较多,若是损坏一块磁盘,可使用其余磁盘的校验信息来恢复数据ide

5、raid 10,即raid 1与raid 0的组,有人把raid 10和raid 01说成一种,其实它们也稍有一同,10指的是把这些物理磁盘的作成两个raid 1,再把两个raid 1 组成成一个raid 0。除了磁盘使用率只有一半之后,读、写速度都提升了,而后由于有镜像,数据安全获得保障。spa


使用mdadm来实验软raid操作系统

在个人实验环境中,有五块磁盘,sda安装了linux,sdb-sde用来作软件raid。3d

mdadm的用法
rem

语法:# mdadm  -C  -v  /dev/mdX  -lY  -nZ  -cK  RAID成员it

-C 即建立一个raid,此种方法将raid的信息写入到superblock中,若是未来重装或者从新启用raid,很是方便

-v 显示详细信息

/dev/mdX,即指定这个设备为mdX,X通常取值从0-127

-l 指定raid的级别,好比0 1 5

-n  指定一共有几个设备来构建这个raid,在linux中可使用磁盘或者一个分区来作为源盘

-c 指定条带的大小,默认为64K

后面跟着的是组成raid的磁盘的成员,这些成员数目要等于在-n后面指定的数

-x 若是是作有检验的raid,好比5,能够指定热备盘,即一个在raid中已经被使用磁盘出现故障后,能够自动替换进raid中


在本例中,我使用三个磁盘作一个raid 5,而后把/dev/sde作成一个热备盘,指定条带大小为32K

而后把raid 中的/dev/sdd模拟故障,看/dev/sde可否自动替换进去,再查看数据的完整性

[root@Centos ~]# mdadm -C /dev/md0 -v -a yes -l 5 -c 32K -n 3 /dev/sd{b,c,d} -x 1 /dev/sde

mdadm: layout defaults to left-symmetric

mdadm: layout defaults to left-symmetric

mdadm: size set to 2096096K

mdadm: Defaulting to version 1.2 metadata

mdadm: array /dev/md0 started.


接下来使用fdisk -l来查看是否有md0这个设备

Disk /dev/md0: 4292 MB, 4292804608 bytes

2 heads, 4 sectors/track, 1048048 cylinders

Units = cylinders of 8 * 512 = 4096 bytes

Sector size (logical/physical): 512 bytes / 512 bytes

I/O size (minimum/optimal): 32768 bytes / 65536 bytes

Disk identifier: 0x00000000


再接下来,咱们查看一下这个md0的相关信息

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

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

/dev/md0:

      Version : 1.2

Creation Time : Wed Mar  522:43:51 2014

  Raid Level : raid5

   Array Size : 4192192 (4.00 GiB 4.29 GB)

Used Dev Size : 2096096 (2047.31 MiB 2146.40 MB)

 Raid Devices : 3

Total Devices : 4

  Persistence : Superblock is persistent


  Update Time : Wed Mar  5 22:44:162014

        State : clean

Active Devices : 3

Working Devices : 4

Failed Devices : 0

Spare Devices : 1


       Layout : left-symmetric

 Chunk Size : 32K


         Name : Centos.abc.com:0  (local tohost Centos.corun.com)

         UUID : 5e6594f3:3ad4713d:1476a99a:3a65e231

       Events : 18


  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



接下来,咱们对/dev/md0进行分区、格式化、挂载

fdisk /dev/md0

建立一个主分区,大小为所有大小,也就是说为4G

fdisk -l  显示这个已经建立的分区名称,还有使用命令显示这个分区的UUID


Disk /dev/md0: 4292 MB, 4292804608 bytes

2 heads, 4 sectors/track, 1048048 cylinders

Units = cylinders of 8 * 512 = 4096 bytes

Sector size (logical/physical): 512 bytes /512 bytes

I/O size (minimum/optimal): 32768 bytes /65536 bytes

Disk identifier: 0x327efd65


  Device Boot      Start         End     Blocks   Id  System

/dev/md0p1              17     1048048    4192128   83  Linux


[root@Centos dev]# blkid /dev/md0p1

/dev/md0p1: UUID="5876338a-afca-44e9-b9ce-1cee32c22026" TYPE="ext3"



[root@Centos dev]# e2label /dev/md0p1 liuqing

[root@Centos dev]# blkid /dev/md0p1

/dev/md0p1: UUID="5876338a-afca-44e9-b9ce-1cee32c22026" TYPE="ext3" LABEL="liuqing"


挂载这个文件系统到/mnt

mount UUID=5876338a-afca-44e9-b9ce-1cee32c22026 /mnt


在/mnt这个目录中,复制几个文件进来,分别是/etc/inittab /etc/fstab /etc/passwd

[root@Centos dev]# cd /mnt

[root@Centos mnt]# cp /etc/passwd .

[root@Centos mnt]# cp /etc/inittab .

[root@Centos mnt]# cp /etc/fstab .

[root@Centos mnt]# ls

fstab  inittab  lost+found  passwd

[root@Centos mnt]#


最后面这一部分是要模拟磁盘故障,咱们将/dev/sdd模拟故障

[root@Centos mnt]# mdadm /dev/md0 --fail /dev/sdd  --remove /dev/sdd

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

mdadm: hot removed /dev/sdd from /dev/md0

[root@Centos mnt]# mdadm --detail /dev/md0

/dev/md0:

       Version : 1.2

 Creation Time : Wed Mar  5 22:43:51 2014

    Raid Level : raid5

    Array Size : 4192192 (4.00 GiB 4.29 GB)

 Used Dev Size : 2096096 (2047.31 MiB 2146.40 MB)

  Raid Devices : 3

 Total Devices : 3

   Persistence : Superblock is persistent


   Update Time : Wed Mar  5 23:04:46 2014

         State : clean

Active Devices : 3

Working Devices : 3

Failed Devices : 0

 Spare Devices : 0


        Layout : left-symmetric

    Chunk Size : 32K


          Name : Centos.corun.com:0  (local to host Centos.corun.com)

          UUID : 5e6594f3:3ad4713d:1476a99a:3a65e231

        Events : 38


   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