Восстановление данных. Практическое руководство
Шрифт:
Таблица 5.6. Строение загрузочного сектора NTFS
Смещение | Размер | Описание |
---|---|---|
0x00 | 3 bytes | Инструкция перехода |
0x03 | 8 байт | OEM ID — идентификатор |
0x0B | 25 bytes | BPB |
0x24 | 48 bytes | Extended BPB |
0x54 | 426 bytes | Bootstrap Code |
0x01FE | WORD | 55 AA |
В
С третьего по одиннадцатый байты (считая от нуля) хранится идентификатор производителя, определяющий тип и версию используемой файловой системы (например,
С дисками, отформатированными для использования FAT, Windows 2000 будет работать даже в том случае, если поле
Следом за идентификатором расположен 25-байтовый блок параметров BIOS (BIOS Parameter Block, BPB), хранящий сведения о геометрии диска (количество цилиндров, головок, секторов, размер сектора, количество секторов в кластере и т.д.). Если эта информация окажется утерянной или искаженной, то нормальное функционирование драйвера файловой системы станет невозможным. Причем, в отличие от информации о числе цилиндров/головок/секторов, которая дублирует информацию, содержащуюся в MBR, а при ее утере элементарно восстанавливается описанным выше способом, размер кластера определить не так-то просто! Позже мы обсудим этот вопрос более подробно, пока же вполне достаточно сослаться на табл. 5.7, в которой указаны размеры кластера томов NTFS, по умолчанию выбираемые штатной утилитой форматирования.
Таблица 5.7. Размеры кластеров, по умолчанию выбираемые штатной утилитой форматирования в Windows 2000
Размер диска | Размер кластера |
---|---|
<512 Мбайт | 1 сектор |
< 1 Гбайт | 2 сектора |
< 2 Гбайт | 4 сектора |
> 2 Гбайт | 8 секторов |
При выборе размера кластера вручную Windows 2000 поддерживает следующий размерный ряд: 1 сектор, 2 сектора, 4 сектора, 8 секторов, 16 секторов, 32 сектора, 64 сектора и 128 секторов. Чем больше размер кластера, тем слабее фрагментация и выше предельно адресуемый объем дискового пространства. Однако потери от грануляции с увеличением размера кластера тоже растут. Впрочем, размеры кластеров редко задаются вручную.
К блоку параметров BIOS вплотную примыкает его продолжение — расширенный блок параметров BIOS (extended BPB), хранящий номер первого кластера MFT, ее размер в кластерах, номер кластера с зеркалом MFT, а также некоторую другую служебную информацию. В отличие от FAT16/FAT32, MFT может располагаться в любом месте диска (для борьбы с BAD-секторами это актуально). При нормальном развитии событий MFT располагается практически в самом начале диска (где-то в районе четвертого кластера) и, если только она не была перемещена, то ее легко найти глобальным поиском (искать следует строку
Следом за расширенным блоком параметров BIOS идет код самозагрузки (Bootstrap Code), который ищет на диске загрузчик операционной системы (у операционных систем из семейства Windows NT это — файл ntldr), загружает его в память и передает ему управление. Если код самозагрузки отсутствует, загрузка операционной системы становится невозможной, однако при подключении восстанавливаемого диска вторым раздел должен быть прекрасно виден. Повреждение кода самозагрузки вызывает перезагрузку компьютера или его зависание.
Наконец, завершает загрузочный сектор уже известная нам сигнатура
Таблица 5.8. Значения полей загрузочного сектора NTFS
Смещение | Размер | Описание |
---|---|---|
0x00 | 3 байта | Инструкция перехода |
0x03 | 8 байт | OEM ID |
0x0B | WORD | Количество байт на сектор (для жестких дисков всегда 512) |
0x0D | BYTE | Количество секторов на кластер |
0x0E | WORD | Количество
|
0x10 | 3 байта | He используется NTFS и всегда должно быть равно 0 |
0x13 | WORD | Не используется NTFS и всегда должно быть равно 0 |
0x15 | BYTE | Дескриптор носителя (media descriptor) — для жестких дисков всегда равен 0xF8 |
0x16 | WORD | Не используется NTFS и всегда должно быть равно 0 |
0x18 | WORD | Количество секторов на дорожку |
0x1A | WORD | Количество головок |
0x1C | DWORD | Количество скрытых секторов |
0x20 | DWORD | Не используется NTFS и всегда должно быть равно 0 |
0x24 | DWORD | Не используется NTFS и всегда должно быть равно 0 |
0x28 | 8 байт | Общее количество секторов (total sector) |
0x30 | 8 байт | Логический номер кластера, с которого начинается MFT |
0x38 | 8 байт | логический номер кластера, с которого начинается зеркало MTF |
0x40 | DWORD | Количество кластеров на сегмент (File Record Segment) |
0x44 | DWORD | Количество кластеров на блок индексов (index block) |
0x48 | 8 байт | Серийный номер тома |
0x50 | DWORD | Контрольная сумма (0 — не подсчитывать). |
0x54 | 426 байт | Код самозагрузки (Bootstrap Code) |
0x01FE | WORD | Сигнатура 55 AA |
Техника восстановления загрузочного сектора
Осознавая значимость загрузочного сектора, операционная система Windows NT при форматировании диска создает его зеркальную копию (однако делает она это только на разделах NTFS). Для различных версий Windows расположение резервной копии загрузочного сектора различно. Так, Windows NT 4.0 располагает ее в середине логического диска, a Windows 2000 — в последнем секторе раздела. Если таблица разделов уцелела, то для восстановления загрузочного сектора достаточно просто перейти в начало следующего раздела и отступить на сектор назад (Windows 2000) или поделить количество секторов логического диска пополам (с округлением в нижнюю сторону) и перейти к сектору с полученным номером, дав редактору диска команду GO (Windows NT 4.0).
Если таблица разделов разрушена, то найти резервную копию загрузочного сектора можно глобальным поиском (ищите строку
Если резервных копий загрузочного сектора нет, его придется реконструировать вручную. К счастью, это совсем не так сложно, как может показаться на первый взгляд. В поле идентификатора производителя заносится строка