用mdam恢复Synology丢失的RAID1卷

几天前我发现我的DS412 +处于致命状态。 卷1崩溃,系统卷也是。 而且Volume2从系统中消失了! 看起来Volume1没有空闲空间,不能将数据从一些坏块传输到一个新的地方,并伤害系统数据。 (这只是一个理论)。

我设法使用这里描述的过程( e2fsck, mdadm reassemble )将Volume1恢复到生命。 BTW不得不提及新的syno_poweroff_task命令,简化了这个过程!

然后,我使用Synology GUI恢复系统音量。 一切开始工作确定,除了我不能还原Volume2。 这是由两个相同大小的磁盘组成的RAID1arrays。 这是崩溃前date的/etc/space_history*.xml的摘录:

 <space path="/dev/md3" reference="/volume2" > <device> <raid path="/dev/md3" uuid="927afd83:*" level="raid1" version="1.2"> <disks> <disk status="normal" dev_path="/dev/sdc3" model="WD30EFRX-68AX9N0 " serial="WD-*" partition_version="7" slot="1"> </disk> <disk status="normal" dev_path="/dev/sdd3" model="WD30EFRX-68AX9N0 " serial="WD-*" partition_version="7" slot="0"> </disk> </disks> </raid> </device> <reference> <volume path="/volume2" dev_path="/dev/md3"> </volume> </reference> 

RAID成员(/ dev / sdc3和/ dev / sdd3)仍然在他们的位置,看起来他们是好的,至less/ dev / sdc3。

 DiskStation> mdadm --misc --examine /dev/sdc3 /dev/sdc3: Magic : a92b4efc Version : 1.2 Feature Map : 0x0 Array UUID : 600cff1e:0e27a96d:883007c3:610e73ef Name : DiskStation:3 (local to host DiskStation) Creation Time : Thu Mar 19 22:21:08 2015 Raid Level : raid1 Raid Devices : 2 Avail Dev Size : 5851088833 (2790.02 GiB 2995.76 GB) Array Size : 5851088512 (2790.02 GiB 2995.76 GB) Used Dev Size : 5851088512 (2790.02 GiB 2995.76 GB) Data Offset : 2048 sectors Super Offset : 8 sectors State : clean Device UUID : f0b910a0:1de7081f:dd65ec22:a2a16d58 Update Time : Thu Mar 19 22:21:08 2015 Checksum : a09b6690 - correct Events : 0 Device Role : Active device 0 Array State : A. ('A' == active, '.' == missing) 

我已经尝试了很多与mdadm的技巧,像这样的许多forms:

 mdadm -v --assemble /dev/md3 /dev/sdc3 /dev/sdd3 mdadm --verbose --create /dev/md3 --level=1 --raid-devices=2 /dev/sdc3 /dev/sdd3 --force mdadm --verbose --create /dev/md3 --level=1 --raid-devices=2 /dev/sdc3 missing 

所有这些导致了这样的事情:

 mdadm: ADD_NEW_DISK for /dev/sdc3 failed: Invalid argument 

有没有机会恢复RAID卷? 还是有机会从卷恢复数据? 例如,直接挂载/ dev / sdc3成员?

更多mdadm信息:

 DiskStation> cat /proc/mdstat Personalities : [linear] [raid0] [raid1] [raid10] [raid6] [raid5] [raid4] md2 : active raid1 sdb3[0] 2925544256 blocks super 1.2 [1/1] [U] md1 : active raid1 sdb2[0] sdc2[1] 2097088 blocks [4/2] [UU__] md0 : active raid1 sdb1[2] sdc1[0] 2490176 blocks [4/2] [U_U_] 

最终(经过几天的探索)我设法强制arrays工作,并复制数据。

首先,原因是磁盘坏道 – 我想在RAID超级块和/或分区表的区域。

其次,我不得不使用dmesgmdadm --assemble查看错误mdadm --assemblemdadm --create

  [Thu Mar 19 23:27:04 2015] end_request: I/O error, dev sdc, sector 9437194 

所以我采取了以下步骤摆脱困境。 请记住,我不能保证这种方式在所有细节上都是正确的,可能会导致数据丢失 ,但它对我有帮助。

坏的部门

首先,我照顾坏磁盘部门(我不知道为什么他们没有自动重映射)。 可能这会导致另一个磁盘上的数据出现一些问题。

检查了故障一的几个部门:

 hdparm --read -sector 9437191 / dev / sdc
 ...
 hdparm  - 读取扇区9437195 / dev / sdc
 ....
 hdparm  - 读取扇区9437199 / dev / sdc

然后修复坏的:

 hdparm --yes-i-know-what-i-am-doing --write-sector 9437198 /dev/sdc 

/ dev / sdc分区表

接下来,我想恢复和检查sdc分区表:我使用了不属于Synology标准发行版的[Synocommunity repository][1] ,但可以从[Synocommunity repository][1] 。 安装完成后,可以通过/usr/local/testdisk/bin/testdisk从控制台访问。

  1. select一个磁盘,然后select[EFI GPT]分区映射。
  2. 分析和快速search。 它发现了几个分区。
 TestDisk 7.0-WIP,数据恢复实用程序,2015年1月
 Christophe GRENIER 
 http://www.cgsecurity.org

磁盘/ dev / sdc  -  3000 GB / 2794 GiB  -  CHS 364801 255 63
     分区开始扇区中的结束大小
  D MS Data 256 4980607 4980352 [1.41.10-2219]
  P Linux Raid 256 4980735 4980480 [md0]
  D Linux交换4980736 9174895 4194160
 > P Linux Raid 4980736 9175039 4194304 [md1]
  P Linux Raid 9437184 5860523271 5851086088 [DiskStation:3]
  1. 将所有Linux Raid标记为P(主)分区,其余的市场为D(已删除)。 写分区表。

最后 – partprobe /dev/sdc更新系统分区表(无需重新启动)。

mdadm的

现在有可能恢复RAID超级块。

 mdadm --zero-superblock /dev/sdc3 

这帮助我清除了旧的,可能损坏的RAIDarrays信息。 我认为这个行动在许多情况下是危险的。

 mdadm --create /dev/md3 --verbose --assume-clean --metadata=1.2 --level=1 --raid-devices=2 /dev/sdc3 missing 

但在我的情况下,它已经恢复了RAID 1与1磁盘可用,没有数据丢失。

我不知道是什么原因,但md3上的文件系统大小(ext4)与md3的物理大小略有不同。 所以我运行:

 resize2fs /dev/md3 

和文件系统检查:

 fsck.ext4 -f -C 0 /dev/md3 

现在可以挂载数组了:

 mount -t ext4 -o ro /dev/sdc3 /volume2 

所以我成功地复制了所有的数据。