在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