前言
Raid磁盘阵列简单的说就是按照不同的需求将多块硬盘组合在一起。目前常见raid组合方式有raid0、raid1、raid5、raid10,关于这几种模式的区别就不多做介绍。
Raid实现方式也可以分为硬件raid(使用硬盘 raid 阵列卡或者硬盘柜),软件raid(在操作系统上安装软件去控制硬盘实现raid模式),软件raid与硬件raid各有各的优劣。
如果你不喜欢折腾可以选硬件raid,但你都找到这篇文章应该已经确定要做软件raid了,作为一名垃圾佬看到稍好点的raid阵列卡有点小贵,而且cpu确实有点性能过剩了应该利用起来,我这里要介绍的就是软件raid。
准备工作
关于实体服务器raid调试:我在家翻来覆去勉强凑齐了4个USB存储设备,2个MP3,1张tf卡配读卡器,1个U盘,这4个设备虽然容量不同,但依旧可以组件raid,组建raid时容量是按照最小容量而去叠加的,例如你要组件raid0,你使用2个存储设备1个8G1个16G,那容量就按照最小的8G来叠加,将你的16G容量砍到8G,然后总容量为8G+8G=16G。如果你凑不齐存储设备或者硬盘也问题不大,可以使用虚拟机创建虚拟磁盘调试。
安装raid软件
查看系统是否已经安装软件:
[root@vm ~]# rpm -qa|grep mdadm
mdadm-4.1-9.el7_9.x86_64
如果未安装执行:
yum -yinstallmdadm
执行 mdadm 命令时常用的参数参考表格
参数功能-a检测设备名称-n指定设备数量-l指定RAID等级-C创建-v显示过程-f模拟设备损坏-r移除设备-a增加设备-Q查看摘要信息-D查看详细信息-S停止
先查看所有的磁盘列表:
fdisk-l
我就用这4个做演示,由于我这里最小的盘只有 7780MB,所以另外3个盘的容量都会在raid的搭建中容量被砍到7780MB,当然了正常情况下搭建raid肯定都是使用同型号同容量的硬盘。
这里温馨提示:在组建 RAID 前如果硬盘有重要数据记得提前备份!!
在搭建阵列时会格式化硬盘
记得备份数据!!!
记得备份数据!!!
记得备份数据!!!
RAID0搭建
首先我们执行命令:
mdadm-C /dev/md0 -ayes-l0-n2 /dev/sdd /dev/sde
这条命令的意思是
- 使用 mdadm
- 创建(-C)
- raid设备“/dev/md0” (/dev/md0 -a yes)
- 等级为raid0 (-l 0)
- 使用硬盘数量为2 (-n 2)
- 使用设备“/dev/sdd”与“/dev/sde”
这里的raid设备名称必须要为:“/dev/md数字”这样的格式,其他的名称无法正常创建,因为我已经试过了不行。
在这里输入y确定创建
现在我们已经创建好了一个raid0设备,可以输入命令:
fdisk-l
查看
比之前多了一个设备“/dev/md0”,这个16.1GB就是两个硬盘叠加的容量
我们也可以使用命令:
mdadm-D /dev/md0
去查看raid的详细信息
[root@localhost ~]# mdadm -D /dev/md0
/dev/md0:
Version :1.2
Creation Time : Thu Oct 1218:58:10 2023
Raid Level : raid0 # raid阵列级别为raid0
Array Size :15691264(14.96 GiB 16.07 GB)# raid阵列总容量
Raid Devices :2# raid阵列成员个数
Total Devices :2# raid阵列中下属成员的总计个数(因为还有冗余硬盘或分区)
Persistence : Superblock is persistent
Update Time : Thu Oct 1218:58:10 2023
State : clean # raid状态,(clean 表示正常,degraded 表示有问题,recovering 表示正在恢复或构建)
Active Devices :2# 被激活的 RAID 成员个数
Working Devices :2# 正常工作的 RAID 成员个数
Failed Devices :0# 出问题的 RAID 成员
Spare Devices :0# 备用 RAID 成员个数(会自动替换出现问题的成员)
Chunk Size : 512K
Consistency Policy : none
Name : localhost.localdomain:0 (local to host localhost.localdomain)
UUID : 8ffa4b84:1694187c:96d59d99:5ae938b2 #RAID 的 UUID 值,在系统中是唯一的
Events :0
Number Major Minor RaidDevice State
08480 active sync /dev/sdd
18641 active sync /dev/sde
然后我们在使用前将创建的raid设备格式化为ext4系统 (你也可以格式化为其他的系统):
mkfs-t ext4 /dev/md0
然后就可以将硬盘挂载到指定的空白目录下,例如我挂载到了/test 下:
mount /dev/md0 /test
现在还没结束,我在创建raid设备“/dev/md0”后重启系统,发现名称变化了,这就很不利于我们设置开机自动挂载
还需要创建 mdadm 的配置文件,创建 mdadm 文件就是为了每次重启系统时自动加载RAID
# 指定 RAID 设备echo"DEVICE /dev/sdd /dev/sde">> /etc/mdadm.conf
# 将 RAID0 的 UUID 追加到该目录mdadm-Ds /dev/md0 >> /etc/mdadm.conf
这配置完成后每次启动系统raid设备名称就不会改变了,要记得当你删除raid设备的时候这边的配置也需要修改。
这里值得一提的是我用usb设备组建的raid阵列在开机时有概率加载不出来,所以会导致系统挂载失败,也有可能是因为部分设备为usb2.0的原因,但是我用虚拟硬盘或者实体硬盘测试开机自动加载阵列以及开机自动挂载都是没有问题的,最后就是将你的raid设备添加到开机自动挂载中,修改你的 “/etc/fstab” 文件,添加自动挂载:
#你的设备名称 #你要挂载的目录 #硬盘的格式 #默认 #默认 #默认
/dev/md0 /data ext4 defaults 00
RAID取消搭建
在搭建raid1前可以先熟悉一下如何取消搭建raid,不需要可以直接跳过这步开始搭建raid1。
如果raid设备还挂载在某个目录下可以使用取消挂载命令:
umount /dev/md0
取消挂载后执行取消raid搭建命令:
mdadm-S /dev/md0
不要忘了清空 “/etc/mdadm.conf” 中的内容哦
RAID1搭建
使用其中两个设备 “/dev/sdd /dev/sde” 组合创建raid1“/dev/md1”
mdadm-C /dev/md1 -ayes-l1-n2 /dev/sdd /dev/sde
别忘了更新 mdadm 配置文件:
# 指定 RAID 设备echo"DEVICE /dev/sdd /dev/sde">> /etc/mdadm.conf
# 将 RAID1 的 UUID 追加到该目录mdadm-Ds /dev/md1 >> /etc/mdadm.conf
老样子,我们先格式化raid设备
mkfs-t ext4 /dev/md1
然后挂载到你指定的目录:
mount /dev/md1 /test
我们可以试着往这个目录下放入一些文件
没问题,接下来我们来模拟硬盘损坏的情况,可以使用命令行模拟:
mdadm /dev/md1 -f /dev/sdd
但我要符合真实情况,所以我直接拔掉其中一个usb设备来模拟硬盘损坏,*(反正这老设备坏了也不心疼)*
在模拟之前先记录一下raid的状态:
[root@localhost ~]# mdadm -D /dev/md1
/dev/md1:
Version :1.2
Creation Time : Thu Oct 1220:38:13 2023
Raid Level : raid1
Array Size :7592960(7.24 GiB 7.78 GB)
Used Dev Size :7592960(7.24 GiB 7.78 GB)
Raid Devices :2
Total Devices :2
Persistence : Superblock is persistent
Update Time : Thu Oct 1220:40:03 2023
State : active, resyncing
Active Devices :2
Working Devices :2
Failed Devices :0
Spare Devices :0
Consistency Policy : resync #同步状态,一个磁盘读写,一个磁盘同步
Resync Status :3% complete
Name : localhost.localdomain:1 (local to host localhost.localdomain)
UUID : aa61be45:e49f79cf:02db0e38:5e14e548
Events :15
Number Major Minor RaidDevice State
08480 active sync /dev/sdd
18641 active sync /dev/sde
现在我已经拔掉了其中的一个设备 “/dev/sde”,先看看挂载目录下的文件都还在不,
还好,都还在,让我们再看一下raid的状态
[root@localhost ~]# mdadm -D /dev/md1
/dev/md1:
Version :1.2
Creation Time : Thu Oct 1220:38:13 2023
Raid Level : raid1
Array Size :7592960(7.24 GiB 7.78 GB)
Used Dev Size :7592960(7.24 GiB 7.78 GB)
Raid Devices :2
Total Devices :1
Persistence : Superblock is persistent
Update Time : Thu Oct 1220:43:22 2023
State : active, degraded
Active Devices :1
Working Devices :1
Failed Devices :0
Spare Devices :0
Consistency Policy : resync
Name : localhost.localdomain:1 (local to host localhost.localdomain)
UUID : aa61be45:e49f79cf:02db0e38:5e14e548
Events :48
Number Major Minor RaidDevice State
08480 active sync /dev/sdd
- 001 removed
执行命令后我发现和别人模拟损坏的结果好像有点不太一样
不过还是先继续往下个步骤进行,先移除不能识别的磁盘:
mdadm /dev/md1 -f /dev/sde
额。。但是我这不按照套路来,看样子是自动帮我移除了不能识别的磁盘:
[root@localhost ~]# mdadm /dev/md1 -r /dev/sde
mdadm: stat failed for /dev/sde: No such file or directory
问题不大,只要记住了就好,如果损坏的硬盘还没移除那就先执行移除。。
接下来模拟替换坏硬盘:
[root@localhost ~]# mdadm /dev/md1 -a /dev/sdc
mdadm: added /dev/sdc
完成后再查看raid状态,看样子在同步中,进度到了8%:
[root@localhost ~]# mdadm -D /dev/md1
/dev/md1:
Version :1.2
Creation Time : Thu Oct 1220:38:13 2023
Raid Level : raid1
Array Size :7592960(7.24 GiB 7.78 GB)
Used Dev Size :7592960(7.24 GiB 7.78 GB)
Raid Devices :2
Total Devices :2
Persistence : Superblock is persistent
Update Time : Thu Oct 1221:09:56 2023
State : clean, degraded, recovering
Active Devices :1
Working Devices :2
Failed Devices :0
Spare Devices :1
Consistency Policy : resync
Rebuild Status :8% complete
Name : localhost.localdomain:1 (local to host localhost.localdomain)
UUID : aa61be45:e49f79cf:02db0e38:5e14e548
Events :250
Number Major Minor RaidDevice State
08480 active sync /dev/sdd
28321 spare rebuilding /dev/sdc
这个是同步完成的状态:
[root@localhost ~]# mdadm -D /dev/md1
/dev/md1:
Version :1.2
Creation Time : Thu Oct 1220:38:13 2023
Raid Level : raid1
Array Size :7592960(7.24 GiB 7.78 GB)
Used Dev Size :7592960(7.24 GiB 7.78 GB)
Raid Devices :2
Total Devices :2
Persistence : Superblock is persistent
Update Time : Thu Oct 1221:30:33 2023
State : clean
Active Devices :2
Working Devices :2
Failed Devices :0
Spare Devices :0
Consistency Policy : resync
Name : localhost.localdomain:1 (local to host localhost.localdomain)
UUID : aa61be45:e49f79cf:02db0e38:5e14e548
Events :342
Number Major Minor RaidDevice State
08480 active sync /dev/sdd
28321 active sync /dev/sdc
RAID5搭建
我使用“/dev/sdb”、“/dev/sdc”、“/dev/sdd”创建了一个raid5阵列“/dev/md5”
mdadm-C /dev/md5 -ayes-l5-n3 /dev/sdb /dev/sdc /dev/sdd
别忘了更新 mdadm 配置文件:
# 指定 RAID 设备echo"DEVICE /dev/sdb /dev/sdc /dev/sdd">> /etc/mdadm.conf
# 将 RAID5 的 UUID 追加到该目录mdadm-Ds /dev/md5 >> /etc/mdadm.conf
老样子,我们先格式化raid设备
mkfs-t ext4 /dev/md5
然后挂载到你指定的目录:
mount /dev/md5 /test
还是一样往里面写入数据
我们查看一下raid设备状态:
[root@localhost /]# mdadm -D /dev/md5
/dev/md5:
Version :1.2
Creation Time : Fri Oct 1313:45:22 2023
Raid Level : raid5
Array Size :15185920(14.48 GiB 15.55 GB)
Used Dev Size :7592960(7.24 GiB 7.78 GB)
Raid Devices :3
Total Devices :3
Persistence : Superblock is persistent
Update Time : Fri Oct 1314:11:59 2023
State : clean, degraded, recovering
Active Devices :2
Working Devices :3
Failed Devices :0
Spare Devices :1
Layout : left-symmetric
Chunk Size : 512K
Consistency Policy : resync
Rebuild Status :50% complete #看样子构建状态只到了50%
Name : localhost.localdomain:5 (local to host localhost.localdomain)
UUID : 2010290f:626a4cd1:f6da260b:9e4067cf
Events :57
Number Major Minor RaidDevice State
08320 active sync /dev/sdc
18481 active sync /dev/sdd
38642 spare rebuilding /dev/sde
模拟损坏可以使用命令: bash mdadm /dev/md5 -f /dev/sde
构建一定要等它到100%,我模拟硬盘损坏,还是像前面一样,我直接拔掉一个设备,然后查看状态,这里可以看到掉了一个硬盘 (但数据好像还可以正常访问)
[root@localhost ~]# mdadm -D /dev/md5
/dev/md5:
Version :1.2
Creation Time : Fri Oct 1317:15:28 2023
Raid Level : raid5
Array Size :15177728(14.47 GiB 15.54 GB)
Used Dev Size :7588864(7.24 GiB 7.77 GB)
Raid Devices :3
Total Devices :2
Persistence : Superblock is persistent
Update Time : Fri Oct 1319:24:18 2023
State : active, degraded
Active Devices :2
Working Devices :2
Failed Devices :0
Spare Devices :0
Layout : left-symmetric
Chunk Size : 512K
Consistency Policy : resync
Name : localhost.localdomain:5 (local to host localhost.localdomain)
UUID : 0ec22c1e:96079eb9:e88563b6:7474157c
Events :25
Number Major Minor RaidDevice State
08320 active sync /dev/sdc
18481 active sync /dev/sdd
- 002 removed
接下来模拟添加新的硬盘,先移除异常硬盘,有可能系统已经帮你自动移除了,但还是还是照样移除一下:
[root@localhost ~]# mdadm /dev/md5 -r /dev/sde
mdadm: stat failed for /dev/sde: No such file or directory
那就直接添加新硬盘,如果添加不进去记得先取消挂载:
mdadm /dev/md5 -a /dev/sdf
再查看状态,发现已经正在开始同步了,等它同步到100%就好了:
[root@localhost ~]# mdadm -D /dev/md5
/dev/md5:
Version :1.2
Creation Time : Fri Oct 1317:15:28 2023
Raid Level : raid5
Array Size :15177728(14.47 GiB 15.54 GB)
Used Dev Size :7588864(7.24 GiB 7.77 GB)
Raid Devices :3
Total Devices :3
Persistence : Superblock is persistent
Update Time : Fri Oct 1319:27:53 2023
State : clean, degraded, recovering
Active Devices :2
Working Devices :3
Failed Devices :0
Spare Devices :1
Layout : left-symmetric
Chunk Size : 512K
Consistency Policy : resync
Rebuild Status :1% complete # 等待同步到100%
Name : localhost.localdomain:5 (local to host localhost.localdomain)
UUID : 0ec22c1e:96079eb9:e88563b6:7474157c
Events :46
Number Major Minor RaidDevice State
08320 active sync /dev/sdc
18481 active sync /dev/sdd
38802 spare rebuilding /dev/sdf
RAID5添加硬盘实现空间扩展
当我们觉得当前RAID5空间不够用了想增加硬盘扩容也是可以实现无损扩容的,但还是老规矩,有重要数据记得提前备份。
例如我使用“/dev/sdb”、“/dev/sdc”、“/dev/sdd”创建了一个raid5阵列“/dev/md5”,单硬盘容量为4G,目前总可用容量为8G,我要添加新的硬盘 “/dev/sde” 到阵列中,首先执行添加硬盘到阵列的命令:
[root@MiWiFi-RD03-srv ~]# mdadm /dev/md5 -a /dev/sde
mdadm: added /dev/sde
查看raid5当前状态,可以看到硬盘虽然添加进去了,但“/dev/sde”还只是用做热备份盘:
[root@MiWiFi-RD03-srv ~]# mdadm -D /dev/md5
/dev/md5:
Version :1.2
Creation Time : Sat Oct 1413:51:52 2023
Raid Level : raid5
Array Size :8378368(7.99 GiB 8.58 GB)
Used Dev Size :4189184(4.00 GiB 4.29 GB)
Raid Devices :3
Total Devices :4
Persistence : Superblock is persistent
Update Time : Sat Oct 1413:53:44 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 : MiWiFi-RD03-srv:5 (local to host MiWiFi-RD03-srv)
UUID : efa8b5f4:dfa65f62:9cc75635:e82c6124
Events :19
Number Major Minor RaidDevice State
08160 active sync /dev/sdb
18321 active sync /dev/sdc
38482 active sync /dev/sdd
4864 - spare /dev/sde
把硬盘“/dev/sde”加入活动盘中,最开始我们设置的活动硬盘数量为3,现在改为4(以实际情况为准):
mdadm-G /dev/md5 -n4
查看raid5当前状态,如果这段 “Reshape Status : 61% complete” 未加载到100%那就等待加载,看样子已经成功加进去了,但目前还是不能使用所有空间容量
[root@MiWiFi-RD03-srv ~]# mdadm -D /dev/md5
/dev/md5:
Version :1.2
Creation Time : Sat Oct 1413:57:22 2023
Raid Level : raid5
Array Size :12567552(11.99 GiB 12.87 GB)
Used Dev Size :4189184(4.00 GiB 4.29 GB)
Raid Devices :4
Total Devices :4
Persistence : Superblock is persistent
Update Time : Sat Oct 1414:00:30 2023
State : clean
Active Devices :4
Working Devices :4
Failed Devices :0
Spare Devices :0
Layout : left-symmetric
Chunk Size : 512K
Consistency Policy : resync
Name : MiWiFi-RD03-srv:5 (local to host MiWiFi-RD03-srv)
UUID : 6fc48912:31f2a51e:26ec0914:093ee49a
Events :47
Number Major Minor RaidDevice State
08160 active sync /dev/sdb
18321 active sync /dev/sdc
38482 active sync /dev/sdd
48643 active sync /dev/sde
可以看到系统还是只识别了8G,如果你方便执行格式化那以下的内容就可以跳过,
接下来我们对硬盘容量进行刷新,以ext4系统为例,输入命令“resize2fs -f /dev/md5”:
可以看到执行成功
[root@MiWiFi-RD03-srv ~]# resize2fs -f /dev/md5
resize2fs 1.42.9 (28-Dec-2013)
Filesystem at /dev/md5 is mounted on /test; on-line resizing required
old_desc_blocks =1, new_desc_blocks =2
The filesystem on /dev/md5 is now 3141888 blocks long.
然后就成功扩容
如果是xfs系统就执行硬盘刷新命令:
xfs_growfs /dev/md5
RAID10搭建
mdadm-C /dev/md10 -ayes-l10-n4 /dev/sdb /dev/sdc /dev/sdd /dev/sde
格式化
mkfs-t ext4 /dev/md10
别忘了更新 mdadm 配置文件:
# 指定 RAID 设备echo"DEVICE /dev/sdb /dev/sdc /dev/sdd /dev/sde">> /etc/mdadm.conf
# 将 RAID10 的 UUID 追加到该目录mdadm-Ds /dev/md10 >> /etc/mdadm.conf
查看状态,还在构建中,进度到57%,等待到100%
[root@MiWiFi-RD03-srv /]# mdadm -D /dev/md10
/dev/md10:
Version :1.2
Creation Time : Fri Oct 1321:17:29 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 : Fri Oct 1321:19: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 :57% complete
Name : MiWiFi-RD03-srv:10 (local to host MiWiFi-RD03-srv)
UUID : 6eb0b741:c439ba13:f3cef0f0:71c1b4cb
Events :11
Number Major Minor RaidDevice State
08160 active sync set-A /dev/sdb
18321 active sync set-B /dev/sdc
28482 active sync set-A /dev/sdd
38643 active sync set-B /dev/sde
挂载使用
mount /dev/md10 /test
测试方式还是和前面相同,参考前面
软件raid搭建的顾虑
在搭建软件raid之前我一直担心一个问题,例如当我在服务器1(centos7.9) 上用2块硬盘搭建了 raid1,那这个 raid1 是仅限于 服务器1 上使用吗?网上找不到确切的答案,有的说可以,有的说不行,但实践是检验真理的唯一标准,我将组建 raid0 或 raid1 的两个设备转移到了 服务器2(centos7.6) 上,也安装过同版本的mdadm,同样使用命令:
fdisk-l
发现raid设备也显示了出来,只是名称不一样,在服务器1上 raid 设备名称设定为 /dev/md0,
虽然在服务器2上显示的是 /dev/md127,
但我也是成功挂载上去了,并且里面的数据也是可以顺利的读取,
那就没问题了。所以这就证明了软件 raid 并不是
与系统一起绑定无法拆分,而是根据软件绑定的;同理硬件raid是与阵列卡绑定的。
友情链接:
Centos 7 磁盘阵列配置介绍(RAID)
Centos 7 磁盘阵列配置介绍(RAID)
CentOS7 部署 RAID 磁盘阵列
RAID5的配置流程及模拟硬盘损坏
RAID实现命令整理
lvm逻辑卷管理 创建 |ext4 xfs扩容
parted命令详解
Centos7 Rsync怎么实现热备份笔记
版权归原作者 优秀的老黄 所有, 如有侵权,请联系我们删除。