CentOS 7 RAID配置续

CentOS 7 RAID配置续

独立冗余磁盘阵列(Redundant Array of Independent Disks,RAID),是把多块独立的磁盘(物理磁盘)按照一定的方式组合构建磁盘组(逻辑磁盘)。相比单个磁盘,能够提升存储性能和数据可靠性。

经过上文的实验配置,我们已经把创建、添加磁盘、重组阵列、文件系统扩容,按顺序实现了一遍。不过这些对于raid来说,还是缺少可靠性的测试验证。另外,操作归操作,还一和操作相关的各个理论,也是有补充的必要。所以,这个续篇,先接上文,补充一下和raid相关的理论。然后,再补上可靠性验证的操作。

调整文件系统大小

调整文件系统大小(不要与调整分区或卷大小混淆)可用于将物理卷上的空间变为可用状态,或使用物理卷上可用的其他空间。

调整文件大小指导原则

调整任何文件系统的大小都存在一定的风险,可能会造成数据遗失。

警告:
为了避免数据丢失,请确保在开始任何调整大小任务之前备份我们的数据。

计划调整文件系统大小时,请考虑以下指导原则。

支持调整大小的文件系统

文件系统必须支持调整大小才能利用卷可用空间增加功能。

文件系统 实用程序 增大大小(增大) 减小大小(收缩)
Btrfs btrfs filesystem resize 联机 联机
XFS xfs_growfs 联机 不支持
Ext2 resize2fs 联机或脱机 仅限脱机
Ext3 resize2fs 联机或脱机 仅限脱机
Ext4 resize2fs 联机或脱机 仅限脱机
ReiserFS resize_reiserfs 联机或脱机 仅限脱机

增大文件系统的大小

我们可以将文件系统增大到设备上的最大可用空间,或指定一个准确大小。请确保在尝试增加文件系统的大小之前先增加设备或逻辑卷的大小。

为文件系统指定精确大小时,请确保新大小满足以下条件:

  • 新大小必须大于现有数据的大小;否则会发生数据丢失。
  • 新大小必须等于或小于当前设备大小,因为文件系统大小不能超出可用空间。

减小文件系统的大小

当减小设备上的文件系统的大小时,请确保新的大小满足以下条件:

  • 新大小必须大于现有数据的大小;否则会发生数据丢失。
  • 新大小必须等于或小于当前设备大小,因为文件系统大小不能超出可用空间。
    如果还计划减小用于保存文件系统的逻辑卷的大小,请确保在尝试减小设备或逻辑卷的大小之前先减小文件系统的大小。

重要:XFS
XFS格式文件系统的大小无法减少,因为XFS不支持此功能。

更改Btrfs文件系统的大小

装入 Btrfs 文件系统后,我们可以使用 btrfs filesystem resize 命令来更改该文件系统的大小。装入了文件系统时,增加和缩小大小均受支持。

使用 btrfs filesystem resize 命令通过下列其中一种方法更改文件系统的大小:

  • 要将文件系统大小扩展为设备的最大可用大小,请输入
1
sudo btrfs filesystem resize max /mnt
  • 要将文件系统扩展为指定大小,请输入
1
sudo btrfs filesystem resize SIZE /mnt

将 SIZE 替换为所需大小(以字节为单位)。我们还可以为值指定单位,例如 50000K (KB)、250M (MB) 或 2G (GB)。我们也可以在值前面加上加号 (+) 或减号 (-),分别指定增加或缩小至目前的大小:

1
2
sudo btrfs filesystem resize +SIZE /mnt
sudo btrfs filesystem resize -SIZE /mnt

通过输入以下命令,检查已装入文件系统的调整大小的结果

1
df -h

磁盘可用 (df) 命令显示磁盘的总大小、使用的块数以及文件系统上可用的块数。-h 选项会以可辨识的格式列印大小,如 1K、234M 或 2G。

更改XFS文件系统的大小

装入 XFS 文件系统后,我们可以使用 xfs_growfs 命令来增加该文件系统的大小。XFS 文件系统的大小无法减少。

  • 使用 xfs_growfs 命令增加文件系统的大小。下面的示例会将文件系统的大小扩充为最大可用值。请参见 man 8 xfs_growfs 了解更多选项。
