RAID(Redundant Array of Independent Disk 独立冗余磁盘阵列) 技术是加州大学伯克利分校 1987 年提出, 最初是为了组合小的廉价磁盘来代替大的昂贵磁盘, 同时希望磁盘失效时不会使对数据的访问受损 失而开发出一定水平的数据保护技术. RAID 就是一种由多块廉价磁盘构成的冗余阵列, 在操作系统下是作为一个独立的大型存储设备出现. RAID 可以充分发 挥出多块硬盘的优势, 可以提升硬盘速度, 增大容量, 提供容错功能够确保数据安全性, 易于管理的优点, 在任何一块硬盘出现问题的情况下都可以继续工作, 不会 受到损坏硬盘的影响.
常用 raid 介绍
raid 0
RAID 0 又称为 Stripe 或 Striping, 它代表了所有 RAID 级别中最高的存储性能. RAID 0 提高存储性能的原理是把连续的数据分散到多个磁盘上存取, 这样, 系统有数据请求就可以被多个磁盘并行的执行, 每个磁盘执行属于它自己的那部分数据请求. 这种数据上的并行操作可以充分利用总线的带宽, 显著提高磁盘整体存取性能.
使用: 以 2 块盘为例子, 数据存储各一半
优点: 写入读取快, 适合保存非重要数据
可用空间: num*min(device)
raid 1
RAID 1 通过磁盘数据镜像实现数据冗余, 在成对的独立磁盘上产生互 为备份的数据. 当原始数据繁忙时, 可直接从镜像拷贝中读取数据, 因此 RAID 1 可以提高读取性能. RAID 1 是磁盘阵列中单位成本最高的, 但提供了很高的数据安全性和可用性. 当一个磁盘失效时, 系统可以自动切换到镜像磁盘上读写, 而不需要重组失效的数据.
使用: 以 2 块盘为例子, 数据各一份
优点: 读性能提升, 数据冗余
缺点: 写性能略有下降
可用空间: 1*min(device)
raid 4
RAID 是英文 Redundant Array of IndependentDisks 的缩写, 中文简称为独立磁盘冗余阵列. RAID 就是一种由多块硬盘构成的冗余阵列. 虽然 RAID 包含多块硬盘, 但是在操作系统下是作为一个独立的大型存储设备出现. RAID4 即带奇偶校验码的独立磁盘结构, RAID4 和 RAID3 很象. 在独立访问阵列中, 每个磁盘都是独立运转的, 因此不同的 I/O 请求可以并行地满足
使用: 以 3 块盘为例子, 一块校验盘, 用户还原数据, 2 块数据盘
优点: 有冗余能力, 读, 写性能提升, 允许坏一块盘
缺点: 校验盘压力过大
可用空间:(N-1)*min(device)
raid 5
RAID 5 是一种存储性能, 数据安全和存储成本兼顾的存储解决方案. RAID 5 可以理解为是 RAID 0 和 RAID 1 的折中方案. RAID 5 可以为系统提供数据安全保障, 但保障程度要比 Mirror 低而磁盘空间利用率要比 Mirror 高. RAID 5 具有和 RAID 0 相近似的数据读取速度, 只是多了一个奇偶校验信息, 写入数据的速度比对单个磁盘进行写入操作稍慢. 同时由于多个数据对应一个奇偶校验信息, RAID 5 的磁盘空间利用率要比 RAID 1 高, 存储成本相对较低, 是目前运用较多的一种解决方案.
使用: 以 3 块盘为例子, 1 块轮流做校验盘和 2 块轮流存储盘
优点: 相比 radi4, 降低校验盘压力
缺点: 只能坏一块盘
可用空间:(N-1)*min(device)
raid 6
RAID6 技术是在 RAID 5 基础上, 为了进一步加强数据保护而设计的一种 RAID 方式, 实际上是一种扩展 RAID 5 等级. 与 RAID 5 的不同之处于除了每个硬盘上都有同级数据 XOR 校验区外, 还有一个针对每个数据块的 XOR 校验区. 当然, 当前盘数据块的校验数据不可能存在当前盘而是交错存储的, 这样一来, 等于每个数据块有了两个校验保护屏障 (一个分层校验, 一个是总体校验), 因此 RAID 6 的数据冗余性能相当好. 但是, 由于增加了一个校验, 所以写入的效率较 RAID 5 还差, 而且控制系统的设计也更为复杂, 第二块的校验区也减少了有效存储空间.
使用: 以 4 块盘为例子, 二块校验盘, 用户还原数据, 2 块数据盘
优点: 容错比 raid 5 好
缺点: 写入没 raid 5 好
可用空间:(N-2)*min(device)
raid 10
Raid 10 是一个 Raid 1 与 Raid0 的组合体, 它是利用奇偶校验实现条带集镜像, 所以它继承了 Raid0 的快速和 Raid1 的安全. 我们知道, RAID 1 在这里就是一个冗余的备份阵列, 而 RAID 0 则负责数据的读写阵列. 其实, 右图只是一种 RAID 10 方式, 更多的情况是从主通路分出两路, 做 Striping 操作, 即把数据分割, 而这分出来的每一路则再分两路, 做 Mirroring 操作, 即互做镜像.
使用: 以 4 块盘为例子, 分 2 对 raid 1,2 对 raid 为 raid 0
优点: 提升读写, 有冗余, 每对 raid1 能坏一块
虚拟实现 raid 5
mdadm 常用选项说明
支持的 RAID 级别: LINEAR, RAID0, RAID1, RAID4, RAID5, RAID6, RAID10;
模式:
-C: 创建模式
- |--- -n #: 使用 #个块设备来创建此 RAID;
- |--- -l #: 指明要创建的 RAID 的级别;
|--- -a {yes|no}: 自动创建目标 RAID 设备的设备文件;
|--- -c CHUNK_SIZE: 指明块大小;
|--- -x #: 指明空闲盘的个数;
-D: 管理模式 显示 raid 的详细信息;
-f: 标记指定磁盘为损坏;
-a: 添加磁盘
-r: 移除磁盘
实验先创建 4 个 1G 的分区, 用 2 块存储数据, 1 块存储校验, 1 块备用, 创建 raid 5,
- # 创建 4 块分区, 注意格式是 fd
- [root@localhost sh]# fdisk /dev/sdb
命令 (输入 m 获取帮助):t
分区号 (1-7, 默认 7):5
Hex 代码 (输入 L 列出所有代码):fd
已将分区 "Linux" 的类型更改为 "Linux raid autodetect"
设备 Boot Start End Blocks Id System
/dev/sdb1 2048 16779263 8388608 5 Extended
/dev/sdb5 4096 2101247 1048576 fd Linux raid autodetect
/dev/sdb6 2103296 4200447 1048576 fd Linux raid autodetect
/dev/sdb7 4202496 6299647 1048576 fd Linux raid autodetect
/dev/sdb8 6301696 8398847 1048576 fd Linux raid autodetect
查看本机虚拟 raid
- [root@localhost sh]# cat /proc/mdstat
- Personalities :
- unused devices: <none>
创建
- [root@localhost sh]# mdadm -C /dev/md0 -a yes -n 3 -x 1 -l 5 /dev/sdb{5,6,7,8}
- #-x 1 一块是空闲备份 -l 5 raid5 -n 3 块使用盘
- mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md0 started.
再次查看
[root@localhost sh]# cat /proc/mdstat
Personalities : [raid6] [raid5] [raid4]
md0 : active raid5 sdb7[4] sdb8[3](S) sdb6[1] sdb5[0]
2095104 blocks super 1.2 level 5, 512k chunk, algorithm 2 [3/3] [UUU]
- unused devices: <none>
- #active 活动状态, 可以使用
挂载
- [root@localhost sh]# mke2fs -t ext4 /dev/md0
- [root@localhost sh]# mount /dev/md0 /mnt/t2
- [root@localhost sh]# df -h /mnt/t2/ #2g 可以用设备
文件系统 容量 已用 可用 已用 % 挂载点
/dev/md0 2.0G 6.0M 1.9G 1% /mnt/t2
详细信息查看:
- [root@localhost t2]# mdadm -D /dev/md0
- /dev/md0:
- Version : 1.2
Creation Time : Mon Apr 23 03:14:26 2018
Raid Level : raid5
- Array Size : 2095104 (2046.00 MiB 2145.39 MB)
- Used Dev Size : 1047552 (1023.00 MiB 1072.69 MB)
Raid Devices : 3
Total Devices : 4
Persistence : Superblock is persistent
Update Time : Mon Apr 23 03:20:48 2018
- State : clean
- Active Devices : 3
Working Devices : 4
Failed Devices : 0
Spare Devices : 1
- Layout : left-symmetric
- Chunk Size : 512K
Consistency Policy : resync
Name : localhost.localdomain:0 (local to host localhost.localdomain)
UUID : 24dec4a5:d57dbe03:f9aa2729:b2997a05
Events : 18
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@localhost t2]# mdadm /dev/md0 -f /dev/sdb6
mdadm: set /dev/sdb6 faulty in /dev/md0
[root@localhost t2]# cat /proc/mdstat #这个阶段可以观察数据恢复 直到 active
Personalities : [raid6] [raid5] [raid4]
md0 : active raid5 sdb7[4] sdb8[3] sdb6[1](F) sdb5[0]
2095104 blocks super 1.2 level 5, 512k chunk, algorithm 2 [3/3] [UUU]
unused devices: <none>
再次观察
- [root@localhost t2]# mdadm -D /dev/md0
- # 会发现
- 1 8 22 - faulty /dev/sdb6 #损坏盘 而 8 已经从空闲到正常使用
- # 如果在移掉一个
State : clean 也会变化成 clean,degrade 降级状态
手动移除坏的分区
[root@localhost t2]# mdadm /dev/md0 -r /dev/sdb6
mdadm: hot removed /dev/sdb6 from /dev/md0
再次添加
- [root@localhost t2]# mdadm /dev/md0 -a /dev/sdb6
- mdadm: added /dev/sdb6
移除 raid 5
- [root@localhost mnt]# umount /mnt/t2
- [root@localhost mnt]# mdadm -S /dev/md0
- mdadm: stopped /dev/md0
来源: http://blog.51cto.com/marvin89/2106891