11.17 使用mdadm命令来配置RAID

网友投稿 953 2022-05-28

图形界面确实方便,不过 RAID 和 LVM 一样,主要的应用还是在命令行当中,因为如果硬盘出现了数据损坏,总不能重新安装吧!

11.17 使用mdadm命令来配置RAID

本节,我们学习在命令行界面中如何分配和使用 RAID,这次我们仍然使用相同大小的分区配置最为常见的 RAID 5。

建立分区

建立三个 2GB 大小的分区,构建 RAID 5。不过我们多建立了一个 2GB 大小的分区,这个分区用作备份分区。

备份分区的作用是什么呢? RAID 最大的好处就是具有数据冗余功能,当有一块硬盘或分区损坏时,数据不会丟失,只要插入新的硬盘或分区,依赖其他分区就会主动重建损坏的硬盘或分区中的数据。不过这仍然需要关闭服务器,手工插拔硬盘。

如果在组成 RAID 的时候就加入了备份硬盘或备份分区,那么当硬盘或分区损坏时,RAID 会自动用备份硬盘或备份分区代替损坏的硬盘或分区,然后立即重建数据,而不需要人为手工参与。这样就避免了服务器停机和人为手工参与,非常方便,唯一的问题就是需要多余的硬盘或分区作为备份设备。

也就是说,我们在这个实验中需要 4 个 2GB 大小的分区,其中 3 个组成 RAID 5,1 个作为备份分区。建立分区的过程这里不再详细解释,建立完分区之后,可以使用 fdisk -l 命令査看。命令如下:

[root@localhost ~]#fdisk -l ...省略部分输出... Disk /dev/sdb: 21.5 GB, 21474836480 bytes 255 heads, 63 sectors/track, 2610 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0xba384969 Device Boot Start End Blocks ld System /dev/sdb1 1 2610 20964793+ 5 Extended /dev/sdb5 1 262 2104452 83 Linux /dev/sdb6 263 524 2104483+ 83 Linux /dev/sdb7 525 786 2104483+ 83 Linux /dev/sdb8 787 1048 2104483+ 83 Linux

我们建立了 /dev/sdb5、/dev/sdb6、/dev/sdb7 和 /dev/sdb8 共 4 个 2GB 大小的分区。

mdadm 命令建立 RAID 5

建立 RAID 使用 mdadm 命令,命令格式如下:

[root@localhost ~]# mdadm [模式] [RAID 设备文件名] [选项]

模式:

Assemble:加入一个已经存在的阵列;

Build:创建一个没有超级块的阵列;

Create:创建一个阵列,每个设备都具有超级块;

Manage:管理阵列,如添加设备和删除损坏设备;

Misc:允许单独对阵列中的设备进行操作,如停止阵列;

Follow or Monitor:监控 RAID 状态; Grow:改变 RAID 的容量或阵列中的数目;

选项:

-s,-scan:扫描配置文件或/proc/mdstat 文件,发现丟失的信息;

-D,-detail:查看磁盘阵列详细信息;

-C,-create:建立新的磁盘阵列,也就是调用 Create 模式;

-a,-auto=yes:采用标准格式建立磁阵列

-n,-raicklevices=数字:使用几块硬盘或分区组成 RAID

-l,-level=级别:创建 RAID 的级别,可以是 0,1,5

-x,-spare-devices=数字:使用几块硬盘或分区组成备份设备

-a,-add 设备文件名:在已经存在的 RAID 中加入设备

-r,-remove 设备文件名名:在已经存在的 RAID 中移除设备

-f,-fail 设备文件名:把某个组成 RAID 的设备设置为错误状态

-S,-stop:停止 RAID 设备

-A,-assemble:按照配置文件加载 RAID

我们准备创建的是 RAID 5,所以使用以下命令创建:

[root@localhost ~]# mdadm -create -auto=yes /dev/md0-level=5 \ -raid-devices=3 -spare-devices=1 /dev/sdb5/dev/sdb6 /dev/sdb7 /dev/sdb8

其中,/dev/md0 是第一个 RAID 设备的设备文件名,如果还有 RAID 设备,则可以使用 /dev/md[0~9] 来代表。我们建立了一个RAID 5,使用了三个分区,并建立了一个备份分区。先查看一下新建立的 /dev/md0,命令如下:

[root@localhost ~]# mdadm --detail /dev/md0 /dev/md0: #设备文件名 Version : 1.2 Creation Time : Tue Apr 23 23:13:48 2013 #创建时间 Raid Level : raid5 #RAID 级别 Array Size : 4206592 (4.01 GiB 4.31 GB) +RAID #总容量 Used Dev Size : 2103296 (2.01 GiB 2.15 GB) #每个分区的容量 Raid Devices : 3 #组成 RAID 的设备数 Total Devices : 4 #总设备数 Persistence : Superblock is persistent Update Time : Tue Apr 23 23:14:52 2013 State : clean Active Devices : 3 #激活的设备数 Working Devices : 4 #可用的设备数 Failed Devices : 0 #错误的设备数 Spare Devices : 1 #备份设备数 Layout : left-symmetric Chunk Size : 512K Name : localhost.localdomain:0 (local to host localhost.localdomain) UOID : 15026b78:126a4930:89d8cf54:5bcb7e95 Events : 18 Number Major Minor RaidDevice State 0 8 21 0 active sync /dev/sdb5 1 8 22 1 active sync /dev/sdb6 4 8 23 2 active sync /dev/sdb7 #三个激活的分区 3 8 24 - spare /dev/sdb8 #备份分区

再查看一下 /proc/mdstat 文件,这个文件中也保存了 RAID 的相关信息。命令如下:

[root@localhost ~]# cat /proc/mdstat Personalities:[raid6] [raid5] [raid4] md0:active raid5 sdb9[4](S) sdb5[0] sdb8[3] sdb6[1] #RAID 名 级别 组成 RAID 的分区,[数字]是此分区在 RAID 中的顺序 #(S)代表备份分区 4206592 blocks super 1.2 level 5, 512k chunk, algorithm 2 [3/3] [UUU] #总 block 数 等级是 5 区块大小 阵列算法 [组成设备数/正常设备数] unused devices:

格式化与挂载 RAID

RAID 5 已经创建,但是要想正常使用,也需要格式化和挂载。格式化命令如下:

[root@localhost ~]# mkfs -t ext4 /dev/md0

挂载命令如下:

[root@localhost ~]# mkdir /raid #建立挂载点 [root@localhost ~]# mount /dev/md0 /raid/ #挂载/dev/md0 [root@localhost ~]# mount …省略部分输出… /dev/md0 on /raid type ext4(rw) #查看一下,已经正常挂载

生成 mdadm 配置文件

在 CentOS 6.x 中,mdadm 配置文件并不存在,需要手工建立。我们使用以下命令建立 /etc/mdadm.conf 配置文件:

[root@localhost ~]# echo Device /dev/sdb[5-8] >>/etc/mdadm.conf #建立/etc/mdadm.conf 配置立件,并把组成 RAID 的分区的设备文件名写入 #注意:如果有多个 RAID,则要把所有组成 RAID 的设备都放入配置文件中;否则 RAID 设备重启后会丟失 #比如组成 RAID 10,就既要把分区的设备文件名放入此文件中,也翻组成 RAID 0 的 RAID 1 设备文件名放入 [root@localhost ~]# mdadm -Ds >>/etc/mdadm.conf #查询和扫描 RAID 信息,并追加进/etc/mdadm.conf 文件 [root@localhost ~]# cat /etc/mdadm.conf Device /dev/sdb5 /dev/sdb6 /dev/sdb7 /dev/sdb8 ARRAY /dev/md0 metadata: 1.2 spares=1 name=l(xalhost.localdomain:0 UUID=dd821fe5:8597b126:460a3afd:857c7989 #查看文件内容

设置开机后自动挂载

自动挂载也要修改 /etc/fstab 配置文件,命令如下:

[root@localhost ~]# vi /etc/fstab /dev/mdO /raid ext4 defaults 12 #加入此行

如果要重新启动,则一定要在这一步完成之后再进行,否则会报错。

启动或停止 RAID

RAID 设备生效后,不用手工启动或停止。但是,如果需要卸载 RAID 设备,就必须手工停止 RAID。这里我们学习一下启动和停止 RAID 的方法。先看看停止命令:

[root@localhost ~]# mdadm -S /dev/md0 #停止/dev/md0 设备

当然,如果要删除 RAID,则要非常小心,要把所有和 RAID 相关的内容全部删除,才能保证系统不报错。需要进行的步骤如下:

[root@localhost ~]# umount /dev/md0 #卸载 RAID [root@localhost ~】# vi /etc/fstab /dev/md0 /raid ext4 defaults 12 #删除此行 [root@localhost ~]# mdadm -S /dev/md0 mdadm: stopped /dev/md0 #停止 RAID [root@localhost ~]# vi /etc/mdadm.conf ARRAY /dev/md0 metadata: 1.2 spares=1 name=localhost.localdomain:0 UUID=dd821fe5:8597b126:460a3afd:857c7989 #删除或者注释此行

