我在将 RAID 级别 1 重塑为 RAID 级别 5 时遇到了问题:它已经在 41% 处停留了几天了。
一些背景信息(很冗长,因为我不知道最终是否相关;抱歉)。
有问题的设备是运行 Debian 9 的 GNUBee NAS。
$ uname -a
Linux gnubee-n1.gnubee 4.4.87-gnu #0 SMP Wed Nov 22 13:06:13 2017 mips GNU/Linux
$ lsb_release -a
No LSB modules are available.
Distributor ID: Debian
Description: Debian GNU/Linux 9.11 (stretch)
Release: 9.11
Codename: stretch
我有 2 个 2TB 驱动器,处于 RAID 级别 1 中。然后我又得到了 2 个 5TB 驱动器,我想将它们添加到阵列中。在阅读了一些指南后,我发现我可以从 RAID 级别 1 “升级”到 RAID 级别 5,因为具体来说就是从 2 个驱动器升级到 2 个以上。我决定试一试。
我安装了新驱动器,擦除了它们,将它们重新格式化为 ext4,然后挂载它们。我备份了原始驱动器上的所有数据,并且为了确保万无一失,我检查了原始 RAID 阵列的运行状况。
/usr/share/mdadm/checkarray /dev/md0
一切都好。
然后我尝试切换到 RAID 5。
mdadm --grow /dev/md0 --level=5
但是,我收到一个错误,提示块大小不是 4K 的倍数。
经过进一步研究后,我发现我需要将现有的 RAID 阵列大小缩小为 4K 的倍数(与错误建议的非常相似)。
resize2fs /dev/md0 1.5TB
mdadm --grow /dev/md0 --size=1874604032
一切顺利。
我将 RAID 级别切换为 5。
mdadm --grow /dev/md0 --level=5 --backup-file=/root/grow_md0.bak
再次,没有错误,我确认新的 RAID 级别是 5。
然后我将 2 个新驱动器添加到阵列,并将其扩展到 4 个驱动器。
mdadm --add /dev/md0 /dev/sdd /dev/sde
mdadm --grow --raid-devices=4 --backup-file=/root/grow_md0.bak /dev/md0
这又一次没有错误地运行了。我知道这个过程会花很长时间,可能要一两天,所以我回头检查了一下,发现重塑百分比在增加。我很满意,让机器工作了一天。
当我再次检查时,重塑过程已进行到 41%。我并没有多想;也许过程有点慢,但我之前从未将驱动器添加到阵列中,所以我知道什么呢?
第二天我又检查了一下,还是 41%。第三天也是。我开始怀疑有什么不对劲。(福尔摩斯帽子)
$ mdadm -D /dev/md0
/dev/md0:
Version : 1.2
Creation Time : Tue Dec 26 21:54:30 2017
Raid Level : raid5
Array Size : 1874604032 (1787.76 GiB 1919.59 GB)
Used Dev Size : 1874604032 (1787.76 GiB 1919.59 GB)
Raid Devices : 4
Total Devices : 4
Persistence : Superblock is persistent
Update Time : Sat Apr 4 12:17:09 2020
State : clean, reshaping
Active Devices : 4
Working Devices : 4
Failed Devices : 0
Spare Devices : 0
Layout : left-symmetric
Chunk Size : 64K
Reshape Status : 41% complete
Delta Devices : 2, (2->4)
Name : libreCMC:0
UUID : c04d31c3:6579cf28:acb7b965:2d4c5e1d
Events : 5498
Number Major Minor RaidDevice State
0 8 1 0 active sync /dev/sda1
1 8 17 1 active sync /dev/sdb1
3 8 64 2 active sync /dev/sde
2 8 48 3 active sync /dev/sdd
我不知道什么地方可能出了问题,或者从哪里开始挖掘,因此,任何能提供帮助调试的信息都将不胜感激。
提前致谢!
编辑
重复调用,/proc/mdstat
输出以下内容。
Personalities : [linear] [raid0] [raid1] [raid10] [raid6] [raid5] [raid4]
md0 : active raid5 sde[3] sdd[2] sdb1[1] sda1[0]
1874604032 blocks super 1.2 level 5, 64k chunk, algorithm 2 [4/4] [UUUU]
[========>............] reshape = 41.2% (773695612/1874604032) finish=11211
552.6min speed=1K/sec
unused devices: <none>
Personalities : [linear] [raid0] [raid1] [raid10] [raid6] [raid5] [raid4]
md0 : active raid5 sde[3] sdd[2] sdb1[1] sda1[0]
1874604032 blocks super 1.2 level 5, 64k chunk, algorithm 2 [4/4] [UUUU]
[========>............] reshape = 41.2% (773695612/1874604032) finish=11211
594.4min speed=1K/sec
unused devices: <none>
Personalities : [linear] [raid0] [raid1] [raid10] [raid6] [raid5] [raid4]
md0 : active raid5 sde[3] sdd[2] sdb1[1] sda1[0]
1874604032 blocks super 1.2 level 5, 64k chunk, algorithm 2 [4/4] [UUUU]
[========>............] reshape = 41.2% (773695612/1874604032) finish=11212
178.5min speed=1K/sec
unused devices: <none>
# After 2 hours
Personalities : [linear] [raid0] [raid1] [raid10] [raid6] [raid5] [raid4]
md0 : active raid5 sde[3] sdd[2] sdb1[1] sda1[0]
1874604032 blocks super 1.2 level 5, 64k chunk, algorithm 2 [4/4] [UUUU]
[========>............] reshape = 41.2% (773695612/1874604032) finish=11420355.0min speed=1K/sec
unused devices: <none>
输出sysctl dev.raid.speed_limit_min
dev.raid.speed_limit_min = 10000