1
sudo xfs_growfs -d /mnt
  • 通过输入以下命令,检查已装入文件系统的调整大小的结果
1
df -h

磁盘可用 (df) 命令显示磁盘的总大小、使用的块数以及文件系统上可用的块数。-h 选项会以可辨识的格式列印大小,如 1K、234M 或 2G。

更改Ext2、Ext3、Ext4文件系统的大小

不管是否装入了相应的分区,都可以使用 resize2fs 命令增加 Ext2、Ext3 和 Ext4 文件系统的大小。若要减少 Ext 文件系统的大小,需要将其卸载。

  • 要将文件系统大小扩展为名为 /dev/sda1 的设备的最大可用大小,请输入
1
sudo resize2fs /dev/sda1

如果未指定大小参数,大小将默认为该分区的大小。

  • 若要将文件系统更改为特定大小,请输入
1
sudo resize2fs /dev/sda1 SIZE

SIZE 参数指定为文件系统请求的新大小。如果不指定任何单位,则大小参数的单位是文件系统的块大小。也可以选择在大小参数后面加上下列其中一种单位指示项:s 表示 512 字节扇区;K 表示 KB(1 KB 为 1024 字节);M 表示 MB;G 表示 GB。

  • 通过输入以下命令,检查已装入文件系统的调整大小的结果
1
df -h

磁盘可用 (df) 命令显示磁盘的总大小、使用的块数以及文件系统上可用的块数。-h 选项会以可辨识的格式列印大小,如 1K、234M 或 2G。

更改Reiser文件系统的大小

ReiserFS 文件系统在装入或卸载时可增加大小。若要减少其大小,则需要将其卸载。

使用以下其中一种方法,更改名为 /dev/sda2 的设备上文件系统的大小:

  • 要将文件系统大小扩展为设备的最大可用大小,请输入
1
sudo resize_reiserfs /dev/sda2

不指定大小时,这会将卷增加到分区的完整大小。

  • 要将文件系统扩展为指定大小,请输入
1
sudo resize_reiserfs -s SIZE /dev/sda2

将 SIZE 替换为所需大小(以字节为单位)。我们还可以为值指定单位,例如 50000K (KB)、250M (MB) 或 2G (GB)。我们也可以在值前面加上加号 (+) 或减号 (-),分别指定增加或缩小至目前的大小:

1
2
sudo resize_reiserfs -s +SIZE /dev/sda2
sudo resize_reiserfs -s -SIZE /dev/sda2
  • 通过输入以下命令,检查已装入文件系统的调整大小的结果
1
df -h

磁盘可用 (df) 命令显示磁盘的总大小、使用的块数以及文件系统上可用的块数。-h 选项会以可辨识的格式列印大小,如 1K、234M 或 2G。

以上信息,参考自suse官方文档

常见的RAID磁盘阵列

RAID级别 简介 读写性能 安全性能 磁盘使用率 最少磁盘需求
RAID0 RAID0将数据分条存储在多个磁盘上,可实现并行读写,提供最快的读写速率。 多个磁盘并行读写获取更高性能 最差,没有冗余能力,一个磁盘损坏,整个RAID阵列数据都不可用 100% 两块
RAID1 通过构造数据镜像实现数据冗余,阵列中一半的磁盘容量投入使用,另一半磁盘容量用来做镜像,提供数据备份。 读性能:与单个磁盘相同写性能:需要将数据写入是两个磁盘,写性能低于单个磁盘 最高,提供磁盘数据的完整备份,当阵列中的一个磁盘失效时,系统可以自动采用镜像磁盘的数据 50% 两块
RAID10 结合RAID1和RAID0两种磁盘阵列,先将磁盘两两组建成RAID1镜像,再组建RAID0将数据分条存储。 读性能:RAID0相同,写性能:RAID1相同 和RAID1的安全性能相同 50% 四块
RAID5 RAID5不需要单独指定数据校验磁盘,而是将每块磁盘生成的校验信息分块存储至阵列中的每块磁盘中。 读性能:和RAID0相同写性能:由于要写入奇偶校验信息,写性能低于单个磁盘 比RAID10的安全性能低 66.7% 三块

以上信息参考自华为云文档

测试

模拟一个磁盘故障,测试磁盘阵列及数据是否受影响。

