АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомДругоеЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция

Листинг 5.4. Пример таблицы разделов, сформированной программой FDISK

Читайте также:
  1. III. Статистические таблицы
  2. X. примерный перечень вопросов к итоговой аттестации
  3. Активный запрос на создание таблицы
  4. Безработица является неотъемлемой чертой общества с рыночной экономикой, что наглядно видно по данным таблицы 3.1.
  5. В некоторых странах, например в США, президента заменяет вице-
  6. В примере
  7. Вания. Одной из таких областей является, например, регулирова-
  8. Вашим сообщениям, например, спеть «С днем рождения»
  9. Ввод данных в таблицы. Редактирование записей данных
  10. Виды знания. Контрпример стандартному пониманию знания
  11. Власть примера. Влияние с помощью харизмы
  12. Внешний долг (внешняя задолженность): пример России

Sector Inspector Copyright Microsoft Corporation 2003

==================================================================

Target - \\.\PHYSICALDRIVE0

1867 Cylinders

255 Heads

63 Sectors Per Track

512 BytesPerSector

12 MediaType

 

LBN 0 [С 0, H 0, S 1]

==================================================================

Master Boot Record

==================================================================

| B | FS TYPE | START | END | | |

| F | (hex) | C H S| C H S| RELATIVE | TOTAL |

==================================================================

| * | 07 | 0 1 1| 764 254 63| 63| 12289662|

| | 0f | 765 0 1|1023 254 63| 12289725| 17687565|

| | 00 | 0 0 0| 0 0 0| 0| 0|

| | 00 | 0 0 0| 0 0 0| 0| 0|

==================================================================

 

LBN 12289725 [C 765, H 0, S 1]

==================================================================

Extended Boot Record

==================================================================

| B | FS TYPE | START | END | | |

| F | (hex) | C H S| C H S| RELATIVE | TOTAL |

==================================================================

| | 07 | 765 1 1|1023 254 63| 63| 8193087|

| | 05 |1023 0 1|1023 254 63| 8193150| 4096575|

| | 00 | 0 0 0| 0 0 0| 0| 0|

| | 00 | 0 0 0| 0 0 0| 0| 0|

==================================================================

 

LBN 20482875 [C 1275, H 0, S 1]

==================================================================

Extended Boot Record

==================================================================

| B | FS TYPE | START | END | | |

| F | (hex) | C H S| C H S| RELATIVE | TOTAL |

==================================================================

| | 07 |1023 1 1|1023 254 63| 63| 4096512|

| | 05 |1023 0 1|1023 254 63| 12289725| 5397840|

| | 00 | 0 0 0| 0 0 0| 0| 0|

| | 00 | 0 0 0| 0 0 0| 0| 0|

==================================================================

 

LBN 24579450 [С 1530, H 0, S 1]

==================================================================

Extended Boot Record

==================================================================

| B | FS TYPE | START | END | | |

| F | (hex) | C H S| C H S| RELATIVE | TOTAL |

==================================================================

| | 07 |1023 1 1|1023 254 63| 63| 5397777|

| | 00 | 0 0 0| 0 0 0| 0| 0|

| | 00 | 0 0 0| 0 0 0| 0| 0|

| | 00 | 0 0 0| 0 0 0| 0| 0|

==================================================================

Если таблица разделов повреждена, логические диски, скорее всего, будут полностью недоступны — они не будут отображаться ни Проводником Windows (Windows Explorer), ни файловым менеджером FAR, а команда C: вызовет ошибку. Искажение таблицы разделов не приводит к немедленному изменению объема уже отформатированных томов, так как эта информация хранится в загрузочном секторе (boot sector). Однако при последующим переформатировании произойдет затирание данных из соседнего раздела, или же текущий раздел окажется усеченным. Кстати говоря, если расширенный раздел указывает сам на себя или на один из предшествующих разделов в цепочке, то все известные мне операционные системы наглухо зависнут еще на этапе загрузки, даже если диск подключен "вторым". Чтобы исправить ситуацию, необходимо запустить редактор диска или другую утилиту, а для этого необходимо загрузить операционную систему! Существует несколько путей выхода из этой, казалось бы, неразрешимой ситуации. Самый простой вариант — горячее подключение диска "на лету" с последующей работой с ним через BIOS или порты ввода/вывода. Если и диск, и материнская плата переживут это (а для устройств IDE подключение "на лету" представляется довольно жестким испытанием), то вы сможете запустить доктора и работать с диском на физическом уровне. Другой, чисто хакерский, путь — пропатчить MS-DOS, изменив сигнатуру 55h AAh на какое-нибудь другое значение, тогда она не сможет распознать таблицу разделов и, соответственно, не станет ее анализировать. Как вариант, можно записать в boot-сектор дискеты специально подготовленную программу, которая обнуляет MBR или искажает сигнатуру, расположенную в его конце. Просто загрузитесь с нее и все!

