目录
前言
今天在工作中遇到了关于RAID的问题,就是磁盘冗余阵列,总结一下,也供大家学习参考。
一、磁盘阵列介绍
1.1 RAID是什么
RAID是英文Redundant Array of Independent Disks的缩写,中文简称为独立冗余磁盘阵列。简单的说,RAID是一种把多块独立的硬盘(物理硬盘)按不同的方式组合起来形成一个硬盘组(逻辑硬盘),从而提供比单个硬盘更高的存储性能和提供数据备份技术。
组成磁盘阵列的不同方式称为RAID级别(RAID Levels)。在用户看起来,组成的磁盘组就像是一个硬盘,用户可以对它进行分区,格式化等等。总之,对磁盘阵列的操作与单个硬盘一模一样。不同的是,磁盘阵列的存储速度要比单个硬盘高很多,而且可以提供自动数据备份。数据备份的功能是在用户数据一旦发生损坏后,利用备份信息可以使损坏数据得以恢复,从而保障了用户数据的安全性。
1.2 RAID 0(条带化存储)
RAID 0连续以位或字节为单位分割数据,并行读/写于多个磁盘上,因此具有很高的数据传输率,但它没有数据冗余
RAID 0只是单纯地提高性能,并没有为数据的可靠性提供保证,而且其中的一个磁盘失效将影响到所有数据
RAID不能应用于数据安全性要求高的场合
1.3 RAID 1(镜像存储)
通过磁盘数据镜像实现数据冗余,在成对的独立磁盘上产生互为备份的数据
当原始数据繁忙时,可直接从镜像拷贝中读取数据,因此RAID 1可以提高读取性能
RAID 1是磁盘阵列中单位成本最高的,但提供了很高的数据安全性和可用性。当一个磁盘失效时,系统可以自动切换到镜像磁盘上读写,而不需要重组失效的数据.
1.4 RAID 5
N (N≥3) 块盘组成阵列,一份数据产生N-1个条带,同时还有1份校验数据,共N份数据在N块盘上循环均衡存储
N块盘同时读写,读性能很高,但由于有校验机制的问题,写性能相对不高
(N-1) /N磁盘利用率
可靠性高,允许坏1块盘,不影响所有数据
1.5 RAID 6
N (N≥4)块盘组成阵列,(N-2) /N磁盘利用率
与RAID 5相比,RAID 6增加了第二个独立的奇偶校验信息块
两个独立的奇偶系统使用不同的算法,即使两块磁盘同时失效也不会影响数据的使用
相对于RAID 5有更大的“写损失"因此写性能较差
1.6 RAID 1 0 (先做镜象,再做条带)
N (偶数,N≥4) 块盘两两镜像后,再组合成一个RAID 0
N/2磁盘利用率
N/2块盘同时写入,N块盘同时读取
性能高,可靠性高
1.7 各磁盘阵列比较
RAID级别 | 容错性 | 硬盘数量 | 磁盘利用率 | 是否校验 | 写性能 |
RAID0 | 无 | N | N | 无 | 单个硬盘的N倍 |
RAID1 | 允许一个设备故障 | N(偶数) | N/2 | 无 | 需写入两对存储设备,互为主备 |
RAID5 | 允许一个设备故障 | N>=3 | (N-1)/N | 有 | 需写计算校验 |
RAID6 | 允许两个设备故障 | N>=4 | (N-2)/N | 有 | 需双重写计算校验 |
RAID1 0 | 允许两个基组中各坏一个 | N>=4(偶数) | N/2 | 无 | N/2块硬盘同时写入 |
二、阵列卡介绍与缓存
2.1 阵列卡是什么
阵列卡的全称叫磁盘阵列卡 是用来做 RAID(廉价冗余磁盘阵列)的。磁盘阵列是一种把若干硬磁盘驱动器按照一定要求组成一个整体,整个磁盘阵列由阵列控制器管理的系统。冗余磁盘阵列RAID(Redundant Array of Independent Disks)技术1987年由加州大学伯克利分校提出,最初的研制目的是为了组合小的廉价磁盘来代替大的昂贵磁盘,以降低大批量数据存储的费用(当时RAID称为Redundant Array of Inexpensive Disks 廉价的磁盘阵列),同时也希望采用冗余信息的方式,使得磁盘失效时不会使对数据的访问受损失,从而开发出一定水平的数据保护技术。
通常是由I/O处理器、硬盘控制器、硬盘连接器和缓存等-系列组件构成的。
不同的RAID卡支持的RAID功能不同。例如:支持RAID0、RAID1、 RAID5、 RAID10等
RAID卡的接口类型:IDE接口、SCSI接口、 SATA接口和SAS接口
2.2 阵列卡缓存
●缓存(Cache)是RAID卡与外部总线交换数据的场所,
RAID卡先将数据传送到缓存,再由缓存和外边数据总线
交换数据
●缓存的大小与速度是直接关系到RAID卡的实际传输速度
的重要因素
●不同的RAID卡出厂时配备的内存容量不同,一般为几兆
到数百兆容量不等
三、创建软RAID磁盘阵列步骤
3.1 检查是否已安装mdadm软件包
[root@localhost ~]rpm -q mdadm
mdadm-4.0-5.el7.x86_64
3.2 扫描并查看
[root@localhost ~]# echo "- - -" > /sys/class/scsi_host/host0/scan
[root@localhost ~]# fdisk -l
磁盘 /dev/sda:64.4 GB, 64424509440 字节,125829120 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x0009a374
设备 Boot Start End Blocks Id System
/dev/sda1 * 2048 3907583 1952768 83 Linux
/dev/sda2 3907584 125829119 60960768 8e Linux LVM
磁盘 /dev/sdc:21.5 GB, 21474836480 字节,41943040 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘 /dev/sdb:21.5 GB, 21474836480 字节,41943040 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘 /dev/mapper/centos-root:56.4 GB, 56417583104 字节,110190592 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘 /dev/mapper/centos-swap:6002 MB, 6002049024 字节,11722752 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘 /dev/sdd:21.5 GB, 21474836480 字节,41943040 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘 /dev/sde:21.5 GB, 21474836480 字节,41943040 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
3.3 使用fdisk.工具将新磁盘划分出主分区
# fdisk /dev/ sdb
# fdisk /dev/ sdc
# fdisk /dev/ sdd
[root@localhost ~]# fdisk /dev/sde
欢迎使用 fdisk (util-linux 2.23.2)。
更改将停留在内存中,直到您决定将更改写入磁盘。
使用写入命令前请三思。
Device does not contain a recognized partition table
使用磁盘标识符 0x6d0a5a9b 创建新的 DOS 磁盘标签。
命令(输入 m 获取帮助):n
Partition type:
p primary (0 primary, 0 extended, 4 free)
e extended
Select (default p): p
分区号 (1-4,默认 1):
起始 扇区 (2048-41943039,默认为 2048):
将使用默认值 2048
Last 扇区, +扇区 or +size{K,M,G} (2048-41943039,默认为 41943039):
将使用默认值 41943039
分区 1 已设置为 Linux 类型,大小设为 20 GiB
命令(输入 m 获取帮助):t
已选择分区 1
Hex 代码(输入 L 列出所有代码):fd
已将分区“Linux”的类型更改为“Linux raid autodetect”
命令(输入 m 获取帮助):w
The partition table has been altered!
Calling ioctl() to re-read partition table.
正在同步磁盘。
3.4 创建RAID设备
#创建RAID5
[root@localhost ~]# mdadm -C -v /dev/md5 -l5 -n3 /dev/sd[b-d]1 -x1 /dev/sde1
mdadm: layout defaults to left-symmetric
mdadm: layout defaults to left-symmetric
mdadm: chunk size defaults to 512K
mdadm: size set to 20954112K
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md5 started.
各参数意思
-C:表示新建;
-v:显示创建过程中的详细信息。
/dev/md0: 创建RAID5的名称。
-ayes:--auto,表示如果有什么设备文件没有存在的话就自动创建,可省略。
-1: 指定RAID 的级别,15表示创建RAID5。.
-n:指定使用几块硬盘创建RAID, n3表示使用3块硬盘创建RAID。
/dev/sd [bcd]1: 指定使用这3块磁盘分区去创建RAID。
-x:指定使用几块硬盘做RAID的热备用盘,x1表示保留1块空闲的硬盘作备用
/dev/sde1: 指定用作于备用的磁盘
3.5 查看RAID磁盘详细信息
[root@localhost ~]# mkfs.xfs /dev/md5
meta-data=/dev/md5 isize=512 agcount=16, agsize=654720 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=0, sparse=0
data = bsize=4096 blocks=10475520, imaxpct=25
= sunit=128 swidth=256 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=1
log =internal log bsize=4096 blocks=5120, version=2
= sectsz=512 sunit=8 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
3.6 用watch命令来每隔-一段时间刷新
[root@localhost ~]# watch -n 10 ' cat /proc/mdstat '
3.7 检查磁盘是否EL做RAID
[root@localhost ~]# mdadm -E /dev/sd[b-d]1
3.8 创建并挂载文件系统
[root@localhost ~]# mkdir /opt/kgc_md5
[root@localhost ~]# mount /dev/md5
[root@localhost ~]# mount /dev/md5 /opt/kgc_md5/
[root@localhost ~]# df -h
文件系统 容量 已用 可用 已用% 挂载点
/dev/mapper/centos-root 53G 6.2G 47G 12% /
devtmpfs 1.9G 0 1.9G 0% /dev
tmpfs 1.9G 0 1.9G 0% /dev/shm
tmpfs 1.9G 9.1M 1.9G 1% /run
tmpfs 1.9G 0 1.9G 0% /sys/fs/cgroup
/dev/sda1 1.9G 179M 1.7G 10% /boot
tmpfs 378M 28K 378M 1% /run/user/0
/dev/sr0 4.3G 4.3G 0 100% /run/media/root/CentOS 7 x86_64
/dev/md5 40G 33M 40G 1% /opt/kgc_md5
3.9 实现故障恢复
3.9.1 模拟/dev/sdc1故障
[root@localhost ~]# mdadm /dev/md5 -f /dev/sdc1
mdadm: set /dev/sdc1 faulty in /dev/md5
[root@localhost ~]# mdadm -vD /dev/md5
/dev/md5:
Version : 1.2
Creation Time : Fri Aug 13 08:42:41 2021
Raid Level : raid5
Array Size : 41908224 (39.97 GiB 42.91 GB)
Used Dev Size : 20954112 (19.98 GiB 21.46 GB)
Raid Devices : 3
Total Devices : 4
Persistence : Superblock is persistent
Update Time : Fri Aug 13 09:16:25 2021
State : clean
Active Devices : 3
Working Devices : 3
Failed Devices : 1
Spare Devices : 0
Layout : left-symmetric
Chunk Size : 512K
Consistency Policy : resync
Name : localhost.localdomain:5 (local to host localhost.localdomain)
UUID : 936b15d8:b276c7b6:d7281375:f141994f
Events : 39
Number Major Minor RaidDevice State
0 8 17 0 active sync /dev/sdb1
3 8 65 1 active sync /dev/sde1
4 8 49 2 active sync /dev/sdd1
1 8 33 - faulty /dev/sdc1
3.9.2 移除故障盘
[root@localhost ~]#mdadm /dev/md5 -r /dev/sdc1 #移除故障盘
[root@localhost ~]# mdadm -D /dev/md5 查看
/dev/md5:
Version : 1.2
Creation Time : Fri Aug 13 08:42:41 2021
Raid Level : raid5
Array Size : 41908224 (39.97 GiB 42.91 GB)
Used Dev Size : 20954112 (19.98 GiB 21.46 GB)
Raid Devices : 3
Total Devices : 4
Persistence : Superblock is persistent
Update Time : Fri Aug 13 09:16:25 2021
State : clean
Active Devices : 3
Working Devices : 3
Failed Devices : 1
Spare Devices : 0
Layout : left-symmetric
Chunk Size : 512K
Consistency Policy : resync
Name : localhost.localdomain:5 (local to host localhost.localdomain)
UUID : 936b15d8:b276c7b6:d7281375:f141994f
Events : 39
Number Major Minor RaidDevice State
0 8 17 0 active sync /dev/sdb1
3 8 65 1 active sync /dev/sde1
4 8 49 2 active sync /dev/sdd1
3.10 添加新盘符,此时 /dev/sdc1 变成了热备
[root@localhost opt]# mdadm /dev/md5 -a /dev/sdc1
mdadm: added /dev/sdc1
3.11 创建/etc/mdadm.conf 配置文件
[root@localhost opt]echo ' DEVICE /dev/sdc1 /dev/sdb1 /dev/sdd1 /dev/sde1' > /etc/mdadm.conf
mdadm命令其它常用选项
-r: 移除设备
-a:添加设备
-S: 停止RAID
-A: 启动RAID
总结
其实除了RAID0,1,5,6还有01,10的组合,比较复杂,这里就暂且不谈,但过程步骤都是一样的,就是用mdadm命令把分区或磁盘组合,然后用-l选项指定对应的模式,最后都要格式化,挂载后才能使用。