RAID概述
RAID,为Redundant Arrays of Independent Disks的简称,中文为廉价冗余磁盘阵列。 RAID 技术作为高性能、高可靠的存储技术,已经得到了非常广泛的应用。 RAID主要利用数据条 带、镜像和数据校验技术来获取高性能、可靠性、容错能力和扩展性,根据运用或组合运用这三种 技术的策略和架构,可以把 RAID 分为不同的等级,以满足不同数据应用的需求。
常用RAID技术
JBOD
- 不是标准的 RAID 等级
- 一个没有控制软件提供协调控制的磁盘集合
- 简单提供一种扩展存储空间的机制
- JBOD 可用存储容量等于所有成员磁盘的存储空间之和
RAID0
- 无冗错的数据条带
- 一种简单的、无数据校验的数据条带化技术
- 低成本、高读写性能、100% 的高存储空间利用率
- 不提供数据冗余保护(一旦数据损坏,将无法恢复)
- 连续以位或字节为单位分割数据,并行读/写于多个磁盘上(提高性能)
- 适用于对性能要求严格但对数据安全性和可靠性不高的应用
- 至少需要2个驱动器组建
RAID1
- 镜像
- 拥有完全容错的能力
- 成本高(磁盘阵列中单位成本最高的)
- 通过磁盘数据镜像实现数据冗余(成对独立磁盘上产生互为备份的数据)
- 可以在原始数据繁忙时直接从镜像拷贝中读取数据
- 磁盘失效时,系统可以自动切换到镜像磁盘上读写,而不需要重组失效的数据
- 适用于对顺序读写性能要求高以及对数据保护极为重视的应用
- 至少需要2个驱动器组建
RAID5
- 分布奇偶位条带(最常见)
- 兼顾存储性能、数据安全和存储成本(综合 RAID0 和 RAID1)
- 数据中心大多采用它作为应用数据的保护方案
- 不单独指定的奇偶盘,在所有磁盘上交叉地存取数据及奇偶校验信息
- 读/写指针可同时对阵列设备进行操作(数据流量高)
- 有“写损失”(一次写操作有四个实际的读/写操作,两次读旧的数据及奇偶信息,两次写新的数据及奇偶信息。)
- 适合于小数据块和随机读写的数据
- 至少需要3个驱动器组建
RAID6
- 双分布奇偶位条带(RAID5基础上增强数据保护)
- 具有快速的读取性能、更高的容错能力
- 成本高
- 写性能较差
- 两个独立的奇偶系统使用不同的算法
- 数据的可靠性非常高(两块磁盘同时失效,也不会影响数据的使用)
- 占用更大的磁盘空间,“写损失”增加
- 适用于对对数据保护极为重视的应用
- 至少需要4个驱动器组建
RAID10
- 两个或多个镜像集协同工作
- 多个RAID 1集可组合形成单个阵列
- 数据跨所有镜像的驱动器进行分拆
- 每个驱动器在RAID 10中创建镜像,避免因未完成奇偶校验计算而导致的延迟。
选用RAID技术
RAID 等级的选择主要有三个因素,即数据可用性、 I/O 性能和成本。
RAID 等级 | RAID0 | RAID1 | RAID3 | RAID5 | RAID6 | RAID10 |
---|---|---|---|---|---|---|
别名 | 条带 | 镜像 | 专用奇偶校验条带 | 分布奇偶校验条带 | 双重奇偶校验条带 | 镜像加条带 |
容错性 | 无 | 有 | 有 | 有 | 有 | 有 |
冗余类型 | 无 | 有 | 有 | 有 | 有 | 有 |
热备份选择 | 无 | 有 | 有 | 有 | 有 | 有 |
读性能 | 高 | 低 | 高 | 高 | 高 | 高 |
随机写性能 | 高 | 低 | 低 | 一般 | 低 | 一般 |
连续写性能 | 高 | 低 | 低 | 低 | 低 | 一般 |
需要磁盘数 | n≥1 | 2n (n≥1) | n≥3 | n≥3 | n≥4 | 2n(n≥2)≥4 |
可用容量 | 全部 | 50% | (n-1)/n | (n-1)/n | (n-2)/n | 50% |
mdadm命令
常用命令
create创建阵列
选项 | 解释 | 作用 |
---|---|---|
-C | –create | 指定阵列中成员盘个数。 |
-x | 指定阵列中热备盘个数。 | |
-z | –size | 创建阵列时,指定每个成员盘使用多大的空间。单位KB。 |
-c | –chunk (-c) | 指定条带大小。单位KB,默认值64KB。 |
-l | –level | 设置raid级别。 |
-p | –parity | 配置raid5和raid10阵列的数据布局,控制faulty失败模式。(la, ra, ls, rs) |
-b | –bitmap | 使用bitmap模式记录RAID阵列有多少个块已经同步(resync),正常停止RAID后,再将RAID组装起来时,磁盘上已同步块不用再次同步。 |
-w | –write-mostly | 阵列的成员盘指定该参数后,在应用中该成员盘只进行数据写,而不从它上面读取数据。该参数只针对RAID1有效。 |
-N | –name | 阵列名称。 |
-R | –run | 当阵列的活跃盘上面存在其他阵列的superblock信息时,强制启动阵列。 |
-f | –froce | 强制mdadm接受geometry和layout说明。 |
-a | –auto | 通知mdadm是否创建设备文件,并分配一个未使用的次设备号。 |
Build阵列
选项 | 解释 | 作用 |
---|---|---|
-u | –uuid | 通过匹配uuid来重构raid。 |
-m | –super-minor | 通过匹配设备次设备号来重构raid。 |
-N | –name | 通过name组装阵列。 |
-f | –force | 当superblock过期时,可以通过该参数强制组装。 |
-R | –run | 当重组阵列active盘数少于创建时指定个数时,尝试启动阵列。 |
-U | –update | 组装阵列,更新每个设备的superblock信息。 |
grow扩容阵列
选项 | 解释 | 作用 |
---|---|---|
-n | –raid-disks | 改变成员盘数量。改变成员盘大小。 |
-z | –size | 增加或者移除bitmap。 |
-b | –bitmap | 尚不支持改变RAID级别。 |
-l | –level | 改变校验数据分布。 |
-p | –layout | 等同于create模式下–layout选项 |
manage管理磁盘
选项 | 解释 | 作用 |
---|---|---|
-a | –add | 将指定设备添加到阵列中。 |
-f | –fail | 标记指定盘为faulty。 |
-r | –remove | 从阵列中移除指定设备。 |
其他常用
- –detail(-D)
显示一个阵列的详细信息。
示例: mdadm --detail /dev/md0
mdadm -D /dev/md0 - –export(-Y)
与–detail一起使用,使阵列信息的输出格式变为key=value的格式。
示例: mdadm --detail --export /dev/md0 - –stop(-S)
停止阵列。被停止的阵列需要重新组装后才能使用。
示例: mdadm --stop /dev/md0
配套练习
子项目1.RAID1卷的建立
(1)使用fdisk命令创建四个磁盘分区/dev/sdb1、/dev/sdc1、/dev/sdd1。
(2)使用mdadm命令创建RAID1。
(3)为新建立的/dev/md0建立类型为ext4的文件系统。
(4)查看建立的RAID1的具体情况。
(5)将RAID设备/dev/md0挂载到指定的目录/media/md0中。
答案:
- fdisk /dev/sdb n p 1 +3G、fdisk /dev/sdc n p 1 +3G、fdisk /dev/sdd n p 1 +3G
可以用lsblk查看
- mdadm -C /dev/md0 -a yes -l 1 -n 2 /dev/sdb /dev/sdc
- mkfs.ext4 -c /dev/md0
- mdadm -D /dev/md0
- cd /media 、mkdir md0、ls -a(查看是否成功建立)、mount /dev/md0 /media/md0
子项目2.RAID设备的数据恢复
(1)假设/dev/sdc1损坏。将损坏的RAID成员标记为失效。
(2)移除失效的RAID成员。
(3)更换硬盘设备,添加一个新的RAID成员。
答案:
- mdadm /dev/md0 -f /dev/sdb1
- mdadm /dev/md0 -r /dev/sdb1
- mdadm /dev/md0 -a /dev/sdb1