Как мне смонтировать многодисковый Windows NTFS RAID / логический диск в Linux?

1726
awksp

У меня на рабочем месте два жестких диска по 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]: Указывает, что не обнаружен суперблок md, /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 (не говоря уже о том, что мне это не нравится).

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

5
Пожалуйста, дайте мне знать, если это должно идти на другом сайте SE. Я подумал о сбое сервера, но казалось, что это может произойти в некоммерческих условиях, поэтому я выбрал здесь. awksp 7 лет назад 0
Насколько я могу судить, LOOP2 - это 1-й диск от ноутбука, а LOOP1 - 2-й диск. Похоже, что в ноутбуке был только диск 1. Диск 2 был добавлен и (предположим теперь) оба диска были заменены на динамические диски в Windows. Затем C: и D: где расширены с пространством, выделенным на 2-м диске. Я не знаю, есть ли способ понять это из Linux. Если возможно, я бы поместил диски обратно в оригинальный ноутбук (или очень похожий) и загрузился в Windows. Скопируйте данные оттуда. Сохраняйте созданные вами изображения, чтобы вернуться к первоначальной ситуации запуска на случай, если Windows загрузит диски. Tonny 7 лет назад 0
@ Тонни Ваше предположение звучит разумно. Я надеялся поработать с образами и использовать диски в качестве оригиналов, но теперь, когда вы упомянули об этом, работает и другой способ. Единственное, что меня беспокоит, это плохие сектора на втором диске. IIRC `dd` допустил ошибку из-за этих секторов около 10GB, но все остальное было в порядке. Будет ли это мешать восстановлению диска с изображением? awksp 7 лет назад 0
Вернуть образ на тот же диск, вероятно, не очень хорошая идея. Запись на этот диск может даже ухудшить ситуацию. (Если вы видите поврежденные сектора, диск уже израсходовал все свои запасные сектора. Он уже замертво.) Просто получите другой диск того же размера или чуть больше. Я бы порекомендовал НЕ запускать Windows chkdsk в системе при первой загрузке, а просто загружать и копировать данные. После того, как это будет сделано, дайте ему команду chkdsk и посмотрите, сможете ли вы восстановить больше данных. Tonny 7 лет назад 0
@ Тонни Правильно, у тебя есть смысл. Я не думаю, что у нас есть какие-либо 2,5-дюймовые накопители или USB-адаптеры, поэтому, если другие методы не сработают, я пойду в местный компьютерный магазин и попробую то, что вы предложили. awksp 7 лет назад 0
@KamilMaciorowski Команды `mount` завершаются неудачно с` неизвестным типом файловой системы 'isw_raid_member'`, к сожалению. awksp 7 лет назад 0
@awksp Как насчет форсирования NTFS путем добавления опции `-t ntfs` к этим командам` mount`? Kamil Maciorowski 7 лет назад 0
@KamilMaciorowski Вставил полные результаты в конец вопроса. Суть в том, что `mount`, похоже, пытается получить доступ к` / dev / loop3` и терпит неудачу. awksp 7 лет назад 0
@KamilMaciorowski Святой мол, это сложно. Это будет немного, пока я не смогу попробовать это, хотя; сервер, на котором находятся изображения, не виден снаружи офиса. awksp 7 лет назад 0
@KamilMaciorowski Изменена цепочка комментариев в редактирование внизу вопроса. tl; dr: `dmsetup` успешно, но не может понять, как монтировать что-либо, даже с аргументом` offset` awksp 7 лет назад 0
@awksp Похоже, это неправильный путь. Извините, я не мог помочь. Kamil Maciorowski 7 лет назад 0
@KamilMaciorowski :( Это очень плохо ... Спасибо за вашу помощь, хотя! awksp 7 лет назад 0
@awksp Проверьте [это] (http://blogs.silicontechnix.com/?p=962). Похоже, `dmraid` может быть полезен для вас. Это просто ключ, свинец. Я думаю, что `isw_raid_member` указывает на программный RAID Intel. Проведите исследование. Kamil Maciorowski 7 лет назад 0
Идея вне левого поля: Вы пытались запустить виртуальную машину Windows и бросили в нее копии двух изображений, чтобы посмотреть, сможет ли M $ magic просто это выяснить, а затем самба? Peter Berbec 6 лет назад 0
@PeterBerbec Это интригующая идея. К сожалению, в настоящее время у меня нет легкого доступа к изображениям, но я сделаю снимок в следующий раз awksp 6 лет назад 0
@KamilMaciorowski idk, если вы все еще рядом, но я пробовал ваши инструкции снова, и мне действительно удалось получить вещь для установки! Разница была только в том, что я использовал другое количество секторов (19553531904 вместо 1953546336) и «chunk_size» 256. Не уверен, что именно я сделал по-другому на этот раз, но я просто рад, что это сработало. Отправьте ответ, и я приму! awksp 5 лет назад 0
@KamilMaciorowski Также рассмотрите возможность размещения ответа [здесь] (https://superuser.com/questions/1210258/is-it-possible-to-recover-convert-mount-fakeraid-image-files-tldr-have); у этого парня, похоже, похожая проблема. Кажется, он нашел обходной путь, но, надеюсь, размещение правильного ответа не повредит awksp 5 лет назад 0
@KamilMaciorowski И похоже, ваше исходное количество секторов тоже работает (и на самом деле это более правильно, потому что я действительно могу смонтировать 4-й раздел таким образом). Не уверен, почему вещи не работают раньше awksp 5 лет назад 0
@KamilMaciorowski Готово! Извините, что так долго awksp 5 лет назад 0

1 ответ на вопрос

3
Kamil Maciorowski

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


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

  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 Enter
  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.

Третий вариант был тот, который работал в моем случае. Спасибо за помощь! awksp 5 лет назад 0

Похожие вопросы