如何在mdadm设备上设置数据偏移量?

我正试图从退化的RAIDarrays中恢复。 我愚蠢地使用mdadm --create一路上,现在我的一些设备有不正确的超级块。 幸运的是我保留了一个旧的超级块的副本:

 /dev/sdd1: Magic : a92b4efc Version : 1.2 Feature Map : 0x0 Array UUID : 7318877d:a7538da2:dbdff5e9:613cc676 Name : vern:2 Creation Time : Thu Oct 20 21:58:58 2011 Raid Level : raid5 Raid Devices : 3 Avail Dev Size : 1953517954 (931.51 GiB 1000.20 GB) Array Size : 1953517568 (1863.02 GiB 2000.40 GB) Used Dev Size : 1953517568 (931.51 GiB 1000.20 GB) Data Offset : 2048 sectors Super Offset : 8 sectors State : clean Device UUID : 3dc62a0d:71ad83cf:f0dea827:6919f67c Update Time : Mon Mar 4 19:53:30 2013 Checksum : a1b473f6 - correct Events : 152880 Layout : left-symmetric Chunk Size : 512K 

比较这个新的超级块:

  Magic : a92b4efc Version : 1.2 Feature Map : 0x0 Array UUID : 53e45e96:bc283e07:77748762:24fade80 Name : Velma:2 (local to host Velma) Creation Time : Fri May 3 17:35:48 2013 Raid Level : raid5 Raid Devices : 3 Avail Dev Size : 1953257858 (931.39 GiB 1000.07 GB) Array Size : 1953257472 (1862.77 GiB 2000.14 GB) Used Dev Size : 1953257472 (931.39 GiB 1000.07 GB) Data Offset : 262144 sectors Super Offset : 8 sectors State : clean Device UUID : bae87034:ba42a7ed:c4fa2854:5888d619 Update Time : Fri May 3 17:35:48 2013 Checksum : b3c99dd4 - correct Events : 0 Layout : left-symmetric Chunk Size : 512K 

这里的主要区别在于数据偏移。 如果我可以手动将数据偏移量设置回2048个扇区,那么我有机会恢复RAID卷中的数据。

所以…我怎么设置这个偏移?

我在http://comments.gmane.org/gmane.linux.raid/38674的深处find了答案:事实certificate,有一个允许自定义数据偏移的mdadm分支。 为拿到它,为实现它:

 git clone -b data_offset git://neil.brown.name/mdadm cd mdadm make 

这增加了以每个设备为基础设置数据偏移量的能力,方法是在设备ID中添加一个:和偏移量。 例如:

 ./mdadm --create /dev/md2 --level=5 -raid-devices=3 --assume-clean \ /dev/sdb3:89088 /dev/sdd1:1024 /dev/sdc3:131072 

我必须将偏移量除以2,而不是K,而不是行业。 我想我可以使用

 ./mdadm --create /dev/md2 --level=5 -raid-devices=3 --assume-clean \ /dev/sdb3:178176s /dev/sdd1:2048s /dev/sdc3:262144s 

相反,但我没有证实这一点。

无论如何,这build立了正确的大小的arrays,我设法从中恢复一些数据。 结果!