使用 mdam 恢復 Synology 上失去的 RAID1 卷
幾天前,我發現我的 DS412+ 處於致命狀態。Volume1 崩潰了,系統卷也崩潰了。而且,Volume2 從系統中消失了!看起來 Volume1 沒有可用空間,無法將數據從幾個壞塊傳輸到新位置,這會損害系統數據。(這只是一個理論)。
我設法使用此處描述的過程( )使 Volume1 恢復了生機
e2fsck, mdadm reassemble
。順便說一句,必須提到syno_poweroff_task
簡化流程的新命令!然後我使用 Synology GUI 恢復了系統音量。一切開始正常,除了我無法恢復 Volume2。它是 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_]
最終(經過幾天的探索)我設法強制陣列工作並複制數據。
首先,原因是磁碟壞扇區——我想是在raid superblock 和/或分區表的區域。
其次,我不得不使用在or
dmesg
期間查看錯誤:mdadm --assemble``mdadm --create
[Thu Mar 19 23:27:04 2015] end_request: I/O error, dev sdc, sector 9437194
所以我採取了以下步驟來擺脫這種情況。請記住,我不保證這種方式在所有細節上都是正確的,並且可能會導致數據失去,但它對我有幫助。
壞扇區
首先,我會處理壞磁碟扇區(我不知道為什麼它們沒有自動重新映射)。這可能導致另一個磁碟上的數據出現一些問題。
檢查了故障一周圍的幾個扇區:
hdparm --read-sector **9437191** /dev/sdc ... hdparm --read-sector **9437195** /dev/sdc .... hdparm --read-sector **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 Raid 9437184 5860523271 5851086088 [DiskStation:3]
- 將所有 Linux Raid 標記為 P(主)分區,其餘市場標記為 D(已刪除)。寫分區表。
最終 -
partprobe /dev/sdc
更新系統分區表(無需重新啟動)。mdadm
現在可以恢復raid superblock。
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
所以我成功複製了所有數據。