Как смонтировать / восстановить данные на диске, который был частью рейда 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
vchepurnov
источник
Получал «существует, но не массив 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.

psusi
источник
Запуск 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
После выполнения анализа на полном диске не оказалось разделов. В настоящее время выполняется глубокое сканирование. Если ничего не получится, я не уверен, куда идти.
Адам