之前已经创建的磁盘阵列,可以查看到热备盘及数据盘的状态。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
[root@haproxy-node-a home]# mdadm -E /dev/md0 
mdadm: No md superblock detected on /dev/md0.
[root@haproxy-node-a home]# mdadm -D /dev/md0
/dev/md0:
Version : 1.2
Creation Time : Fri Sep 16 14:04:54 2022
Raid Level : raid5
Array Size : 83816448 (79.93 GiB 85.83 GB)
Used Dev Size : 20954112 (19.98 GiB 21.46 GB)
Raid Devices : 5
Total Devices : 6
Persistence : Superblock is persistent

Update Time : Sat Sep 17 12:35:48 2022
State : clean
Active Devices : 5
Working Devices : 6
Failed Devices : 0
Spare Devices : 1

Layout : left-symmetric
Chunk Size : 512K

Consistency Policy : resync

Name : haproxy-node-a:0 (local to host haproxy-node-a)
UUID : 7860ea0c:fb5693d3:176f627f:be6979c7
Events : 149

Number Major Minor RaidDevice State
0 252 16 0 active sync /dev/vdb
1 252 32 1 active sync /dev/vdc
4 252 48 2 active sync /dev/vdd
5 252 80 3 active sync /dev/vdf
3 252 64 4 active sync /dev/vde

6 252 96 - spare /dev/vdg

在md0挂载的目录中创建一个文件test.txt。
内容如下:

1
2
[root@haproxy-node-a home]# cat test.txt 
this is a test file!

模拟vde磁盘故障

使用命令模拟vde磁盘故障,操作见下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
[root@haproxy-node-a home]# mdadm --manage /dev/md0 --fail /dev/vde
mdadm: set /dev/vde faulty in /dev/md0
[root@haproxy-node-a home]# mdadm -D /dev/md0
/dev/md0:
Version : 1.2
Creation Time : Fri Sep 16 14:04:54 2022
Raid Level : raid5
Array Size : 83816448 (79.93 GiB 85.83 GB)
Used Dev Size : 20954112 (19.98 GiB 21.46 GB)
Raid Devices : 5
Total Devices : 6
Persistence : Superblock is persistent

Update Time : Sat Sep 17 12:41:36 2022
State : clean, degraded, recovering
Active Devices : 4
Working Devices : 5
Failed Devices : 1
Spare Devices : 1

Layout : left-symmetric
Chunk Size : 512K

Consistency Policy : resync

Rebuild Status : 0% complete

Name : haproxy-node-a:0 (local to host haproxy-node-a)
UUID : 7860ea0c:fb5693d3:176f627f:be6979c7
Events : 151

Number Major Minor RaidDevice State
0 252 16 0 active sync /dev/vdb
1 252 32 1 active sync /dev/vdc
4 252 48 2 active sync /dev/vdd
5 252 80 3 active sync /dev/vdf
6 252 96 4 spare rebuilding /dev/vdg # 原有的热备盘vdg已经在重构了。

3 252 64 - faulty /dev/vde # 这里可以看到vde状态已经出错

这里可以查看vdg的重构进度:

1
2
3
4
5
6
7
[root@haproxy-node-a home]# cat /proc/mdstat 
Personalities : [raid6] [raid5] [raid4]
md0 : active raid5 vdg[6] vdf[5] vdd[4] vde[3](F) vdc[1] vdb[0]
83816448 blocks super 1.2 level 5, 512k chunk, algorithm 2 [5/4] [UUUU_]
[====>................] recovery = 21.2% (4448384/20954112) finish=17.5min speed=15645K/sec

unused devices: <none>

接下来是等待重构完成。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
[root@haproxy-node-a home]# mdadm -D /dev/md0 
/dev/md0:
Version : 1.2
Creation Time : Fri Sep 16 14:04:54 2022
Raid Level : raid5
Array Size : 83816448 (79.93 GiB 85.83 GB)
Used Dev Size : 20954112 (19.98 GiB 21.46 GB)
Raid Devices : 5
Total Devices : 6
Persistence : Superblock is persistent

Update Time : Sat Sep 17 13:02:45 2022
State : clean
Active Devices : 5
Working Devices : 5
Failed Devices : 1
Spare Devices : 0

Layout : left-symmetric
Chunk Size : 512K

Consistency Policy : resync