Воспользовавшись любым редактором диска (например, Microsoft Disk Probe из комплекта Resource Kit), считаем первый сектор физического диска. Он должен выглядеть приблизительно так, как показано на рис. 5.4.

Рис. 5.4. Внешний вид MBR

Не правда ли, MBR выглядит как знаменитая Матрица? Ее формат кратко описан в таблице 5.1.

 

Таблица 5.1. Формат MBR

Смещение Размер Описание
0x000 перемен. Код загрузчика
0x1BB 4h Идентификатор диска
0x1BE 10h Partition 1
0x1CE 10h Partition 2
0x1DE 10h Partition 3
0x1EE 10h Partition 4
0x1FE 0x2 "Магическое число" — сигнатура 55h AAh, которое указывает, что данный сектор представляет собой MBR

Первые 1BBh байт занимают код и данные загрузчика, среди которых отчетливо выделяются текстовые строки.

Примечание

Кстати говоря, локализовав сообщения загрузчика в национальных версиях Windows, например, в русской, Microsoft допустила грубейшую стратегическую ошибку. Ведь в BIOS нет никаких кириллических шрифтов, поэтому русские символы выглядят бессмысленной абракадаброй.

По смещению 1BBh расположен четырехбайтовый идентификатор диска, принудительно назначаемый Windows при запуске Disk Manager. Коварство Microsoft не знает границ! Еще со времен первых IBM PC (тогда они назывались XT) загрузчик владел первыми 1BEh байтами MBR, и достаточно многие загрузчики (и вирусы!) использовали эти байты на полную катушку. Нетрудно сообразить, что произойдет, если внутрь загрузчика вдруг запишется идентификатор. Это убьет его! Поэтому байты 1BBh–1BEh лучше не трогать.

Со смещения 1BEh начинается таблица разделов, представляющая собой массив из четырех записей типа partition. Каждая из этих записей описывает свой логический диск, что позволяет нам создавать до четырех разделов на каждом HDD. Формат записи таблицы разделов представлен в табл. 5.2. Динамические диски, впервые появившиеся в Windows 2000, хранятся в базе данных Менеджера Логических Дисков (Logical Disk Manager Database), и в таблице разделов присутствовать не обязаны.

 

Таблица 5.2. Формат записи таблицы разделов

Смещение Размер Описание
  1ВЕ 1CE 1DE 1EE byte Флаг активного загрузочного раздела (Boot Indicator). 80h — загрузочный раздел, 00h — незагрузочный раздел
  1BF 1CF 1DF 1EF   Стартовая головка раздела
  1C0 1D0 1E0 1F0 byte Стартовый сектор раздела (биты 0–5). Старшие биты стартового цилиндра (биты 6–7)
  1C1 1D1 1E1 1F1 byte Младшие биты стартового цилиндра (биты 0–7)
  1C2 1D2 1E2 1F2 byte Идентификатор системы (Boot ID), см. табл. 5.3
  1C3 1D3 1E3 1F3 byte Конечная головка раздела
  1С4 1D4 1E4 1F4 byte Конечный сектор раздела (биты 0–5). Старшие биты конечного цилиндра (биты 6–7)
  1C5 1D5 1E5 1F5   Младшие биты конечного цилиндра (биты 0–7)
  1C6 1D6 1E6 1F6 dword Смещение раздела относительно начала таблицы разделов в секторах
00C 1CA 1DA 1EA 1FA dword Количество секторов раздела

 

Таблица 5.3. Возможные значения Boot ID

Boot ID Тип раздела
00h Раздел свободен
0x01 Раздел FAT12 (менее чем 32 680 секторов в томе или 16 Мбайт)
0x04 Раздел FAT16 (32 680–65 535 секторов или 16–33 Мбайт)
0x05 Расширенный раздел (extended partition)
0x06 Раздел BIGDOS FAT16 (33 Мбайт–4 Гбайт)
0x07 Раздел NTFS
0x0B Раздел FAT32
0x0C Раздел FAT32 с поддержкой расширенной BIOS INT 13h
0x0E Раздел BIGDOS FAT16 с поддержкой расширенной BIOS INT 13h
0x0F Расширенный раздел с поддержкой расширенной BIOS INT 13h
0x12 Раздел EISA
0x42 Динамический диск
0x86 Раздел legacy FT FAT16
0x87 Раздел legacy FT NTFS
0x8B Наследуемый отказоустойчивый том, отформатированный для FAT32 (Legacy FT volume formatted with FAT32)
0x8C Наследуемый отказоустойчивый том с поддержкой BIOS INT 13h, отформатированный для FAT32 (Legacy FT volume using BIOS INT 13h extensions formatted with FAT32)

Техника восстановления главной загрузочной записи

