Data-Recovery
如何從單個降級的 mdadm raid1 驅動器恢復文件?“不足以啟動陣列”
給定一個處於降級/重建狀態的 raid1 驅動器,可以強制安裝它嗎?我想在進行配對和重建的危險操作之前恢復所有文件。據我所知,驅動器的狀態非常好,完好無損。配對驅動器部分故障。
如果驅動器未處於重建狀態,我會確切地知道該怎麼做。這是我嘗試過的:
# mdadm --verbose --assemble /dev/md8 /dev/sdb1 --force mdadm: looking for devices for /dev/md8 mdadm: /dev/sdb1 is identified as a member of /dev/md8, slot 1. mdadm: no uptodate device for slot 0 of /dev/md8 mdadm: added /dev/sdb1 to /dev/md8 as 1 mdadm: /dev/md8 assembled from 0 drives and 1 rebuilding - not enough to start the array. # cat /proc/mdstat md8 : inactive sdb1[1](S) 976759808 blocks super 1.2 md0 : active raid1 sdc1[0] 976759672 blocks super 1.2 [2/1] [U_] # mdadm --stop /dev/md8 mdadm: stopped /dev/md8 # mount /dev/sdb1 /mnt/temp2 mount: unknown filesystem type 'linux_raid_member' # mount -o ro -t ext3 -b 2048 /dev/sdb1 /mnt/temp1 mount: wrong fs type, bad option, bad superblock on /dev/sdb1. # foremost -i /dev/sdb -o /tmp/foo (this results in perfectly good files)
在這種特殊情況下,該
foremost
命令會恢復文件,所以如果我只能讓超級塊偏移正確,那麼驅動器上肯定有東西。在這種特殊情況下,組裝陣列的兩半會使核心崩潰(!),所以無論如何這都不是一個真正的選擇(除了安全問題)。
更新:添加了 mdadm 的輸出
# mdadm --examine /dev/sdb1 /dev/sdb1: Magic : a92b4efc Version : 1.2 Feature Map : 0x2 Array UUID : e00a291e:016bbe47:09526c90:3be48df3 Name : ubuntu:0 Creation Time : Wed May 11 12:26:39 2011 Raid Level : raid1 Raid Devices : 2 Avail Dev Size : 1953519616 (931.51 GiB 1000.20 GB) Array Size : 1953519344 (931.51 GiB 1000.20 GB) Used Dev Size : 1953519344 (931.51 GiB 1000.20 GB) Data Offset : 2048 sectors Super Offset : 8 sectors Recovery Offset : 0 sectors State : clean Device UUID : 41346f44:ccacbbf7:0c17c133:eb7b341f Update Time : Sat Apr 13 00:02:08 2013 Checksum : 483a0a44 - correct Events : 402833 Device Role : Active device 1 Array State : AA ('A' == active, '.' == missing)
如果它是 RAID 1,並且如果您知道數據偏移量(例如 2048 個扇區,您通常可以通過 找出確切的數據偏移量
mdadm --examine /dev/sdb1
),那麼您可以創建一個只讀(為了安全起見)循環設備,如下所示:# losetup --find --show --read-only --offset $((2048*512)) /dev/sdb1 /dev/loop7
然後嘗試檢查然後安裝列印的循環設備:
# fsck.ext3 -n -v /dev/loop7 # mount -o ro /dev/loop7 /mnt/recovery
mount 可能可以通過
-o ro,loop,offset=
選項直接執行此操作,但我更喜歡手動創建循環設備,以確保它真的是只讀的。如果文件系統本身損壞,您應該使用 製作鏡像
dd
,並在鏡像上執行諸如此類的實驗fsck
。或者,您可以使用 Linux 網路塊設備在磁碟頂部放置一個寫入時複製層,這樣您就可以fsck
在沒有實際將任何內容寫入磁碟本身的情況下使用該層(nbd-server -c
/nbd-client
,將創建一個/dev/nbdX
設備供您使用)。使用設備映射器可能也可以這樣做 - 但我從未嘗試過。