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

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

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

1 ответ1

0

Я полностью восстановил данные моего коллеги в той же ситуации (мертвая материнская плата). Инструмент был dmsetup в Linux. Если у вас не установлен 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 -s, не читаете pdf -s, не отображаете jpg -s и т.д.) И подтверждаете, что все кажется с целью.

очищающий

Чтобы уничтожить /dev/mapper/mydevice:

dmsetup remove /dev/mapper/mydevice

Конечно, вы должны сначала umount его разделы.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .