Linux系统RAID磁盘阵列

Posted 他和晚风一样温柔

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux系统RAID磁盘阵列相关的知识,希望对你有一定的参考价值。

RAID 磁盘阵列介绍

  • RAID 是 Redundant Array of Independent Disks 的缩写, 简称 独立冗余磁盘阵列。主要就是将磁盘资源集中进行管理
  • 是把多块独立的物理硬盘 按照不同的方式组合起来 形成一个硬盘组(逻辑上还是一块硬盘),从而 提供比单个硬盘更高的存储性能 还能 提供数据备份技术
  • 组成磁盘阵列的不同方式称为 RAID级别(RAID Levels)
  • 常用的RAID级别 : RAID 0,RAID 1,RAID 5,RAID 6,RAID 1+0、0+1 等

注:冗余:多余的重复或啰嗦内容均称为冗余。冗余有两层含义:第一层含义:是指多余的不需要部分。第二层含义是指人为增加地重复部分。其目的是用来对原本的单一部分进行备份,以达到增强其安全性的目的,这在信息通信系统当中有较为广泛的应用,当系统故障时,比如某一设备发生损坏。冗余配置的部件可以作为备援,及时介入并承担故障部件的工作,由此减少系统的故障时间。冗余尤用于应急处理,冗余可以存在与不同层面,如:网络冗余、服务器冗余、磁盘冗余、数据冗余等。

常用的RAID级别

1.RAID 0(条带化存储)

  • RAID 0 是将 N块硬盘并行组合成一个新的逻辑盘;连续以位或字节为单位分割数据,并行读/写 于多个磁盘上,因此具有很高的数据传输率,但它没有数据冗余(备份)功能
  • RAID 0 只是单纯地提高性能,并没有为数据的可靠性提供保证,而且其中的一个磁盘失效将影响到所有数据
  • RAID 0 不能应用于数据安全性要求高的场合

优点:

  • 因为是把连续的数据分散(striping)到多个磁盘上存取,所以拥有所有 RAID级别中最高的读写效率
  • 系统有数据请求就可以被多个磁盘并行的执行,每个磁盘执行属于它自己的那部分数据请求,所以传输速率很快
  • 利用率是100%

缺点:

  • RAID 0 比较特殊:它不光不提供容错机会,还会提升出错的风险。因为单块硬盘没有完整数据,坏一块全部完蛋,假设同样硬盘出问题概率是一样的,那增加一块会直接导致出错概率翻倍。

如图:
在这里插入图片描述
2. RAID 1 (镜像存储)

  • 通过磁盘数据镜像实现数据冗余,在成对的独立磁盘上产生互为备份的数据,所以需要偶数个磁盘。(在一块硬盘上写,在另一块硬盘上备份)
  • 当原始数据繁忙时,可直接从镜像拷贝中读取数据,因此 RAID 1 提高了读的性能
  • RAID 1 是磁盘阵列中单位 成本最高的,但提供了很高的 数据安全性和可用性。当一个磁盘失效时,系统可以自动切换到镜像磁盘上读写,而不需要重组失效的数据

如图:
在这里插入图片描述
3.RAID 5 磁盘列阵

  • 由 N 块盘组成的磁盘阵列(N>=3),一份数据产生 N-1 个条带,同时还有1份校验数据,共N份数据在N块盘上循环均衡存储
  • 需写一份校验数据,浪费一块硬盘
  • N 块盘可以同时读写,读性能很高;但由于 有校验机制的问题,写性能相对不高
  • 磁盘利用率:( N-1) / N
  • 将校验数据分摊给所有硬盘,可靠性高,允许坏1块盘,不影响所有数据

优点

  • 存储性能、数据安全 和 存储成本兼顾的存储解决方案。RAID 5 对比 RAID 1 的备份方式,RAID 5 备份的不是数据本身,而是把数据和相对应的校验数据分别存储到组成 RAID 5 的各个磁盘上,所以 当 RAID 5 的一个磁盘数据发生损坏后,可以利用剩下的数据和相对应的校验数据去恢复被损坏的数据,可靠性高

缺点

  • 因为校验机制问题,导致写的性能相对不高

如图
在这里插入图片描述

4.RAID 6 磁盘列阵

  • 由 N 块盘组成的磁盘阵列(N>=4)
  • 磁盘利用率: (N-2) / N
  • 与 RAID 5 相比,RAID 6 增加了 第二个独立的奇偶校验信息块
  • 两个独立的奇偶系统使用不同的算法,即使两块磁盘同时失效也不会影响数据的使用
  • 相对于 RAID 5 有更大的 “写损失”,因此写性能较差
  • 需写两份校验数据,浪费两块硬盘

如图
在这里插入图片描述
5 RAID 1+0(先做镜像,再做条带)

  • 由 N 块盘组成的磁盘阵列(偶数,N>=4),N 块盘两两镜像后,再组合成一个 RAID 0
  • 磁盘利用率:N/2
  • N/2 块盘同时写入,N块盘同时读取,性能高,可靠性高

