5

У меня на рабочем месте два жестких диска по 500 ГБ от старого ноутбука с Windows. Мой начальник попросил меня скопировать содержимое на файловый сервер, если это возможно, с оговоркой, что никакие данные не могут быть потеряны.

Обычно для этого достаточно резервных копий, но это было с более ранних дней операции, когда такие вещи, как резервные копии, не велись более строго, и этот парень был заведомо плохо организован, поэтому я не уверен, что резервные копии имеют больше всего актуальное (или даже достаточно современное) содержание.


Первым делом я создал изображения с использованием ddrescue . Диск с таблицей разделов скопирован без ошибок, а другой диск потерял ~ 150 КиБ из-за ошибок. Изображения были смонтированы только для чтения в /dev/loop1 и /dev/loop2 с использованием losetup . fdisk -l показывает следующее:

Disk /dev/loop1: 465.8 GiB, 500107862016 bytes, 976773168 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes

Disk /dev/loop2: 465.8 GiB, 500107862016 bytes, 976773168 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x87afa6ad

Device       Boot      Start        End    Sectors   Size Id Type
/dev/loop2p1            2048   31459327   31457280    15G 27 Hidden NTFS WinRE
/dev/loop2p2 *      31459328   31664127     204800   100M 27 Hidden NTFS WinRE
/dev/loop2p3        31664128 1191071167 1159407040 552.9G  7 HPFS/NTFS/exFAT
/dev/loop2p4      1191071168 1953533951  762462784 363.6G  7 HPFS/NTFS/exFAT

Размеры разделов, по-видимому, указывают на то, что это RAID-массив или логический диск Windows, и быстрая проверка с помощью blkid показала, что типы дисков были isw_raid_member . Попытка собрать массив с помощью mdadm -v --assemble /dev/md0 /dev/loop2 /dev/loop1 к следующему выводу:

mdadm: looking for devices for /dev/md0
mdadm: Cannot assemble mbr metadata on /dev/loop2
mdadm: /dev/loop2 has no superblock - assembly aborted

Другие вещи, которые я пытался смонтировать диски или получить больше информации:

  • mount /dev/loop2 <mount point>: ошибка с unknown filesystem type 'isw_raid_member'
  • mount -t с NTFS и exFAT: невозможно найти файловую систему
  • mount /dev/loop2p[1234]: Special device <dev> does not exist
  • mdadm --create /dev/md0 --level=0 --raid-devices=2 /dev/loop[21]: указывает, что /dev/loop2 является частью массива raid 0 без устройств и даты создания от 00:00:00 1 января 1970 г.
  • mdadm -E /dev/loop[12] государства , что ни мкр Суперблок не был обнаружен на /dev/loop1 и выводит разделы и MBR , магическое число для aa55 /dev/loop2
  • file -s /dev/loop1: печать /dev/loop1: data
  • file -s /dev/loop2: выплевывает блок текста, в основном говоря, что это загрузочный сектор DOS /MBR, и дает необработанные числа для смещений / размеров разделов.
  • mount -t ntfs -o ro,offset=$((512*2048)) /dev/loop2 /mnt/partition1:

    NTFS signature is missing
    Failed to mount '/dev/loop3': Invalid argument
    The device '/dev/loop3' doesn't seem to have a valid NTFS
    

    Нет, я не опечатка 3 . Понятия не имею, откуда это взялось.

Я также посмотрел на Восстановление вышедшего из строя программного RAID, но это похоже на то, что уже работающие Linux-массивы восстанавливаются в Linux (не говоря уже о том, что мне это не нравится).

Что я могу сделать, чтобы безопасно смонтировать эти образы?

1 ответ1

3

Примечание: я пишу этот ответ после того, как ОП получил помощь через комментарии, испытания и ошибки. Имея в виду других пользователей, я делаю ответ более широким и чуть более общим.


Если эти два диска работают вместе, они могут быть

  1. зеркальный, в стиле RAID1;
  2. или сцепленный, в стиле JBOD;
  3. или полосатый, в стиле RAID0.

Случаи упорядочены, начиная с самого простого, чтобы иметь дело с. Я научу вас, как отличать их друг от друга и как с ними обращаться, чтобы в конечном итоге смонтировать разделы.

Монтирование должно выполняться сначала с -o ro , пока вы не убедитесь, что все правильно. В некоторых случаях mount может завершиться успешно и дать вам доступ к искаженной структуре каталогов и / или зашифрованным файлам. Безумные данные и / или метаданные указывают, что вы не поняли это правильно. Монтирование только для чтения гарантирует, что вы не повредите изображения.


1. зеркальный, в стиле RAID1

В этом случае оба диска должны содержать одинаковые данные, если они исправны; они оба должны содержать одну и ту же действительную таблицу разделов. Только изображение, которое вы имеете как /dev/loop2 сообщает о таблице разделов. Это может быть потому, что

  • они не были отражены в первую очередь,
  • или эти ошибки, которые вы упомянули на других дисках, произошли там, где находится таблица разделов (в случае таблицы разделов DOS это MBR, то есть в самом начале, сектор номер 0).

Однако есть одна большая подсказка, которая делает RAID1 маловероятным в вашем случае: fdisk говорит, что на одном диске ровно 976773168 секторов, но последний сектор четвертого раздела - 1953533951 . Это почти вдвое больше, это предполагает, что структура разделов появляется на двух не зеркальных дисках.

