Перестройка массива RAID 0 (без сбоя дисков), если я знаю размер блока и начальное смещение?

Материнская плата моего ноутбука умерла. Я удалил два жестких диска, и оба в рабочем состоянии. Затем я подключил оба к другому компьютеру и с помощью некоторого бесплатного программного обеспечения смог получить следующее:

  • Размер блока: 128 КБ (256 секторов)
  • Данные начинаются в секторе LBA 0
  • Блок-карта: 1, 2
  • Я также знаю порядок дисков

Мне интересно, достаточно ли этой информации для перестройки массива, и если да, то как мне это сделать?

1 ответ

Я полностью восстановил данные моего коллеги в той же ситуации (мертвая материнская плата). Инструмент был dmsetup в линуксе Если у вас не установлен Linux, используйте LiveCD, например, Knoppix.

Я не знаю, знакомы ли вы с Linux или нет. Мой ответ не охватывает все "очевидные" основы, которые могут вам понадобиться (например, mkdir или же sudo), так что если вы новичок в Linux, то учитесь, спрашивайте в комментариях и т. д.

Здесь я предполагаю, что ваши два диска /dev/sda а также /dev/sdb, Переобразите мой пример к вашим реальным значениям.

Расследование дальше

Поскольку вы знаете, что 256 секторов равны 128 КиБ, размер сектора составляет 512 В. Вам необходимо знать, сколько секторов имеется на каждом диске. Вы сказали, что знаете порядок проезда; это не обязательно означает, что вы будете знать, какое устройство будет /dev/sda когда ваш Linux запускается. Вызвать один за другим:

gdisk -l /dev/sda
gdisk -l /dev/sdb

Одна из этих команд должна показать вам разумную таблицу разделов, она указывает на первое устройство в вашем массиве (это знание будет полезно позже). Игнорируйте предупреждения, если таковые имеются. Каждая команда покажет вам также количество секторов для соответствующего диска. Эти два числа могут или не могут быть равны. Если они равны, умножьте число на 2 (в общем случае: на количество дисков); если они не равны, получите наименьшее число и умножьте на 2. В результате получается максимальное количество секторов, которое может использовать RAID0. Давайте назовем это N.

Но! В вашем массиве должно быть 256 секторов одного диска, за которыми следуют 256 секторов другого и т. Д., Равное их количество. Следовательно, число секторов в вашем массиве должно делиться на 512. N может не делиться, поэтому вы должны выбрать ближайшее не большее целое число, которое делится на 512. Работайте с калькулятором или, например, bash (замените "N" фактическим число):

M=$((N/512*512))
echo $M

Это наиболее вероятное количество секторов в вашем массиве. Самое важное сейчас: это действительное число, даже если по какой-то причине фактическое число меньше этого.

Создание подключенного устройства

Следующая команда должна быть почти правильной для вас:

echo "0 $M striped 2 256 /dev/sda 0 /dev/sdb 0" | dmsetup create mydevice

Я написал "почти", потому что есть несколько вещей, которые нужно отрегулировать:

  • замена $M с его правильным значением вручную, если вы использовали калькулятор вместо арифметики оболочки;
  • измените порядок устройства и названия, чтобы соответствовать вашему случаю;
  • вам, вероятно, понадобится sudo бежать dmsetup,

Аргумент к echo это карта вашего устройства, mydevice это произвольное имя. Карта говорит (по порядку), что новый фрагмент устройства начинается с 0сектор и покрытие $M секторы stripped, построенный с 2 устройства с полосой размером 256 секторы, устройства (по порядку) /dev/sda (начиная с его 0сектор) и /dev/sdb (также начиная с его 0сектор).

Теперь вы должны иметь /dev/mapper/mydevice доступны и готовы к использованию. (Я не уверен на 100% в каждой реализации dmsetup создает узлы в /dev/mapper/; mydevice должен появиться где-то.)

монтаж

Проверьте таблицу разделов, которая должна быть вменяемой и имеет смысл:

gdisk -l /dev/mapper/mydevice

Если есть MBR, а не GPT, вы можете получить предупреждение о том, что таблица вторичных разделов перекрывает последний раздел. Это потому что gdisk готовится написать GPT. Вам не нужно это делать, и вы не будете. Игнорируйте предупреждение, если оно есть. Не о чем беспокоиться, если у вас уже нет GPT и не происходит дублирование.

Я видел людей, использующих dmsetup или же kpartx создать узел, связанный с разделом, который они хотят смонтировать. Или даже dd "извлечь" раздел и смонтировать полученный файл. Ничего из этого не нужно. В настоящее время вы можете mount раздел внутри устройства благодаря offset вариант. Например, если раздел, который нужно смонтировать, начинается в секторе 63. (общее значение для системного раздела Windows XP), то вы монтируете его так:

mount -o offset=$((512*63)),ro /dev/mapper/mydevice /mnt/foo

Я настоятельно рекомендую монтировать только для чтения (-o ro) сначала (или вообще, если вы просто хотите получить данные). Если в используемом вами программном обеспечении что-то не так или если я допустил ошибку с какой-либо командой, вы можете повредить ваши данные, если вы не смонтируете их только для чтения. Это хорошая причина для использования ro вариант, по крайней мере, пока вы не бродите вокруг файловой системы, прочитайте несколько файлов (т.е. играть mp3и aviчитать pdf-с, дисплей jpgи т. д.) и подтвердите, что все в порядке.

очищающий

Разрушать /dev/mapper/mydevice:

dmsetup remove /dev/mapper/mydevice

Конечно ты должен umount его разделы первыми.

Другие вопросы по тегам