Как смонтировать / восстановить данные на диске, который был частью рейда 1 mdadm на другой машине?


17

Некоторый фон

  • Сам диск был "обработан" другом и, как говорят, все еще неповрежден, неповрежден и все еще может быть смонтирован / восстановлен
  • Диск был частью программного рейда 1 на Ubuntu 12.04
  • Другой диск в исходном рейде 1 был отформатирован и использован для другой цели, оставляя текущий диск (рассматриваемый) технически частью рейда, который больше не существует

Что я уже пробовал

  • Базовый монтаж

    • Я добавил запись в fstab, пометил диск как ext3 / ext4 и попытался смонтировать.
    • При монтаже появляется следующая ошибка

      wrong fs type, bad option, bad superblock on

    • И в dmesg

      EXT4-fs (sdc1): VFS: Can't find ext4 filesystem

  • Я попытался найти тип файловой системы диска и придумал

    $sudo file -s /dev/sdc
    /dev/sdc: x86 boot sector; partition 1: ID=0x83, starthead 254, startsector 63, 1953520002 sectors, code offset 0xb8

Где мне нужна помощь / Мои вопросы

  • Есть ли способ конвертировать диск в ext4 без повреждения данных?
  • Есть ли простой способ смонтировать диск с типом файлов Linux 83 и восстановить данные?
  • У меня есть другой диск в настоящее время свободен на случай, если есть возможность как-то пересобрать рейд
  • Моя главная цель - восстановить данные с диска. Я открыт для всех вариантов.

Обновить

Вывод некоторых команд

  • fdisk -l / dev / sdc

    $fdisk -l /dev/sdc

    Disk /dev/sdc: 1000.2 GB, 1000204886016 bytes
    255 heads, 63 sectors/track, 121601 cylinders, total 1953525168 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 identifier: 0x0005ed9c

    Device Boot Start End Blocks Id System
    /dev/sdc1 63 1953520064 976760001 83 Linux

  • файл -s / dev / sdc1

    $file -s /dev/sdc1
    /dev/sdc1: data

  • hexdump -C -n 32256 / dev / sdc (не уверен, может ли это помочь или нет)

    $hexdump -C -n 32256 /dev/sdc`
    00000000  fa b8 00 10 8e d0 bc 00  b0 b8 00 00 8e d8 8e c0  |................|
    00000010  fb be 00 7c bf 00 06 b9  00 02 f3 a4 ea 21 06 00  |...|.........!..|
    00000020  00 be be 07 38 04 75 0b  83 c6 10 81 fe fe 07 75  |....8.u........u|
    00000030  f3 eb 16 b4 02 b0 01 bb  00 7c b2 80 8a 74 01 8b  |.........|...t..|
    00000040  4c 02 cd 13 ea 00 7c 00  00 eb fe 00 00 00 00 00  |L.....|.........|
    00000050  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
    *
    000001b0  00 00 00 00 00 00 00 00  9c ed 05 00 00 00 00 fe  |................|
    000001c0  ff ff 83 fe ff ff 3f 00  00 00 82 59 70 74 00 00  |......?....Ypt..|
    000001d0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
    *
    000001f0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 55 aa  |..............U.|
    00000200  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
    *
    00007e00
    

Проблема в том, что раздел считает, что на нем есть некоторый рейдовый том, а не ext4fs. И ядро ​​верно. Однако, поскольку это был рейд 1, он оказался ext4fs. mount -f ext4 /dev/sdc1 /mountpointдолжен сделать свое дело. Принудительно смонтировать mount для принятия ext4 вместо поиска файловой системы - вот что делает -f
— Bananguin

1
Принудительное монтирование не выдает никаких ошибок, но точка монтирования не указана. Либо данные пропали, либо монтирование не работает должным образом. Выполнение команды a dfпоказывает, что новый подключенный диск используется на 2%, что значительно ниже ожидаемого.
— Адам

@ user1129682, если mount говорит, что это не ext4, то это не ... попытка заставить его не поможет.
— Псуси

@psusi: работал для меня. Ответ Жиля объясняет, почему он работает при некоторых обстоятельствах
— Bananguin

@ Bananguin Разве ты не имеешь в виду mount -t ext4? Флаг -f предназначен для «поддельного» монтирования (ubuntu 14.04).
— Quantum7

Ответы:


11

Это отлично работает в Ubuntu 14.04:

sudo -i
mdadm --assemble --scan

Ты получишь:

mdadm: /dev/md/1 has been started with 1 drive (out of 2)

Затем смонтируйте и посмотрите ваши файлы:

cd /mnt && mkdir to-restore-md1 && mount /dev/md1 to-restore-md1
ls -la to-restore-md1

Получал «существует, но не массив md» на неисправном жестком диске, который был частью массива ... и это работало лучше, чем все другие предложения. Установлен успешно, занят копированием данных прямо сейчас.
— Зейн С Халсолл,

этот вариант хорошо сработал для меня. 2 Intel SSD в RAID1. Вытащил один и слэйв с порта SATA на ПК под управлением suse linux. Изначально отображается как только /dev/sdcи как /dev/md127. Затем сделал, mdadm --assemble --scanчто привело к /dev/md/Volume0_0p1и /dev/md/Volume0_0p2так далее, соответствующие 4 разделам, которые были на диске. P2 был тем, что мне было нужно, mkdir /p2 а затем mount /dev/md/Volume0_0p2 /p2смонтировал его, который был EXT3, и я могу легко получить доступ и скопировать данные. Это также установило это как чтение-запись.
— рон

вы сделали мой день! Благодарность!
— Гушан

иногда --scanрежим не запускает массивы с отсутствующими дисками, в моем случае здесь я должен был остановить автоматически собранный массив и запустить его снова сmdadm --assemble --force /dev/md/1 /dev/sdc1
— BrunoJCM

7

Linux mdraid имеет несколько форматов метаданных . Форматы 0.9 и 1.0 помещают метаданные в конец содержащего устройства, а полезная нагрузка (файловая система) начинается в начале устройства и может быть доступна напрямую, не проходя через уровень raid. Форматы 1.1 и 1.2 помещают метаданные в середину и начало содержащего устройства соответственно, поэтому полезная нагрузка находится в смещении.

Установщик Ubuntu создает тома в формате метаданных 1.2, поэтому ваши данные запускаются после метаданных, а не в начале устройства.

Самый простой способ получить доступ к этим данным - собрать устройство raid. В томе RAID-1 достаточно одного устройства.

madadm -A /dev/sdc1

(Остановитесь здесь, если вы не любите боль.)

Вы также можете получить доступ к данным со смещением. Единственное, что я могу увидеть, это сделать, если вам нужно работать в очень старом ядре, которое не поддерживает форматы 1.x mdraid. Сначала определите смещение mdadm -E /dev/sdc1: ищите линию Data Offset : SSS sectors. Сектор mdadm составляет 512 байт.

sectors=$(mdadm -E /dev/sdc1 | awk -F: '$1 ~ /Data offset/ {print $2}')
bytes=$(($sectors * 512))
losetup -f -o $bytes /dev/sdc1

В отчаянии, с форматами 1.x, смещение данных сохраняется в байтах 128–135 метаданных, little-endian¹. Метаданные 1.2 составляют 4096 байт после начала работы устройства.

Вы также можете изменить таблицу разделов, чтобы она начиналась дальше. Будьте очень осторожны с вашей арифметикой. Делайте это только в том случае, если вы хотите продолжать использовать диск на долгосрочной основе в старой системе, которая не может получить доступ к устройству raid.

¹ Или с порядком байтов платформы? Я не уверен.


данные могут начинаться с разных смещений (см. mdadm -E /dev/sdc1где именно), но, конечно, не с 4k для метаданных 1.2, поскольку 4k - это именно то место, где хранятся метаданные. См. Также unix.stackexchange.com/q/57477/22565
— Стефан

@ StephaneChazelas Ой, да, мозг пердит. Благодарю.
— Жиль "ТАК - перестань быть злым"

3
mdadm -A /dev/sdc1Выводы mdadm: device /dev/sdc1 exists but is not an md array.Я пошел немного дальше, чтобы использовать mdadm и посмотреть, есть ли дополнительная информация ... mdadm --misc --examine /dev/sdc1выходы mdadm: No md superblock detected on /dev/sdc1.. Есть ли способ, которым я могу перезаписать суперблоки на этом диске, чтобы пометить его как доступный диск для сборки RAID?
— Адам

@Gilles A mdadm -E /dev/sdcвозвращает мне следующее: /dev/sdc: MBR Magic : aa55 Partition[0] : 1953520002 sectors at 63 (type 83) но никакой информации для / dev / sdc1 нет
— Adam

1
@Adam Если mdadm не может найти свои метаданные, там вы ничего не можете сделать: вы не можете заставить его что-то сделать, так как он не знает, что делать. Вам нужно искать файловую систему, и если советы psusi ни к чему не приведут, перспективы унылы. Возможно, шестнадцатеричный дамп первых нескольких килобайт диска может кого-то вдохновить (будьте осторожны, он может раскрыть некоторые конфиденциальные данные).
— Жиль "ТАК - перестань быть злым"

5

К моему удивлению, я смог / смог восстановить данные, просто используя самое главное .

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


Я понимаю, что это было некоторое время назад! Но помните ли вы, что смогли использовать прежде всего без монтирования раздела?
— PhillipOReilly

Извините, я не помню деталей этого больше. : /
— Адам

3

Кажется, вы уже зарезали суперблок mdadm. Если раньше он был там и имел формат 1.1 или 1.2, то, скорее всего, файловая система смещена в 2048 секторов. Вы можете запустить, e2fsck /dev/sdc1?offset=2048чтобы заставить его искать файловую систему, начиная с этого смещения. Если он найдет его, вы можете изменить таблицу разделов так, чтобы она указала, где фактически начинается файловая система. Вы можете использовать parted /dev/sdcи unit sкоманду, чтобы использовать единицы секторов. printв таблице запишите начальный и конечный сектор, затем rmраздел, затем создайте его заново mkpartи используйте тот же конечный сектор, но добавьте смещение к начальному сектору.

Если 2048 не работает, вы также можете попробовать 1985.


Запуск e2fsck /dev/sdc1?offset=2048(я также выполнил offset = 1985) выходных данных, Bad magic number..Superblock invalid...а также предположение, что суперблок поврежден, и попытка запустить e2fsck с альтернативным суперблоком. Похоже, я должен предоставить ему альтернативный суперблок для продвижения вперед.
— Адам

@ Адам, нет, тебе просто нужно получить правильное смещение. testdiskдолжен быть в состоянии сделать детальное сканирование и исправить таблицу разделов для вас.
— Псуси

testdiskэто совершенно новая для меня территория. Базовый прогон (Анализ) шоу No ext2, JFS, Reiser.. marker. Bad relative sector. No partition is bootable.Он также предоставляет следующее: 1 P Linux 0 1 1 121600 254 63 1953520002Как я могу понять это, чтобы помочь ситуации?
— Адам

@ Адам, я никогда не использовал его сам, я просто знаю, что он должен сканировать и находить суперблок. Вы запустили его на весь диск, а не раздел?
— psusi

После выполнения анализа на полном диске не оказалось разделов. В настоящее время выполняется глубокое сканирование. Если ничего не получится, я не уверен, куда идти.
— Адам
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.