优点:

  • RAID 1+0是存储性能和数据安全兼顾的方案。它在提供与 RAID 1一样的数据安全保障的同时,也提供了与RAID 0近似的存储性能。

缺点

  • 由于 RAID 1+0 也通过数据的100%备份提供数据安全保障,因此 RAID 0+1的磁盘空间利用率与RAID1相同,存储成本高

6.RAID 0+1(先做条带,再做镜像,不常用)

  • 读写性能与 RAID 1+0 相同
  • 安全性低于 RAID 1+0,所以一般不用该方式

各个RAID级别的对比

RAID级别硬盘数量磁盘利用率是否有校验保护能力读写性能
RAID 0N100%单个硬盘的N倍(最好)
RAID 1N(偶数)50%允许一个设备故障读和单个硬盘无分别,写则需写两对存储设备
RAID 5N >=3(N-1) / N允许一个设备故障读和RAID 0近似,写<单个硬盘
RAID 6N >=4(N-2) / N允许两个设备故障读写都近似与 RAID 5,写入<RAID 5
RAID 1+0N >=4(偶数)50%允许两个基组中各坏一个读=RAID 0,写=RAID 1
  • RAID 0 : 安全性能高,没有冗余能力,可靠性能差;
  • RAID 1 : 磁盘数量大于等于2(偶数),读性能高,写的性能一般,安全系数高,允许一块硬盘坏掉
  • RAID 5 : 磁盘数量大于等于3,要写入一块硬盘用于冗余校验数据,读性能较快,写性能较慢
  • RAID 6 : 磁盘数量大于等于4,要写入两块硬盘用于冗余校验数据,写性能比5差
  • RAID 1+0 : 先创1,再创0,磁盘数量大于等于4(偶数),每个1中可以各毁坏一个

阵列卡介绍

1.阵列卡:

  • 阵列卡是用来实现RAID功能的板卡
  • 通常是由I/O处理器、硬盘控制器、硬盘连接器和缓存等一系列组件构成的
  • 不同的RAID卡支持的RAID功能不同
  • RAID卡的接口类型:IDE接口、SCSI接口、SATA接口和SAS接口

2.阵列卡的缓存:

  • 缓存 (Cache) 是RAID卡与外部总线交换数据的场所,RAID卡先将数据传送到缓存,再由缓存和外边数据总线交换数据
  • 缓存的大小与速度是直接关系到RAID卡的实际传输速度的重要因素
  • 不同的RAID卡出厂时配备的内存容量不同,一般为几兆到数百兆容量不等

实验:
1.以RAID5做个实验
命令:

检查是否已安装mdadm软件包
rpm -q mdadm
如未安装
执行yum install -y mdadm 进行安装

使用fdisk工具将新磁盘设备/dev/sdb、/dev/sdc、 /dev/sdd、 /dev/sde
划分出主分区sdb1、sdc1、 sdd1、 sde1, 并且把分区类型的ID 标记号改为“fd”

fdisk /dev/sdb
fdisk /dev/sdc

n → p → 回车 → 回车 → t → fd → w

创建RAID设备
创建RAID5,md0 为磁盘阵列的名字
mdadm -C -v /dev/md0 [-a yes] -l5 -n3 /dev/sd[bcd]1 -x1 /dev/sde1

-C:                      表示新建
-v:                      显示创建过程中的详细信息
/dev/md0:                创建RAID5 的名称
-a yes:                  --auto, 表示如果有什么设备文件没有存在的话就自动创建,可省略。
-l:                      指定RAID的级别,l5表示创建RAID5,l10代表RAID10
-n:                      指定使用几块硬盘创建RAID, n3表示使用3块硬盘创建RAID
-n3 /dev/sd[bcd]1:       指定使用这3块磁盘分区去创建RAID
-x:                      指定使用几块硬盘做RAID的热备用盘,x1表示保留1块空闲的硬盘作备用(热备份,支持热插拔的)
/dev/sde1:               指定用作于备用的磁盘

查看创建RAID磁盘进度详细信息
cat /proc/mdstat        查看创建RAID的进度(实时的查看一次,不能自动刷新)
或者
mdadm -D /dev/md0

用watch命令来每隔一段时间定时刷新/proc/mdstat 的输出
watch -n 5 'cat /proc/mdstat'  #每隔5秒执行一次 cat /proc/mdstat 命令,用户定时刷新并输出命令结果

查看磁盘是否已做 RAID
mdadm -E /dev/sd[b-e]1

创建并挂载文件系统
临时挂载
mkfs -t xfs /dev/md0
mkdir /myraid
mount /dev/md0 /myraid
df -Th
自动挂载
cp /etc/fstab /etc/fstab.bak
vim /etc/fstab
/dev/md0     /myraid    xfs     defaults    0    0

