磁盘阵列全名是: Redundant Arrays of Inexpensive Disks, RAID ,大概的意思是:廉价的磁盘冗余阵列。RAID 可以通过一个技术(软件或硬件),将多个较小的磁盘整合成为一个较大的磁盘设备,而这个较大的磁盘不但扩展了储存空间,而且还有数据保护的功能。
RAID会根据等级(level) 的不同,而使得整合后的磁盘具有不同的功能,基本常见的level 有以下这几种
RAID级别划分
RAID 0:磁盘叠加
这种模式一般是使用相同型号与容量的磁盘来组成。这种模式的RAID 会将磁盘先切出等量的区块, 然后当一个文件需要要写入RAID 设备时,该文件就会依据区块的大小切割好,然后再依次放到各个磁盘里。由于每个磁盘会交错的存放数据, 因此数据要写入RAID 时,会被等量的放在各个磁盘上面。
所以说,RAID 0,他的特点就是:
1、磁盘越多RAID设备的容量就越大。
2、容量的总大小是多个硬盘的容量的总和。
3、磁盘越多,写入的效能就越高。
4、如果使用非等大的硬盘,那么当小的磁盘写满后,就直接向空间大的磁盘中写数据了。
5、最少的磁盘数是2个,而且磁盘使用率为100%
他的致使之处就是:万一其中一个磁盘有问题,那么数据就会全部出问题。因为数据是分开存储的。
RAID 1:镜像备份
这种模式主要是让同一份数据,完整的保存在不同的磁盘上。由于同一份数据会被分别写入到其他不同磁盘。因此在大量写入RAID 1 设备的情况下,写入的效能会变的非常差。但如果你使用的是硬件RAID (磁盘阵列卡) 时,磁盘阵列卡会主动的复制一份而不使用系统的I/O总线,这对效能影响是不大的。 如果使用软件磁盘阵列,效能就会明显下降了。
RAID 1,他的特点是:
1、保证了数据的安全,
2、RAID 1设备的容量是所有磁盘容量总和的一半
3、在多个磁盘组成RAID 1设备的时候,总容量将以最小的那一颗磁盘为主
4、读取的效能相对增加。这是因为数据在不同的磁盘上面,如果多个进程在读取同一笔数据时,RAID 会自行取得最佳的读取平衡。
5、磁盘数必需是2的整数倍。磁盘利用率为50%
不足之处就是:写入的效能会降低
RAID 5:效能与数据备份的均衡考虑
RAID 5:至少需要三个以上的磁盘才能够组成这种类型的磁盘阵列。这种磁盘阵列的数据写入有点类似RAID 0, 不过每个循环的写入过程中,在每颗磁盘还加入一个校验数据(Parity),这个数据会记录其他磁盘的备份数据, 用于当有磁盘损毁时的救援。
特点:
1、当任何一个磁盘损坏时,都能够通过其他磁盘的检查码来重建原本磁盘内的数据,安全性明显增强。
2、由于有同位检查码的存在,因此RAID 5 的总容量会是整个磁盘数量减一个。
3、当损毁的磁盘数量大于等于两颗时,那么RAID 5 的资料就损坏了。 因为RAID 5 预设只能支持一颗磁盘的损坏情况。
4、在读写效能上与RAID-0 差不多。
5、最少磁盘是3块,磁盘利用率N-1块
不足:数据写入的效能不一定增加,因为要写入RAID 5 的数据还得要经过计算校验码(parity)。所以写入的效能与系统的硬件关系较大。尤其当使用软件磁盘阵列时,校验码(parity)是通过CPU 去计算而非专职的磁盘阵列卡, 因此在数据校验恢复的时候,硬盘的效能会明显下降。
RAID0 RAID1 RAID5三个级别的数据存储流程,大家可以参考下图
RAID 01或RAID 10
这个RAID级别就是针对上面的特点与不足,把RAID 0和RAID 1这两个结合起来了。
所谓的RAID 01就是:(1)先让磁盘组成RAID 0 (2)将这RAID 0 再组RAID 1。这就是RAID 0+1
而RAID 10就是:先组成RAID 1 再组成RAID 0,这就是RAID 1+0
特点与不足:由于具有RAID 0 的优点,所以效能得以提升,由于具有RAID 1 的优点,所以数据得以备份。 但是也由于RAID 1 的缺点,所以总容量会少一半用来做为备份。
RAID10级别的数据存储流程,大家可以参考下图
由于RAID5 仅能支持一颗磁盘的损毁,因此还有发展出另外一种等级,就是RAID 6 ,这个RAID 6 则使用两颗磁盘的容量作为parity 的储存,因此整体的磁盘容量就会少两颗,但是允许出错的磁盘数量就可以达到两颗,也就是在RAID 6 的情况下,同时两颗磁盘损毁时,数据还是可以恢复回来的。而此级别的RAID磁盘最少是4块,利用率为N-2。
Spare Disk:热备磁盘
他的作用就是:当磁盘阵列中的磁盘有损毁时,这个热备磁盘就能立刻代替损坏磁盘的位置,这时候我们的磁盘阵列就会主动重建。然后把所有的数据自动恢复。而这个或多个热备磁盘是没有包含在原本磁盘阵列等级中的磁盘,只有当磁盘阵列有任何磁盘损毁时,才真正的起作用。
关于理论知识我们就只介绍到这里,当然还可以延伸出多种组合,只要理解了上面的内容,那么其他级别就不难了,无非是多种组合而已。通过上面的讲解,我相信大家也知道了做磁盘阵列的优点了:1、数据的安全性明显增强,2、读写的效能明显提高,3、磁盘的容量有效扩展。但也别忘记了他的缺点就是成本提高。但相对于数据而言,我想这点成本也不算什么吧!
下面我就以RAID5为例,给大家演示
1、增加硬盘。
我在虚拟机上新增了6块硬盘,每块是2G。哈哈,这么多只是为了做实验啊!
[root@yufei ~]# ls /dev/sd*
/dev/sda /dev/sda2 /dev/sdc /dev/sde /dev/sdg
/dev/sda1 /dev/sdb /dev/sdd /dev/sdf
这里面除了sda是以前的,后面的都是新增加了,当然你也可以通过fdisk -l来查询,其他的都是没有进行过分区的。所以会显示"Disk /dev/sdb doesn’t contain a valid partition table"这样的提示啊!
先拿出三个(sdb,sdc,sdd)来做RAID5,这是做RAID5的最少硬盘数量。但为了安全,我们需要加入sde做热备磁盘。这才是最安全的设置,当然,如果你不加热备也没有关系,RAID5照样能做出来。
特别说明:如果使用分区来创建的话,也是可以的,但不太科学啊!还有一点就是,你可以对分区转换类型(fd),也可以不转换,似乎这个不重要,我测试转换与不转换都是一样的效果。
2、创建RAID设备文件
[root@yufei ~]# mdadm -C /dev/md5 -l 5 -n 3 -x 1 /dev/sd{b,c,d,e}
mdadm: partition table exists on /dev/sdb but will be lost or
meaningless after creating array
mdadm: partition table exists on /dev/sdc but will be lost or
meaningless after creating array
mdadm: partition table exists on /dev/sdd but will be lost or
meaningless after creating array
Continue creating array? y
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md5 started.
这时候会在/dev/下创建md文件夹和md5设备文件,而且/dev/md这个文件夹里面还有一个连接文件和一个MD设备的镜像文件
[root@yufei ~]# ls -l /dev/md*
brw-rw----. 1 root disk 9, 5 May 31 00:19 /dev/md5
/dev/md:
total 4
lrwxrwxrwx. 1 root root 8 May 31 00:15 md5 -> ../md127
-rw-------. 1 root root 53 May 31 00:19 md-device-map
我们可以通过下面的命令查看RAID设备的状况
[root@yufei ~]# mdadm -D /dev/md5
/dev/md5:
Version : 1.2
Creation Time : Tue May 31 00:19:11 2011
Raid Level : raid5
Array Size : 4191232 (4.00 GiB 4.29 GB)
Used Dev Size : 2095616 (2046.84 MiB 2145.91 MB)
Raid Devices : 3
Total Devices : 4
Persistence : Superblock is persistent
Update Time : Tue May 31 00:19:22 2011
State : clean
Active Devices : 3
Working Devices : 4
Failed Devices : 0
Spare Devices : 1
Layout : left-symmetric
Chunk Size : 512K
Name : yufei:5 (local to host yufei)
UUID : 69443d97:7e32415d:7f3843c5:4d5015cf
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
这里我们可以把他看作是一个普通的硬盘,只是他是多块硬盘的结合体而已。我们可以对其分区、格式化,然后挂载使用的操作
3、对RAID设备进行分区、格式化、挂载
如果你想对其分区也是可以,分区后的分区名为md5p1 md5p2等等。当然不分区也一样能正常使用,这个就看你的用途了。我这里就不分区了。直接进行格式化。
[root@yufei ~]# mkfs.ext4 /dev/md5
mke2fs 1.41.12 (17-May-2010)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=128 blocks, Stripe width=256 blocks
262144 inodes, 1047808 blocks
52390 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=1073741824
32 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
Writing inode tables: done
Creating journal (16384 blocks): done
Writing superblocks and filesystem accounting information: done
This filesystem will be automatically checked every 31 mounts or
180 days, whichever comes first. Use tune2fs -c or -i to override.
如果想要分区你可以这样做
[root@yufei ~]# fdisk /dev/md5
我这里就不分区了
挂载使用
[root@yufei ~]# mount /dev/md5 /mnt
[root@yufei ~]# df
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/sda1 15118728 7014960 7335768 49% /
tmpfs 255784 0 255784 0% /dev/shm
/dev/md5 4125376 73720 3842096 2% /mnt
向里面写入数据文件。
[root@yufei ~]# touch /mnt/testfil1
[root@yufei ~]# touch /mnt/testfil2
[root@yufei ~]# ls /mnt
lost+found testfil1 testfil2
4、模拟磁盘损坏
我们模拟是/dev/sdb这块硬盘损坏
[root@yufei ~]# mdadm /dev/md5 -f /dev/sdb
mdadm: set /dev/sdb faulty in /dev/md5
再查看一下md5的状态
[root@yufei ~]# mdadm -D /dev/md5
前面省略
Number Major Minor RaidDevice State
3 8 64 0 active sync /dev/sde
1 8 32 1 active sync /dev/sdc
4 8 48 2 active sync /dev/sdd
0 8 16 - faulty spare /dev/sdb
我们看到,热备盘现在正在使用,而/dev/sdb是处于损坏状态。
注意一点:当热备盘在顶替损坏盘的时候,RAID设备的性能会明显下降,因为他要进行数据检验与恢复。
再看看里面的文件还存在不?
[root@yufei ~]# ls /mnt
lost+found testfil1 testfil2
一切正常
下面就是要把损坏的硬盘移除,然后新加硬盘,来充当热备盘。注意:如果此时我不加热备盘的话,当MD5中再有任何一个硬盘损坏的话,数据还是正常的。这个留给大家来测试吧。
5、移除损坏的磁盘
mdadm: hot removed /dev/sdb from /dev/md5
再查看MD5的信息
[root@yufei ~]# mdadm -D /dev/md5
Number Major Minor RaidDevice State
3 8 64 0 active sync /dev/sde
1 8 32 1 active sync /dev/sdc
4 8 48 2 active sync /dev/sdd
发现已经移除了
6、新加热备磁盘
[root@yufei ~]# mdadm /dev/md5 -a /dev/sdf
mdadm: added /dev/sdf
再次查看MD5的情况
[root@yufei ~]# mdadm -D /dev/md5
Number Major Minor RaidDevice State
3 8 64 0 active sync /dev/sde
1 8 32 1 active sync /dev/sdc
4 8 48 2 active sync /dev/sdd
5 8 80 - spare /dev/sdf
热备盘已经加上了
[root@yufei ~]# ls /mnt/
lost+found testfil1 testfil2
向RAID中增加存储硬盘
如果说,我现在已经做好的RAID空间还是不够用的话,那么我们可以向里面增加新的硬盘,来增加RAID的空间,默认的情况下,我们向RAID中增加的磁盘,会被默认当作热备盘的,如何把热备盘加入到RAID中呢?下面看演示。
我们接着上面的继续操作
[root@yufei ~]# mdadm -D /dev/md5
/dev/md5:
Version : 1.2
Creation Time : Tue May 31 19:46:20 2011
Raid Level : raid5
Array Size : 4191232 (4.00 GiB 4.29 GB)
Used Dev Size : 2095616 (2046.84 MiB 2145.91 MB)
Raid Devices : 3
Total Devices : 4
Persistence : Superblock is persistent
Update Time : Tue May 31 19:49:07 2011
省略
Number Major Minor RaidDevice State
3 8 64 0 active sync /dev/sde
1 8 32 1 active sync /dev/sdc
4 8 48 2 active sync /dev/sdd
5 8 80 - spare /dev/sdf
向RAID中增加一块硬盘
[root@yufei ~]# mdadm /dev/md5 -a /dev/sdg
mdadm: added /dev/sdg
[root@yufei ~]# mdadm -D /dev/md5
/dev/md5:
Version : 1.2
Creation Time : Tue May 31 19:46:20 2011
Raid Level : raid5
Array Size : 4191232 (4.00 GiB 4.29 GB)
Used Dev Size : 2095616 (2046.84 MiB 2145.91 MB)
Raid Devices : 3
Total Devices : 5
Persistence : Superblock is persistent
Update Time : Tue May 31 19:53:53 2011
省略
Number Major Minor RaidDevice State
3 8 64 0 active sync /dev/sde
1 8 32 1 active sync /dev/sdc
4 8 48 2 active sync /dev/sdd
5 8 80 - spare /dev/sdf
6 8 96 - spare /dev/sdg
我们新加的磁盘变成了热备盘,还没有加入到RAID的存储盘中,我们需要让其中的一个热备磁盘起存储作用。看看如何来操作。
[root@yufei ~]# mdadm -G /dev/md5 -n4
mdadm: Need to backup 3072K of critical section..
[root@yufei ~]# mdadm -D /dev/md5
/dev/md5:
Version : 1.2
Creation Time : Tue May 31 19:46:20 2011
Raid Level : raid5
Array Size : 4191232 (4.00 GiB 4.29 GB)
Used Dev Size : 2095616 (2046.84 MiB 2145.91 MB)
Raid Devices : 4
Total Devices : 5
Persistence : Superblock is persistent
Update Time : Tue May 31 20:02:34 2011
省略
Number Major Minor RaidDevice State
3 8 64 0 active sync /dev/sde
1 8 32 1 active sync /dev/sdc
4 8 48 2 active sync /dev/sdd
6 8 96 3 active sync /dev/sdg
5 8 80 - spare /dev/sdf
我们看到RAID的存储盘已经增加了一个了,由3个变成了4个,但注意这里的一条信息Array Size : 4191232 (4.00 GiB 4.29 GB),虽然我们已经加入了一块硬盘,但此RAID的空间并没有增大,下面就是要把RAID的空间扩展
resize2fs /dev/md5
先来看看这个md5里面的数据
[root@yufei ~]# ls /mnt
lost+found testfile1 testfile2
[root@yufei ~]# resize2fs /dev/md5
resize2fs 1.41.12 (17-May-2010)
Filesystem at /dev/md5 is mounted on /mnt; on-line resizing required
old desc_blocks = 1, new_desc_blocks = 1
Performing an on-line resize of /dev/md5 to 1571712 (4k) blocks.
The filesystem on /dev/md5 is now 1571712 blocks long.
[root@yufei ~]# mdadm -D /dev/md5
/dev/md5:
Version : 1.2
Creation Time : Tue May 31 20:21:36 2011
Raid Level : raid5
Array Size : 6286848 (6.00 GiB 6.44 GB)
Used Dev Size : 2095616 (2046.84 MiB 2145.91 MB)
Raid Devices : 4
Total Devices : 5
Persistence : Superblock is persistent
Update Time : Tue May 31 20:26:15 2011
以下省略
这时候,我们就看到Array Size : 6286848 (6.00 GiB 6.44 GB)就增加了2G了
[root@yufei ~]# ls /mnt
lost+found testfile1 testfile2
而且里面的数据也是正常的
开机挂载RAID设备
为了下次开机还能正常使用我们的RAID设备,我们还需要做以下事情
1、把挂载的信息写入fstab
[root@yufei ~]# vim /etc/fstab
加入下面的内容
/dev/md5 /mnt ext4 defaults 0 0
[root@yufei ~]# mount -a
没有错误,那说明我们没有写错哦!
2、把我们的RAID信息写入配置文件
我们先看一下/etc/mdadm.conf文件的内容
[root@yufei ~]# cat /etc/mdadm.conf
# mdadm.conf written out by anaconda
MAILADDR root
AUTO +imsm +1.x -all
里面已经有了一些内容,但没有RAID的相关信息,所以我们要把RAID的相关信息写入此文件中,否则在下次开机RAID设备就不起作用了。
[root@yufei ~]# mdadm -D -s >> /etc/mdadm.conf
[root@yufei ~]# cat /etc/mdadm.conf
# mdadm.conf written out by anaconda
MAILADDR root
AUTO +imsm +1.x -all
ARRAY /dev/md5 metadata=1.2 spares=1 name=yufei:5 UUID=69443d97:7e32415d:7f3843c5:4d5015cf
RAID信息已经写入了。注意,如果系统中有多个RAID的话,此命令会把系统中所有的RAID信息全部收集并写入此文件。所以,当用>>来追加内容的时候,你可能需要根据情况来修改。
3、重新启动系统测试看是否成功
重新启动后,查看内容
[root@yufei ~]# df
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/sda1 15118728 7015236 7335492 49% /
tmpfs 255784 0 255784 0% /dev/shm
/dev/md5 4125376 73720 3842096 2% /mnt
[root@yufei ~]# ls /mnt
lost+found testfil1 testfil2
一切正常
RAID设备的删除
这个在网上很多的资料都不是正确的移除方法,今天我就给大家详细说一下。
网上很多教程一般都是这样的步骤
umount卸载RAID设备
编辑配置文件包括
/etc/mdadm.conf
/etc/fstab
停止RAID设备
mdadm -S /dev/md5
到这里就结束了,如今在RHEL6的系统上,你会发现仅上面的步骤是完全不行的,RHEL6系统重新启动后,他会自动创建/dev/md127(这里不同级别数字会不同)这样的文件,而且以前在RAID里面的设备,你是不能使用的。如果你遇到这样的情况的话,就说明我们做的RAID没有彻底删除。那么下面就看看我是如何实现彻底删除的。
1、umount卸载RAID设备
[root@yufei ~]# umount /dev/md5
2、停止RAID设备
[root@yufei ~]# mdadm -S /dev/md5
mdadm: stopped /dev/md5
这里顺便给大家讲一下设备停止后如何开启,算是插曲啊。
[root@yufei ~]# mdadm -A -s /dev/md5
mdadm: /dev/md5 has been started with 3 drives and 1 spare.
在停止前,你要用再查看一下RAID里面的硬盘信息,因为后面会用到这个,很关键哦!
[root@yufei ~]# mdadm -D /dev/md5
Number Major Minor RaidDevice State
3 8 64 0 active sync /dev/sde
1 8 32 1 active sync /dev/sdc
4 8 48 2 active sync /dev/sdd
5 8 80 - spare /dev/sdf
OK,现在再停止一次
[root@yufei ~]# mdadm -S /dev/md5
mdadm: stopped /dev/md5
3、移除RAID里面的磁盘(这是关键的一步,而很多教程上都没有写)
删除RAID里面的所有磁盘
这一步,一定要把RAID停止后才能执行,否则会出现下面的错误提示
mdadm: Couldn’t open /dev/sde for write – not zeroing
[root@yufei ~]# mdadm --misc --zero-superblock /dev/sde
[root@yufei ~]# mdadm --misc --zero-superblock /dev/sdc
[root@yufei ~]# mdadm --misc --zero-superblock /dev/sdd
[root@yufei ~]# mdadm --misc --zero-superblock /dev/sdf
OK,这时候就把RAID里面的所有磁盘删除掉了。
4、删除相关配置文件里面的RAID信息
[root@yufei ~]# vim /etc/mdadm.conf
把我们增加的这一行删除
ARRAY /dev/md5 metadata=1.2 spares=1 name=yufei:5 UUID=69443d97:7e32415d:7f3843c5:4d5015cf
[root@yufei ~]# vim /etc/fstab
把我们增加的这一行删除
/dev/md5 /mnt ext4 defaults 0 0
经过这四步就完全删除RIAD了。重新启动,也不会有raid的相关内容了。
如果你想做得更熟练的话,建议你把raid5 raid0 raid1 raid5+raid0都做一边。我想这也不是什么难事了。关于mdadm的命令参数,大家可以通过查看帮助来获得