Страница 1 из 2

восстановление инфы с ReiserFS(HELP!!!)

Добавлено: 22 сен 2005, 18:23
tes+or
вобщем в процессе каких-то неясных манипуляций с утилитой fdisk(в спешке) у меня просто исчез раздел, хотя я вроде как удалял и не его. возможно причиной явилось то, что перед этим я ресайзил другой раздел. он ресайзился а на его месте появился он же только меньше и еще какой-то. и я недолго думая удалил этот какой-то. а вместе с ним исчез и следующий за ним райзер с файлом. размер райзера помню только примерно в мегах. т.е. начальный и конечный блок вспомнить немогу даже примерно.

задача - нужна утилита под линух которая выдерет все оттуда и сохранит куда-то. а еще лучше просто вернет все в первоначальное состояние.

Добавлено: 22 сен 2005, 22:57
Llama
tes+or, для начала - сохраняем имеющийся mbr, наапример dd if=/dev/hda of=/floppy/mbr.img bs=512 count=1
Далее читаем ман на gpart и аккуратненько его применяем...
Делать лучше всего из-под какого-нить кноппикса или чего-то подобного...

Добавлено: 25 сен 2005, 22:10
tes+or
имеющийся МБР я засейвал.
потом внимательно читал маннуал. потом пробывал разные виды сканирования. попробывал еще не все поэтому о результатах пока ничего не скажу. пока они отрицательные, и гпарт находит совсем не то что я ожидал. хотя я тщательно затирал свободные области диска утилитой bcwipe.(после того как посл. раз проводил переразбивку но перед сабжевыми граблями)

вобщем расскажу подробнее.

диск был у меня разбит так:
1. первый примэри партишн - ext3, линуксовый системный. 4.2 гига.
2. своп, непомню где он, подозреваю что extended. 64 мега
3. reiserfs 3.[сколько-то](дефолт для дебиана3.1). все оставшееся место на 40гиговом харде. тоже дополнительный, логический.

потом мне сказали на работе. ставь винду! СРОЧНО! я подумал, ну а фигли там, поменяю размер партишна, посавлю винду, а потом уже спокойно придумаю как в очередной раз обойтись без нее.

гружу с компакта DSL linux, беру утилиту resize2fs и ресайзю первый партишн до 2.5 в надежде поставить винду на освободившееся место. а DSL такой прикольный, пока он ресайзил мой экст, я его изучал. ну и запустил xmms, а он как повиснет. вобщем то винт продолжал мигать, а утилита ресайз ресайзить, по крайней мере я так думаю. а вот иксы повисли. ну я подождал пока винт не перестанет мигать и нажал резет. по крайней мере чертовски логично было бы предположить, что если он не мигает значит он закончил. хотя наверное надо было сделать sync, или даже сразу выпить йаду. но я нажал резет.

ладно, вставляю диск с виндой, бутю его, попадаю в тамошний партишн манагер. а он мне говорит что типа у меня все как было так и осталось. 3 unknownа и 8 мегов неразмеченного. ну, думаю, ладно, гружу дебу, смотрю. ресайзился. пытаюсь поформатить освободившийся раздел в любую ФС. неполучаеться, разные ошибки. тогда я пытаюсь его удалить. удалаю, сохраняю, перезагружаюсь и обнаруживаю пустой /storage.

что могу сказать по части уже осуществленной диагностики:

запускаю fdisk:
//------------------------------------------
testor:~# fdisk /dev/hda

The number of cylinders for this disk is set to 4865.
There is nothing wrong with that, but this is larger than 1024,
and could in certain setups cause problems with:
1) software that runs at boot time (e.g., old versions of LILO)
2) booting and partitioning software from other OSs
(e.g., DOS FDISK, OS/2 FDISK)

Command (m for help):
//----------------------------------------

что это может значить?

и еще. что если по косвенным признакам попытаться угадать первый и последний блок и сделать это немного неточно. там же перед райзером есть куча свободного места. а в кач-ве второго габарита взять конец диска и записать это дело в MBR тем или иным способом. есть ли резон и если есть, то как это осуществить?