Name : haproxy-node-a:0 (local to host haproxy-node-a)
UUID : 7860ea0c:fb5693d3:176f627f:be6979c7
Events : 176

Number Major Minor RaidDevice State
0 252 16 0 active sync /dev/vdb
1 252 32 1 active sync /dev/vdc
4 252 48 2 active sync /dev/vdd
5 252 80 3 active sync /dev/vdf
6 252 96 4 active sync /dev/vdg # 热备盘已经正常同步。

3 252 64 - faulty /dev/vde

我们可以验证,在一块磁盘故障的情况下,数据是否存在变化。

1
2
3
4
5
[root@haproxy-node-a home]# ll
total 4
-rw-r--r--. 1 root root 21 Sep 17 12:34 test.txt
[root@haproxy-node-a home]# cat test.txt
this is a test file!

在单块硬盘故障的情况下,热备盘会自动重构,故障盘状态为faulty,磁盘阵列中的数据保持不变。

移除故障盘

如上实验,已经故障的vde磁盘,可以移除,并添加新的磁盘,用于替代热备,来保证数据的完整性。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
[root@haproxy-node-a home]# mdadm /dev/md0 -r /dev/vde
mdadm: hot removed /dev/vde from /dev/md0 # 移除了故障的磁盘
[root@haproxy-node-a home]# mdadm -D /dev/md0
/dev/md0:
Version : 1.2
Creation Time : Fri Sep 16 14:04:54 2022
Raid Level : raid5
Array Size : 83816448 (79.93 GiB 85.83 GB)
Used Dev Size : 20954112 (19.98 GiB 21.46 GB)
Raid Devices : 5
Total Devices : 5
Persistence : Superblock is persistent

Update Time : Sat Sep 17 13:08:40 2022
State : clean
Active Devices : 5
Working Devices : 5
Failed Devices : 0
Spare Devices : 0

Layout : left-symmetric
Chunk Size : 512K

Consistency Policy : resync

Name : haproxy-node-a:0 (local to host haproxy-node-a)
UUID : 7860ea0c:fb5693d3:176f627f:be6979c7
Events : 177

Number Major Minor RaidDevice State
0 252 16 0 active sync /dev/vdb
1 252 32 1 active sync /dev/vdc
4 252 48 2 active sync /dev/vdd
5 252 80 3 active sync /dev/vdf
6 252 96 4 active sync /dev/vdg

# 如上状态,vde已经移除,原有的vdg热备盘已经完成raid重构。我们再看一下挂载的目录是否有变化

[root@haproxy-node-a home]# df -hT
Filesystem Type Size Used Avail Use% Mounted on
devtmpfs devtmpfs 874M 0 874M 0% /dev
tmpfs tmpfs 886M 320K 885M 1% /dev/shm
tmpfs tmpfs 886M 17M 869M 2% /run
tmpfs tmpfs 886M 0 886M 0% /sys/fs/cgroup
/dev/mapper/centos-root xfs 47G 2.5G 45G 6% /
/dev/vda1 xfs 1014M 186M 829M 19% /boot
/dev/md0 xfs 80G 34M 80G 1% /home # 和移除硬盘前一致
tmpfs tmpfs 382M 0 382M 0% /run/user/0

换上新的热备盘

到这里,验证的部分,已经完成了磁盘故障,热备盘重构,移除故障盘。接下来,缺的还需要补上,操作参考上一篇的扩容操作,只需要添加一块新的磁盘做为热备盘即可。

添加硬盘并格式化

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
[root@haproxy-node-a home]# fdisk -l

Disk /dev/vda: 53.7 GB, 53687091200 bytes, 104857600 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0x000a9efb

Device Boot Start End Blocks Id System
/dev/vda1 * 2048 2099199 1048576 83 Linux
/dev/vda2 2099200 104857599 51379200 8e Linux LVM

Disk /dev/mapper/centos-root: 50.5 GB, 50457477120 bytes, 98549760 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes


Disk /dev/mapper/centos-swap: 2147 MB, 2147483648 bytes, 4194304 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes


Disk /dev/vdb: 21.5 GB, 21474836480 bytes, 41943040 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0xaa22accc

Device Boot Start End Blocks Id System
/dev/vdb1 2048 41943039 20970496 fd Linux raid autodetect

