Я пытаюсь восстановиться после деградированного RAID-массива. Я тупо использовал 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: оказывается, есть ветка mdadm
что позволяет настраивать смещения данных. Чтобы получить это:
git clone -b data_offset git://neil.brown.name/mdadm
cd mdadm
make
Это добавляет возможность устанавливать смещение данных для каждого устройства путем добавления идентификатора устройства с: и смещения. Например:
./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
вместо этого, но я не проверял это.
В любом случае, это построило массив правильного размера, и мне удалось восстановить из него некоторые данные. Результат!