使用 mdam 恢复 Synology 上丢失的 RAID1 卷

使用 mdam 恢复 Synology 上丢失的 RAID1 卷

几天前,我发现我的 DS412+ 处于致命状态。Volume1 崩溃了,系统卷也崩溃了。此外,Volume2 从系统中消失了!看起来 Volume1 没有可用空间,无法将数据从几个坏块转移到新位置,这会损坏系统数据。(这只是一个理论)。

我设法使用程序让 Volume1 恢复正常描述在这里e2fsck, mdadm reassemble)。顺便提一下syno_poweroff_task简化流程的新命令!

然后我使用 Synology GUI 恢复了系统卷。一切都开始正常工作,只是我无法恢复卷 2。它是 RAID1 阵列,由 2 个大小相同的磁盘组成。这是/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)仍在其位置,并且看起来它们没有问题,至少 /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 的技巧,例如:

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_]

答案1

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

首先,原因是磁盘坏扇区 - 我认为是在 raid 超级块和/或分区表区域。

其次,我必须使用或dmesg来查看错误:mdadm --assemblemdadm --create

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

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

坏扇区

首先,我处理坏的磁盘扇区(我不知道为什么它们没有自动重新映射)。这可能会导致另一个磁盘上的数据出现一些问题。

检查了故障一周围的几个区域:

hdparm --读取扇区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 分区表:我使用的testdisk不是 Synology 标准发行版,但可以从 进行安装[Synocommunity repository][1]。安装后,可以通过 控制台访问它/usr/local/testdisk/bin/testdisk

  1. 选择一个磁盘,然后选择[EFI GPT]分区图。
  2. 分析并快速搜索。它找到了几个分区。
TestDisk 7.0-WIP,数据恢复实用程序,2015 年 1 月
克里斯托弗·格雷尼埃
http://www.cgsecurity.org

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

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

管理

现在可以恢复 raid 超级块了。

mdadm --zero-superblock /dev/sdc3 

这帮助我清除了有关 RAID 阵列的旧的和可能已损坏的信息。我认为这种操作在很多情况下都很危险。

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

但就我而言,它恢复了具有 1 个可用磁盘的 raid1,并且没有数据丢失。

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

resize2fs /dev/md3

文件系统检查:

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

现在可以挂载阵列了:

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

这样我就成功复制了所有数据。

相关内容