飞牛fnOS突然掉电导致RAID5存储空间无法识别的问题解决
前言
nas玩家迟早都会碰到的一个问题:因为突然断电,阵列无法识别了。
今天我就很不幸的遇到了,但幸运的是,在grok ai的帮助下,我最后成功的把阵列救了回来。
在这里做个记录,希望对你也有帮助。
注意事项:如无十分把握,请务必提前用dd命令给硬盘做镜像,避免raid修复失败导致数据彻底报废
问题描述
我用的nas系统是fnos,存储空间是3盘位raid5。因为一次意外断电,导致raid5阵列无法被fnos系统识别。
表现症状是:
- 在【硬盘信息】中可以看到硬盘,但都显示【未识别】或【未挂载】,以及【文件系统未知】,示意图如下。
-
在【存储空间】中无任何显示
-
ssh访问fnos,查看阵列的当前状态信息
一:用
lsblk
查看硬盘信息,确认阵列名称为/dev/md125
。因为系统会尝试识别raid但最后识别失败,所以会出现2种结果。
# 系统识别raid有3个盘
sdh 8:112 0 232.9G 0 disk
└─sdh1 8:113 0 232.9G 0 part
└─md125 9:125 0 0B 0 md
sdj 8:144 0 232.9G 0 disk
└─sdj1 8:145 0 232.9G 0 part
└─md125 9:125 0 0B 0 md
sdk 8:160 0 232.9G 0 disk
└─sdk1 8:161 0 232.9G 0 part
└─md125 9:125 0 0B 0 md
# 系统判定2个盘掉线,只有1个盘在线
sdh 8:112 0 232.9G 0 disk
└─sdh1 8:113 0 232.9G 0 part
└─md125 9:125 0 0B 0 raid5
sdj 8:144 0 232.9G 0 disk
└─sdj1 8:145 0 232.9G 0 part
sdk 8:160 0 232.9G 0 disk
└─sdk1 8:161 0 232.9G 0 part
二:用【
cat /proc/mdstat
】命令查看阵列状态,同样会有2种不同的结果
# raid状态为inactive,三个盘的状态都为(S),也就是备用盘(Spare)
md125 : inactive sdh1[1](S) sdk1[2](S) sdj1[0](S)
732195840 blocks super 1.2
# raid状态为inactive,系统判定2个盘掉线,只有1个盘在线
md125 : inactive sdh1[1]
244065280 blocks super 1.2
三:用【
mdadm -D /dev/md125
】命令确认raid的详细状态,依然是2种结果。
# raid未激活,识别到3个盘
/dev/md125:
Version : 1.2
Raid Level : raid5
Total Devices : 3
Persistence : Superblock is persistent
State : inactive
Working Devices : 3
Name : fnOS:0
UUID : 3ba3d465:9252aa97:6372896b:8f9e96af
Events : 239
Number Major Minor RaidDevice
- 8 161 - /dev/sdk1
- 8 145 - /dev/sdj1
- 8 113 - /dev/sdh1
# raid已激活,但2个盘掉线,只有1个盘在线
/dev/md125:
Version : 1.2
Creation Time : Fri Feb 28 23:37:01 2025
Raid Level : raid5
Used Dev Size : 244065280 (232.76 GiB 249.92 GB)
Raid Devices : 3
Total Devices : 1
Persistence : Superblock is persistent
Update Time : Tue Jul 29 14:51:51 2025
State : active, FAILED, Not Started
Active Devices : 1
Working Devices : 1
Failed Devices : 0
Spare Devices : 0
Layout : left-symmetric
Chunk Size : 512K
Consistency Policy : unknown
Name : fnOS:0
UUID : 3ba3d465:9252aa97:6372896b:8f9e96af
Events : 243
Number Major Minor RaidDevice State
- 0 0 0 removed
- 0 0 1 removed
- 0 0 2 removed
- 8 113 1 sync /dev/sdh1
好了,到这里可以确认,这个3盘位raid5阵列的问题是:有2个盘因为一些原因,被系统判定掉线,导致raid5无法完成组装。
问题分析
根据以上得到的raid信息,可以确定是系统只能识别1个盘,判定另外2个盘掉线。
那接下去分别校验这三个盘,判断是哪里出了问题。
sudo mdadm --examine /dev/sdh1
sudo mdadm --examine /dev/sdj1
sudo mdadm --examine /dev/sdk1
最后得到以下信息:
/dev/sdh1:
Magic : a92b4efc
Version : 1.2
Feature Map : 0x1
Array UUID : 3ba3d465:9252aa97:6372896b:8f9e96af
Name : fnOS:0
Creation Time : Fri Feb 28 23:37:01 2025
Raid Level : raid5
Raid Devices : 3
Avail Dev Size : 488130560 sectors (232.76 GiB 249.92 GB)
Array Size : 488130560 KiB (465.52 GiB 499.85 GB)
Data Offset : 264192 sectors
Super Offset : 8 sectors
Unused Space : before=264112 sectors, after=0 sectors
State : clean
Device UUID : db80a296:cb7c4968:3fa20022:6a52ab84
Internal Bitmap : 8 sectors from superblock
Update Time : Tue Jul 29 14:51:51 2025
Bad Block Log : 512 entries available at offset 16 sectors
Checksum : c53acbf1 - correct
Events : 243
Layout : left-symmetric
Chunk Size : 512K
Device Role : Active device 1
Array State : .A. ('A' == active, '.' == missing, 'R' == replacing)
#################################################################################
/dev/sdj1:
Magic : a92b4efc
Version : 1.2
Feature Map : 0x1
Array UUID : 3ba3d465:9252aa97:6372896b:8f9e96af
Name : fnOS:0
Creation Time : Fri Feb 28 23:37:01 2025
Raid Level : raid5
Raid Devices : 3
Avail Dev Size : 488130560 sectors (232.76 GiB 249.92 GB)
Array Size : 488130560 KiB (465.52 GiB 499.85 GB)
Data Offset : 264192 sectors
Super Offset : 8 sectors
Unused Space : before=264112 sectors, after=0 sectors
State : clean
Device UUID : 16d083ad:0fc3c159:87702a0b:ec88f787
Internal Bitmap : 8 sectors from superblock
Update Time : Tue Jul 29 14:33:35 2025
Bad Block Log : 512 entries available at offset 16 sectors
Checksum : ba0861f2 - correct
Events : 239
Layout : left-symmetric
Chunk Size : 512K
Device Role : Active device 0
Array State : AAA ('A' == active, '.' == missing, 'R' == replacing)
#################################################################################
/dev/sdk1:
Magic : a92b4efc
Version : 1.2
Feature Map : 0x1
Array UUID : 3ba3d465:9252aa97:6372896b:8f9e96af
Name : fnOS:0
Creation Time : Fri Feb 28 23:37:01 2025
Raid Level : raid5
Raid Devices : 3
Avail Dev Size : 488130560 sectors (232.76 GiB 249.92 GB)
Array Size : 488130560 KiB (465.52 GiB 499.85 GB)
Data Offset : 264192 sectors
Super Offset : 8 sectors
Unused Space : before=264112 sectors, after=0 sectors
State : clean
Device UUID : 33db5e3c:58f52bb1:07e0deaf:4c74d658
Internal Bitmap : 8 sectors from superblock
Update Time : Tue Jul 29 14:33:35 2025
Bad Block Log : 512 entries available at offset 16 sectors
Checksum : 15e0fa3b - correct
Events : 239
Layout : left-symmetric
Chunk Size : 512K
Device Role : Active device 2
Array State : AAA ('A' == active, '.' == missing, 'R' == replacing)
提取以上信息的重点:
/dev/sdh1:
Update Time : Tue Jul 29 14:51:51 2025
Events : 243
Array State : .A. ('A' == active, '.' == missing, 'R' == replacing)
/dev/sdj1:
Update Time : Tue Jul 29 14:33:35 2025
Events : 239
Array State : AAA ('A' == active, '.' == missing, 'R' == replacing)
/dev/sdk1:
Update Time : Tue Jul 29 14:33:35 2025
Events : 239
Array State : AAA ('A' == active, '.' == missing, 'R' == replacing)
借助ai的分析,可以得出以下判断:因为突然掉线,3个盘的元数据未完成同步,导致系统无法正确的组装raid。
问题解决
好了,知道了问题原因,接下去就是找办法修复这个raid惹。
一:停止raid
系统当前识别md125
阵列有1个盘在线,后续我们操作元数据同步时,需要3个盘都是离线状态。
sudo mdadm --stop /dev/md125
二:强制组装raid。
# 强制组装raid
sudo mdadm --assemble --force -v /dev/md125 /dev/sdh1 /dev/sdj1 /dev/sdk1
成功重组raid的输出信息
mdadm: looking for devices for /dev/md125
mdadm: /dev/sdh1 is identified as a member of /dev/md125, slot 1.
mdadm: /dev/sdj1 is identified as a member of /dev/md125, slot 0.
mdadm: /dev/sdk1 is identified as a member of /dev/md125, slot 2.
mdadm: forcing event count in /dev/sdj1(0) from 239 up to 243
mdadm: forcing event count in /dev/sdk1(2) from 239 up to 243
mdadm: added /dev/sdh1 to /dev/md125 as 1
mdadm: added /dev/sdk1 to /dev/md125 as 2
mdadm: added /dev/sdj1 to /dev/md125 as 0
mdadm: /dev/md125 has been started with 3 drives.
注意:force
参数会强制同步 Events 计数,优先使用最新元数据(/dev/sdh1 的 Events: 243)
好了,到此raid就修复完成,系统就可以正确识别这个3盘位raid5,fnos也可以识别到这个存储空间,只需要在fnos的web控制台中点击去挂载
就可以完成存储空间的恢复。
🎉