Linux 平台RAID技术全面讲解
Raid 介绍及软 raid 的实现
Raid
old Redundant Arrays of Inexpensive Disks (廉价磁盘冗余阵列)
new Redundant Arrays of Independent Disks (独立磁盘冗余阵列)
Berkeley: A case for Redundent Arrays of Inexpensive Disks RAID
功能: 提高IO能力:磁盘并行读写; 提高耐用性:磁盘冗余来实现。但是raid不能取代数据备份,raid只是减少磁盘对于数据的影响。人为操作数据无法恢复。
级别:多块磁盘组织在一起的工作方式有所不同;
RAID实现的方式: 外接式磁盘阵列:通过扩展卡提供适配能力 内接式RAID:主板集成RAID控制器 Software RAID
级别:Level
RAID-0:0, 条带卷,strip;
RAID-1: 1, 镜像卷,mirror;
RAID-2 ..
RAID-5:
RAID-6 RAID10 RAID01
-
RAID-0: 读、写性能提升; 可用空间:N*min(S1,S2,...)(所有磁盘中的最小值,下同) 无容错能力 最少磁盘数:2, 2+
-
RAID-1: 读性能提升、写性能略有下降; 可用空间:1*min(S1,S2,...) 有冗余能力 最少磁盘数:2, 2+
-
RAID-4: 1101, 0110, 1011 (对应位做亦或计算,相同得0,相反得1) 第三块做校验盘。 如果一块坏了,那就是降级进行使用。缺陷:单块盘做检验盘,该盘压力过大,是性能瓶颈。 改进方案:使用一块盘做空闲盘,热备
-
RAID-5: 读、写性能提升。 可用空间:(N-1)*min(S1,S2,...) 有容错能力:1块磁盘 最少磁盘数:3, 3+, 原理同raid4,也可有热备盘,与raid4区别,三块盘轮流做检验盘,有左对称和右对称方案; 多块盘做亦或运算,结果存放到校验盘,X1亦或X2亦或X3亦或X4
-
RAID-6: 读、写性能提升 可用空间:(N-2)*min(S1,S2,...) 有容错能力:2块磁盘 循环校验 最少磁盘数:4, 4+
- RAID-10: 读、写性能提升 可用空间:N*min(S1,S2,...)/2 有容错能力:每组镜像最多只能坏一块; 最少磁盘数:4, 4+
- RAID-01: 先做raid0,在做raid1,容错性没有raid10好。
- RAID-50,先做raid5再做raid0,最小磁盘数和raid5划分有关。
- RAID7:商业公司自己开发的,性能不错价格昂贵
- JBOD:Just a Bunch Of Disks 功能:将多块磁盘的空间合并一个大的连续空间使用,可以存放大型单个文件。可用空间:sum(S1,S2,...)
- 常用级别:RAID-0, RAID-1, RAID-5, RAID-10, RAID-50, JBOD
- 选择Raid级别:RAID 012345 到底哪一种适合你,不只是成本问题,容错功能和传输性能的考虑以及未来之可扩充性都应该符合应用的需求。
实现方式
实现方式分为:硬件实现方式和软件实现方式两种
mdadm:
模式化的工具
命令的语法格式:
mdadm [mode] <raiddevice> [options] <component-devices>
支持的RAID级别:
LINEAR, RAID0, RAID1, RAID4, RAID5, RAID6, RAID10;
<raiddevice>:
/dev/md#
<component-devices>:
任意块设备
-C: 创建模式
-n #: 使用#个块设备来创建此RAID;
-l #:指明要创建的RAID的级别;
-a {yes|no}:自动创建目标RAID设备的设备文件;
-c CHUNK_SIZE: 指明块大小;
-x #: 指明空闲盘的个数;
-D:显raid的详细信息;
mdadm -D /dev/md#
管理模式:
-f: 标记指定磁盘为损坏;
-a: 添加磁盘
-r: 移除磁盘
观察md的状态:
cat /proc/mdstat
停止md设备:
mdadm -S /dev/md#
watch命令:
-n #: 刷新间隔,单位是秒;
watch -n# 'COMMAND'
实战:创建一个 1G 可用空间的RAID5
1 创建一个分区 /dev/sda3
直至创建好5个所需的分区:同时需要注意将分区id改为fd格式
mdadm -C /dev/md0 -a yes -n 4 -x 1 -l 5 /dev/sda{3,4,5,6,7}
查看mad的状态
cat /proc/mdstat
mkfs.ext4 /dev/md0
3 创建挂载点
mkdir /mnt/raid5
4 挂载RAID
mount /dev/md0 /mnt/raid5/
mdadm -D /dev/md0
ls -l /mnt/raid5/ df -lh /mnt/raid5/
模拟损坏 sda3
mdadm /dev/md0 -f /dev/sda3
数据依然可以访问
添加一个分区
mdadm /dev/md0 -a /dev/sda8
移除Raid分区