Добавлено: 25 сен 2005, 22:29
tes+or
и еще, важная деталь.
//-------------------------
testor:~# cat mbr.img
КHюьп+|Ф©¦СгЩСLЧEРИЖF¦ u
рxV¦VХЭR¦б1рoЭЪ ЗйЙS|1юьп+ Ш=@|<ЪtбR+y}Х4ЖбtT¦A¦LUмZRrIШULuC=A|
юuАt7fL+|фDЪfD|ггDfгDpf1юDfD
¦Bмr¦pК}мs
Жб +|фDЪf1юП@fD1рйаБХТ@1юпюХff¦D|f1рfВ4T
f1рfВtT
D
юБL ;}<T
Чяl
Zt
¦pц1шTмr*цH|`¦ш1Ж1ЪЭСгaЪ&B|+}Х@К+
}Х8К+}Х0+}Х*КЧGRUB GeomHard DiskRead Error¦¦м-<uТц¦TЧ©!?cв
//-----------------------------------

обратите внимание на встретившуюся последовательность GRUB GeomHard DiskRead Error. может выставить ему вручную геометрию? или указать геометию при сканировании?

что дает эта информация?

Добавлено: 25 сен 2005, 22:43
Llama
насчет fdisk - все нормально, используй... только чем он тебе поможет?

Добавлено: 26 сен 2005, 00:08
tes+or
вобщем я глянул в установки биоса и нашел там геометрию своего харда. так вот у меня вовсе не 4865 цилиндров как считает биос, а аж 19158.

хэдсов у меня 16(надо пологать на цилиндр), а секторов 255 на хэд.

видимо система не совсем правильного мнения относительно геометрии харда. может установить ее вручную fdiskом?

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

Добавлено: 26 сен 2005, 01:18
Llama
это в каком режиме адресации-то?

Добавлено: 26 сен 2005, 11:00
Foxx
tes+or, не вижу связи между хардовой геометрией диска и твоим таском по роллбэку ресайза.
имхо также сомнительно что даже если ты вспомнишь адреса началов и концов разделов, то данные, на которые был натравлен resize2fs, остануцца живы.
я дампы разучился читать уже по возрасту лет, однако есть мнение, что GRUB GeomHard DiskRead Error это просто мессаг, который ты получишь если груб не сможет опросить биос на предмет геометрии харда. к твоему таску снова отношение весьма косвенное имхо. то есть не смертельно.
то что тебя ругает fdisk на предмет неправильной геометрии также не смертельно. помнится, для х86 есть несколько прерываний, по которым можно получать информацию о геометрии. одно оставлено в целях совместимости со старыми девайсами и по сути может отдавать некорректные данные тем приложениям, что его юзают.
я вижу один выход: методом тыка fdisk-ом менять координаты начала и конца разделов, если инфа так уж дорога. проверкой диска ошибки координат разделов не исправляются. fdisk и занимается только лишь тем, что меняет таблицу разделов. то есть если ты делаешь удаление партиции, то удаляется только запись таблицы разделов, но само собой не сам раздел, то есть бояться этой процедуры не надо, вернуть раздел можно создав новую запись в этой таблице.
удачи.

Добавлено: 27 сен 2005, 01:09
red f0x
tes+or, эээ, столько разных телодвижений, ИМХО вы сами убили надежду на восстановление

Добавлено: 27 сен 2005, 11:33
tes+or
так то оно так, НО, товарищи, читайте вниметельнее. ресайзил я ПЕРВЫЙ партишн, а умер у меня третий. т.е. над самим третьим партишном НИКАКИХ манипуляций не совершалось просто потерлась инфа о нем в таблице.

вопросы:
1. как именно менять запись о разделе в МБР. опишите процедуру плиз.
2. по каким признакам можно попытаться угадать начало или конец раздела? какие обычно расстояния между разделами? сколько обычно от конца раздела до конца диска? как долго придеться гадать? можно ли автоматизировать этот процесс и нужно ли ребутиться после каждой перезаписи МБР таблицы?
3. насколько точно должны быть указаны координаты начала/конца. может координаты конца не так важны. может дать запас с обоих сторон и оно заработает?

Добавлено: 27 сен 2005, 13:48
Foxx
1. dd if=/dev/hdX of=mbr.dump bs=512 count=1 и обратно dd of=/dev/hdX if=mbr.dump bs=512 count=1
2. по признакам начала и/или конца рядом лежащих разделов. то есть если раздел hda2 заканчивается например 4999 блоком, а hda4 начинается 10000 то hda3 начнется с 5000 и закончится 9999. справедливо, если не было создано extended partition, во втором случае дело слегка усложняется, если раздел находится в пределах extended. расстояния :) какие задашь такие и будут. просто если задашь неверно, то соотв. часть ядра не сумеет корректно определить файловую систему на разделе. автоматизировать процесс теоретически можно: написать скрипт, который будет fdisk-у передавать новые значения конца раздела начиная от нужного блока с инкрементом. после чего девайс нало syncануть и попытаться замонтировать раздел. если mount не даст ошибки монтирования, то инкрементировать переменную, указывающую на конец раздела и так далее по циклу... если синхронизация дисков прошла уверенно, можно не перегружаться.
3. если надо восстановить данные на разделе - абсолютно точно. особенно в случае reiserfs, с фатом бы еще можно было пофокусничать. если данные не важны, делай раздел каким надо и формать по новой. соотв-но потеряешь инфу (бытует мнение, что ей и так гамон)

Добавлено: 27 сен 2005, 13:50
Foxx
проще было бы дать готовый скрипт, чем описывать, но в данный момент его просто не на чем протестить... работа не связана с линуксом.

Добавлено: 27 сен 2005, 15:32
tes+or
1. я немного не то имел в виду. как записать/снять копию с МБР я уже понял. вопрос как его менять. как именно указать что вот там и там лежит этот и этот раздел.
2. да, у меня именно extended. фишка в том что надо угадать не только начало но и конец. т.е. (колво блоков возможного диапазона начала)*(колво блоков диапазона конца)=колву циклов работы скрипта? это уже сложнее, неуверен что осилю, нету опыта написания скриптов на sh.
3.если бы данные были неважны - я бы уже поформатил, а не разводил тут такие дискусии) данные достаточно важны для того чтобы потерять на это столько времени, сил и прочих ресурсов. кроме того - дело принципа. если это возможно, то почему бы мне это и не сделать.

Добавлено: 27 сен 2005, 18:33
Foxx
tes+or, afair, MBR есть Master Boot Record, а не partition table, что тебе надо. В мастербуте сидит первичный загрузчик для установленной оси. Еще раз: таблицу разделов меняют fdisk, parted, etc... руками ее трогают только редкие извращенцы или те, кто реально знает, чего хочет и знает, где это искать.
почитай про то, как ложится extended на винт, то есть где создается список дополнительных разделов, там есть своя специфика. Справедливо найти ответ на вопрос: сколько всего разделов на винте, и сколько из них были включены в extended, а сколько соотв-но были primary. И дать полную карту разделов, как она могла бы выглядеть раньше (до изменения) и как выглядит теперь.
кол-во циклов работы скрипта = размер раздела в блоках / инкремент (для ускорения работы, но не для уточнения можно ввести инкремент != 1)

Добавлено: 27 сен 2005, 19:58
mend0za
gpart возми

он как раз для подобных вещей заточен