在linux中,可以使用软件的方法来实现raid,当然,这种软件方法的实现比不了服务器自带的阵列卡,一般X86服务器上(比如dell R720)上面就可以配一块硬件阵列卡,还可以加缓存,在回写模式下可以加速数据的读写,还有电池,可以保障缓存中的数据在突然断电情况下不丢失。而软raid没有加速和保护的功能,但确实能实现raid。比如常见的raid 0、1、5、10。下面简单介绍一下这几种raid的原理。
一、JBOD,这种模式其实不是一种真正的raid.但它能把多个物理磁盘的容量堆叠起来,让它们形成一个逻辑的磁盘,数据在写满一个盘再转到下一个盘。但如果磁盘损坏的话,数据就丢失了,这种模式在企业中使用较少
二、raid 0,这是一种不包含数据冗余的raid.至少使用两块硬盘来实现,它不会造成磁盘容量的减少,并且能加速磁盘的读写速度,但是数据的安全得不到保障,如果阵列中的一块硬盘故障,整个阵列中的数据都丢失了。这是一种条带化的技术,比如一个文件100M,而每个条带大小为32K,那么它会以32K为一个单位来分开存储,即每在物理磁盘0上面写32K数据以后,再到物理磁盘1上写32K数据,依此类推。
三、raid 1,这是一种镜像的raid技术,至少2块硬盘,磁盘使用率为50%。因为是镜像的,所以磁盘坏一块没有关系,一般用来安装操作系统,读取速度增加,写入速度与一块磁盘持平或者稍慢
四、raid 5,带有校验的条带化raid。raid 5没有专门的检验盘,它把数据和检验数据每个盘写一部分,依此类推。磁盘使用率为(n-1)/n,即会少一块磁盘的容量,读写的速度都提高了。在企业中,此技术也使用得比较多,如果损坏一块磁盘,可以使用其他磁盘的校验信息来恢复数据
五、raid 10,即raid 1与raid 0的组,有人把raid 10和raid 01说成一种,其实它们也稍有一同,10指的是把这些物理磁盘的做成两个raid 1,再把两个raid 1 组成成一个raid 0。除了磁盘使用率只有一半以后,读、写速度都提高了,然后因为有镜像,数据安全得到保障。
使用mdadm来实验软raid
在我的实验环境中,有五块磁盘,sda安装了linux,sdb-sde用来做软件raid。
mdadm的用法
语法:# mdadm -C -v /dev/mdX -lY -nZ -cK RAID成员
-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