RAID技术
RAID全称为独立磁盘冗余阵列(Redundant Array of Independent Disks),它使用很多价格便宜的磁盘组合成为一个磁盘阵列组,使其可以达到数据冗余备份和提升读写速度的作用。
RAID是分级别的,不同的级别不同之处在于磁盘的组合方式和数据的组织方式不同,故每一种组合方式在可靠性和读写性能上是不一样的,以下是不同的RAID级别的磁盘阵列组织方式。
RAID 0(条带化):将数据分段写入不同磁盘中,即在每个磁盘中存储一部分数据,读写方式为并行处理,如果磁盘有N块,效率为单个磁盘的N倍,磁盘利用率100%,但是没有数据冗余备份,任何一个磁盘数据损坏会导致整个数据不可用。
RAID 1(镜像存储):将每个分段数据分别写入两个或者多个磁盘中,这成为镜像存储(mirroring),故拥有数据冗余备份,当其中任何一块盘损坏后,不会导致数据丢失。
RAID 5(分布式奇偶校验):奇偶校验位的作用在于重建数据,它允许一块磁盘数据损坏,损坏后可以更新新的磁盘进行数据的重建,存储方式如下:
RAID 6(双分布式奇偶校验):和RAID 5相比,多了一个奇偶校验位,存储方式如下:
RAID 01:即RAID 0和RAID 1的结合使用,它先做条带(0),后做镜像存储(1)。
RAID 10:即RAID 1和RAID 0的结合使用,它先做镜像存储(1),后做条带(0)。
在Linux中,RAID的实现可以通过硬件或者软件实现
软件RAID实现:软件RAID通过md模块完成,Linux上允许将块设备做成RAID,可以通过mdadm命令来管理,mdadm是一个模式化命令,有创建模式(-C)、管理模式(--add、--del、--fail、--remove..)、监控模式(-F)、增长模式(-G)、装配模式(-A)。
- mdadm
- -D | --detail:查询阵列信息
- --scan:显示RAID信息
- mdadm -D /dev/md0 查看md0阵列信息
- mdadm -D --scan >>/etc/mdadm.conf 将阵列信息保存至配置文件
- -S | --stop:停止阵列
- mdadm -S /dev/md0 停止md0磁盘阵列
- 创建模式(-C)
- -l:级别
- -n:设备个数
- -a {yes|no}:自动创建设备文件
- -c:指定数据块大小
- -x:指定空闲盘个数
- /proc/mdstat文件记录了主机的RAID信息
- mdadm -C /dev/md0 -a yes -l 0 -n 2 /dev/sdb{1,2} -c 64 :将sdb1和sdb2创建成RAID0,数据块大小为64
- 管理模式(--add、--del、--fail | -f、--remove | -r..)
- mdadm /dev/md0 --fail /dev/sdb1 将md0阵列的sdb1磁盘模拟损坏
- mdadm /dev/md0 --remove /dev/sdb1 将md0阵列的sdb1磁盘移除
- mdadm /dev/md0 --add /dev/sdb3 将md0阵列中添加sdb3硬盘
- 装配模式(-A)
- mdadm -A /dev/md0 /dev/sdb0 /dev/sddb1 将sdb0和sdb1重新装配成md0阵列
- mdadm -A /dev/md0 读取/etc/mdadm.conf文件进行自动装配
- -D | --detail:查询阵列信息
一览表
|
-C或--create |
建立一个新阵列 |
-r |
移除设备 |
|
-A |
激活磁盘阵列 |
-l或--level=0 1 5 6 10 |
设定磁盘阵列级别 |
|
-D或--detail |
显示磁盘阵列详细信息 |
-n或--raid-devices |
指定磁盘阵列的磁盘数量 |
|
-s或--scan |
根据/pron/mdstat配置文件显示阵列信息 |
-x或--spare-devices |
设置备用磁盘数量 |
|
-f |
将设备状态定为故障 |
-c或--chunk |
设置磁盘阵列的块大小 |
|
-a或--add |
天剑设备到磁盘阵列 |
-G或--grow |
设定阵列大小或形态 |
|
-v或--verbose |
显示详细信息 |
|
示例:
-
- 1:创建RAID 0
1 #创建虚拟磁盘md0 2 [root@localhost cd]# mdadm -C /dev/md0 -a yes -l 0 -n 2 /dev/sdb1 /dev/sdb2 -c 64 3 #格式化md0 4 [root@localhost cd]# mke2fs -j /dev/md0 -b 1024 -E stride=64 5 #挂载使用 6 [root@localhost cd]# mount /dev/md0 /mnt/md0
-
- 2:创建RAID 1
1 #创建虚拟磁盘md1 2 [root@localhost mnt]# mdadm -C /dev/md1 -a yes -l 1 -n 2 /dev/sdb3 /dev/sdb5 -c 64 3 #格式化md1 4 [root@localhost mnt]# mke2fs -j /dev/md1 -b 1024 -E stride=64 5 #挂载使用 6 [root@localhost mnt]# mount /dev/md1 /mnt/md1 7 #模拟损坏一块磁盘 8 [root@localhost mnt]# mdadm /dev/md1 --fail /dev/sdb3 9 #将损坏磁盘从阵列移除 10 [root@localhost mnt]# mdadm /dev/md1 --remove /dev/sdb3 11 #添加一块新的磁盘进阵列 12 [root@localhost mnt]# mdadm /dev/md1 --add/dev/sdb6 13 #再次添加一块磁盘作为空闲盘,当磁盘损坏时自动替补上去 14 [root@localhost mnt]# mdadm /dev/md1 --add/dev/sdb7
-
- 3:创建RAID 5
1 #创建虚拟磁盘md5 2 [root@localhost mnt]# mdadm -C /dev/md5 -a yes -l 5 -n 3 /dev/sdb1 /dev/sdb2 /dev/sdb3 -c 64 3 #格式化 4 [root@localhost mnt]# mke2fs -j /dev/md5 -b 1024 -E stride=64 5 #挂载 6 [root@localhost mnt]# mount /dev/md5 /mnt/md5
-
- 4:创建RAID 10
1 #创建虚拟磁盘md10 2 [root@localhost md10]# mdadm -C /dev/md10 -a yes -l 10 -n 4 /dev/sdb{1,2,3,5} -c 64 3 #格式化 4 [root@localhost md10]# mke2fs -j /dev/md10 -b 1024 -E stride=64 5 #挂载 6 [root@localhost md10]# mount /dev/md10 /mnt/md10
-
- 5:删除RAID
1 [root@localhost md10]# mdadm --stop /dev/md0 2 [root@localhost md10]# mdadm --remove /dev/md0
注:本文参考了http://www.linuxidc.com/Linux/2015-08/122191.htm和http://blog.jobbole.com/83808/