目录
讲解了硬盘设备分区、格式化、挂载等知识后,本章将深入讲解各个常用 RAID(Redundant Array of Independent Disks,独立冗余磁盘阵列)技术方案的特性,并通过实际部署 RAID 10、RAID 5+备份盘等方案来更直观地查看 RAID 的强大效果,以便进一步满足生产环境对硬盘设备的 IO 读写速度和数据冗余备份机制的需求。同时,考虑到用户可能会动态调整存储资源,本章还将介绍 LVM(Logical Volume Manager,逻辑卷管理器)的部署、扩容、缩小、快照以及卸载删除的相关知识。相信学完本章内容后,便可以在企业级生产环境中灵活运用 RAID 和 LVM 来满足对存储资源的高级管理需求了。
7.1.1 RAID 0
![](https://img-blog.csdnimg.cn/20210902170008295.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA6L6-5pGp6Zmi6ICB5YOn,size_20,color_FFFFFF,t_70,g_se,x_16)
7.1.2 RAID 1
![](https://img-blog.csdnimg.cn/2021090217012540.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA6L6-5pGp6Zmi6ICB5YOn,size_20,color_FFFFFF,t_70,g_se,x_16)
7.1.3 RAID 5
![](https://img-blog.csdnimg.cn/2021090217153910.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA6L6-5pGp6Zmi6ICB5YOn,size_20,color_FFFFFF,t_70,g_se,x_16)
7.1.4 RAID 10
![](https://img-blog.csdnimg.cn/20210902171759957.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA6L6-5pGp6Zmi6ICB5YOn,size_20,color_FFFFFF,t_70,g_se,x_16)
7.1.5 部署磁盘阵列:
![](https://img-blog.csdnimg.cn/20210902172154354.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA6L6-5pGp6Zmi6ICB5YOn,size_20,color_FFFFFF,t_70,g_se,x_16)
这几块硬盘设备是模拟出来的,不需要特意去买几块真实的物理硬盘插到电脑上。需要注意的是,一定要记得在关闭系统之后,再在虚拟机中添加硬盘设备,否则可能会因为计算机架构的不同而导致虚拟机系统无法识别添加的硬盘设备。
mdadm 命令用于管理 Linux 系统中的软件 RAID 硬盘阵列,
格式为 “ mdadm [模式] <RAID设备名称> [选项] [成员设备名称] ”。
当前,生产环境中用到的服务器一般都配备 RAID 阵列卡,尽管服务器的价格越来越便宜,但是我们没有必要为了做一个实验而去单独购买一台服务器,而是可以会用 mdadm 命令在 Linux 系统中创建和管理软件 RAID 磁盘阵列,而且它涉及的理论知识的操作过程与生产环境中的完全一致。mdadm 命令的常用参数以及作用如表 7-1 所示。
接下来,使用 mdadm 命令创建 RAID 10,名称为“/dev/md10”
RAID10需要4 + 2*N 个磁盘驱动器(N >=0), 而且只能使用其中一半或更小的磁盘用量, 例如 4 个 250G 的硬盘使用RAID10 阵列, 实际容量是 500G。
第6 章中讲到,udev 是 Linux 系统内核中用来给硬件命名的服务,其命名规则也非常简单。我们可以通过命名规则猜测到第二个 SCSI 存储设备的名称会是/dev/sdb,然后依此类推。使用硬盘设备来部署 RAID 磁盘阵列很像是将几位同学组成一个班级,但总不能将班级命名为/dev/sdbcde 吧。尽管这样可以一眼开出它是由哪些元素组成的,但是并不利于我们的记忆和阅读。更何况如果我们是使用 10、50、100 个硬盘来部署 RAID 磁盘阵列呢?
此时,就需要使用 mdadm 中的参数了。其中,-C 参数代表创建一个 RAID 阵列卡;-v 参数显示创建的过程,同时在后面追加一个设备名称/dev/md0,这样/dev/md0 就是创建后的 RAID 磁盘阵列的名称;-a yes 参数代表自动创建设备文件;-n 4 参数代表使用 4 块硬盘来部署这个 RAID 磁盘阵列;而 -l 10 参数则代表 RAID 10 方案;最后再加上 4 块硬盘设备的名称就搞定了。其次,把制作好的 RAID 磁盘阵列格式化为 ext4 格式。
![](https://img-blog.csdnimg.cn/20210902180838136.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA6L6-5pGp6Zmi6ICB5YOn,size_20,color_FFFFFF,t_70,g_se,x_16)
最后,查看/dev/md0 磁盘阵列的详细信息,并把挂载信息写入到配置文件中,使其永久生效。
查看磁盘阵列的详细信息:mdadm -D /dev/md10
挂载信息写入到配置文件:echo "/dev/md10 /zhangxu ext4 defaults 0 0" >> /etc/fstab
[root@localhost ~]# mdadm -D /dev/md10
/dev/md10:
Version : 1.2
Creation Time : Thu Sep 2 18:00:19 2021
Raid Level : raid10
Array Size : 20954112 (19.98 GiB 21.46 GB)
Used Dev Size : 10477056 (9.99 GiB 10.73 GB)
Raid Devices : 4
Total Devices : 4
Persistence : Superblock is persistent
Update Time : Thu Sep 2 18:06:29 2021
State : clean
Active Devices : 4
Working Devices : 4
Failed Devices : 0
Spare Devices : 0
Layout : near=2
Chunk Size : 512K
Name : localhost.localdomain:10 (local to host localhost.localdomain )
UUID : a57b1084:42c1e8dd:67036a0d:bc141dad
Events : 19
Number Major Minor RaidDevice State
0 8 32 0 active sync /dev/sdc
1 8 48 1 active sync /dev/sdd
2 8 64 2 active sync /dev/sde
3 8 80 3 active sync /dev/sdf
7.1.6 损坏磁盘阵列及修复
[root@localhost ~]# mdadm /dev/md10 -f /dev/sdc #模拟设备损坏
mdadm: set /dev/sdc faulty in /dev/md10
[root@localhost ~]# mdadm -D /dev/md10 #查看磁盘阵列状态
/dev/md10:
Version : 1.2
Creation Time : Thu Sep 2 18:00:19 2021
Raid Level : raid10
Array Size : 20954112 (19.98 GiB 21.46 GB)
Used Dev Size : 10477056 (9.99 GiB 10.73 GB)
Raid Devices : 4
Total Devices : 4
Persistence : Superblock is persistent
Update Time : Thu Sep 2 18:16:26 2021
State : clean, degraded
Active Devices : 3
Working Devices : 3
Failed Devices : 1 #发现已经坏掉一块
Spare Devices : 0
Layout : near=2
Chunk Size : 512K
Name : localhost.localdomain:10 (local to host localhost.localdomain )
UUID : a57b1084:42c1e8dd:67036a0d:bc141dad
Events : 21
Number Major Minor RaidDevice State
0 0 0 0 removed
1 8 48 1 active sync /dev/sdd
2 8 64 2 active sync /dev/sde
3 8 80 3 active sync /dev/sdf
0 8 32 - faulty /dev/sdc
RAID 10 级别的磁盘阵列中,当 RAID 1 磁盘阵列中存在一个故障盘时并不影响 RAID10 磁盘阵列的使用。当购买了新的硬盘设备后再使用 mdadm 命令来予以替换即可,在此期间我们可以在/RAID 目录中正常地创建或删除文件。由于我们是在虚拟机中模拟硬盘,所以先重启系统,然后再把新的硬盘添加到 RAID 磁盘阵列中。
新硬盘添加到 RAID 磁盘阵列使用 -a : mdadm /dev/md10 -a /dev/sdg
[root@localhost ~]# umount /dev/md10
[root@localhost ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 30G 0 disk
├─sda1 8:1 0 500M 0 part /boot
└─sda2 8:2 0 29.5G 0 part
├─rhel-root 253:0 0 26.5G 0 lvm /
└─rhel-swap 253:1 0 3G 0 lvm [SWAP]
sdb 8:16 0 20G 0 disk
├─sdb1 8:17 0 4G 0 part
├─sdb2 8:18 0 4G 0 part
├─sdb3 8:19 0 4G 0 part
├─sdb4 8:20 0 1K 0 part
├─sdb5 8:21 0 4G 0 part
└─sdb6 8:22 0 2G 0 part
sdc 8:32 0 10G 0 disk
sdd 8:48 0 10G 0 disk
└─md10 9:10 0 20G 0 raid10
sde 8:64 0 10G 0 disk
└─md10 9:10 0 20G 0 raid10
sdf 8:80 0 10G 0 disk
└─md10 9:10 0 20G 0 raid10
sdg 8:96 0 10G 0 disk
sr0 11:0 1 3.5G 0 rom
[root@localhost ~]# mdadm /dev/md10 -a /dev/sdg
mdadm: added /dev/sdg
[root@localhost ~]# mdadm -D /dev/md10
/dev/md10:
Version : 1.2
Creation Time : Thu Sep 2 18:00:19 2021
Raid Level : raid10
Array Size : 20954112 (19.98 GiB 21.46 GB)
Used Dev Size : 10477056 (9.99 GiB 10.73 GB)
Raid Devices : 4
Total Devices : 4
Persistence : Superblock is persistent
Update Time : Thu Sep 2 18:26:07 2021
State : clean, degraded, recovering
Active Devices : 3
Working Devices : 4
Failed Devices : 0
Spare Devices : 1
Layout : near=2
Chunk Size : 512K
Rebuild Status : 40% complete
Name : localhost.localdomain:10 (local to host localhost.localdomain)
UUID : a57b1084:42c1e8dd:67036a0d:bc141dad
Events : 39
Number Major Minor RaidDevice State
4 8 96 0 spare rebuilding /dev/sdg
1 8 48 1 active sync /dev/sdd
2 8 64 2 active sync /dev/sde
3 8 80 3 active sync /dev/sdf
7.1.7 磁盘阵列+备份盘
![](https://img-blog.csdnimg.cn/20210902185907637.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA6L6-5pGp6Zmi6ICB5YOn,size_20,color_FFFFFF,t_70,g_se,x_16)
[root@localhost ~]# mdadm -Cv /dev/md5 -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 20954624K
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md5 started.
[root@localhost ~]# mdadm -D /dev/md5
/dev/md5:
Version : 1.2
Creation Time : Thu Sep 2 19:15:21 2021
Raid Level : raid5
Array Size : 41909248 (39.97 GiB 42.92 GB)
Used Dev Size : 20954624 (19.98 GiB 21.46 GB)
Raid Devices : 3
Total Devices : 4
Persistence : Superblock is persistent
Update Time : Thu Sep 2 19:17:09 2021
State : clean
Active Devices : 3
Working Devices : 4
Failed Devices : 0
Spare Devices : 1
Layout : left-symmetric
Chunk Size : 512K
Name : localhost.localdomain:5 (local to host localhost.localdomain)
UUID : 707f0735:1a5899d0:8e0a82d4:0d95b8ec
Events : 22
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/md5
mke2fs 1.42.9 (28-Dec-2013)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=128 blocks, Stripe width=256 blocks
2621440 inodes, 10477312 blocks
523865 blocks (5.00%) reserved for the super user
First data block=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: done
Writing inode tables: done
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done
[root@localhost ~]# echo "/dev/md5 /RAID5 ext4 defaults 0 0" >> /etc/fstab
[root@localhost ~]# mkdir /RAID5
[root@localhost ~]# mount -a
[root@localhost ~]# mdadm /dev/md5 -f /dev/sdb
mdadm: set /dev/sdb faulty in /dev/md5
[root@localhost ~]# mdadm -D /dev/md5
/dev/md5:
Version : 1.2
Creation Time : Thu Sep 2 19:15:21 2021
Raid Level : raid5
Array Size : 41909248 (39.97 GiB 42.92 GB)
Used Dev Size : 20954624 (19.98 GiB 21.46 GB)
Raid Devices : 3
Total Devices : 4
Persistence : Superblock is persistent
Update Time : Thu Sep 2 19:25:03 2021
State : clean, degraded, recovering
Active Devices : 2
Working Devices : 3
Failed Devices : 1
Spare Devices : 1
Layout : left-symmetric
Chunk Size : 512K
Rebuild Status : 5% complete
Name : localhost.localdomain:5 (local to host localhost.localdomain)
UUID : 707f0735:1a5899d0:8e0a82d4:0d95b8ec
Events : 24
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