实现故障恢复
mdadm /dev/md0 -f /dev/sdb1         模拟/dev/sdb1故障
mdadm -D /dev/md0                   查看发现sde1已顶替sdb1

创建/etc/mdadm.conf 配置文件,方便管理软RAID的配置,比如启动、停止
echo 'DEVICE /dev/sdc1 /dev/sdb1 /dev/sdd1 /dev/sde1' > /etc/mdadm.conf
mdadm --detail --scan >> /etc/mdadm.conf

mdadm 命令其它常用选项

-f:指定设备故障
-r:移除设备
-a:添加设备
-S:停止RAID
-A:启动RAID

示例
mdadm /dev/md0 -f /dev/sdb1
mdadm /dev/md0 -r /dev/sdbl
mdadm /dev/md0 -a /dev/sde1

不添加配置文件的停止后启动不了
echo 'DEVICE /dev/sdc1 /dev/sdb1 /dev/sdd1' > /etc/mdadm.conf
mdadm --detail --scan >> /etc/mdadm.conf

umount /dev/md0
mdadm -S /dev/md0
mdadm -As /dev/md0
#-s: 指查找/etc/mdadm.conf 文件中的配置信息

实操
先加4个硬盘,前三个做 RAID 5,一个用来做备份。执行 fdsik -l 查看硬盘已经添加进来了,分别是 /dev/sdb、 /dev/sdc、 /dev/sdd、 /dev/sde。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
现在硬盘已添加
查看rpm -q mdadm有没有安装
如果已经安装了,我们开始设置分区
1.步骤一:进行磁盘分区,设置分区类型为 fd

  • 执行四次命令进行分区,fdisk /dev/sd[b-e], n → p → 回车 → 回车 → t → fd → w 。fd 表示分区类型为 fd Linux raid 自动检测

如图
在这里插入图片描述2.步骤二:创建、查看 RAID设备

  • 执行命令 mdadm -Cv /dev/md0 -l5 -n3 /dev/sd[b-d]1 -x1 /dev/sde1 创键RAID5,/dev/sdb1、/dev/sdc1、/dev/sdd1 做主设备,/dev/sde1 做备用

如图
在这里插入图片描述
在这里插入图片描述
mdadm -D /dev/md0命令查看
在这里插入图片描述
3.步骤三:创建并挂载文件系统

  • 可以用 mount 临时挂载,和在 /etc/fstab 中永久挂载,为了方便我使用mount 临时挂载

如图
在这里插入图片描述
注: 因为我用了 -n3 使用了三块磁盘共15G 去创建 RAID 5,磁盘利用率是 (N-1) / N 即 2/3 * 15 = 10G,所以挂载后的容量为 10G
4.步骤四:模拟故障,实现故障恢复

  • 执行命令: mdadm /dev/md0 -f /dev/sdc1 使用 RAID 5 方式创建的 /dev/md0 磁盘阵列中的 /dev/sdc1 磁盘故障,再执行命令 mdadm -D /dev/md0 查看阵列信息,发现 sde1 已顶替 sdc1
    在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
5.步骤五:创建 /etc/mdadm.conf 配置文件

  • 创建 /etc/mdadm.conf 配置文件,为了方便的管理软RAID的配置,比如启动、停止。如果不创建该配置文件,执行完 -S 停止后,-A 执行会失败
echo 标准输出
> 重定向输出,有就覆盖,没有就新建文件
>> 重定向追加 有就追加,没有就新建文件

echo 'DEVICE /dev/sdc1 /dev/sdb1 /dev/sdd1 /dev/sde1' > /etc/mdadm.conf
如果文件存在,则覆盖原文件中的内容;如果不存在,则创建文件,将内容输入进去

mdadm --detail --scan >> /etc/mdadm.conf
#如果文件存在,则在文件最后行追加内容;如果不存在,则创建文件,将内容输入进去

如图
在这里插入图片描述
注:添加、移除 磁盘设备;停止、启动 RAID 设备

  • -r 移除RAID中的磁盘设备、 -a 添加磁盘设备
  • -S 停止RAID、 -A 启动RAID

如图
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
注:注意:停止前 RAID 要先进行解挂载,因为磁盘在使用过程中无法被停止

umount /dev/md0
mdadm -S /dev/md0

mdadm -As /dev/md0
#-s: 指查找/etc/mdadm.conf 文件中的配置信息
#前提是解挂的设备名 已经写入到  /etc/mdadm.conf 配置文件中了。

如图
在这里插入图片描述

以上是关于Linux系统RAID磁盘阵列的主要内容,如果未能解决你的问题,请参考以下文章

在Linux系统上如何查看映射的硬raid磁盘空间信息呢

linux-磁盘管理与文件系统-RAID配置实战

linux系统中部署RAID5磁盘阵列+备份盘

Linux系统常用磁盘阵列RAID5

Linux系统——Raid磁盘阵列

Raid磁盘阵列在Linux系统上的搭建