几天前,我发现我的 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 --assemble
mdadm --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
。
- 选择一个磁盘,然后选择[EFI GPT]分区图。
- 分析并快速搜索。它找到了几个分区。
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]
- 将所有 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
这样我就成功复制了所有数据。