Но допустим, что ваши диски были в два раза больше, и приведенная выше подсказка не применима. Если вы считаете, что имеете дело с зеркальными дисками, работайте с полученным образом без ошибок, оставьте другое изображение в покое. Попробуйте смонтировать разделы так:

mount -o ro,offset=$((512*2048)) /dev/loop2 /mnt/partition1
mount -o ro,offset=$((512*31459328)) /dev/loop2 /mnt/partition2
mount -o ro,offset=$((512*31664128)) /dev/loop2 /mnt/partition3

и т. д. Вы можете даже не использовать losetup для получения /dev/loop2 но напрямую указывать путь к файлу, mount должен создать устройство цикла самостоятельно и справиться с этим просто отлично:

mount -o ro,offset=$((512*2048)) /path/to/the/image2.raw /mnt/partition1

2. сцепленный, в стиле JBOD

Если диски, создающие JBOD, используют MBR для хранения таблицы разделов, fdisk найдет ее только на самом первом диске. Другие диски могут ничего не сообщать или какие-то безумные таблицы разделов; Вероятность получения таблицы разделов, которая выглядит нормально с не первого диска, очень мала, но даже тогда эта таблица разделов ничего не значит.

Если диски, создающие JBOD, используют GPT для хранения таблицы разделов, такие инструменты, как gdisk , найдут первичную таблицу на самом первом диске, вторичную (резервную) таблицу на самом последнем.

У вас есть два изображения, одно из которых сообщает таблицу разделов DOS (т. Е. Таблицу разделов в MBR), а другое - отсутствие таблицы разделов. Если они создают JBOD, вы знаете, что в первую очередь идет тот, который соответствует /dev/loop2 .

В вашем случае разделы 1 и 2 достаточно малы, чтобы полностью вписаться в первый диск JBOD. Вы можете попробовать смонтировать их с соответствующим смещением от подошвы /dev/loop2 . Если это даст вам доступ к здравым файловым системам, то вы будете знать, что JBOD, вероятно, является правильной настройкой. Для доступа ко всем разделам необходимо объединить изображения.

Этот мой ответ предоставляет способ объединения изображений без записи результата на диск. В вашем случае процедура может быть:

  1. dmsetup create mydisk
  2. введите 0 976773168 linear /path/to/the/image2.raw 0 Enter
  3. введите 976773168 976773168 linear /path/to/the/image1.raw 0 Enter
  4. нажмите Ctrl+D

Полученное устройство должно быть /dev/mapper/mydisk . Попробуйте смонтировать любой раздел с соответствующим offset=… .

Для уничтожения устройства вызовите dmsetup remove mydisk .


3. полосатый, в стиле RAID0

Аналогично JBOD, если диски, создающие RAID0, используют MBR для хранения таблицы разделов, fdisk найдет ее только на самом первом диске. Другие диски могут ничего не сообщать или какие-то безумные таблицы разделов; Вероятность получения таблицы разделов, которая выглядит нормально с не первого диска, очень мала, но даже тогда эта таблица разделов ничего не значит.

Если диски для сборки RAID0 используют GPT для хранения таблицы разделов, ситуация усложняется. В зависимости от того, насколько велик размер полосы, вы можете получить или не получить первичную таблицу разделов с самого первого диска, вы можете или не можете получить вторичную (резервную) таблицу разделов с самого последнего диска. Вы должны получить устаревшую MBR с самого первого диска (если только не произошла ошибка чтения).

У вас есть два изображения, одно из которых сообщает таблицу разделов DOS (т. Е. Таблицу разделов в MBR), а другое - отсутствие таблицы разделов. Если они создадут RAID0, вы знаете, что в первую очередь идет тот, который соответствует /dev/loop2 . То, что вы не знаете, это размер полосы. В общем, нет твердого способа узнать это, вы должны попробовать общие ценности и проанализировать результаты.

Процедура чередования ваших изображений и создания виртуального устройства выглядит следующим образом:

  1. dmsetup create mydisk
  2. тип 0 1953546336 striped 2 256 /dev/loop2 0 /dev/loop1 0 введите
  3. нажмите Ctrl+D

Полученное устройство должно быть /dev/mapper/mydisk . Число 256 означает размер полосы 128 КиБ, и это должно быть правильно угадано. В общем, независимо от возможных проблем с GPT до dmsetup , теперь gdisk -l /dev/mapper/mydisk должен возвращать правильную таблицу разделов, если вы угадаете правильный размер полосы. Если вы угадаете это неправильно, таблица разделов может быть или не быть действительной. Если он выглядит корректным, попробуйте смонтировать все разделы с соответствующими значениями offset=… .

В вашем случае таблица разделов, безусловно, будет той, которую вы получили из /dev/loop2 .

Помните, что даже при неправильном предположении вы сможете смонтировать, но файлы будут зашифрованы. В этом случае umount , вызовите dmsetup remove mydisk и повторите dmsetup create… с другим значением вместо 256. Числа, которые нужно попробовать: 8, 16, 32, 64, 128, 256, возможно, другие степени 2. Если возможно, читайте файлы с проверяемым содержимым (такие носители, как MP3, воспроизводятся ли они без дрожания?) или формальная структура (как PDF-файлы, они открываются без ошибок?) чтобы сказать, если ваша догадка верна. Файлы, меньшие, чем правильный размер полосы, могут не показывать, что ваше предположение неверно, поэтому лучше использовать avi 700 МБ, а не просто текстовый файл размером в несколько КБ.

Для уничтожения устройства вызовите dmsetup remove mydisk .

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