这种模式也需要等量的磁盘,如果不是等量的磁盘组成RAID-1时,那么总容量将以最小的那一块磁盘为主,此模式主要是让同一份数据,完整的保存在两块磁盘上。如果有一个100MB的文件,且我仅有两块磁盘组成RAID-1时,那么这两块磁盘将会同步写入100MB,因此,整体RAID的容量只是实际容量的一半.
缺点:由于同一份数据会被分别写入到其他不同磁盘,因此如果要写入100MB,数据传送到I/O总先后会被复制多分到各个磁盘,结果数据量就大了,因此写入的效能会变得很差,但是读取效果还可以。如果使用硬件RAID(磁盘阵列卡)时,磁盘阵列卡会主动复制一份而不适用系统的I/O总线,效能方面还行.磁盘的容量有一半用在备份,因此容量是全部容量的一半。
RAID0+1,RAID1+0
RAID-0效能佳但是数据不安全,RAID-1数据安全但是效能不佳,RAID0+1,RAID1+0就刚好将两者整合起来.
RAID0+1:(1)想让两块磁盘组成RAID-0,并且这样的设定有两组;(2)将这两组RAID-0组成一组RAID-1。
RAID1+0:就是先组成RAID1,再组成RAID0
缺点:RAID1的缺点,总容量会少一半用来做备份。
优点:具有RAID0的优点,效能得以提高,RAID1的优点,数据得以备份。
RAID5
首先,RAID-5至少需要三块以上的磁盘才能组成这种类型的磁盘阵列.这种磁盘阵列的数据写入类似RAID-0,不过每个循环写入的过程中,每块磁盘还加入一个同位检查数据(Parity),这个数据会记录其他磁盘的备份数据,用于当有磁盘损毁时的救援.
如上图,每个循环写入时,都会有部分的同位检查码被记录下来,并且记录的同位检查码每次都记录在不同的磁盘,因此,任何一个磁盘损坏时都能由其他的磁盘检查码来重建原本磁盘内的数据,不过由于有同位检查码,相当于一块磁盘用来放检查码,所以总容量就会使整体磁盘容量减去一块磁盘容量,原本3块磁盘剩下两块磁盘的容量。而且当损坏的磁盘数量大于等于两块时,这整组RAID5的资料就损坏了。因此RAID5 仅能允许一块磁盘的损坏。
优缺点:读取性能还不错,与RAID0有的比,但写的效果没有好多少,因为写入还要计算同位检查码的关系,所以写入效能与系统的硬件关系较大,尤其当使用软件磁盘阵列时,同位检查码是通过CPU计算而非专门的磁盘阵列卡上的处理芯片,因此,效能远不及硬件RAID.
另外,由于RAID5仅能支持一块磁盘损坏,因此进来还有发展出另外一种等级,就是RAID6,这个RAID6则使用两块磁盘的容量作为parity的存储,因此整体的磁盘容量会减少两颗,但是允许出错的盘数就达到两块了。
预备磁盘(Spare Disk)的功能:
所谓的spare disk 就是一颗或多可没有包含在原本磁盘阵列等级中的磁盘,这块磁盘品是并不会被磁盘阵列所使用,当磁盘阵列有任何磁盘损毁时,则这颗spare disk 会主动的拉进磁盘阵列中,并将那块坏掉的磁盘移出磁盘阵列,磁盘阵列就会开始主动重建(rebuild)原本坏掉的那块磁盘上的数据。然后磁盘阵列上的数据就复原了。不过,我们还是要手动插拔硬盘,此时通常要关机才能这么做。如果磁盘阵列支持热插拔就可以直接将坏掉的那块磁盘拔除,换一块新的,再将那块新的设定成spare disk 就完成了。
RAID磁盘阵列的优点
-
数据安全与可靠性:指的并非信息安全,而是当磁盘损坏时,数据是否还能安全的救援,使用的意思。
-
读写效能:如RAID0可以加强读写效能。
-
容量:可以让多可磁盘组合起来,故单一文件系统可以有相当大的容量。
软件磁盘阵列:mdadm软件
因为硬件磁盘阵列卡很贵,所以可用软件来模拟硬件磁盘阵列,只是会消耗些cpu的运算和I/O总线资源,但是现在的cpu和总线资源已经很充裕了。
mdadm软件会以分区(partition)或磁盘(disk)为单位,也就是说,不需要两块以上的磁盘,只要有两个以上的分区就能够组建磁盘阵列了.支持RAID0,RAID1,RAID5,spare disk等.有类似热插拔的功能。
先创建用于做RAID的分区
- [root@yanjerry ~]# fdisk -l
- Disk /dev/sda: 21.5 GB, 21474836480 bytes
- 255 heads, 63 sectors/track, 2610 cylinders
- Units = cylinders of 16065 * 512 = 8225280 bytes
- Sector size (logical/physical): 512 bytes / 512 bytes
- I/O size (minimum/optimal): 512 bytes / 512 bytes
- Disk identifier: 0x0003f7a6
- Device Boot Start End Blocks Id System
- /dev/sda1 * 1 26 204800 83 Linux
- /dev/sda2 26 91 524288 82 Linux swap / Solaris
- /dev/sda3 91 2611 20241408 83 Linux
- Disk /dev/sdb: 2147 MB, 2147483648 bytes
- 255 heads, 63 sectors/track, 261 cylinders
- Units = cylinders of 16065 * 512 = 8225280 bytes
- Sector size (logical/physical): 512 bytes / 512 bytes
- I/O size (minimum/optimal): 512 bytes / 512 bytes
- Disk identifier: 0x31378d68
- Device Boot Start End Blocks Id System
- /dev/sdb1 1 261 2096451 5 Extended
- /dev/sdb5 1 65 522049+ 83 Linux
- /dev/sdb6 66 130 522081 83 Linux
- /dev/sdb7 131 195 522081 83 Linux
- /dev/sdb8 196 261 530113+ 83 Linux
创建RAID
- [root@yanjerry ~]# mdadm --create --auto=yes /dev/md0 --level=5 --raid-devices=3 --spare-devices=1 /dev/sdb{5,6,7,8}
参数说明
#mdadm --detail /dev/md0
#mdadm --create --auto=yes /dev/md[0-9] --raid-devices=N --level=[015] --spare-devices=N /dev/sdx /dev/hdx...
--create :建立RIAD
--auto=yes:决定建立后的软件磁盘阵列设备,即/dev/md0...
--raid-devices=N:使用几个磁盘(partition)作为磁盘阵列
--spare -devices=N:使用几个磁盘做给备用盘
--level=[015]:设定这组磁盘阵列等级。支持很多,不过建议只用0,1,5即可
--detail:显示后面接的那个磁盘的详细信息
- [root@yanjerry ~]# mdadm --detail /dev/md0|more
- /dev/md0: RAID设备名
- Version : 1.2
- Creation Time : Sat Oct 20 11:35:45 2012 建立RAID时间
- Raid Level : raid5 RAID等级5
- Array Size : 1043456 (1019.17 MiB 1068.50 MB) 此RAID可用磁盘容量
- Used Dev Size : 521728 (509.59 MiB 534.25 MB) 每个设备可用容量
- Raid Devices : 3 作为RAID的设备数
- Total Devices : 4 全部设备数
- Persistence : Superblock is persistent
- Update Time : Sat Oct 20 11:36:26 2012
- State : clean
- Active Devices : 3 启动的(active)装置数量
- Working Devices : 4 可工作的设备数量
- Failed Devices : 0 出现错误的设备数
- Spare Devices : 1 预备磁盘数
- Layout : left-symmetric
- Chunk Size : 512K 就是分区区块大小
- Name : yanjerry:0 (local to host yanjerry)
- UUID : b273035a:42ee81c0:99c88526:f65e700e 此RAID的UUID
- Events : 20
- Number Major Minor RaidDevice State
- 0 8 21 0 active sync /dev/sdb5
- 1 8 22 1 active sync /dev/sdb6
- 4 8 23 2 active sync /dev/sdb7
- 3 8 24 - spare /dev/sdb8
或者通过这个查看这个文件
- [root@yanjerry ~]# cat /proc/mdstat
- Personalities : [raid6] [raid5] [raid4]
- md0 : active raid5 sdb7[4] sdb8[3](S) sdb6[1] sdb5[0]
- 1043456 blocks super 1.2 level 5, 512k chunk, algorithm 2 [3/3] [UUU]
- unused devices:
第一行:指出 md0 为 raid5 ,使用了sdb5,sdb6,sdb7 三块磁盘装置。每个装置后面的中括号 [] 内的数字为此磁盘在 RAID 中的顺序 (RaidDevice);sdb8 后面的 [S] 则代表 spare盘
第二行:此磁盘阵列拥有 1043456 blocks(每个 block 单位为 1K),所以怪容量约为1GB, 使用 RAID 5 等级,写入磁盘的小区块 (chunk) 大小为 512K,使用 algorithm 2 磁盘阵列算法。 [m/n] 代表此数组需要 m 个设备, n 个设备正常运作。因此本 md0 需要 3个设备且这 3 个设备均正常运作。 后面的 [UUUU] 代表的是四个所需的设备 (就是 [m/n] 里面的 m) 的启动情况,U 代表正常运作,若为 _ 则代表不正常。
格式化,挂载md0
- [root@yanjerry ~]# mkfs -t ext4 /dev/md0 格式化md0
- [root@yanjerry ~]# mkdir /mnt/raid
- [root@yanjerry ~]# mount /dev/md0 /mnt/raid
- [root@yanjerry ~]# df -h
- Filesystem Size Used Avail Use% Mounted on
- /dev/sda3 20G 4.2G 14G 23% /
- tmpfs 122M 0 122M 0% /dev/shm
- /dev/sda1 194M 26M 158M 15% /boot
- /dev/md0 1003M 18M 935M 2% /mnt/raid Raid5 容量是总容量的一半
仿真RAID错误的救援模式
mdadm还提供模拟的阵列错误救援模式,我们就来模拟下当磁盘损坏了以后RAID是怎么处理的。
#mdadm --manage /dev/md[0-9] [--add 设备] [--remove 设备] [--fail 设备]
--add:会将后面的装置加入到这个md中
--remove:会将后面的装置由这个md中移除
--fail:会将后面的装置设定称为出错的状态
设定磁盘错误
先来看看怎么让一个磁盘变成错误的,然后让spare disk自动开始重建系统
先复制一些东西到这个RAID中去,这个RAID已经在使用了.
- [root@yanjerry ~]# cp -a /etc/ /var/log /mnt/raid
- [root@yanjerry ~]# df -h
- Filesystem Size Used Avail Use% Mounted on
- /dev/sda3 20G 4.2G 14G 23% /
- tmpfs 122M 0 122M 0% /dev/shm
- /dev/sda1 194M 26M 158M 15% /boot
- /dev/md0 1003M 48M 905M 6% /mnt/raid
- [root@yanjerry ~]# du -sm /mnt/raid/* 确实有东西在里面了
- 25 /mnt/raid/etc
- 4 /mnt/raid/log
- 1 /mnt/raid/lost+found
OK,现在开始让他出错,假设/dev/sdb5 这个设备出错了。
- [root@yanjerry ~]# mdadm --manage /dev/md0 --fail /dev/sdb5
- mdadm: set /dev/sdb5 faulty in /dev/md0
查看md0详细信息
- [root@yanjerry ~]# mdadm --detail /dev/md0
- .....省略....
- Update Time : Sat Oct 20 12:05:04 2012
- State : clean, degraded, recovering
- Active Devices : 2
- Working Devices : 3
- Failed Devices : 1 有一个出错设备
- Spare Devices : 1
- .....省略....
- Number Major Minor RaidDevice State
- 3 8 24 0 spare rebuilding /dev/sdb8 原先的spare盘正在重建数据
- 1 8 22 1 active sync /dev/sdb6
- 4 8 23 2 active sync /dev/sdb7
- 0 8 21 - faulty spare /dev/sdb5
或者通过这个文件查看详细信息
- [root@yanjerry ~]# cat /proc/mdstat
- Personalities : [raid6] [raid5] [raid4]
- md0 : active raid5 sdb7[4] sdb8[3] sdb6[1] sdb5[0](F) 出错设备
- 1043456 blocks super 1.2 level 5, 512k chunk, algorithm 2 [3/3] [UUU]
- unused devices:
rebuilding 后的详细信息
- [root@yanjerry ~]# mdadm --detail /dev/md0
- .....省略....
- Update Time : Sat Oct 20 12:05:16 2012
- State : clean
- Active Devices : 3
- Working Devices : 3
- Failed Devices : 1
- Spare Devices : 0
- .....省略....
- Number Major Minor RaidDevice State
- 3 8 24 0 active sync /dev/sdb8 重建完成
- 1 8 22 1 active sync /dev/sdb6
- 4 8 23 2 active sync /dev/sdb7
- 0 8 21 - faulty spare /dev/sdb5 此磁盘坏了
此时再看磁盘中的文件依旧