![mdadm 在 99.9% 时停止重建 RAID5 阵列](https://linux22.com/image/798373/mdadm%20%E5%9C%A8%2099.9%25%20%E6%97%B6%E5%81%9C%E6%AD%A2%E9%87%8D%E5%BB%BA%20RAID5%20%E9%98%B5%E5%88%97.png)
我最近在我的 QNAP TS-412 NAS 中安装了三个新磁盘。
这三个新磁盘应该与已经存在的磁盘组合成一个 4 磁盘 RAID5 阵列,因此我开始了迁移过程。
经过多次尝试(每次大约需要 24 小时)后,迁移似乎成功了,但导致 NAS 无响应。
那时我重置了 NAS。从那时起,一切都变得糟糕起来:
- NAS 启动但将第一个磁盘标记为故障并将其从所有阵列中移除,使它们处于瘫痪状态。
- 我对磁盘进行了检查,没有发现任何问题(这很奇怪,因为它几乎是新的)。
- 管理界面没有提供任何恢复选项,所以我想我只能手动进行。
我已使用mdadm
(/dev/md4
、/dev/md13
和/dev/md9
)成功重建了所有 QNAP 内部 RAID1 阵列,仅留下 RAID5 阵列;/dev/md0
:
我已经尝试过多次,使用以下命令:
mdadm -w /dev/md0
(由于从 NAS 移除后阵列以只读方式安装,因此必需/dev/sda3
。无法在 RO 模式下修改阵列)。
mdadm /dev/md0 --re-add /dev/sda3
之后阵列开始重建。但它在 99.9% 时停滞,而系统非常慢和/或无响应。(使用 SSH 登录大多数时候都会失败)。
当前状况:
[admin@nas01 ~]# cat /proc/mdstat
Personalities : [linear] [raid0] [raid1] [raid10] [raid6] [raid5] [raid4]
md4 : active raid1 sdd2[2](S) sdc2[1] sdb2[0]
530048 blocks [2/2] [UU]
md0 : active raid5 sda3[4] sdd3[3] sdc3[2] sdb3[1]
8786092608 blocks super 1.0 level 5, 64k chunk, algorithm 2 [4/3] [_UUU]
[===================>.] recovery = 99.9% (2928697160/2928697536) finish=0.0min speed=110K/sec
md13 : active raid1 sda4[0] sdb4[1] sdd4[3] sdc4[2]
458880 blocks [4/4] [UUUU]
bitmap: 0/57 pages [0KB], 4KB chunk
md9 : active raid1 sda1[0] sdd1[3] sdc1[2] sdb1[1]
530048 blocks [4/4] [UUUU]
bitmap: 2/65 pages [8KB], 4KB chunk
unused devices: <none>
(现在已经停滞2928697160/2928697536
了几个小时)
[admin@nas01 ~]# mdadm -D /dev/md0
/dev/md0:
Version : 01.00.03
Creation Time : Thu Jan 10 23:35:00 2013
Raid Level : raid5
Array Size : 8786092608 (8379.07 GiB 8996.96 GB)
Used Dev Size : 2928697536 (2793.02 GiB 2998.99 GB)
Raid Devices : 4
Total Devices : 4
Preferred Minor : 0
Persistence : Superblock is persistent
Update Time : Mon Jan 14 09:54:51 2013
State : clean, degraded, recovering
Active Devices : 3
Working Devices : 4
Failed Devices : 0
Spare Devices : 1
Layout : left-symmetric
Chunk Size : 64K
Rebuild Status : 99% complete
Name : 3
UUID : 0c43bf7b:282339e8:6c730d6b:98bc3b95
Events : 34111
Number Major Minor RaidDevice State
4 8 3 0 spare rebuilding /dev/sda3
1 8 19 1 active sync /dev/sdb3
2 8 35 2 active sync /dev/sdc3
3 8 51 3 active sync /dev/sdd3
检查后/mnt/HDA_ROOT/.logs/kmsg
发现,实际问题似乎在于/dev/sdb3
:
<6>[71052.730000] sd 3:0:0:0: [sdb] Unhandled sense code
<6>[71052.730000] sd 3:0:0:0: [sdb] Result: hostbyte=0x00 driverbyte=0x08
<6>[71052.730000] sd 3:0:0:0: [sdb] Sense Key : 0x3 [current] [descriptor]
<4>[71052.730000] Descriptor sense data with sense descriptors (in hex):
<6>[71052.730000] 72 03 00 00 00 00 00 0c 00 0a 80 00 00 00 00 01
<6>[71052.730000] 5d 3e d9 c8
<6>[71052.730000] sd 3:0:0:0: [sdb] ASC=0x0 ASCQ=0x0
<6>[71052.730000] sd 3:0:0:0: [sdb] CDB: cdb[0]=0x88: 88 00 00 00 00 01 5d 3e d9 c8 00 00 00 c0 00 00
<3>[71052.730000] end_request: I/O error, dev sdb, sector 5859367368
<4>[71052.730000] raid5_end_read_request: 27 callbacks suppressed
<4>[71052.730000] raid5:md0: read error not correctable (sector 5857246784 on sdb3).
<4>[71052.730000] raid5: some error occurred in a active device:1 of md0.
<4>[71052.730000] raid5:md0: read error not correctable (sector 5857246792 on sdb3).
<4>[71052.730000] raid5: some error occurred in a active device:1 of md0.
<4>[71052.730000] raid5:md0: read error not correctable (sector 5857246800 on sdb3).
<4>[71052.730000] raid5: some error occurred in a active device:1 of md0.
<4>[71052.730000] raid5:md0: read error not correctable (sector 5857246808 on sdb3).
<4>[71052.730000] raid5: some error occurred in a active device:1 of md0.
<4>[71052.730000] raid5:md0: read error not correctable (sector 5857246816 on sdb3).
<4>[71052.730000] raid5: some error occurred in a active device:1 of md0.
<4>[71052.730000] raid5:md0: read error not correctable (sector 5857246824 on sdb3).
<4>[71052.730000] raid5: some error occurred in a active device:1 of md0.
<4>[71052.730000] raid5:md0: read error not correctable (sector 5857246832 on sdb3).
<4>[71052.730000] raid5: some error occurred in a active device:1 of md0.
<4>[71052.730000] raid5:md0: read error not correctable (sector 5857246840 on sdb3).
<4>[71052.730000] raid5: some error occurred in a active device:1 of md0.
<4>[71052.730000] raid5:md0: read error not correctable (sector 5857246848 on sdb3).
<4>[71052.730000] raid5: some error occurred in a active device:1 of md0.
<4>[71052.730000] raid5:md0: read error not correctable (sector 5857246856 on sdb3).
<4>[71052.730000] raid5: some error occurred in a active device:1 of md0.
<4>[71052.730000] raid5: some error occurred in a active device:1 of md0.
<4>[71052.730000] raid5: some error occurred in a active device:1 of md0.
<4>[71052.730000] raid5: some error occurred in a active device:1 of md0.
<4>[71052.730000] raid5: some error occurred in a active device:1 of md0.
<4>[71052.730000] raid5: some error occurred in a active device:1 of md0.
<4>[71052.730000] raid5: some error occurred in a active device:1 of md0.
<4>[71052.730000] raid5: some error occurred in a active device:1 of md0.
<4>[71052.730000] raid5: some error occurred in a active device:1 of md0.
<4>[71052.730000] raid5: some error occurred in a active device:1 of md0.
<4>[71052.730000] raid5: some error occurred in a active device:1 of md0.
<4>[71052.730000] raid5: some error occurred in a active device:1 of md0.
<4>[71052.730000] raid5: some error occurred in a active device:1 of md0.
<4>[71052.730000] raid5: some error occurred in a active device:1 of md0.
<4>[71052.730000] raid5: some error occurred in a active device:1 of md0.
对于范围内的各个(随机?)扇区,上述序列以稳定的速率重复585724XXXX
。
我的问题是:
- 为什么它在接近尾声时就停滞了,但仍然使用了这么多的资源导致系统停滞(
md0_raid5
和md0_resync
进程仍在运行)。 - 有什么方法可以查明是什么原因导致其失败/停止?<-- 可能是由于
sdb3
错误。 - 我怎样才能完成操作而不丢失 3TB 的数据?(比如跳过有问题的扇区
sdb3
,但保留完整的数据?)
答案1
它很可能在完成之前就停滞了,因为它需要故障磁盘返回某种状态,但却没有得到。
无论如何,仅使用 4 个磁盘中的 3 个,您的所有数据都是(或应该)完整的。
您说它会从阵列中弹出有故障的磁盘 - 所以它应该仍在运行,尽管处于降级模式。
你能夠安裝它嗎?
您可以通过执行以下操作来强制运行阵列:
- 打印出数组的详细信息:
mdadm -D /dev/md0
- 停止阵列:
mdadm --stop /dev/md0
- 重新创建阵列并强制 md 接受它:“mdadm -C -n md0 --assume-clean /dev/sd[abcd]3”
只要满足以下条件,后一步就是完全安全的:
- 你不写入数组,并且
- 您使用了与之前完全相同的创建参数。
最后一个标志将阻止重建并跳过任何完整性测试。
然后您应该能够安装它并恢复您的数据。
答案2
显而易见的方法是更换有故障的磁盘,重新创建阵列并重播在阵列扩展操作之前所做的备份。
但既然你似乎没有这个选择,那么下一个最好的选择是:
- 获取一个具有足够空间的 Linux 系统来容纳所有磁盘的原始空间(如果我没记错的话,是 12 TB)
- 将数据从磁盘复制到此系统,目标可能是文件或块设备,这对来说并不重要
mdraid
。如果您的sdb3
设备有缺陷,您可能需要使用ddrescue
而不是简单的dd
来复制数据。 - 尝试从那里重新组装和重建阵列
另外,看看这个博客页面了解有关如何评估 RAID 5 阵列中多个设备故障情况的一些提示。