Data-Recovery

如何從單個降級的 mdadm raid1 驅動器恢復文件?“不足以啟動陣列”

  • September 18, 2013

給定一個處於降級/重建狀態的 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設備供您使用)。使用設備映射器可能也可以這樣做 - 但我從未嘗試過。

引用自:https://unix.stackexchange.com/questions/72279