Хочу поделиться своей радостью. Мне удалось (самому!) восстановить "пропавшие" логические диски на своем компе. Расскажу как. Для начала ситуация: Norton "исправил" какую-то виндовую ошибку, да так, что система перестала видеть три последних логических диска. У меня их всего аж пять - С(основной); D(расширенный); E: F: G: (логические). Раздела, как нетрудно догадаться, два - основной и расширенный. Ситема - Win98 SE, файловая - FAT32. Что делать? Я в этом вопросе ни бум-бум. После легкой паники (на этих дисках были все самые важные данные) начал шарить в Инете. Нашел этом форум, нужную тему. СПАСИБО KLASS'у и В. Дашевскому за все. Такой информации в книжных магазинах не найдешь.
Теорию изучал неделю. Узнал о SyMon'е. Установил. Shift+Del обнулил все и запустил автоматический поиск. Прога нашла только разделы С: и D:, которые винда и без того видела. Тогда решил искать вручную по сигнатуре 55 АА, как здорово описано по какой-не-помню ссылке KLASS'a
. Из нортоновского Diskedit'a смотрю в MBR. Так, Таблица Разделов (ТР) вроде цела (ну, это можно было понять и из того, что первые два раздела были видны). Ищу остальные разделы. Вот это занятие! Если не помнить хотя бы приблизительно, каких объемов были разделы, то чтобы обшарить весь мой диск в 40 Gb (80 млн. секторов!) потребовалась бы хренова туча времени! Представляю, у кого 80-сятники и более, особенно размеченные на 3-5 разделов
. Отсюда совет - если у вас на данный момент все хорошо работает, то на бумажке зарисуйте схемку расположения и объемов ваших разделов и их файловых систем еще. И пусть эта бумажка лежит себе спокойненько в тумбочке (только надо не забывать ее перерисовывать при переразметке разделов
. Сэкономит потом массу времени. Я поступил так: сначала нарисовал на бумажке картинку с размерами всех разделов своего HDD (слава Аллаху, приблизительно я их помнил). Потом вычислил приблизительные районы поиска сигнатур с отличием в 63 сектора (т.е. начало каждого раздела). Например, разделы С: D: и Е: занимают 2, 6 и 12 Gb соответственно. Значит, начало D: приблизительно в 16000000 (2+6=8*2000000) абс. секторе, а Е: в 40000000 (2+6+12=20*2000000) абс. секторе. Начинаем искать с запасом (с 38000000-го абс. сектора - это для Е:, например). Все найденные сектора записываем.
На поиск ушло два полных вечера. Зато передо мной, на испещренном циферками листе, пеперь лежит очень точная (до сектора) карта разделов моего HDD. Далее по этой карте проверяю состояние всех ТР в каждом разделе. И, оп-па, ТР в начале D: повреждена - второй 16-ти байтный блок из одних нулей. В общем, так и дожно быть, ведь как раз после этого раздела другие не видны. Цепочка оборвалась. Остальные ТР целы. Выходит, случай не сложный, надо только восстановить последние восемь байт (4 байта абс. номер сектора нач. раздела и 4 байта общее кол-во секторов) в этом блоке в этой ТР. Как их вычислить? Вот тут-то мне и помогла моя "карта разделов" и бесподобный Вычислитель в SyMon'e. Он умеет переводить десятичные (Dec) числа в шеснадцатеричные (Нех) и наоборот.
В моем случае в таблице разделов в MBR два 16-ти байтных блока. В остальных ТР, естессно, тоже (я имею в виду у меня). Как известно, первый блок ТР в MBR описывает основной раздел, второй расширенный. Все делается в SyMone, в Редакторе Диска. Итак, считаем.
Вычисления РТ в MBR.
Для первого 16-ти байтного блока (смещение 01ВЕh)
- вычисление номера начального сектора раздела (4 байта; смещение 01С6h): для ТР всех разделов (основн., расшир. и логич.) одно значение - 3F 00 00 00 (63);
- вычисление общего количества секторов в разделе (4 байта; смещение 01САh): абс. сектор начала расширенного раздела (Snrr)-63 -> Enter -> смотрим значение Hex;
Для второго 16-ти байтного блока (смещение 01CEh)
- номер начального сектора расширенного раздела (4 байта; смещение 01D6h): просто вводим в Вычислителе значение абс. сектора, взятого из "карты разделов" -> Enter -> смотрим Hex;
- общее кол-во секторов расширенного раздела (4 байта; смещение 01DАh): абс. сектор начала следующего логического раздела (Snlr)-Snrr -> Enter -> смотрим Hex;
ТР в остальных разделах описывает первым 16-ти байтовым блоком текущий раздел, а вторым - следующий.
Вычисления РТ остальных разделов.
Для первого 16-ти байтного блока (смещение 01BEh)
- номер начального сектора раздела 3F 00 00 00 (смещ. 01C6h);
- общее кол-во секторов в разделе (4 байта; смещ. 01САh): абс. сектор начала следующего раздела (Snsr)-абс. сектор начала текущего раздела (Sntr)-63
Для второго 16-ти байтного блока (смещение 01CEh)
- номер начального сектора раздела (4 байта; смещение 01D6h): Snsr-Snrr (расш. раздела!) -> Enter -> смотрим Hex;
- общее кол-во секторов в разделе (4 байта; смещ. 01DАh): абс. сектор начала раздела, расположенного после следующего (Sns+1r)-Snsr -> Enter -> смотрим Hex.
Все значения абс. секторов берутся из "карты разделов".
Число 63 не верно для тех, у кого не 63-х секторная дорожка.
Все вышеприведенные вычисления приведены только для FAT32.
Хотелось бы отметить некоторые тонкости при использовании Вычислителя.
1. двойные вычитания делаются так: Snsr-Sntr -> Enter -> -63 -> Enter;
2. Вычислитель выдает в значении Нех предположим 00577е2r, а на диск надо "вбивать" 2r 7e 57 00 (т.е. "наоборот");
3. регистр букв не важен;
4. если нужно что-то проверить (т.е. в Вычислитель ввести шестнадцатеричное число с диска), то так: на диске 20 1B C4 00, а в Вычислитель вводим 00с41b20 (опять же "наоборот");
5. следует внимательнее быть с шестнадцатеричными числами, в которых нет буквенных значений (напр. 25 83 57 00), при вводе их в Вычислитель он воспринимает эти шестн. числа как десятичные, выдавая в Dec значении ненужную нам лабуду;
Кстати, вычислял я значения только непосредственно для РТ раздела D:. Все остальные значения были, по ним получились все "формулы".
Так вот, значит, все посчитал, "вбил" на диск... Гружусь.
(( Никаких изменений. Логич. дисков как не было, так и нет! Вроде все правильно сделал??? И тут осенило! вспомнил про тип файловой системы. Это 5-й байт в каждом блоке. Опять лезу в SyMon, выставляю 05 (Extended), перегружаюсь. Вот! Все диски на месте, как будто и не исчезали! Урааа!! Я победил!!
)).
З.Ы. Выходит не два, а три параметра важны при восстановлении РТ - это номер сектора начала раздела, общее кол-во секторов в разделе и тип файловой системы FSC (один байт, смещ. 01C2h для первого блока и 01D2h для второго). По крайне мере, для FAT32. Если кто заинтересовался, но не очень понял, то как-нибудь опубликую конкретный пример вычисления. И еще, хотелось бы узнать у уважаемого KLASS'a, что это за 4 байта, которые копировались из смещения 0028h в примере в начале темы? Вроде это байты из "начала" сектора, каково их значение? И это, наверное, только для NTFS?