Disk /dev/vdc: 21.5 GB, 21474836480 bytes, 41943040 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0xbd7a8d98

Device Boot Start End Blocks Id System
/dev/vdc1 2048 41943039 20970496 fd Linux raid autodetect

Disk /dev/vdd: 21.5 GB, 21474836480 bytes, 41943040 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0x01dada7d

Device Boot Start End Blocks Id System
/dev/vdd1 2048 41943039 20970496 fd Linux raid autodetect

Disk /dev/vde: 21.5 GB, 21474836480 bytes, 41943040 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0x9b826ee3

Device Boot Start End Blocks Id System
/dev/vde1 2048 41943039 20970496 fd Linux raid autodetect

Disk /dev/md0: 85.8 GB, 85828042752 bytes, 167632896 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 524288 bytes / 1048576 bytes


Disk /dev/vdf: 21.5 GB, 21474836480 bytes, 41943040 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0xea86a973

Device Boot Start End Blocks Id System
/dev/vdf1 2048 41943039 20970496 fd Linux raid autodetect

Disk /dev/vdg: 21.5 GB, 21474836480 bytes, 41943040 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0xff30ed57

Device Boot Start End Blocks Id System
/dev/vdg1 2048 41943039 20970496 fd Linux raid autodetect

Disk /dev/vdh: 21.5 GB, 21474836480 bytes, 41943040 sectors # 新添加的热备盘
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes

[root@haproxy-node-a home]# fdisk /dev/vdh # 格式化新添加的盘
Welcome to fdisk (util-linux 2.23.2).

Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.

Device does not contain a recognized partition table
Building a new DOS disklabel with disk identifier 0xa29b128b.

Command (m for help): n
Partition type:
p primary (0 primary, 0 extended, 4 free)
e extended
Select (default p): p
Partition number (1-4, default 1):
First sector (2048-41943039, default 2048):
Using default value 2048
Last sector, +sectors or +size{K,M,G} (2048-41943039, default 41943039):
Using default value 41943039
Partition 1 of type Linux and of size 20 GiB is set

Command (m for help): t
Selected partition 1
Hex code (type L to list all codes): fd
Changed type of partition 'Linux' to 'Linux raid autodetect'

Command (m for help): w
The partition table has been altered!

Calling ioctl() to re-read partition table.
Syncing disks.

扩容热备盘至md0

1
2
[root@haproxy-node-a home]# mdadm --manage /dev/md0 --add /dev/vdh
mdadm: added /dev/vdh

再次查看md0状态

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
[root@haproxy-node-a home]# mdadm -D /dev/md0 
/dev/md0:
Version : 1.2
Creation Time : Fri Sep 16 14:04:54 2022
Raid Level : raid5
Array Size : 83816448 (79.93 GiB 85.83 GB)
Used Dev Size : 20954112 (19.98 GiB 21.46 GB)
Raid Devices : 5
Total Devices : 6
Persistence : Superblock is persistent

Update Time : Sat Sep 17 13:23:08 2022
State : clean
Active Devices : 5
Working Devices : 6
Failed Devices : 0
Spare Devices : 1

Layout : left-symmetric
Chunk Size : 512K

Consistency Policy : resync

Name : haproxy-node-a:0 (local to host haproxy-node-a)
UUID : 7860ea0c:fb5693d3:176f627f:be6979c7
Events : 178

Number Major Minor RaidDevice State
0 252 16 0 active sync /dev/vdb
1 252 32 1 active sync /dev/vdc
4 252 48 2 active sync /dev/vdd
5 252 80 3 active sync /dev/vdf
6 252 96 4 active sync /dev/vdg

7 252 112 - spare /dev/vdh # 新添加的磁盘已经成为了md0的热备盘

至此已经完成raid 5创建,扩容,调整文件系统大小,模拟磁盘故障,热备盘重构,移除故障盘,添加新的磁盘,格式化,添加至md0,成为新的热备盘。raid 5创建与故障恢复的测试已经完成。

在所有变更磁盘,重构raid后,一定不要忘记重写将mdadm配置信息写入配置文件中。
mdadm -D –scan > /etc/mdadm.conf
这个非常重要。


CentOS 7 RAID配置续
https://ywmy.xyz/2022/09/16/CentOS-7-RAID配置续/
作者
ian
发布于
2022年9月16日
许可协议