今天给伙伴们分享一下Linux 磁盘管理-RAID磁盘冗余阵列,希望看了有所收获。
我是公众号「想吃西红柿」「云原生运维实战派」作者,对云原生运维感兴趣,也保持时刻学习,后续会分享工作中用到的运维技术,在运维的路上得到支持和共同进步!
如果伙伴们看了文档觉得有用,欢迎大家关注我的公众号,获取相关文档。爱运维,爱生活。
RAID(Redundant Array of Independent Disks,独立冗余磁盘阵列)技术方案的特性,并通过实际部署RAID 10、RAID 5+备份盘等方案来更直观地查看RAID的强大效果,以便进一步满足生产环境对硬盘设备的IO读写速度和数据冗余备份机制的需求。同时,考虑到用户可能会动态调整存储资源,
-
近年来,CPU的处理性能保持着高速增长。2017年,Intel公司发布了i9-7980XE处理器芯片,率先让家用电脑达到了18核心36线程。2020年末,AMD公司又推出了“线程撕裂者”系统处理器3990X,家用电脑自此也可以轻松驾驭64核心128线程的处理器小怪兽了。但与此同时,硬盘设备的性能提升却不是很大,逐渐成为当代计算机整体性能的瓶颈。而且,由于硬盘设备需要进行持续、频繁、大量的IO操作,相较于其他设备,其损坏几率也大幅增加,导致重要数据丢失的几率也随之增加。
-
硬盘设备是计算机中较容易出现故障的元器件之一,加之由于其需要存储数据的特殊性质,不能像CPU、内存、电源甚至主板那样在出现故障后更换新的就好,所以在生产环境中一定要未雨绸缪,提前做好数据的冗余及异地备份等工作。
-
1988年,美国加利福尼亚大学伯克利分校首次提出并定义了RAID技术的概念。RAID技术通过把多个硬盘设备组合成一个容量更大、安全性更好的磁盘阵列,并把数据切割成多个区段后分别存放在各个不同的物理硬盘设备上,然后利用分散读写技术来提升磁盘阵列整体的性能,同时把多个重要数据的副本同步到不同的物理硬盘设备上,从而起到了非常好的数据冗余备份效果。
-
任何事物都有它的两面性。RAID技术确实具有非常好的数据冗余备份功能,但是它也相应地提高了成本支出。就像原本我们只有一个电话本,但是为了避免遗失,我们把联系人号码信息写成了两份,自然要为此多买一个电话本,这也就相应地提升了成本支出。RAID技术的设计初衷是减少因为采购硬盘设备带来的费用支出,但是与数据本身的价值相比较,现代企业更看重的则是RAID技术所具备的冗余备份机制以及带来的硬盘吞吐量的提升。也就是说,RAID不仅降低了硬盘设备损坏后丢失数据的几率,还提升了硬盘设备的读写速度,所以它在绝大多数运营商或大中型企业中得到了广泛部署和应用。
-
出于成本和技术方面的考虑,需要针对不同的需求在数据可靠性及读写性能上做出权衡,制定出满足各自需求的不同方案。目前已有的RAID磁盘阵列的方案至少有十几种,接下来会详细讲解RAID 0、RAID 1、RAID 5与RAID 10这4种最常见的方案。这4种方案的对比如表7-1所示,其中n代表硬盘总数。
表7-3 RAID 0、1、5、10方案技术对比
RAID级别 | 最少硬盘 | 可用容量 | 读写性能 | 安全性 | 特点 |
---|---|---|---|---|---|
0 | 2 | n | n | 低 | 追求最大容量和速度,任何一块盘损坏,数据全部异常。 |
1 | 2 | n/2 | n | 高 | 追求最大安全性,只要阵列组中有一块硬盘可用,数据不受影响。 |
5 | 3 | n-1 | n-1 | 中 | 在控制成本的前提下,追求硬盘的最大容量、速度及安全性,允许有一块硬盘异常,数据不受影响。 |
10 | 4 | n/2 | n/2 | 高 | 综合RAID1和RAID0的优点,追求硬盘的速度和安全性,允许有一半硬盘异常(不可同组),数据不受影响 |
1、RAID 0
- RAID 0技术把多块物理硬盘设备(至少两块)通过硬件或软件的方式串联在一起,组成一个大的卷组,并将数据依次写入各个物理硬盘中。这样一来,在最理想的状态下,硬盘设备的读写性能会提升数倍,但是若任意一块硬盘发生故障,将导致整个系统的数据都受到破坏。
- 通俗来说,RAID 0技术能够有效地提升硬盘数据的吞吐速度,但是不具备数据备份和错误修复能力。如图1所示,数据被分别写入到不同的硬盘设备中,即硬盘A和硬盘B设备会分别保存数据资料,最终实现提升读取、写入速度的效果。
图1 RAID 0技术示意图
2、RAID 1
-
如果生产环境对硬盘设备的读写速度没有要求,而是希望增加数据的安全性时,就需要用到RAID 1技术了。
-
在图2所示的RAID 1技术示意图中可以看到,它是把两块以上的硬盘设备进行绑定,在写入数据时,是将数据同时写入到多块硬盘设备上(可以将其视为数据的镜像或备份)。当其中某一块硬盘发生故障后,一般会立即自动以热交换的方式来恢复数据的正常使用。
图2 RAID 1技术示意图
-
考虑到在进行写入操作时因硬盘切换带来的开销,因此RAID 1的速度会比RAID 0有微弱地降低。但在读取数据的时候,操作系统可以分别从两块硬盘中读取信息,因此理论读取速度的峰值可以是硬盘数量的倍数。另外,平时只要保证有一块硬盘稳定运行,数据就不会出现损坏的情况,可靠性较高。
-
RAID 1技术虽然十分注重数据的安全性,但是因为是在多块硬盘设备中写入了相同的数据,因此硬盘设备的利用率得以下降。从理论上来说,图2所示的硬盘空间的真实可用率只有50%,由3块硬盘设备组成的RAID 1磁盘阵列的可用率只有33%左右;以此类推。而且,由于需要把数据同时写入到两块以上的硬盘设备,这无疑也在一定程度上增大了系统计算功能的负载。
3、RAID 5
- 如图3所示,RAID5技术是把硬盘设备的数据奇偶校验信息保存到其他硬盘设备中。RAID 5磁盘阵列中数据的奇偶校验信息并不是单独保存到某一块硬盘设备中,而是存储到除自身以外的其他每一块硬盘设备上。这样的好处是,其中任何一设备损坏后不至于出现致命缺陷。
- 图3中Parity部分存放的就是数据的奇偶校验信息。换句话说,就是RAID 5技术实际上没有备份硬盘中的真实数据信息,而是当硬盘设备出现问题后通过奇偶校验信息来尝试重建损坏的数据。RAID这样的技术特性“妥协”地兼顾了硬盘设备的读写速度、数据安全性与存储成本问题。
图3 RAID5技术示意图
- RAID 5最少由3块硬盘组成,使用的是硬盘切割(Disk Striping)技术。相较于RAID 1级别,好处就在于保存的是奇偶校验信息而不是一模一样的文件内容,所以当重复写入某个文件时,RAID 5级别的磁盘阵列组只需要对应一个奇偶校验信息就可以,效率更高,存储成本也会随之降低。
4、RAID 10
-
RAID 5技术是出于硬盘设备的成本问题对读写速度和数据的安全性能有了一定的妥协,但是大部分企业更在乎的是数据本身的价值而非硬盘价格,因此在生产环境中主要使用RAID 10技术。
-
顾名思义,RAID 10技术是RAID 1+RAID 0技术的一个“组合体”。如图4所示,RAID 10技术需要至少4块硬盘来组建,其中先分别两两制作成RAID 1磁盘阵列,以保证数据的安全性;然后再对两个RAID 1磁盘阵列实施RAID 0技术,进一步提高硬盘设备的读写速度。这样从理论上来讲,只要坏的不是同一阵列中的所有硬盘,那么最多可以损坏50%的硬盘设备而不丢失数据。由于RAID 10技术继承了RAID 0的高读写速度和RAID 1的数据安全性,在不考虑成本的情况下RAID 10的性能也超过了RAID 5,因此当前成为广泛使用的一种存储技术。
图4 RAID 10技术示意图
-
由于RAID 10是由RAID 1和RAID 0组成的,因此正确的叫法是“RAID一零”,而不是“RAID十”。
-
仔细查看图4可以发现,RAID 10是先对信息进行分割,然后再两两一组制作镜像。也就是先将RAID 1作为最低级别的组合,然后再使用RAID 0技术将RAID 1磁盘阵列组合到一起,将它们视为“一整块”硬盘。而RAID 01则相反,它是先将硬盘分为两组,然后使用RAID 0作为最低级别的组合,再将这两组RAID 0硬盘通过RAID 1技术组合到一起。
-
RAID 10技术和RAID 01技术的区别非常明显。在RAID 10中,任何一块硬盘损坏都不会影响到数据安全性,其余硬盘均会正常运作。但在RAID 01中,只要有任何一块硬盘损坏,最低级别的RAID 0磁盘阵列马上会停止运作,这可能造成严重隐患。所以RAID 10远比RAID 01常见,很多主板甚至不支持RAID 01。
5、部署磁盘阵列
-
首先,需要在虚拟机中添加4块硬盘设备来制作一个RAID 10磁盘阵列,记得硬盘要用SCSI或SATA接口的类型,大小默认20GB就可以。
-
需要注意的是,一定要记得在关闭系统之后,再在虚拟机中添加硬盘设备,否则可能会因为计算机架构的不同而导致虚拟机系统无法识别新添加的硬盘设备。
-
当前,生产环境中用到的服务器一般都配备RAID阵列卡,学习可以使用mdadm命令在Linux系统中创建和管理软件RAID磁盘阵列,而且它涉及的理论知识和操作过程与生产环境中的完全一致。
1、mdadm 命令创建磁盘阵列
- 用于创建、调整、监控和管理RAID设备,英文全称为“multiple devices admin”,
- 语法格式为“mdadm参数 硬盘名称”。
图5 添加四块硬盘设备
- mdadm命令中的常用参数及作用 软raid 是要依靠操作系统,消耗算力 (cpu) 影响线上的业务 软raid 性能相对较弱,高并发io请求就力不从心
- raid 硬件卡 自带算力cpu,带缓存机制 web 界面 识别机器上所有的硬盘
表7-2 mdadm命令的常用参数和作用
参数 | 作用 |
---|---|
-a | 添加新的磁盘到阵列 |
-n | 指定设备数量 |
-l | 指定RAID级别 |
-C | 创建 |
-v | 显示过程 |
-f | 模拟设备损坏 |
-r | 移除设备 |
-Q | 查看摘要信息 |
-D | 查看详细信息 |
-S | 停止RAID磁盘阵列 |
使用mdadm命令创建RAID 10,名称为“/dev/md0”。
- -C参数代表创建一个RAID阵列卡;
- -v参数显示创建的过程,同时在后面追加一个设备名称/dev/md0,这样/dev/md0就是创建后的RAID磁盘阵列的名称;
- -n 4参数代表使用4块硬盘来部署这个RAID磁盘阵列;
- -l 10参数则代表RAID 10方案;
- 最后再加上4块硬盘设备的名称就搞定了
[root@edenluo.com ~]# mdadm -Cv /dev/md0 -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.
- 初始化过程大约需要1分钟左右,期间可以用-D参数进行查看。也可以用-Q参数查看简要信息:
[root@edenluo.com ~]# mdadm -Q /dev/md0
/dev/md0: 39.97GiB raid10 4 devices, 0 spares. Use mdadm --detail for more detail.
[root@edenluo.com ~]# mdadm -D /dev/md0
/dev/md0:
Version : 1.2
Creation Time : Sun Aug 27 18:35:47 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 Aug 27 18:37:31 2023
State : clean, resyncing
Active Devices : 4
Working Devices : 4
Failed Devices : 0
Spare Devices : 0
Layout : near=2
Chunk Size : 512K
Consistency Policy : resync
Resync Status : 50% complete
Name : student-sys:0 (local to host student-sys)
UUID : 6dacb70c:66bb7f77:5c85ebb6:f4738ca2
Events : 8
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
-
为什么4块20GB大小的硬盘组成的磁盘阵列组,可用空间只有39.97GB呢?
-
这里不得不提到RAID 10技术的原理。它通过两两一组硬盘组成的RAID 1磁盘阵列保证了数据的可靠性,其中每一份数据都会被保存两次,因此导致硬盘存在50%的使用率和50%的冗80GB的硬盘容量也就只有一半了。
-
Resync Status 为100%后把制作好的RAID磁盘阵列格式化为Ext4格式:
[root@edenluo.com ~]# mkfs.ext4 /dev/md0
mke2fs 1.44.3 (10-July-2018)
Creating filesystem with 10477056 4k blocks and 2621440 inodes
Filesystem UUID: d1c68318-a919-4211-b4dc-c4437bcfe9da
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
4096000, 7962624
Allocating group tables: done
Writing inode tables: done
Creating journal (65536 blocks): done
Writing superblocks and filesystem accounting information: done
- 创建挂载点,将硬盘设备进行挂载操作
[root@edenluo.com ~]# mkdir /RAID
[root@edenluo.com ~]# mount /dev/md0 /RAID
[root@edenluo.com ~]# df -h
Filesystem Size Used Avail Use% Mounted on
devtmpfs 969M 0 969M 0% /dev
tmpfs 984M 0 984M 0% /dev/shm
tmpfs 984M 9.6M 975M 1% /run
tmpfs 984M 0 984M 0% /sys/fs/cgroup
/dev/mapper/rhel-root 17G 3.9G 14G 23% /
/dev/sr0 6.7G 6.7G 0 100% /media/cdrom
/dev/sda1 1014M 152M 863M 15% /boot
tmpfs 197M 16K 197M 1% /run/user/42
tmpfs 197M 3.5M 194M 2% /run/user/0
/dev/md0 40G 49M 38G 1% /RAID
- 再来查看/dev/md0磁盘阵列设备的详细信息,确认RAID级别(Raid Level)、阵列大小(Array Size)和总硬盘数(Total Devices)都是否正确:
[root@edenluo.com ~]# mdadm -D /dev/md0
/dev/md0:
Version : 1.2
Creation Time : Wed Jan 13 08:24:58 2021
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 : Thu Jan 14 04:49:57 2021
State : clean
Active Devices : 4
Working Devices : 4
Failed Devices : 0
Spare Devices : 0
Layout : near=2
Chunk Size : 512K
Consistency Policy : resync
Name : localhost.localdomain:0 (local to host edenluo.com)
UUID : 289f501b:3f5f70f9:79189d77:f51ca11a
Events : 17
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
- 如果想让创建好的RAID磁盘阵列能够一直提供服务,不会因每次的重启操作而取消,那么一定要记得将信息添加到/etc/fstab文件中,这样可以确保在每次重启后RAID磁盘阵列都是有效的。
[root@edenluo.com ~]# echo "/dev/md0 /RAID ext4 defaults 0 0" >> /etc/fstab
[root@edenluo.com ~]# cat /etc/fstab
#
# /etc/fstab
# Created by anaconda on Tue Jul 21 05:03:40 2020
#
# Accessible filesystems, by reference, are maintained under '/dev/disk/'.
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info.
#
# After editing this file, run 'systemctl daemon-reload' to update systemd
# units generated from this file.
#
/dev/mapper/rhel-root / xfs defaults 0 0
UUID=2db66eb4-d9c1-4522-8fab-ac074cd3ea0b /boot xfs defaults 0 0
/dev/mapper/rhel-swap swap swap defaults 0 0
/dev/cdrom /media/cdrom iso9660 defaults 0 0
/dev/md0 /RAID ext4 defaults 0 0
- 挂载生效
[root@edenluo.com ~]# mount -a
[root@edenluo.com ~]# df -Th
Filesystem Type Size Used Avail Use% Mounted on
devtmpfs devtmpfs 475M 0 475M 0% /dev
tmpfs tmpfs 487M 0 487M 0% /dev/shm
tmpfs tmpfs 487M 7.8M 479M 2% /run
tmpfs tmpfs 487M 0 487M 0% /sys/fs/cgroup
/dev/mapper/centos-root xfs 47G 1.9G 46G 4% /
/dev/sda1 xfs 1014M 169M 846M 17% /boot
tmpfs tmpfs 98M 0 98M 0% /run/user/0
/dev/md0 xfs 40G 33M 40G 1% /raid
2、损坏磁盘阵列及修复
- 确认有一块物理硬盘设备出现损坏而不能再继续正常使用后,应该使用mdadm命令将其移除,然后查看RAID磁盘阵列的状态,可以发现状态已经改变:
[root@edenluo.com ~]# mdadm /dev/md0 -f /dev/sdb
mdadm: set /dev/sdb faulty in /dev/md0
[root@edenluo.com ~]# mdadm -D /dev/md0
/dev/md0:
Version : 1.2
Creation Time : Thu Jan 14 05:12:20 2021
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 : Thu Jan 14 05:33:06 2021
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.localdomain:0 (local to host localhost.localdomain)
UUID : 81ee0668:7627c733:0b170c41:cd12f376
Events : 19
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
- 使用的-f参数是让硬盘模拟损坏的效果。为了能够彻底地将故障盘移除,还要再执行一步操作:
[root@edenluo.com ~]# mdadm /dev/md0 -r /dev/sdb
mdadm: hot removed /dev/sdb from /dev/md0
- 在RAID 10级别的磁盘阵列中,当RAID 1磁盘阵列中存在一个故障盘时并不影响RAID 10磁盘阵列的使用。在此期间可以在/RAID目录中正常地创建或删除文件。
- 由于是在虚拟机中模拟硬盘,所以先重启系统,然后再把新的硬盘添加到RAID磁盘阵列中。
- 更换硬盘后再次使用-a参数进行添加操作,系统默认会自动开始数据的同步工作。
- 使用-D参数即可看到整个过程和进度(用百分比表示):
[root@edenluo.com ~]# mdadm /dev/md0 -a /dev/sdb
mdadm: added /dev/sdb
[root@edenluo.com ~]# mdadm -D /dev/md0
/dev/md0:
Version : 1.2
Creation Time : Thu Jan 14 05:12:20 2021
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 : Thu Jan 14 05:37:32 2021
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 : 77% complete
Name : localhost.localdomain:0 (local to host localhost.localdomain)
UUID : 81ee0668:7627c733:0b170c41:cd12f376
Events : 34
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
- 公司机房的阵列卡上有30多块硬盘呢,就算知道/dev/sdb硬盘发生了故障,也不知道该替换哪一块啊,要是错拔了好设备那就麻烦了。
- ”其实不用担心,因为一旦硬盘发生故障,服务器上相应的指示灯也会变成红灯(或者变成一直闪烁的黄灯),如图6所示。
6、磁盘阵列+备份盘
-
RAID 10磁盘阵列中最多允许50%的硬盘设备发生故障,但是存在这样一种极端情况,即同一RAID 1磁盘阵列中的硬盘设备若全部损坏,也会导致数据丢失。
-
在这样的情况下,该怎么办呢?其实,完全可以使用RAID备份盘技术来预防这类事故。该技术的核心理念就是准备一块足够大的硬盘,这块硬盘平时处于闲置状态,一旦RAID磁盘阵列中有硬盘出现故障后则会马上自动顶替上去。
-
将虚拟机还原到初始状态。另外,由于刚才已经演示了RAID 10磁盘阵列的部署方法,现在来看一下RAID 5的部署效果。部署RAID 5磁盘阵列时,至少需要用到3块硬盘,还需要再加一块备份硬盘(也叫热备盘),所以总计需要在虚拟机中模拟4块硬盘设备,如图7所示。
图7 重置虚拟机后,再添加四块硬盘设备
- 现在创建一个RAID 5磁盘阵列+备份盘。在下面的命令中,
- 参数-n 3代表创建这个RAID 5磁盘阵列所需的硬盘数,
- 参数-l 5代表RAID的级别,
- 参数-x 1则代表有一块备份盘。
- 当查看/dev/md0(即RAID 5磁盘阵列的名称)磁盘阵列的时候,就能看到有一块备份盘在等待中了。
[root@edenluo.com ~]# 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.
[root@edenluo.com ~]# mdadm -D /dev/md0
/dev/md0:
Version : 1.2
Creation Time : Thu Jan 14 06:12:32 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 : Thu Jan 14 06:14:16 2021
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 : cf0c34b6:3b08edfb:85dfa14f:e2bffc1e
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@edenluo.com ~]# mkfs.ext4 /dev/md0
mke2fs 1.44.3 (10-July-2018)
Creating filesystem with 10477056 4k blocks and 2621440 inodes
Filesystem UUID: ff016386-1126-4799-8a5b-d716242276ec
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
4096000, 7962624
Allocating group tables: done
Writing inode tables: done
Creating journal (65536 blocks): done
Writing superblocks and filesystem accounting information: done
[root@edenluo.com ~]# mkdir /RAID
[root@edenluo.com ~]# echo "/dev/md0 /RAID ext4 defaults 0 0" >> /etc/fstab
由3块硬盘组成的RAID 5磁盘阵列,其对应的可用空间是n-1,也就是40GB。热备盘的空间不计算进来,平时完全就是在“睡觉”,只有在意外出现时才会开始工作。
[root@edenluo.com ~]# mount -a
[root@edenluo.com ~]# df -h
Filesystem Size Used Avail Use% Mounted on
devtmpfs 969M 0 969M 0% /dev
tmpfs 984M 0 984M 0% /dev/shm
tmpfs 984M 9.6M 974M 1% /run
tmpfs 984M 0 984M 0% /sys/fs/cgroup
/dev/mapper/rhel-root 17G 3.9G 14G 23% /
/dev/sr0 6.7G 6.7G 0 100% /media/cdrom
/dev/sda1 1014M 152M 863M 15% /boot
tmpfs 197M 16K 197M 1% /run/user/42
tmpfs 197M 3.5M 194M 2% /run/user/0
/dev/md0 40G 49M 38G 1% /RAID
- 最后是见证奇迹的时刻!我们再次把硬盘设备/dev/sdb移出磁盘阵列,然后迅速查看/dev/md0磁盘阵列的状态,就会发现备份盘已经被自动顶替上去并开始了数据同步。
- RAID中的这种备份盘技术非常实用,可以在保证RAID磁盘阵列数据安全性的基础上进一步提高数据可靠性。所以,如果公司不差钱的话,还是买上一块备份盘以防万一。
[root@edenluo.com ~]# mdadm /dev/md0 -f /dev/sdb
mdadm: set /dev/sdb faulty in /dev/md0
[root@edenluo.com ~]# mdadm -D /dev/md0
/dev/md0:
Version : 1.2
Creation Time : Thu Jan 14 06:12:32 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 : Thu Jan 14 06:24:38 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:0 (local to host localhost.localdomain)
UUID : cf0c34b6:3b08edfb:85dfa14f:e2bffc1e
Events : 37
Number Major Minor RaidDevice State
3 8 64 0 active sync /dev/sde
1 8 32 1 active sync /dev/sdc
4 8 48 2 active sync /dev/sdd
0 8 16 - faulty /dev/sdb
注意:
- 验证/RAID目录中文件的信息,是否会出现丢失的情况。
- 如果后面想再添加一块热备盘进来,使用-a参数就可以了。
7、删除磁盘阵列
- 首先,需要将所有的磁盘都设置成停用状态:
[root@edenluo.com ~]# umount /RAID
[root@edenluo.com ~]# mdadm /dev/md0 -f /dev/sdc
mdadm: set /dev/sdc faulty in /dev/md0
[root@edenluo.com ~]# mdadm /dev/md0 -f /dev/sdd
mdadm: set /dev/sdd faulty in /dev/md0
[root@edenluo.com ~]# mdadm /dev/md0 -f /dev/sde
mdadm: set /dev/sde faulty in /dev/md0
- 然后再逐一移除出去
[root@edenluo.com ~]# mdadm /dev/md0 -r /dev/sdb
mdadm: hot removed /dev/sdb from /dev/md0
[root@edenluo.com ~]# mdadm /dev/md0 -r /dev/sdc
mdadm: hot removed /dev/sdc from /dev/md0
[root@edenluo.com ~]# mdadm /dev/md0 -r /dev/sdd
mdadm: hot removed /dev/sdd from /dev/md0
[root@edenluo.com ~]# mdadm /dev/md0 -r /dev/sde
mdadm: hot removed /dev/sde from /dev/md0
-
也可以用“mdadm /dev/md0 -f /dev/sdb -r /dev/sdb”这一条命令搞定。但是,在早期版本的服务器中,这条命令中的-f和-r不能一起使用,因此保守起见,还是一步步地操作。
-
将所有的硬盘都移除后,再来查看磁盘阵列组的状态:
[root@edenluo.com ~]# mdadm -D /dev/md0
/dev/md0:
Version : 1.2
Creation Time : Fri Jan 15 08:53: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 : 0
Persistence : Superblock is persistent
Update Time : Fri Jan 15 09:00:57 2021
State : clean, FAILED
Active Devices : 0
Failed Devices : 0
Spare Devices : 0
Layout : left-symmetric
Chunk Size : 512K
Consistency Policy : resync
Number Major Minor RaidDevice State
- 0 0 0 removed
- 0 0 1 removed
- 0 0 2 removed
- 停用整个RAID磁盘阵列完成删除
[root@edenluo.com ~]# mdadm --stop /dev/md0 #-S
mdadm: stopped /dev/md0
[root@edenluo.com ~]# ls /dev/md0
ls: cannot access '/dev/md0': No such file or directory
- 有一些老版本的服务器中,在使用–stop参数后依然会保留设备文件。这很明显是没有处理干净,执行清理环境
[root@edenluo.com ~]# mdadm --remove /dev/md0
如果对伙伴们有帮助,感谢关注支持**「想吃西红柿」「云原生运维实战派」**后续会有更多实用的运维技术分享给伙伴们,您的关注就是我最大的成就。