Существует множество утилит для автоматического восстановления первичного загрузчика и таблицы разделов, к числу которых относятся, например, GetDataBack, Easy Recovery, Active@Data Recovery Software и др. До поры до времени они вполне успешно справлялись со своей задачей, восстанавливая даже полностью уничтоженные таблицы разделов, однако с появлением емких дисков, преодолевших барьер в 2 Гбайт с помощью всевозможных расширений, они стали часто путаться. Поэтому и доверять им больше нельзя. Если не хотите потерять свои данные — восстанавливайте MBR самостоятельно (тем более что это достаточно простая операция, не требующая особой квалификации). Восстановление значительно упрощается, если в вашем распоряжении имеется копия таблицы разделов, снятая с помощью Sector Inspector или любой другой подобной утилиты. К сожалению, чаще всего ее под рукой не оказывается…

Если операционная система отказывается загружаться, а на экране появляется сообщение BIOS, выглядящее примерно следующим образом:

Disk Boot failure, Non-System disk or disk error...

Press <Enter> to restart то это указывает на разрушение сигнатуры 55h AAh, обычно сопровождаемое смертью первичного загрузчика.

Примечание

Очень важно отличать сообщение BIOS от сообщений первичного загрузчика и загрузочного сектора. Зайдите в BIOS Setup и отключите все загрузочные устройства, оставив активным только диск A: (и не забудьте извлечь из него дискету). А теперь перезагрузитесь и запомните, какое сообщение появится на экране. Это и будет "ругательством" BIOS.

Восстановить сигнатуру 55h AAh можно в любом дисковом редакторе. Когда будете это делать, убедитесь, что в начале диска присутствует осмысленный код первичного загрузчика (master boot code).

Рекомендация

Если вы испытываете затруднение с дизассемблированием в уме, воспользуйтесь IDA PRO или HIEW. Вы не умеете дезассемблировать? Тогда попробуйте оценить степень "нормальности" первичного загрузчика визуально (однако для этого опять-таки требуется опыт работы с кодом). В начале более или менее стандартного загрузчика расположено приблизительно 100h байт машинного кода, в котором обнаруживаются последовательности: 00 7C, 1B 7C, BE 07, CD 13, CD 18, CD 10, 55 AA, а затем идут характерные текстовые сообщения: Invalid partition table, Error loading operating system, Missing operating system (см. рис. 5.4). Если загрузчик поврежден, но сигнатура 55 AA цела, то попытка загрузки с такого диска обернется неизменным зависанием.

Восстановить искореженный первичный загрузчик можно с помощью утилиты FDISK.EXE, запущенной с ключом /MBR, записывающей в главную загрузочную запись первого диска стандартный код первичного загрузчика (master boot code). Недокументированный ключ /CMBR, появившийся в MS-DOS 7.0, позволяет выбирать любой из подключенных дисков. В Windows 2000 и более новых версиях этого же результата можно добиться, загрузив консоль восстановления и дав команду FIXMBR.

Внимание!

Если вы использовали нестандартный загрузчик (например, LILO), то после перезаписи MBR сможете загружаться только с основного раздела, а для запуска операционных систем из других разделов вам придется переустановить свой мультизагрузочный менеджер. Кстати говоря, такой менеджер можно написать и самостоятельно. При наличии HIEW, а еще лучше — транслятора ассемблера — работа не займет и получаса.

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

Если загрузчик выводит сообщение Invalid partition table, то это еще не значит, что таблица разделов действительно повреждена. Вполне возможно, что на самом деле таблица разделов цела, но просто ни один из основных разделов не назначен активным. Такое случается при использовании нестандартных загрузчиков, загружающих операционную систему из расширенного раздела. После выполнения команды FDISK /MBR или при установке операционной системы, автоматически заменяющий первичный загрузчик своим собственным, этот новый загрузчик не обнаружит в пределах досягаемости ни одного активного раздела, и, что вполне естественно, сигнализирует вам об этом. Такое поведение, в частности, характерно для Windows 98. Для решения проблемы либо восстановите прежний загрузчик, либо установите операционную систему на первичный раздел и, запустив FDISK, сделайте его активным.

Загрузитесь с системной дискеты (другого винчестера, CD) и проверьте, видимы ли ваши логические диски. Если да, то смело переходите к следующему пункту, в противном случае соберитесь с духом и приготовьтесь немного поработать руками и головой.

Восстановление основного раздела, созданного с помощью FDISK или Disk Manager, в большинстве случаев осуществляется элементарно, а остальные, как правило, восстанавливать и не требуется, поскольку именно MBR гибнет чаще всего, а расширенные разделы, рассредоточенные по всему диску, погибают разве что при явном удалении разделов средствами FDISK или Disk Manager.

