RAID简称廉价磁盘冗余阵列 (Redundant Arrays of Inexpensive Disks) 或独立磁盘冗余阵列(RAID,redundant array of independent disks)是把相同的数据存储在多个硬盘的不同的地方的方法。通过把数据放在多个硬盘上,输入输出操作能以平衡的方式交叠,改良性能。因为多个硬盘增加了平均故障间隔时间(MTBF),储存冗余数据也增加了容错。
利用虚拟化技术把多个硬盘组合起来,成为一个或多个硬盘阵列组目的是为了提升性能或者减少冗余。
分块:将一个分区分成多个大小相等的、地址相邻的块,它是组成条带的元素。
条带:同一磁盘阵列中的多个磁盘驱动器上的相同“位置”(或者说相同编号)的分块。
我们常常将一块硬盘分成两个C盘
和D盘
(windows系统),这里的C盘
和D盘
就是逻辑卷,此处反过来,将多块硬盘虚拟成一块逻辑盘。
RAID 0 是一种简单的、无数据校验的数据条带化技术。没有容错设计的条带硬盘阵列,以条带形式将RAID组的数据均匀分布在各个硬盘中。
优点:追求最大容量(将多个物理硬盘虚拟成一个逻辑磁盘)、读写速度、实现成本低、100%的高存储空间利用率。
缺点:RAID 0没有提供冗余或错误修复能力。
适用场景: RAID0 一般适用于对性能要求严格但对数据安全性和可靠性不高的应用,如视频、音频存储、临时数据缓存空间等。
RAID 1又称磁盘镜像
,数据同时一致写到主硬盘和镜像硬盘。所以磁盘利用率只有50%。只要系统中任何一对镜像盘中至少有一块磁盘可以使用,甚至可以在一半数量的硬盘出现问题时系统都可以正常运行,当一块硬盘失效时,系统会忽略该硬盘,转而使用剩余的镜像盘读写数据,具备很好的磁盘冗余能力。
优点:追求最大安全性。
缺点:磁盘利用率低,成本高。
适用场景:RAID1 应用于对顺序读写性能要求高以及对数据保护极为重视的应用,如对邮件系统的数据保护。
RAID 2称为纠错海明码磁盘阵列
,其设计思想是利用海明码实现数据校验冗余。 RAID 2的数据宽度越大,存储空间利用率越高,但同时需要的磁盘数量也越多。
优点:数据安全性高,数据传输性能相当高,设计复杂度低于RAID 3、RAID 4、RAID 5。
缺点:数据冗余开销大,数据输出性能受阵列中最慢磁盘驱动器的限制。数据重建非常耗时。(很少应用)
带有校验的并行数据传输阵列,数据条带化分布在数据盘中,同时使用专用校验硬盘存放校验数据。
注意:有效容量 RAID 3=(N-1)* 单块硬盘大小,其中N为硬盘总数量。
优点:磁盘阵列的存储空间利用率高。
缺点:RAID 3出现坏盘时性能大幅下降
适用场景:适用大容量数据的顺序访问应用,如影像处理、流媒体服务等。
RAID 4 与 RAID 3 的原理大致相同,区别在于条带化的方式不同。 RAID 4按照 块的方式来组织数据,写操作只涉及当前数据盘和校验盘两个盘,多个 I/O 请求可以同时得到处理,提高了系统性能。 RAID 4 按块存储可以保证单块的完整性,可以避免受到其他磁盘上同条带产生的不利影响。
RAID 4 在不同磁盘上的同级数据块同样使用 XOR 校验,结果存储在校验盘中。写入数据时, RAID 4 按这种方式把各磁盘上的同级数据的校验值写入校验 盘,读取时进行即时校验。因此,当某块磁盘的数据块损坏, RAID4 可以通过校验值以及其他磁盘上的同级数据块进行数据重建。
优点:提供了 非常好的读性能
缺点:单一的校验盘往往成为系统性能的瓶颈。写性能比较差。(RAID 4 在实际应用中很少见,主流存储产品也很少使用 RAID 4 保护。)
与RAID 3
机制类似,但校验数据均匀分布在各数据硬盘上,RAID成员硬盘上同时保存数据和校验信息,数据块和对应的校验信息保存在不同硬盘上。RAID 5是最常用的RAID方式之一
RAID5的读出效率很高,写入效率一般,块式的集体访问效率不错。因为奇偶校验码在不同的磁盘上,所以提高了可靠性。但是它对数据传输的并行性解决不好,而且控制器的设计也相当困难。
注意:有效容量 RAID 5=(N-1)*单块盘大小,其中N为硬盘总数
组建RAID 5最少3块盘,允许坏一块盘
RAID 6技术是在RAID 5基础上,为了进一步加强数据保护而设计的一种RAID方式,实际上是一种扩展RAID 5等级。校验盘分为:横向校验盘和斜向校验盘
优点:快速的读取性能,更高的容错能力
缺点:很慢的写入速度,RAID控制器在设计上更加复杂,成本更高
适用场景:RAID6 很少得到实际应用,主要用于对数据安全等级要求非常高的场合。
将镜像和条带进行两级组合的RAID级别,第一级是RAID 1,第二级为RAID 0
RAID 10也是一种应用广泛的RAID级别,磁盘利用率50%
优点:同时拥有RAID 0的超凡速度和RAID 1的数据高可靠性
缺点:CPU占用率高,而且磁盘的利用率比较低,这种新结构的可扩充性不好
,成本高
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% |
先移除全部新加的盘,再新添加4个盘
mdadm命令的常用参数以及作用
参数 | 作用 |
---|---|
-a | 通知mdadm是否创建设备文件,并分配一个未使用的次设备号 |
-n | 指定设备数量 |
-l | 指定RAID级别 |
-C | 创建 |
-v | 显示过程 |
-f | 模拟设备损坏 |
-r | 移除设备 |
-Q | 查看摘要信息 |
-D | 查看详细信息 |
-S | 停止RAID磁盘阵列 |
-x | 备份盘数量 |
lsblk
查看新添的硬盘是否添加成功
[root@localhost ~]# lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda 8:0 0 20G 0 disk ├─sda1 8:1 0 1G 0 part /boot └─sda2 8:2 0 19G 0 part ├─centos-root 253:0 0 17G 0 lvm / └─centos-swap 253:1 0 2G 0 lvm [SWAP] sdb 8:16 0 20G 0 disk sdc 8:32 0 20G 0 disk sdd 8:48 0 20G 0 disk sde 8:64 0 20G 0 disk sr0 11:0 1 4.4G 0 rom
[root@localhost ~]# yum -y install mdadm [root@localhost ~]# mdadm -Cv /dev/md0 -a yes -n 4 -l 10 /dev/sdb /dev/sdc /dev/sdd /dev/sde mdadm: layout defaults to n2 mdadm: layout defaults to n2 mdadm: chunk size defaults to 512K mdadm: size set to 20954112K mdadm: Defaulting to version 1.2 metadata mdadm: array /dev/md0 started.
把制作好的RAID磁盘阵列格式化为ext4格式
[root@localhost ~]# mkfs.ext4 /dev/md0 mke2fs 1.42.9 (28-Dec-2013) 文件系统标签= OS type: Linux 块大小=4096 (log=2) 分块大小=4096 (log=2) Stride=128 blocks, Stripe width=256 blocks 2621440 inodes, 10477056 blocks 523852 blocks (5.00%) reserved for the super user 第一个数据块=0 Maximum filesystem blocks=2157969408 320 block groups 32768 blocks per group, 32768 fragments per group 8192 inodes per group Superblock backups stored on blocks: 32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208, 4096000, 7962624 Allocating group tables: 完成 正在写入inode表: 完成 Creating journal (32768 blocks): 完成 Writing superblocks and filesystem accounting information: 完成
创建挂载点然后把硬盘设备进行挂载操作
[root@localhost ~]# mkdir /mnt/RAID [root@localhost ~]# mount /dev/md0 /mnt/RAID [root@localhost ~]# df -h 文件系统 容量 已用 可用 已用% 挂载点 devtmpfs 1.9G 0 1.9G 0% /dev tmpfs 1.9G 0 1.9G 0% /dev/shm tmpfs 1.9G 12M 1.9G 1% /run tmpfs 1.9G 0 1.9G 0% /sys/fs/cgroup /dev/mapper/centos-root 17G 2.0G 16G 12% / /dev/sda1 1014M 151M 864M 15% /boot tmpfs 378M 0 378M 0% /run/user/0 /dev/md0 40G 49M 38G 1% /mnt/RAID
查看/dev/md0磁盘阵列的详细信息,并把挂载信息写入到配置文件中,使其永久生效。
[root@localhost ~]# mdadm -D /dev/md0 /dev/md0: Version : 1.2 Creation Time : Sun Dec 24 14:40:25 2023 Raid Level : raid10 Array Size : 41908224 (39.97 GiB 42.91 GB) Used Dev Size : 20954112 (19.98 GiB 21.46 GB) Raid Devices : 4 Total Devices : 4 Persistence : Superblock is persistent Update Time : Sun Dec 24 15:19:22 2023 State : active Active Devices : 4 Working Devices : 4 Failed Devices : 0 Spare Devices : 0 Layout : near=2 Chunk Size : 512K Consistency Policy : resync Name : localhost:0 (local to host localhost) UUID : dfea21e4:7f4a5550:44379f9b:5b332b40 Events : 18 Number Major Minor RaidDevice State 0 8 16 0 active sync set-A /dev/sdb 1 8 32 1 active sync set-B /dev/sdc 2 8 48 2 active sync set-A /dev/sdd 3 8 64 3 active sync set-B /dev/sde
开机自动挂载
[root@localhost ~]# echo "/dev/md0 /RAID ext4 defaults 0 0" >> /etc/fstab [root@localhost ~]# reboot
[root@localhost ~]# dd < /dev/zero > file bs=256M count=4 记录了4+0 的读入 记录了4+0 的写出 1073741824字节(1.1 GB)已复制,3.80257 秒,282 MB/秒
在确认有一块物理硬盘设备出现损坏而不能继续正常使用后,应该使用mdadm命令将其移除,然后查看RAID磁盘阵列的状态,可以发现状态已经改变。
[root@localhost ~]# mdadm /dev/md0 -f /dev/sdb mdadm: set /dev/sdb faulty in /dev/md0 [root@localhost ~]# mdadm -D /dev/md0 /dev/md0: Version : 1.2 Creation Time : Sun Dec 24 14:40:25 2023 Raid Level : raid10 Array Size : 41908224 (39.97 GiB 42.91 GB) Used Dev Size : 20954112 (19.98 GiB 21.46 GB) Raid Devices : 4 Total Devices : 4 Persistence : Superblock is persistent Update Time : Sun Dec 24 15:37:11 2023 State : clean, degraded Active Devices : 3 Working Devices : 3 Failed Devices : 1 Spare Devices : 0 Layout : near=2 Chunk Size : 512K Consistency Policy : resync Name : localhost:0 (local to host localhost) UUID : dfea21e4:7f4a5550:44379f9b:5b332b40 Events : 20 Number Major Minor RaidDevice State - 0 0 0 removed 1 8 32 1 active sync set-B /dev/sdc 2 8 48 2 active sync set-A /dev/sdd 3 8 64 3 active sync set-B /dev/sde 0 8 16 - faulty /dev/sdb
在RAID 10级别的磁盘阵列中,当RAID 1磁盘阵列中存在一个故障盘时并不影响RAID 10磁盘阵列的使用。当购买了新的硬盘设备后再使用mdadm命令来予以替换即可,在此期间我们可以在/RAID目录中正常地创建或删除文件。由于我们是在虚拟机中模拟硬盘,所以先重启系统,然后再把新的硬盘添加到RAID磁盘阵列中。
先热移除sdb
再添加sdb
[root@localhost ~]# mdadm /dev/md0 -r /dev/sdb mdadm: hot removed /dev/sdb from /dev/md0 [root@localhost ~]# mdadm /dev/md0 -a /dev/sdb mdadm: added /dev/sdb [root@localhost ~]# mdadm -D /dev/md0 /dev/md0: Version : 1.2 Creation Time : Sun Dec 24 14:40:25 2023 Raid Level : raid10 Array Size : 41908224 (39.97 GiB 42.91 GB) Used Dev Size : 20954112 (19.98 GiB 21.46 GB) Raid Devices : 4 Total Devices : 4 Persistence : Superblock is persistent Update Time : Sun Dec 24 15:44:50 2023 State : clean, degraded, recovering Active Devices : 3 Working Devices : 4 Failed Devices : 0 Spare Devices : 1 Layout : near=2 Chunk Size : 512K Consistency Policy : resync Rebuild Status : 26% complete Name : localhost:0 (local to host localhost) UUID : dfea21e4:7f4a5550:44379f9b:5b332b40 Events : 27 Number Major Minor RaidDevice State 4 8 16 0 spare rebuilding /dev/sdb 1 8 32 1 active sync set-B /dev/sdc 2 8 48 2 active sync set-A /dev/sdd 3 8 64 3 active sync set-B /dev/sde
[root@localhost ~]# echo "/dev/md0 /mnt/RAID ext4 defaults 0 0" >> /etc/fstab [root@localhost ~]# mount /dev/md0 /mnt/RAID #查看是否修复成功 [root@localhost ~]# df -h 文件系统 容量 已用 可用 已用% 挂载点 devtmpfs 1.9G 0 1.9G 0% /dev tmpfs 1.9G 0 1.9G 0% /dev/shm tmpfs 1.9G 12M 1.9G 1% /run tmpfs 1.9G 0 1.9G 0% /sys/fs/cgroup /dev/mapper/centos-root 17G 3.0G 15G 18% / /dev/md0 40G 49M 38G 1% /RAID /dev/sda1 1014M 151M 864M 15% /boot tmpfs 378M 0 378M 0% /run/user/0 [root@localhost ~]# lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda 8:0 0 20G 0 disk ├─sda1 8:1 0 1G 0 part /boot └─sda2 8:2 0 19G 0 part ├─centos-root 253:0 0 17G 0 lvm / └─centos-swap 253:1 0 2G 0 lvm [SWAP] sdb 8:16 0 20G 0 disk └─md0 9:0 0 40G 0 raid10 /mnt/RAID sdc 8:32 0 20G 0 disk └─md0 9:0 0 40G 0 raid10 /mnt/RAID sdd 8:48 0 20G 0 disk └─md0 9:0 0 40G 0 raid10 /mnt/RAID sde 8:64 0 20G 0 disk └─md0 9:0 0 40G 0 raid10 /mnt/RAID sr0 11:0 1 4.4G 0 rom
关闭RAID阵列
[root@localhost ~]# mdadm -S /dev/md0 #必须清除成员磁盘当中阵列的超级块信息,这一步很重要!否则开机会重新做RAID # 若显示如下信息 mdadm: Cannot get exclusive access to /dev/md0:Perhaps a running process, mounted filesystem or active volume group? 解决方案: fuser -vm /dev/md0 用户 进程号 权限 命令 /dev/md0: root kernel mount /mnt/RAID root 1335 ..c.. zsh kill -9 1335 df -h /dev/md0 40G 1.1G 37G 3% /mnt/RAID umount /dev/md0 [root@localhost ~]# mdadm --zero-superblock /dev/sd[b-e] #取消开机自动挂载,干掉那一行 [root@localhost ~]# vim /etc/fstab 删除有md0那一行(很重要,没有这个磁盘或者目录,无法正常开机)
LINUX下彻底关闭某个RAID磁盘阵列
1、查看RAID磁盘阵列信息,确认要关闭哪个。(比如[raid10])
[root@localhost ~]# cat /proc/mdstat Personalities : [raid10] md0 : active raid10 sdb[4] sdc[1] sde[3] sdd[2] 41908224 blocks super 1.2 512K chunks 2 near-copies [4/4] [UUUU] unused devices: <none>
2、卸载md0这个阵列的挂载点:
[root@localhost ~]# umount /RAID
3、停止md0这个阵列,并释放与该阵列相关的所有资源:
[root@localhost ~]# mdadm -S /dev/md0 mdadm: stopped /dev/md0
注意:如果在停止md0的阵列前,却没有把它卸载(umount)掉,会出现如下提示:
[root@localhost ~]# mdadm -S /dev/md0 mdadm: Cannot get exclusive access to /dev/md0:Perhaps a running process, mounted filesystem or active volume group?
4、清除成员磁盘当中阵列的超级块信息,这一步很重要!
[root@localhost ~]# mdadm --zero-superblock /dev/sd[b-e]
5、删除或注释/etc/fstab上的挂载信息
vim /etc/fstab
6、删除或注释/etc/mdadm.conf对应的RAID信息:
vim /etc/mdadm.conf
7、如果做完上面所有的操作后,发现/dev/下还有md0这个设备文件存在,直接rm -f /dev/md0即可
rm -rf /dev/md0
注意:还原快照先
部署RAID 5磁盘阵列时,需要用到4块硬盘。现在创建一个RAID 5磁盘阵列+备份盘。
[root@localhost ~]# mdadm -Cv /dev/md0 -n 3 -l 5 -x 1 /dev/sdb /dev/sdc /dev/sdd /dev/sde 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/md0 started. #参数-n 3代表创建这个RAID 5磁盘阵列所需的硬盘数,参数-l 5代表RAID的级别,而参数-x 1则代表有一块备份盘。当查看/dev/md0(即RAID 5磁盘阵列的名称)磁盘阵列的时候就能看到有一块备份盘在等待中了。
[root@localhost ~]# mdadm -D /dev/md0 /dev/md0: Version : 1.2 Creation Time : Sun Dec 24 16:46:45 2023 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 : Sun Dec 24 16:48:31 2023 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:0 (local to host localhost) UUID : ef77d022:cb8db5f6:6d692ea0:a84f7525 Events : 18 Number Major Minor RaidDevice State 0 8 16 0 active sync /dev/sdb 1 8 32 1 active sync /dev/sdc 4 8 48 2 active sync /dev/sdd 3 8 64 - spare /dev/sde
将部署好的RAID 5磁盘阵列格式化为ext4文件,然后挂载到目录上,之后就可以使用了。
[root@localhost ~]# mkfs.ext4 /dev/md0 mke2fs 1.42.9 (28-Dec-2013) 文件系统标签= OS type: Linux 块大小=4096 (log=2) 分块大小=4096 (log=2) Stride=128 blocks, Stripe width=256 blocks 2621440 inodes, 10477056 blocks 523852 blocks (5.00%) reserved for the super user 第一个数据块=0 Maximum filesystem blocks=2157969408 320 block groups 32768 blocks per group, 32768 fragments per group 8192 inodes per group Superblock backups stored on blocks: 32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208, 4096000, 7962624 Allocating group tables: 完成 正在写入inode表: 完成 Creating journal (32768 blocks): 完成 Writing superblocks and filesystem accounting information: 完成
[root@localhost ~]# echo "/dev/md0 /mnt/RAID ext4 defaults 0 0" >> /etc/fstab [root@localhost ~]# mkdir /mnt/RAID [root@localhost ~]# mount /dev/md0 /mnt/RAID [root@localhost ~]# df -h 文件系统 容量 已用 可用 已用% 挂载点 devtmpfs 1.9G 0 1.9G 0% /dev tmpfs 1.9G 0 1.9G 0% /dev/shm tmpfs 1.9G 12M 1.9G 1% /run tmpfs 1.9G 0 1.9G 0% /sys/fs/cgroup /dev/mapper/centos-root 17G 2.0G 16G 12% / /dev/sda1 1014M 151M 864M 15% /boot tmpfs 378M 0 378M 0% /run/user/0 /dev/md0 40G 49M 38G 1% /mnt/RAID [root@localhost ~]# lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda 8:0 0 20G 0 disk ├─sda1 8:1 0 1G 0 part /boot └─sda2 8:2 0 19G 0 part ├─centos-root 253:0 0 17G 0 lvm / └─centos-swap 253:1 0 2G 0 lvm [SWAP] sdb 8:16 0 20G 0 disk └─md0 9:0 0 40G 0 raid5 /mnt/RAID sdc 8:32 0 20G 0 disk └─md0 9:0 0 40G 0 raid5 /mnt/RAID sdd 8:48 0 20G 0 disk └─md0 9:0 0 40G 0 raid5 /mnt/RAID sde 8:64 0 20G 0 disk └─md0 9:0 0 40G 0 raid5 /mnt/RAID sr0 11:0 1 4.4G 0 rom
把硬盘设备/dev/sdb移出磁盘阵列,然后迅速查看/dev/md0磁盘阵列的状态
[root@localhost ~]# mdadm /dev/md0 -f /dev/sdb mdadm: set /dev/sdb faulty in /dev/md0 [root@localhost ~]# mdadm -D /dev/md0 /dev/md0: Version : 1.2 Creation Time : Sun Dec 24 16:46:45 2023 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 : Sun Dec 24 18:28:52 2023 State : clean, degraded, recovering Active Devices : 2 Working Devices : 3 Failed Devices : 1 Spare Devices : 1 Layout : left-symmetric Chunk Size : 512K Consistency Policy : resync Rebuild Status : 10% complete Name : localhost:0 (local to host localhost) UUID : ef77d022:cb8db5f6:6d692ea0:a84f7525 Events : 23 Number Major Minor RaidDevice State 3 8 64 0 spare rebuilding /dev/sde 1 8 32 1 active sync /dev/sdc 4 8 48 2 active sync /dev/sdd 0 8 16 - faulty /dev/sdb