ext4 математика местоположения данных inode?

Я пытаюсь восстановить данные с RAID 5 с плохими суперблоками. Я написал инструмент на g++, который позволяет мне выгружать данные со всех трех дисков одновременно и создавать данные с отсутствующего диска, если он есть. которого нет. Я знаю, что один диск не синхронизирован на 100%, так что эта функция может пригодиться позже. Он также имеет функцию поиска ASCII, которая помогает находить каталоги, но потенциально может занять два дня, чтобы выполнить поиск по 3 ТБ данных.

В любом случае, вопрос в том, как рассчитать блок, который я хочу сбросить, из номера инода? Номер инода 0x02E00001 при прогоне моего уравнения inode*16+36984 указывает мне на иноды 0x02E0A007 и 0x02E0A007, данные которых хранятся на 2 дисках рейда. У меня всегда будет шанс найти 2 каталога. Однако моя математика вычисляет 0xA000 инодов до высокого. Из всех расчетов, которые я сделал за последние 2 дня, это самое близкое, что я могу получить.

36984 потенциально является нулевым расположением inode, если он был разделен на 2, потому что данные распределены по 2 дискам для рейда. Я рассчитал это число на основе поиска корневого каталога, который является inode 2, расположенным в месте дампа 37000 или в местоположении ext4 74000.


person user3372159    schedule 15.03.2014    source источник


Ответы (2)


Хорошо, поправьте меня, если я ошибаюсь, но похоже, что простой ответ заключается в том, что вы не можете вычислить местоположение блока по номеру инода. После более тщательного прочтения документа linux ext4, поскольку никто не ответил на вопрос, и у меня не было идей. Я нашел плохо документированный раздел о деревьях экстентов ext4. По-видимому, именно так вы находите местоположение данных. Я посмотрю больше на это завтра или в понедельник.

person user3372159    schedule 15.03.2014

Нашла ответ на свой вопрос. Я разместил программу, которую пишу, на GitHub. У меня выровнены диски RAID, и я могу читать данные inode. Далее идет вытягивание файлов.

person user3372159    schedule 21.03.2014