Адрес стартового сектора первого логического диска всегда равен 0/1/1 (Cylinder/Head/Sector), относительный (Relative) сектор — количеству головок жесткого диска, уменьшенному на единицу.

Рекомендация

Сведения о геометрии диска можно почерпнуть из любого дискового редактора — например, Sector Inspector.

Конечный сектор определить несколько сложнее. Если загрузочный сектор цел (более подробно этот вопрос будет обсуждаться далее в этой главе), то узнать количество секторов в разделе (total sectors) можно на основании значения поля BootRecord.NumberSectors, увеличив его значение на единицу. Тогда номер конечного цилиндра будет равен LastCyl:= Total Sectors/(Heads*SecPerTrack), где Heads — количество головок на физическом диске, a SecPerTrack — количество секторов на трек. Номер конечной головки равен LastHead:= (Total Sector - (LastCyl*Heads SecPerTrack))/SecPerTrack, а номер конечного сектора равен LastSec:= (Total Sector - (LastCyl*Heads SecPerTrack)) % SecPerTrack. Пропишите полученные значения в MBR и проверьте, не находится ли за вычисленным концом раздела следующий раздел? Это должна быть либо расширенная таблица разделов, либо загрузочный сектор. Если это так, создайте еще одну запись в таблице разделов, заполнив ее соответствующим образом.

А теперь зададимся вопросом; возможно ли восстановить таблицу разделов, если загрузочный сектор отсутствует, и восстановить его не представляется возможным? Это — вполне реалистичная задача. Необходимо лишь найти загрузочные сектора или расширенные таблицы разделов, принадлежащие последующим разделам. В этом вам поможет контекстный поиск. Ищите сектора, содержащие сигнатуру 55h AAh в конце. Отличить загрузочный сектор от расширенной таблицы разделов очень просто. В загрузочном секторе по смещению три байта от его начала расположен идентификатор производителя (OEM ID), например, NTFS, MSWIN4.1 и т.д. Размер текущего раздела будет на один сектор меньше. Теперь, зная размер и геометрию диска, можно рассчитать и конечный цилиндр/головку/сектор.

Имейте в виду, что Windows хранит копию загрузочного сектора, которая, в зависимости от версии, может быть расположена либо в середине раздела, либо в его конце. Другие копии могут находиться в архивных файлах и файле подкачки. Как отличить копию сектора от оригинала? Элементарно, Ватсон! Если это подлинник, то вслед за ним пойдут служебные структуры файловой системы (в частности, для NTFS это будет MFT, каждая запись которой начинается с легко узнаваемой строки FILE*). К счастью, служебные структуры файловой системы обычно располагаются на более или менее предсказуемом смещении относительно начала раздела, и, отталкиваясь от их "географического" расположения, мы можем установить размеры каждого из логических дисков, даже если все-все-все загрузочные сектора и расширенные таблицы разделов уничтожены.

Что произойдет, если границы разделов окажутся определенными неверно? Если мы переборщим, увеличив размер раздела сверх необходимого, все будет нормально работать, поскольку карта свободного пространства хранится в специальной структуре (у NTFS это файл $bitmap, а у FAT 12/32 — непосредственно сама FAT) и "запредельные" сектора будут добавлены только после переформатирования раздела. Если все что нам нужно — это скопировать данные с восстанавливаемого диска на другой носитель, то возиться с подгонкой параметров таблицы разделов не нужно! Распахните ее на весь физический диск и дело с концом!

Естественно, такой способ восстановления подходит только для первого раздела диска, а для всех последующих нам потребуется определить стартовый сектор. Это определение должно быть очень точным, поскольку все структуры файловой системы адресуются от начала логического диска, и ошибка в один-единственный сектор сделает весь этот тонкий механизм полностью неработоспособным. К счастью, некоторые из структур ссылаются сами на себя, давая нам ключ к разгадке. В частности, файлы $mft/$mftmirr содержат номер своего первого кластера. Стоит нам найти первую запись FILE*, как мы узнаем, на каком именно секторе мы сейчас находимся (конечно, при условии, что сумеем определить количество секторов на кластер, но это уже другая тема, которая более подробно будет обсуждаться далее в этой главе).

Проблема нулевой дорожки

Главная загрузочная запись жестко держит за собой первый сектор, и если он вдруг окажется разрушенным, работа с таким диском станет невозможной. Внешний вид типичного сектора MBR приведен в листинге 5.5. До недавнего времени проблема решалась посекторным копированием винчестера, переносом данных на здоровый жесткий диск с идентичной геометрией и последующим восстановлением MBR.

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

Механизм замещения секторов все еще не стандартизирован. Он осуществляется утилитами, предоставляемыми производителем конкретной модели винчестера. Чаще всего они распространяются бесплатно и могут быть свободно найдены в сети.


1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 |

Поиск по сайту:



Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Студалл.Орг (0.008 сек.)