如果仅仅是停止,而不是删除,就没有这么麻烦了,只需先下载,再停止即可。那停止完成之后,怎么再启动呢?启动 RAID 的命令如下:

[root@localhost ~]# mdadm -As /dev/md0 mdadm: /dev/md0 has been started with 3 drives and 1 spare. #启动/dev/md0 [root@localhost ~]# mount /dev/md0 /raid/ #启动 RAID 后,记得挂载

模拟分区出现故障

我们的 RAID 虽然配置完成了,但是它真的生效了吗?我们模拟磁盘报错,看看备份分区是否会自动代替错误分区。mdadm 命令有一个选项 -f,这个选项的作用就是把一块硬盘或分区变成错误状态,用来模拟 RAID 报错。命令如下:

[root@localhost ~]# mdadm /dev/mdO -f /dev/sdb7 mdadm: set /dev/sdb7 faulty in /dev/mdO、 #模拟/dev/sdb7 分区报错 [root@1ocalhost ~】# mdadm -D /dev/mdO /dev/mdO: ...省略部分输出... Active Devices : 2 Working Devices : 3 Failed Devices : 1 #1 个设备报错了 Spare Devices : 1 ...省略部分输出... Number Major Minor RaidDevice State 0 8 21 0 active sync /dev/sdb5 1 8 22 1 active sync /dev/sdb6 3 8 24 2 spare rebuilding /dev/sdb8 #/dev/sdb8 分区正在准备修复 4 8 23 - faulty spare /dev/sdb7 #/dev/sdb7 已经报错了

要想看到上面的效果,査看时要快一点,否则修复就可能完成了。因为有备份分区的存在,所以分区损坏了,是不用管理员手工的。如果修复完成,再查看,就会出现下面的情况:

[root@localhost ~]# mdadm /dev/mdO Number Major Minor RaidDevice State 0 8 21 0 active sync /dev/sdb5 1 8 22 1 active sync /dev/sdb6 3 8 24 2 active sync /dev/sdb8 4 8 23 - faulty spare /dev/sdb7

备份分区/dev/sdb8 已经被激活,但是 /dev/sdb7 分区失效。

移除错误分区

既然分区已经报错了,我们就把 /dev/sdb7 分区从 RAID 中删除。如果这是硬盘,就可以进行更换硬盘的处理了。

移除命令如下:

[root@localhost ~]# mdadm /dev/md0 -remove/dev/sdb7 mdadm: hot removed /dev/sdb7 from /dev/mdO

添加新的备份分区

既然分区已经报错,那么我们还需要加入一个新的备份分区,以备下次硬盘或分区出现问题。既然要加入新的备份分区,当然还需要再划分出一个 2GB 大小的分区出来,命令如下:

[root@localhost ~]#fdisk -l Disk /dev/sdb: 21.5 GB, 21474836480 bytes 255 heads, 63 sectors/track, 2610 cylinders Units = cylinders of 16065 *512 = 8225280 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes 1512 bytes Disk identifier: 0x151a68a9 Device Boot Start End Blocks Id System /dev/sdb1 1 2610 20964793+ 5 Extended /dev/sdb5 1 262 2104452 83 Linux /dev/sdb6 263 524 2104483+ 83 Linux /dev/sdb7 525 786 2104483+ 83 Linux /dev/sdb8 787 1048 2104483+ 83 Linux /dev/sdb9 1049 1310 2104483+ 83 Linux

我们新建了 /dev/sdb9 分区,然后把它加入 /dev/md0 作为备份分区,命令如下:

[root@localhost ~]# mdadm /dev/md0 -add /dev/sdb9 mdadm: added /dev/sdb9 #把/dev/sdb9 加入/dev/md0 [root@localhost ~]# mdadm -D /dev/md0 ...省略部分输出... Number Major Minor RaidDevice State 0 8 21 0 active sync /dev/sdb5 1 8 22 1 active sync /dev/sdb6 3 8 24 2 active sync /dev/sdb8 4 8 25 - spare /dev/sdb9 #查看一下,/dev/sdb9 已经变成了备份分区

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:最强云硬盘来了,让AI模型迭代从1周缩短到1天
下一篇:第八章:手把手教老婆实现:RocketMQ集群模式(2)-RocketMQ主从-搭建
相关文章