Сравнение структур разделов GPT и MBR. Смотреть что такое "Загрузочный сектор" в других словарях

Сравнение структур разделов GPT и MBR. Смотреть что такое "Загрузочный сектор" в других словарях

21.07.2019

Страница 8 из 8

Глава 7
Восстановление данных на жестких дисках

Вот, наконец, мы и подошли к описанию ситуации, при возникновении которой даже опытные пользователи начинают слегка волноваться.

Восстановление логической структуры диска

К повреждениям логической структуры жесткого диска относятся:
повреждение или удаление главной загрузочной записи;
повреждение или удаление таблицы разделов;
повреждение или удаление одной либо нескольких загрузочных записей основных разделов;
повреждение таблиц разделов на дополнительном разделе;
ошибочное изменение размера либо удаление раздела или логического диска.
Для успешного устранения перечисленных проблем полезно знать причины их возникновения, а также иметь определенный запас терпения и хладнокровия.

ПРИМЕЧАНИЕ
Вам потребуется значительно меньше времени и терпения, если высумеете вспомнить хотя бы самые основные параметры диска: количество, порядок следования и размеры разделов, а также тип файловой системы на каждом из них.

Восстановление главной загрузочной записи

Прежде всего необходимо определить причину повреждения загрузочных секторов. Если оно вызвано оплошностью пользователя или сбоем в работе программ или оборудования, можно переходить непосредственно к процедуре восстановления. Если же повреждение загрузочных секторов произошло вследствие деятельности вируса или другой вредоносной программы, предварительно необходимо «найти и уничтожить» злоумышленника.


«Лечение» секторов необходимо производить только при условии отсутствия вируса в оперативной памяти. Если копия вируса в памяти не обезврежена, то вполне вероятно, что вирус повторно заразит гибкий диск или винчестер после удаления кода вируса.
Теперь собственно о процедуре восстановления. Как вы знаете, главная загрузочная запись (MBR) присутствует на любом сконфигурированном физическом диске. Однако код программы начальной загрузки в MBR зависит от того, какой ОС создавалась главная загрузочная запись. То есть MBR, созданная при инсталляции Windows 98, отличается от MBR, созданной при инсталляции Windows XP или Linux (подробнее об этом см. главу 5, раздел «Устранение проблем с загрузкой системы»). Содержимое загрузочной записи раздела зависит, кроме того, от типа созданной на этом разделе файловой системы. При выборе средств для восстановления MBR и BR разделов обязательно следует учитывать указанные факторы. Поэтому процедуры восстановления MBR и BR рассмотрены ниже раздельно для Windows 98 и Windows XP.
Восстановление MBR для Windows 98
Прежде чем пытаться восстановить MBR, следует убедиться в необходимости этой процедуры. Для проверки состояния MBR целесообразно использовать утилиту Norton DiskEdit.
ПРИМЕЧАНИЕ
Несмотря на появление все новых программных инструментов для «лечения» файловых систем, многие опытные пользователи предпочитают применять для исправления серьезных ошибок программу Norton DiskEdit. Объясняется это тем, что DiskEdit предоставляет удобные средства просмотра всех элементов структурыфайловой системыи, кроме того, способна предотвратить некорректные изменения этих элементов в процессе восстановления. По указанной причине мыбудем использовать в качестве иллюстраций к излагаемому материалу «снимки» структуры файловой системы, полученные с помощью DiskEdit. Это поможет вам одновременно осваивать возможности DiskEdit.
Чтобы получить доступ ко всем функциям DiskEdit, требуется запустить программу в режиме DOS. Поэтому предварительно необходимо подготовить загрузочный гибкий диск.
СОВЕТ ____________________
Если имеющаяся в вашем распоряжении версия DiskEdit записана на компакт-диске, следует иметь «стандартный» вариант загрузочного гибкого диска, обеспечивающий поддержку CD-привода. Если же предполагается запускать DiskEdit с гибкого диска, можно либо создать «усеченный» вариант загрузочного диска и записать на него файл DiskEdit.exe (он занимает около 700 Кбайт), либо подготовить отдельный гибкий диск с DiskEdit.
Чтобы выбрать с помощью DiskEdit жесткий диск, подлежащий проверке, выполните следующие действия.
1. Загрузите компьютер с гибкого диска в режиме DOS и запустите программу DiskEdit; программа предупредит вас, что она работает в режиме Read Only (Только чтение) с целью защиты данных от случайного редактирования (как изменить режим работы, сказано далее).
2. Щелкните на кнопке Continue (Продолжить), чтобы продолжить работу. Disk-Edit выполнит сканирование дисков с целью определения структуры файловой системы.
3. После завершения сканирования DiskEdit выведет на экран список обнаруженных устройств (рис. 7.1). По умолчанию DiskEdit отображает список логических дисков. Если же таблица разделов повреждена настолько, что ни один из логических дисков не опознан, выводится список обнаруженных физических дисков.
4. В списке Type (Тип) поставьте переключатель в положение Physical Disk (Физический диск).
5. В списке устройств выберите физический диск, который требуется исследовать.

Рис. 7.1.Список устройств, обнаруженных DiskEdit
Физически MBR занимает самый первый сектор жесткого диска (цилиндр 0, головка 0, сектор 1).

ПРИМЕЧАНИЕ
В дальнейшем для краткости будем использовать следующие обозначения: C номер цилиндра, Н – номер головки, S – номер сектора.
Чтобы перейти к нужному сектору, выполните следующие действия.
1. В меню Object (Объект) выберите пункт Physical Sector (Физический сектор).
2. В дополнительном окне (рис. 7.2) введите номер сектора и щелкните на кнопке OK.


Рис. 7.2.Выбор физического сектора
По умолчанию DiskEdit отображает содержимое сектора в шестнадцатеричном коде (режим as Hex) (рис. 7.3).



Рис. 7.3. Представление MBR в шестнадцатеричном коде
В этом представлении каждая пара шестнадцатеричных цифр соответствует одному байту.
ВНИМАНИЕ
Если значение некоторого параметра занимает более одного байта, то в шестнадцате-ричном представлении параметра его старший байт расположен справа, а младший – слева. Например, сигнатура завершения таблицыразделов, АА55, в шестнадцатеричном представлении выглядит как 55 АА.
Первые байты сектора должна занимать программа начальной загрузки. Визуально отличить «нормальную» программу от поврежденной весьма сложно (особенно в том случае, если вы ее вообще первый раз видите). В качестве косвенного признака исправного состояния программы начальной загрузки может служить наличие в ней текстовых диагностических сообщений (типа Geom. Hard. Disk). Их можно увидеть в крайнем правом столбце окна, который содержит символьное (текстовое) представление данных. Еще один косвенный признак – это размер программы. Она должна занимать приблизительно три четверти сектора (446 байт, или 1BE байт в шестнадцатеричной системе) и отделяться от таблицы разделов нулевыми байтами.
Распределение пространства первого сектора жесткого диска представлено в табл. 7.1.
Наконец, наличие корректной таблицы разделов может говорить о том, что первый сектор (сектор 0) в целом не поврежден (или поврежден незначительно). О том, как оценить состояние PT, сказано далее.


Если вы считаете, что программа начальной загрузки требует «лечения», можно использовать следующие методы:
если имеется электронная копия MBR («снятая», например, с аналогичного жесткого диска), можно заменить ею испорченную MBR;
выйти из DiskEdit и в командной строке ввести инструкцию FDISK /MBR; это
приведет к обновлению MBR, но таблица разделов останется в прежнем виде;
при наличии «эталонного» варианта программы, записанного, например, на листе бумаги, и незначительных искажениях можно отредактировать MBR вручную.
В большинстве случаев для восстановления MBR достаточно обновить ее командой FDISK /MBR. Процедура состоит из следующих действий.
1. С помощью программы BIOS Setup убедитесь, что в качестве первого загрузочного устройства указан дисковод FDD.
2. Загрузите компьютер с помощью загрузочного гибкого диска.
3. В командной строке введите FDISK /MBR.
4. Извлеките гибкий диск и выполните перезагрузку системы.

ВНИМАНИЕ
Будьте осторожныпри использовании FDISK /MBR, если повреждение MBR обусловлено воздействием вируса. Дело в том, что эта команда заново переписывает код программы-загрузчика системы и не изменяет таблицу разделов (Partition Table). Если вирус шифрует Partition Table или использует нестандартные способы заражения, FDISK /MBR может привести к полной потере информации на диске. Поэтому перед запуском FDISK /MBR убедитесь в корректности Partition Table. Для этого требуется загрузиться с незара-женного гибкого DOS-диска и проверить корректность этой таблицы(процедура проверки и восстановления PT описана в подразделе «Восстановление таблицыразделов»).
При использовании FDISK необходимо учитывать, что данная утилита не может работать с дисками объемом больше 64 Гбайт.
Чтобы произвести «ручную» правку MBR, необходимо перевести DiskEdit в режим редактирования. Для этого выполните следующие действия.
1. В меню Tools (Сервис) основного окна выберите пункт Configuration (Конфигурация).
2. В открывшейся панели настроек снимите флажок возле пункта Read Only (Только чтение) и щелкните на кнопке OK.
ПРИМЕЧАНИЕ
Для изменения состояния флажков и переключателей в DiskEdit следует использовать клавишу <Пробел>.
После дополнительного подтверждения о смене режима DiskEdit сохранит новые параметры и выполнит повторное сканирование диска. Чтобы вернуться к первому сектору, выполните еще раз описанную выше последовательность действий.
Восстановление MBR для Windows XP
С помощью DOS-команды FDISK /MBR невозможно восстановить MBR, созданную при инсталляции Windows XP.
Для решения этой задачи следует использовать команду fixmbr, которая доступна из консоли восстановления Windows XP. Команда имеет следующий формат:
fixmbr [имя_диска], где имя_диска – это обозначение диска, на который требуется записать новую MBR. Имя диска может выглядеть следующим образом: \Device\HardDisk0.
Так новая MBR записывается на указанный диск: fixmbr \Device\HardDisk0.
ПРИМЕЧАНИЕ
Для получения имени диска можно воспользоваться командой map, которая также доступна в среде Консоли восстановления (рис. 7.4).


Рис. 7.4. Представление имен дисков командой map

ВНИМАНИЕ
Если параметр имя_устройства не указан, новая MBR будет записана на диск, с которого загружается основная ОС.
Если при выполнении команды fixmbr будет обнаружена неправильная или нестандартная подпись таблицы разделов, то на экран выводится запрос подтверждения продолжения работы. Если доступ к дискам осуществляется без сбоев, то на запрос следует ответить отрицательно.
ВНИМАНИЕ
Запись новой MBR на диск с системным разделом может привести к повреждению таблиц разделов, в результате чего разделы могут стать недоступными.
Проверка и восстановление таблицы разделов
Чтобы оценить состояние таблицы разделов (PT), выполните следующие действия.
1. С помощью DiskEdit откройте первый сектор диска, как было описано ранее.
2. В меню View (Вид) выберите пункт as Partition Table (в виде таблицы разделов).
Информация, которая появится на экране, существенно зависит от состояния PT. В любом случае DiskEdit попытается представить данные, расположенные там, где должна находиться PT, в виде таблицы. Если PT более или менее корректна, то она должна выглядеть приблизительно так, как показано на рис. 7.5.


Рис. 7.5. Представление таблицы разделов в текстовой форме

Столбцы таблицы, выводимой DiskEdit, означают следующее:
System (Система) – тип файловой системы или раздела; расширенный (дополнительный) раздел обозначается как EXTNDx; элемент дополнительной таблицы разделов, ссылающийся на следующий логический диск, имеет метку EXTEND;
Boot (Загрузка) – признак загрузочного раздела; если раздел является загрузочным, для него выводится значение Yes, в противном случае – No;
Starting Location (Начальное положение) – адрес первого сектора раздела, заданный номером головки, цилиндра и сектора;
Ending Location (Конечное положение) – адрес последнего сектора раздела, заданный номером головки, цилиндра и сектора;
Relative Sectors (Относительный сектор) – номер первого сектора раздела в соответствии с адресацией LBA (то есть при «сквозной» нумерации по головкам, цилиндрам и секторам);
Number of Sectors (Количество секторов) – размер раздела, измеренный в секторах (напомним, сектор имеет размер 512 байт).

Чтобы просмотреть цепочку ссылок на логические диски, размещенные внутри расширенного раздела, выполните следующие действия.
1. Переместите курсор в строку, соответствующую расширенному разделу.
2. В меню Link (Ссылка) выберите пункт Partition (Раздел).
3. Если в столбце System появился элемент-ссылка (с меткой EXTEND), повторите для него шаги1и2, чтобы перейти к следующему логическому диску (рис. 7.6).


Рис. 7.6. Просмотр дополнительныхтаблиц разделов в текстовой форме

Если отображаемые DiskEdit параметры PT говорят о наличии ошибок в ней и вам известна геометрия разделов жесткого диска, то можете отредактировать записи PT «вручную» (то есть с помощью DiskEdit), прямо в таблице.
Если же повреждения PT столь велики, что представленная в таблице информация вообще не поддается разумной интерпретации, можно попробовать другой метод анализа. Откройте PT в виде шестнадцатеричного кода (для этого выберите команду View as Hex) и сравните содержащиеся в PT данные с приведенными в табл. 7.2.


Из всех перечисленных полей некое предопределенное значение может иметь лишь байт, содержащий код типа раздела. Например, для первичного раздела с файловой системой FAT32 этот код должен быть равен 0Ch, для логического диска с FAT32 в расширенном разделе он равен 0Bh, а для NTFS – 07h.

СОВЕТ
Достаточно обширный список наиболее распространенных кодов вы можете получить, если в программе ParagonPartitionManager вы берете для какого-либо раздела команду Изменить partition id (рис. 7.7).


Сектор таблицы логических дисков, в отличие от сектора главной загрузочной записи, практически пуст. Все байты в нем от начала и до байта со смещением 1BDh включительно должны содержать нулевое значение. Начиная со следующего байта (со смещением 1BEh) располагается дополнительная таблица разделов (Extended PT), состоящая из двух элементов. В конце сектора располагается уже знакомая вам сигнатура – значение AA55h. Структура элементов Extended PT полностью аналогична структуре элементов основной таблицы разделов.
В некоторых (особо тяжелых) случаях можно использовать следующий довольно экстремальный метод, который, впрочем, часто дает положительные результаты.
1. С помощью DiskEdit скопируйте в загрузочный сектор восстанавливаемого диска содержимое MBR и Partition Table с любого исправного диска. Затем, очистив (прописав нулями) все записи PT, кроме первой, отредактируйте ее, внеся заведомо искаженную информацию о конечном размещении раздела (например, 9999-й цилиндр) и общем количестве секторов (например, 99999999).
2. После этого запустите утилиту DiskDoctor, которая, как и DiskEdit, входит в набор Norton Utilities.
3. Начните проверку восстанавливаемого диска, щелкнув последовательно в двух окнах на кнопках Diagnose Disk и Diagnose (рис. 7.8).


Рис. 7.8. Стартовые окнаутилиты DiskDoctor

4. На запрос об устранении найденных в Partition Table ошибок ответьте согласием, щелкнув на кнопке Yes (рис. 7.9).


Рис. 7.9. Несмотря на грозное предупреждение DiskDoctor, соглашайтесь на все

5. После внесения исправлений в искусственно созданную вами таблицу разделов DiskDoctor предложит поиск возможных дополнительных DOS-разделов (то есть разделов с файловой системой семейства FAT). Дайте согласие на это, и если данные на диске не повреждены, дополнительный раздел будет найден и после вашего подтверждения восстановлен.
Как правило, после перезагрузки компьютера данные дополнительного раздела становятся доступны без дополнительных восстановительных операций.

Восстановление удаленных и «потерянных» разделов

Разделы и логические диски могут быть «потеряны» в результате повреждения таблицы разделов (PT). Поэтому зачастую процедуры «ремонта» PT и восстановления «потерянных» разделов являются звеньями одной цепи: восстановив одну из записей PT, можно отыскать на диске следующий раздел, внести его данные в соответствующую запись PT и так далее.
Ситуация несколько усложняется в том случае, если были удалены сами разделы (например, с помощью программ типа Paragon Partition Manager) либо если был отформатирован весь жесткий диск.
Особый случай – это потеря разделов в результате преобразования динамических томов в базовые.
Однако технология восстановления удаленных и «потерянных» разделов зависит не столько от причины утраты, сколько от того, является (являлся) ли удаленный раздел системным. Если нет, то все операции по восстановлению раздела можно производить непосредственно в среде ОС Windows. Причем если это Windows ХР, то в качестве основного инструмента можно использовать утилиту Управление дисками. Для Windows 98 потребуется программа, способная создавать разделы и логические диски без изменения области данных раздела. Таковыми являются, в частности, Norton Partition Magic и упоминавшийся Paragon Partition Manager (но не утилита FDISK, которая при сканировании доступного дискового пространства прописывает в первый сектор на каждом треке код F6, что приводит к потере информации в этих секторах).
Кроме того, необходимо будет вспомнить (и чем точнее, тем лучше) размер восстанавливаемого раздела.
Итак, для восстановления утраченного несистемного раздела без потери хранящихся на нем данных выполните следующие действия.
1. Создайте заново на его месте раздел такого же точно размера, не выполняя форматирование нового раздела.
2. В нулевой сектор раздела поместите копию загрузочной записи (BR) «бывшего» раздела (как ее найти и что собой представляет BR, рассказано в следующем подразделе).
Кроме того, весьма мощными средствами по отысканию и восстановлению «пропавших» разделов обладают программы Drive Rescue и EasyRecovery, рассмотренные в главе 6.

Восстановление данных в файловой системе FAT32

Порядок проверки состояния файловой системы в общем случае зависит от характера повреждения. Например, нет необходимости разбираться с MBR, если поврежден корневой каталог логического диска или таблица FAT. Тем не менее, если вы не можете определить причину неработоспособности системы или по общему характеру ситуации создалось впечатление, что «все пропало», лучше начинать диагностику с «самого верха».
Будем считать, что с помощью материала предыдущего раздела все проблемы с MBR успешно преодолены. В таком случае порядок проверки состояния разделов, представленных в таблице разделов, должен быть следующим.
1. Проверка загрузочной записи (Boot Record) раздела (логического диска).
2. Проверка состояния корневого каталога.
3. Исследование таблицы размещения файлов (FAT).
4. Проверка состояния вложенных папок и файлов.

Проверка и восстановление Boot Record

Загрузочная запись раздела (как и логического диска в дополнительном разделе) располагается в первом секторе этого раздела (в пределах раздела этот сектор имеет относительный номер 0).
Как уже было сказано, содержимое загрузочной записи зависит от типа операци– онной системы, которая должна загружаться с этого диска (если он является системным), и от типа файловой системы, под которую отформатирован раздел.
Тем не менее в любом случае BR содержит две области данных: программу на– чальной загрузки операционной системы и блок параметров BIOS (BIOS Para– meter Block, BPB).
С помощью программы DiskEdit можно перейти на интересующий вас сектор загрузочной записи двумя способами.
Первый способ доступен, если в PT все сведения корректны. В этом случае можнопросто выбрать в таблице нужный диск, а затем в меню Link выбрать ко манду Partition.DiskEdit выведет на экран содержимое всего сектора BR в текстовом виде (рис. 7.10).



Второй способ предполагает использование сведений, полученных при просмотре таблицы разделов, а точнее – абсолютного адреса первого сектора.
Выполните следующие действия.
1. Используя текстовое представление таблицы разделов, доберитесь по ссылкам до нужного диска.
2. Чтобы получить абсолютный адрес первого сектора диска, сложите относительный номер первого сектора диска, представленный в столбце Relative Sectors (в строке ссылки EXTEND), с абсолютным номером первого сектора предшествующего диска; например, для цепочки дисков, показанной на рис. 7.6, адрес первого сектора логического диска с FAT32 будет равен: 8 193 150 + 63 = = 8 193 213; для следующего диска с FAT32: 24 579 450 + 8 193 213 = 32 772 663.
3. В меню Object выберите пункт Physical Sector.
4. В дополнительном окне введите номер первого сектора диска и щелкните на кнопке OK.
ПРИМЕЧАНИЕ ____________________
В действительности число, указанное в столбце Relative Sectors, – это размер (в секторах) предшествующего диска (раздела), и называть его относительным номером первого сектора следующего диска вынуждает лишь наименование этого столбца таблицы.
DiskEdit выведет на экран содержимое всего сектора BR в шестнадцатеричном коде (рис. 7.11).



Рис. 7.11. Представление первого сектора логического диска в шестнадцатеричном коде

Чтобы получить текстовое представление только блока BPB, выполните следующие действия.
1. Выделите четвертый байт от начала сектора (первые три байта сектора занимает команда перехода на начало программы загрузки), как показано на рис. 7.11.
2. В меню View выберите пункт as Boot Record(32) (в виде загрузочной записи для FAT32).
Распределение пространства первого сектора логического диска представлено в табл. 7.3.

ПРИМЕЧАНИЕ
Поля BPB со смещением от начала сектора 44 байта и более на первом экране утилиты DiskEdit не умещаются. Чтобы ихувидеть, воспользуйтесь полосой прокрутки.




Восстановление BR системного и/или загрузочного раздела для Windows 98 может быть выполнено в «ручном» либо в «автоматическом» режиме.
ПРИМЕЧАНИЕ ____________________
Восстановление загрузочной записи системного раздела необходимо производить, загрузив систему с помощью загрузочного гибкого диска. Для других разделов соблюдение этого требования не обязательно, но желательно.
Для «автоматического» решения проблемы можно воспользоваться одной из двух команд:
SYS <букеа диска> – обеспечивает запись BR в загрузочный сектор раздела, а также копирование в корневой каталог трех системных файлов: Msdos.sys, Io.sys и Command.com;
FORMAT <букеа диска> – обеспечивает формирование файловой структуры указанного раздела диска с воссозданием BR, чистых таблиц FAT и корневого каталога (Root Directory); область данных при этом не затрагивается.
Если же восстановление загрузочной записи при помощи команд SYS и FDISK невозможно, следует попробовать заменить загрузочный сектор либо его резервной копией, взятой из сектора 6 этого же раздела, либо (в крайнем случае) копией загрузочной записи другого раздела, имеющего идентичную геометрию.
Для выполнения процедуры замены целесообразно использовать утилиту Norton DiskEdit. С ее помощью выполните следующие действия.
1. После того как DiskEdit завершит сканирование и выведет на экран список обнаруженных устройств, в списке Type (Тип) поставьте переключатель в положение Physical Disk (Физический диск).
2. В списке устройств выберите физический диск, который требуется исследовать.
3. В меню View (Вид) выберите пункт as Partition Table (в виде таблицы разделов).
4. В строке таблицы разделов, соответствующей восстанавливаемому разделу, посмотрите и запишите номер первого сектора раздела (значение в столбце Relative Sectors). Если вас интересует логический диск на дополнительном разделе, доберитесь до нужной записи в соответствующей дополнительной таблице разделов, как было описано выше.
5. К зафиксированному номеру сектора прибавьте 6, чтобы получить абсолютный номер сектора с резервной копией BR.
6. В меню Object выберите пункт Physical sector.
7. В дополнительном окне (рис. 7.12) введите в поле Starting Sector (Начальный сектор) вычисленный номер резервного загрузочного сектора, а в поле Number of Sectors (Количество секторов) – значение 1 и щелкните на кнопке OK^u получите шестнадцатеричное представление резервного загрузочного сектора.

Рис. 7.12. Переход к резервной копии загрузочного сектора

8. Чтобы убедиться в целостности резервного сектора, переключитесь в текстовый режим просмотра, и затем вернитесь к шестнадцатеричному представлению.
9. В меню Tools с помощью команды Configuration переведите DiskEdit в режим редактирования.
10. В меню Edit выберите команду Mark (Пометить) и затем с помощью клавиш управления курсором выделите содержимое всего сектора (если сектор был открыт правильно, DiskEdit не пустит вас за его пределы).

Рис. 7.13. Выбор типа заменяемого объекта
11. В меню Tools выберите команду Write Object To… (Записать объект в…)ивдо-полнительном окне (рис. 7.13) переведите переключатель в положение To Sectors… (В секторы…). Обратите внимание, что если вы выберите здесь вариант To Physical sectors. (В физические секторы.), то в следующем окне вам придется указывать адрес восстанавливаемого загрузочного сектора в адресации CHS.
12. В следующем окне (рис. 7.14) введите в поле Starting Sector (Начальный сектор) относительный адрес восстанавливаемого загрузочного сектора (он равен 0) и в ответ на запрос DiskEdit подтвердите свои намерения. Загрузочный сектор будет заменен его копией.


Рис. 7.14. Последний шаг в замене загрузочного сектора

Чтобы убедиться в успешности выполненной процедуры, откройте восстановленный загрузочный сектор в текстовом режиме и проверьте значения полей в соответствии с табл. 7.3.

Исследование корневого каталога

Вслед за загрузочной записью находятся две копии таблицы размещения файлов FAT и корневой каталог. Переходить к исследованию FAT имеет смысл лишь в том случае, когда соответствующий раздел (или логический диск) корректно опознается системой, то есть и в таблице разделов для него представлены корректные сведения, и загрузочная запись диска корректна.
Поэтому для исследования внутренней структуры раздела целесообразно использовать другой режим DiskEdit – работу с логическими устройствами (Logical disk).
Для перехода в новый режим выберите в меню Object пункт Drive (Устройство). После того как DiskEdit завершит сканирование, установите переключатель режимов в положение Logical disks и затем выберите в списке логических дисков тот, с которым вы собираетесь работать (рис. 7.15).


Рис. 7.15. Список логических дисков
После этого DiskEdit начнет сканирование диска с целью определения структуры файловой системы и построения полного дерева папок и файлов. Чтобы получить сведения о FAT и корневом каталоге, не обязательно дожидаться полного завершения сканирования, можно его прервать через несколько секунд после начала, нажав клавишу Esc. После получения от вас подтверждения о прекращении сканирования DiskEdit выведет на экран содержимое корневого каталога в текстовой форме (рис. 7.16).



Рис. 7.16. Корневой каталог

Если DiskEdit по какой-то причине не смог самостоятельно обнаружить корневой каталог, попробуйте перейти к нему по относительному адресу его первого сектора. Номер этого сектора можно определить по значению поля First cluster of Root блока BPB. Кроме того, при поиске корневого каталога необходимо учитывать следующее.
Корневой каталог (как и любой другой каталог в FAT32) содержит 32-байтовые элементы – дескрипторы, описывающие файлы и вложенные каталоги.
Первый дескриптор корневого каталога содержит сведения о логическом диске (точнее говоря, о самом корневом каталоге), в том числе: метку тома, дату и время создания, атрибуты каталога как элемента файловой системы. Остальные дескрипторы, хранящиеся в корневом каталоге, содержат большее количество сведений о связанных с ними элементах данных. Все они не умещаются на одном экране DiskEdit. Для их пролистывания следует использовать команду More (Еще), расположенную в строке меню окна.
Мы ограничимся описанием лишь наиболее важных полей дескриптора, которые представлены на первом экране:
Name – имя элемента данных (файла или папки); если элемент данных отмечен как удаленный, то в качестве первого символа имени используется байт E5 (в текстовом формате DiskEdit заменяет его буквой х);
Ext – расширение файла (для папок это поле пусто);
ID – тип элемента данных; возможные значения:
Vol – том;
Dir – каталог;
LFN – аббревиатура от Long File Name, длинное имя файла (об LFN см. главу 3, раздел «Выбор имен папок и файлов»);
File – файл;
Erased – удален (указывается только для файлов);
Del LFN – удаленное длинное имя (признак устанавливается после переименования файла или папки);
Size – размер (в байтах);
Date – дата создания или изменения;
Time – время создания или изменения;
Cluster – номер первого кластера;
A, R, S, H, D, V – атрибуты элемента данных (архивный, только чтение, системный, скрытый, каталог, том); значения всех атрибутов хранятся в одном байте дескриптора.
Чтобы просмотреть содержимое какого-либо вложенного каталога, переместите курсор в соответствующую строку и нажмите клавишу Enter.
Если сведения о корневом (или вложенном) каталоге, представленные DiskEdit, кажутся вам «подозрительными», можно попробовать интерпретировать записанные в нем данные самостоятельно, переключившись в режим просмотра шестна-дцатеричного кода. Для этого в меню View выберите пункт as Hex. Формат дескриптора каталога представлен в табл. 7.4.
Анализируя полученную информацию, вы можете обнаружить подозрительные изменения в полях размера файла, даты и времени. При необходимости их можно исправить «вручную».


Кроме того, для каждого файла в столбце Cluster отображается номер распределенного ему первого кластера. Следует просмотреть весь каталог до конца: необходимо проверить, что в каталоге отсутствуют посторонние данные. Они могут быть записаны туда вирусом.
Если перейти в режим неформатированного просмотра, можно убедиться, что свободные элементы каталога содержат нулевые значения. Если же после свободных элементов находятся какие-либо данные, существует очень большая вероятность того, что они записаны туда вирусом или системой защиты программ от несанкционированного копирования (если исследуемый каталог содержит такие программы).
В том случае, когда каталог поврежден полностью или частично, ссылки на описанные в нем файлы будут потеряны. Если вы найдете тем или иным способом секторы, содержащие нужный вам файл с разрушенным дескриптором, то, пользуясь описанной ниже методикой, сможете восстановить дескриптор и получить доступ к файлу.
Процедура основана на использовании функций DiskEdit по поиску различных элементов файловой системы FAT.
Например, чтобы найти потерянные каталоги (такие, на которые нет ссылок из других каталогов, в том числе из корневого), требуется выполнить следующее.
1. В меню Tools выберите команду Find Object (Найти объект), а в дополнительном меню выберите вариант Subdirectory (Подкаталог).
2. Программа DiskEdit просматривает секторы диска в поисках такого, в начале которого находится последовательность байтов 2Е 20 20 20 20 20 20 20 20 20 20. Эта последовательность соответствует дескриптору, содержащему ссылку каталога на себя самого.
3. Нажимая комбинацию клавиш Ctrl+G, вы можете продолжить поиск нужного каталога, пока не найдете тот, который содержит интересующие вас файлы.
4. Как только нужный каталог найден, необходимо записать физический адрес сектора диска, содержащего каталог, а затем найти либо вычислить номер кластера, соответствующего каталогу.
Для поиска номера кластера, в котором располагается найденный каталог, перейдите в режим текстового просмотра каталога, выбрав в меню View пункт as Directory. Затем в меню Link выберите команду Cluster chain (fat) (Цепочка кластеров (fat)). На экране появится содержимое таблицы FAT в текстовом режиме просмотра, при этом искомый номер кластера будет выделен.
Зная номер кластера потерянного каталога, можно создать новый дескриптор каталога, например, в корневом каталоге диска, и сделать в этом дескрипторе ссылку на найденный каталог. После этого потерянный каталог вновь станет доступным.

Исследование FAT

Между загрузочным сектором и таблицей размещения файлов FAT могут находиться зарезервированные секторы, которые являются служебными для файловой системы или не используются.
Количество секторов, зарезервированных на логическом диске, можно узнать из блока параметров BIOS (BPB или Extended BPB, в зависимости от версии операционной системы). Искомое значение находится в поле Reserved sectors at beginning этого блока (смещение 3 байта).
Если зарезервирован только один сектор, то первая копия таблицы размещения файлов FAT располагается сразу вслед за загрузочным сектором. Именно загрузочный сектор в данном случае и является зарезервированным.
Когда зарезервировано несколько секторов, между загрузочным сектором и первой копией таблицы FAT может находиться еще несколько секторов, содержащих нулевые значения. Если компьютер заражен вирусом, в этих секторах может быть спрятано тело вируса или копия оригинальной загрузочной записи, замещенной вирусом.
Информация, представленная в корневом каталоге, должна соответствовать сведениям о распределении кластеров области данных, хранящимся в обеих копиях FAT.
Чтобы сравнить значения полей Cluster и Size дескриптора некоторого элемента данных с информацией в FAT, выполните следующие действия.
1. Откройте в текстовом режиме корневой каталог интересующего вас логического диска и переместите курсор в соответствующую строку.
2. В меню Link выберите команду Cluster chain (Цепочка кластеров).
DiskEdit откроет первую копию FAT и выделит в ней черным прямоугольником номер первого кластера объекта, а также подсветит красным все остальные распределенные объекту кластеры (рис. 7.17).
Визуально таблица размещения файлов должна содержать в основном монотонно изменяющиеся последовательности номеров кластеров, нулевые значения, соответствующие свободным кластерам, а также значение 0xFFFF (0xFFF для FAT12 или 0xFFFFFFFF для FAT32), которое является признаком конца цепочки кластеров.
В результате программной ошибки или работы вируса таблица FAT может быть либо полностью разрушена, либо изменена (например, зашифрована или прописана нулями). Если цепочка кластеров для нужного вам файла разрушена частично или полностью, восстановление такого файла может стать непростой задачей. В этом случае можно попробовать воспользоваться инструментами восстановления данных, рассмотренными в четвертой главе книги.


Рис. 7.17. Просмотр FAT

Если они не помогут, вновь вернитесь к работе с DiskEdit. Чтобы найти таблицу FAT не по адресу, а по ее содержимому, выполните следующее.
Выберите в меню Tools команду Find Object и затем строку FAT. Программа DiskEdit выполнит поиск первой копии таблицы FAT и отобразит ее дамп, выделив в нем первые три байта.
Если теперь сместить текстовый курсор вниз или нажать клавишу PgDn, а затем выбрать повторно в меню Tools команду Find Object FAT еще раз, будет найдена вторая копия таблицы FAT.
Если любая из копий таблицы FAT корректна, то для быстрого перехода к одной из них можно использовать имеющиеся в меню Object команды 1st FAT и 2nd FAT.

Восстановление данных в файловой системе NTFS

Как вы уже знаете из материала главы 3, файловая система NTFS содержит целый ряд механизмов, призванных повысить надежность хранения данных. Это, в свою очередь, ведет к существенному усложнению структуры NTFS по сравнению с FAT32. Даже детальное изучение структуры записей, хранящихся в MFT (главной таблице файлов), не гарантирует возможность восстановления данных «вручную».
Ситуация усугубляется тем, что на сегодняшний день практически отсутствуют инструменты, обеспечивающие удобные средства просмотра и редактирования MFT.
По указанной причине мы ограничим круг рассматриваемых вопросов следующими ситуациями:
восстановление элемента таблицы разделов, содержащего сведения об NTFS-разделе;
восстановление загрузочного сектора логического диска с NTFS;
восстановление служебной информации в MFT.
Перечисленные задачи можно решить посредством совместного использования уже знакомых вам инструментов: Norton DiskEdit и Paragon Partition Manager, а также утилиты Partition Table Editor, входящей в состав пакета Norton PartitionMagic.

Восстановление элемента таблицы разделов

Имеется в виду ситуация, когда операционной системе Windows XP при загрузке не удается опознать логический диск с NTFS вследствие повреждения описывающего его (диск) элемента таблицы разделов. Чтобы получить более полное представление о возникшей ситуации, целесообразно запустить утилиту Norton Partition Table Editor.

ПРИМЕЧАНИЕ
Утилита Norton Partition Table Editor (в дальнейшем для краткости будем называть ее PTEdit) состоит из единственного исполняемого файла – PTEDIT.exe. Ее особенность состоит в том, что она при запуске обеспечивает перевод системыв однозадачный режим (за счет загрузки собственной DOS). Однако для работыс NTFS-разделами ее лучше запускать либо из средыWindows 98, либо из среды «настоящей» MS DOS, например, с гибкого диска. Размер файла PTEDIT.exe – около 500 Кбайт.
После запуска PTEdit на экране появится диалоговое окно, с помощью которого можно просмотреть и отредактировать основные параметры любого элемента таблицы разделов выбранного физического диска (рис. 7.18).
Выбор физического диска выполняется с помощью раскрывающегося списка Hard Disk (Жесткий диск).
Строки расположенной ниже таблицы соответствуют четырем элементам основной таблицы разделов. В столбцах выводятся следующие сведения:
Type (Тип) – тип файловой системы или раздела; отображается в виде шест-надцатеричного кода;
Boot (Загрузка) – признак загрузочного раздела; для загрузочного активного раздела, как вы знаете, должно быть указано значение 80;
Starting (Начальное положение) – адрес первого сектора раздела, заданный
номером цилиндра (Cyl), головки (Head) и сектора (Sector);
Ending (Конечное положение) – адрес последнего сектора раздела, также заданный номером цилиндра, головки и сектора;
Sectors Before (Предшествует секторов) – количество секторов жесткого диска, предшествующих первому сектору раздела в соответствии с адресацией LBA (то есть при «сквозной» нумерации по головкам и цилиндрам);
Sectors (Секторов) – размер раздела, измеренный в секторах.


Рис. 7.18. Стартовое окно утилиты Partition Table Editor

Чтобы просмотреть цепочку дополнительных таблиц расширенного раздела (EPBR), выполните следующие действия.
1. Переместите курсор в строку, соответствующую расширенному разделу (его код равен 0Fh).
2. Щелкните на кнопке Goto EPBR (Перейти на EPBR), расположенной под таблицей.
Если вы знаете, что восстанавливаемый NTFS-раздел находится на прежнем месте, но в соответствующей ему строке указан неверный тип раздела, вы можете попробовать установить корректное значение принудительно. Для этого щелкните на кнопке Set Type (установить тип) и в открывшемся окне выберите требуемое значение (рис. 7.19). Для раздела NTFS оно равно 07h.
Если вам известны корректные значения других параметров раздела и они отличаются от представленных в таблице, вы можете (предварительно запомнив или записав на бумаге текущие значения) ввести их в поля таблицы. Чтобы внесенные изменения были записаны на диск, щелкните на кнопке Save Change (Сохранить изменения).

Рис. 7.19.Можно принудительно установить требуемый тип раздела

СОВЕТ
Если восстанавливаемый раздел вообще опознается как пустой, можно попробовать создать на его месте новый, такого же типа, как у восстанавливаемого раздела, и (обязательно!) точно такого же размера. Для выполнения этой процедуры можно использовать либо Paragon Partition Manager, либо Norton PartitionMagic (о работе с ними рассказано в третьей главе).

Восстановление загрузочного сектора раздела NTFS

Состав информации, содержащейся в загрузочном секторе раздела NTFS, во многом аналогичен составу информации в загрузочном секторе раздела FAT32: в его первых трех байтах записана команда перехода на программу начальной загрузки ОС, затем идет код файловой системы, а вслед за ним – поля блока параметров BIOS (BPB). Чтобы оценить корректность содержимого загрузочного сектора раздела NTFS, переместите курсор в строку соответствующего раздела и щелкните на кнопке Boot Record (Загрузочная запись), расположенной под таблицей (см. рис. 7.18). В дополнительном окне будет представлено содержимое BPB в текстовом формате (рис. 7.20).
По сравнению с BPB раздела FAT32 здесь присутствуют следующие специфические поля:
Total NTFS Sectors (Всего секторов в NTFS) – общее число секторов в разделе;
MFT Start Cluster (Начальный кластер MFT) – номер первого кластера таблицы MFT;
MFT Mirror Start Cluster (Начальный кластер зеркала MFT) – номер первого кластера копии таблицы MFT;
Clusters per FRS (Кластеров в FRS) – размер одной записи таблицы MFT (в кластерах);
Clusters per Index Block (Кластеров в индексном блоке) – размер индексного блока (в кластерах).


Рис. 7.20. Диалоговое окно NTFS Boot Record

Если повреждения незначительны, можно отредактировать значения полей непосредственно в окне NTFS Boot Record. После внесения изменений щелкните на кнопке Write (Записать), чтобы перенести их на диск.
Если загрузочный сектор поврежден существенно или вам неизвестны корректные значения полей, следует заменить загрузочный сектор его резервной копией. Для версии NTFS, используемой в Windows XP, копия загрузочного сектора хранится в самом последнем секторе логического диска.
Операцию копирования сектора можно выполнить либо с помощью Norton Disk-Edit, либо с помощью Paragon Partition Manager (точнее, с помощью входящей в него утилиты Просмотр секторов). Следует отметить, что в данном случае второй вариант даже предпочтительнее, поскольку Partition Manager «знаком» с NTFS лучше, чем Norton DiskEdit.
Итак, чтобы заменить загрузочный сектор NTFS его резервной копией с помощью утилиты Просмотр секторов, выполните следующие действия.
1. После загрузки Paragon Partition Manager щелкните правой клавишей мыши на изображении восстанавливаемого раздела и выберите в контекстном меню пункт Посмотреть сектора.
2. В окне утилиты Просмотр секторов (рис. 7.21) введите в редактируемом поле Абсолютный сектор|Наберите выражение для оценки: номер последнего сектора раздела (он отображается справа от раскрывающегося списка) и нажмите клавишу Enter.
3. Щелкните на кнопке Сохранить, расположенной в правой части окна утилиты, и в дополнительном окне укажите адрес и имя двоичного (.bin) файла, в который следует записать содержимое сектора.
4. Вернитесь к нулевому (загрузочному) сектору раздела, введя 0 в поле Абсолютный сектор|Наберите выражение для оценки:.
5. Щелкните на кнопке Настройки и в дополнительном окне установите флажок Разрешить запись. После того как вы закроете окно, станет доступна кнопка Восстановить.
6. Щелкните на кнопке Восстановить и в открывшемся окне укажите bin-файл, из которого следует считать содержимое сектора.


Рис. 7.21. Представление загрузочного сектора в окне утилиты Просмотр секторов

После двух подтверждений с вашей стороны о корректности замены будет выполнена запись на диск.
В том случае, если повреждена и резервная копия загрузочного сектора, остается только один выход: отредактировать содержимое загрузочного сектора вручную. Для выполнения этой операции также пригодна утилита Просмотр секторов, но можно использовать и Norton DiskEdit. Распределение пространства загрузочного сектора логического диска NTFS представлено в табл. 7.5.


Для успешного проведения восстановительных работ в разделе NTFS необходимо определить его геометрию, которая характеризуется набором следующих параметров:
размер сектора (в байтах);
размер кластера (в секторах);
номера начального кластера таблицы MFT и ее копии;
размер записи таблицы MFT (в кластерах).
Первый из названных параметров полностью аналогичен одноименному параметру для раздела FAT32.
Что касается размера кластера, то, как и для FAT32, он зависит от объема раздела, но может быть изменен пользователем при форматировании раздела (либо с помощью соответствующих функций таких инструментов, как Norton PartitionMagic или Paragon Partition Manager, рассмотренных в главе 3).

Восстановление служебной информации в MFT

Как вы уже знаете, таблица MFT представляет собой метафайл с именем $MFT, в котором хранятся записи с атрибутами других метафайлов и записи с атрибутами файлов пользователя (подробнее о логической структуре MFT см. главу 3).
Для разделов объемом в несколько гигабайт и при большом количестве файлов данных размеры MFT могут достигать десятков мегабайт. При этом граница MFT может изменяться динамически в зависимости от объема записанных на диск данных и наличия свободного пространства.
Кроме того, каждый файл в NTFS может иметь собственный набор атрибутов (об этом также достаточно подробно говорилось в главе 3); некоторые из них задаются самим пользователем.
Все это существенно затрудняет анализ и восстановление MFT на уровне отдельных записей.
Тем не менее в случае повреждения MFT вы можете попытаться восстановить записи, относящиеся к метафайлам, а затем поручить восстановление файлов и папок одному из программных инструментов, рассмотренных в четвертой главе.
Поиск таблицы MFT
Номер первого кластера таблицы MFT содержится в поле Clusters to MFT загрузочного сектора. Если вам удалось его восстановить, то с помощью утилиты Просмотр секторов можно перейти на этот кластер и проверить корректность записей, относящихся к метафайлам.
Для перехода по номеру кластера выполните следующие действия.
1. Откройте первый (загрузочный) сектор диска.
2. В разделе Абсолютный сектор, в поле Наберите выражение для оценки введите формулу для вычисления номера первого сектора MFT: x, где – это размер кластера, записанный в поле Sectors per Cluster (например: 40 000 х 8, рис. 7.22)
3. Нажмите клавишу Enter.
Характерные признаки «исправной» MFT:
каждая запись начинается со слова FILE0, размещенного в первых пяти байтах сектора;
для большинства записей метафайлов в байтах со смещением F2h хранится имя метафайла, которое всегда начинается с символа $;
первая запись описывает сам метафайл $MFT.


Последовательность размещения записей других метафайлов приведена в табл. 7.6.



Далее в файле $MFT следуют записи с информацией обо всех остальных файлах и каталогах.
В том случае, если поле Clusters to MFT загрузочного сектора повреждено или переход по номеру кластера привел «неизвестно куда», можно попробовать доверить поиск MFT самой утилите Просмотр секторов.
Для этого щелкните на кнопке Перейти и в открывшемся меню (рис. 7.23) выберите команду NTFS4MFT. Обратите внимание, что здесь же указан номер сектора (относительно начала раздела), с которого начинается MFT.


Рис. 7.23.Поиск таблицы MFT с помощью утилиты Просмотр секторов
Если и этот прием не даст результата, остается последний выход: вернуться к работе с программой Norton DiskEdit и попытаться найти таблицу MFT с помощью полнотекстового поиска по разделу. В качестве ключа поиска можно использовать имя метафайла – $MFT. Однако при этом следует учитывать, что имена файлов в NTFS представлены в двухбайтовой кодировке UNICODE, а Norton DiskEdit работает с однобайтовым кодом ASCII.
Если основная таблица MFT повреждена, следует проверить состояние ее копии. Напомним, что в NTFS не предусмотрено создание полной копии MFT. Сокращенная копия, MFT Mirror, содержит лишь первые четыре записи из основной таблицы, относящиеся к метафайлам $MFT, $MFTMirr, $LogFile и $Volume.
Напомним также, что копия MFT в версии NTFS для Windows XP всегда расположена в середине раздела. Поэтому если в загрузочной записи адрес ее начала отсутствует, несложно его вычислить исходя из числа секторов раздела.
Можно также попробовать перейти к сектору с копией MFT с помощью утилиты Просмотр секторов, воспользовавшись командой NTFS MFT зеркальный из меню Перейти (см. рис. 7.23).
Если копия уцелела, необходимо отыскать ее последний сектор и затем перенести содержимое «зеркала» в соответствующие секторы, отведенные под основную MFT.
С помощью утилиты Просмотр секторов эта операция выполняется таким же образом, как и перенос копии загрузочного сектора.
Размер и структура записи таблицы MFT
С учетом сказанного выше большое значение имеет правильное определение размера записи таблицы MFT. Его значение хранится в поле Clusters per FRS загрузочного сектора.
Многие дисковые утилиты, в том числе PTEdit, отображают это значение как десятичное целое положительное число в диапазоне 0-255 (обычно равное 246, см. рис. 7.20). В действительности это значение следует рассматривать как шест-надцатеричное целое со знаком, в котором старший разряд отводится для представления знака. Если число положительно (то есть в десятичном представлении меньше 128), то оно означает количество кластеров, занимаемых одной записью таблицы MFT. Если же число отрицательное (больше десятичного 127), то для определения размера записи MFT нужно использовать следующую формулу:
FRS= 2(256 – Clusters_Per_FRS)
Здесь FRS – количество байтов, занимаемых записью MFT, а Clusters_Per_FRS – значение поля Clusters per FRS.
Например, если в поле Clusters per FRS представлено значение 246 (то есть шест-надцатеричное F6), то в приведенной выше формуле показатель степени 2 будет равен 10, а для FRS получим значение 1024, то есть размер записи MFT составляет 1 Кбайт. Аналогично значение поля Clusters per FRS, равное 245 (F5h), соответствует размеру записи MFT, равному 2 11 = 2048 байт, или 2 Кбайт.
Запись MFT содержит список областей переменной длины, каждая из которых соответствует одному из атрибутов файла. Размер этого списка и состав хранящихся в нем атрибутов для каждого файла может быть своим.
Если все атрибуты файла или каталога не помещаются в базовой записи, создается одна или несколько дополнительных записей. При этом базовая запись содержит атрибут, в котором перечислены все атрибуты данного файла и каталога, а также указание, в каких именно записях (базовой или дополнительных) хранятся те или иные атрибуты.
Каждая запись MFT состоит из заголовка фиксированного формата, вслед за которым идет список атрибутов переменной длины. Приступая к исследованию записи MFT, сначала нужно проанализировать ее заголовок. Формат заголовка записи MFT представлен в табл. 7.7.


Несколько слов по поводу так называемого массива корректировки. Перед сохранением записи MFT операционная система заменяет последние два байта каждого сектора специальным значением – шаблоном корректировки, который должен быть одинаковым для всех секторов одной записи MFT, но различаться для разных записей MFT. Оригинальное содержимое последних байтов секторов записи MFT сохраняется во второй и последующих ячейках (два байта) массива корректировки. В первую ячейку массива при этом записывается значение шаблона корректировки.
Процедура «ручного» побайтного восстановления записей MFT может потребовать кропотливого труда в течение нескольких часов (если не больше). Решиться на такой шаг можно лишь в случае потери действительно «жизненно важных» данных. Альтернативный способ – обратиться к услугам специальных служб восстановления. Их адреса можно найти в Интернете. Разумеется, доверить свои данные можно далеко не всем. К числу служб восстановления, имеющих достаточно высокий авторитет, можно отнести, в частности, службу компании Ontrack, создателя описанного в книге пакета для восстановления данных EasyRecovery.

Обратимся к первоисточникам

Хорошо было во времена старых-добрых EC1840. Был дисковод на 5 дюймов, были большие и очень гибкие дискеты. На них все было понятно — Boot-сектор, FAT, таблица файлов… А потом появились эти противные винчестеры по 20 мегабайт, и картина сразу изменилась — обнаружился какой-то непонятный Master Boot Record , простой Boot , логические диски, таблица разделов, и жить стало сложнее. Вопрос, как все это работает и для чего оно нужно (второй важнейший вопрос после сакраментального — едят ли курицу руками?), продолжает мучить просвещенное человечество с тех самых пор и до нынешнего момента. Итак, с чем же их едят…

Для начала немного об адресации на винчестере. Основная единица измерения — сектор . Размер сектора — 512 байт. Секторы можно адресовать либо непосредственно по номеру, либо задавая комбинированный адрес, состоящий из номера цилиндра (дорожки), номера головки (стороны) и номера сектора на дорожке. Перевод из одного в другое производится по простенькой формуле: Номер сектора = (номер цилиндра X число головок X число секторов) + (номер головки X число секторов) + (номер сектора — 1)

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

Вторая основная единица — кластер . Кластер — это несколько секторов, рассматриваемые операционной системой как одно целое. Переход к кластерам произошел потому, что размер таблицы FAT был ограничен, а размер диска менялся. В случае FAT16 для диска объемом 512 Мб кластер будет величиной 8 Кб, до 1 Гб — 16 Кб, до 2 Гб — 32 Кб и так далее.

MBR (Master Boot Record — основной сектор загрузки).

Расположен в нулевом секторе (цилиндр 0, сторона 0, сектор 1). На каждом жестком диске имеется в одном экземпляре и содержит в себе много интересного. По смещению 0H (далее для простоты все смещения будут в шестнадцатиричной системе) находится сам загрузчик. Его задача — обнаружить активный раздел и загрузить его Boot -сектор в память по адресу 0000:7С00 . Далее, по смещению 1BE находится Partition Table (именно в ней загрузчик и ищет активный раздел). По смещению 1FE (последние два байта сектора) находится сигнатура 55AA H , обозначающая загрузочный сектор. Вся дорожка с MBR считается служебной и информация туда не записывается.

Partition Table - таблица разделов.

Живет в одном секторе с MBR по смещению 1BE . Размер PT — 64 байта (на описание одного раздела отводится 16 байт, так что максимум описывается 4 раздела). Для каждого раздела указано, загрузочный (активный) ли он (первый байт описания: 80 H — активный, 0H — нет), адрес начала раздела (в цилиндрах, головках и секторах), код системы, адрес конца раздела, логический адрес начала раздела (в секторах) и количество секторов в разделе. Посмотреть все это в удобоваримом виде можно при помощи бессмертной и незаменимой программы Diskedit в режиме as partition table . Как правило, на большинстве дисков имеется один или два раздела: Primary DOS и (если есть) Extended DOS. PT создается программой FDISK при разбивке винчестера на разделы.

Primary DOS Partition (основной раздел)

Тяжелое наследие старых версий DOS. Сохранился со времен, когда DOS понимал только один раздел. Не может быть больше 2 Гб (под FAT 16). Совпадает с первым логическим диском на винчестере. Только Primary Partition может быть загрузочной. Создается программой FDISK.

Extended DOS Partition (расширенный раздел)

Способ обойти ограничение на размер раздела 2 Гб. Внутри расширенного раздела можно создавать отдельные логические диски. Если посмотреть в PT адрес расширенного раздела и потом при помощи Diskedit перейти на этот адрес, то обнаружится сектор, по своей структуре напоминающий PT. Состоит он из двух элементов: первый описывает текущий раздел (Extended DOS), второй — следующий логический диск (если он есть). По указанному адресу снова обнаружится такая же таблица, а в ней адрес следующего логического диска (опять же, если он существует). В конце сектора имеется все та же сигнатура 55AA H , по которой его можно найти на диске (все в том же Diskedit’е). Вся остальная дорожка, как и в случае MBR — пустая. Создается программой FDISK.

Boot Sector (загрузочный сектор).

Собственно говоря, загрузочный сектор. Boot sector находится в начале каждого логического диска (первый сектор следующей дорожки после PT). В начале сектора находится команда Jmp — переход на начало кода загрузчика. По смещению 3 находится поле длиной 8 байт, содержащее название и версию OS — при загрузке не используется. Далее, по смещению 0B расположен блок из 19 байт, описывающий логические параметры диска (штука, весьма полезная в хозяйстве) — число байт в секторе (для DOS — 512), число секторов в кластере, число резервных секторов (то есть число секторов от начала диска до первой копии FAT — обычно один), число копий FAT (две), формат FAT в текстовом виде (FAT12, FAT16 или FAT32), размер корневого каталога (считается в записях по 32 байта), общее число секторов на диске, тип носителя (совпадает с первым байтом FAT) и число секторов в FAT. Опять же, всю эту информацию в понятном виде выводит Diskedit в режиме as Boot sector. По смещению 2B находится метка тома (длиной 11 байт). По смещению 3E расположен сам начальный загрузчик. Его задача — проверить первый сектор корневого каталога на наличие файлов IO.SYS и MSDOS.SYS и, обнаружив их, загрузить начало IO.SYS по адресу 0000:0700 H и передать ему управление. В последних двух байтах сектора записана привычная сигнатура 55AA H. Создается при форматировании.

FAT (File Allocation Table — таблица размещения файлов).

FAT расположен непосредственно за загрузочным сектором и представляет собой цепной список, предназначенный для поиска файла на диске. В зависимости от типа (FAT12, FAT16 или FAT32), имеет разную структуру. Но в самом примитивном виде идея следующая — каждый элемент FAT соответствует одному кластеру на диске. В корневом каталоге находится ссылка на первый кластер, занимаемый файлом. В FAT ищем этот кластер и смотрим, что в нем записано. Варианты следующие: кластер свободен, зарезервировано, дефектный, конец цепочки или номер следующего кластера в файле. Файл считывается до тех пор, пока не встретится код конца цепочки. В DOS (и его прямом наследнике — Windows) используется две копии FAT — для надежности. Обе копии должны быть идентичны (на диске они расположены друг за другом). Первый байт FAT скрывает в себе дескриптор носителя (F8 H для жесткого диска). Следующие несколько байт описывают тип FAT. За ними идет сама таблица. Создается при форматировании.

Root Directory (корневой каталог).

Идет сразу за второй копией FAT. Имеется на каждом диске. Практически это тот самый список файлов и директорий, который вы видите, открывая диск в Explorer’е или Far’е. Корневой каталог состоит из 32 байтных элементов (на самом деле, с появлением длинных имен файлов для каждого файла отводится несколько таких элементов). В них содержатся имя файла, расширение, атрибуты, дата и время создания, размер файла и номер первого кластера. Корневой каталог создается при форматировании.

После Root Directory начинается собственно область файлов, где и хранятся все ваши нажитые непосильным трудом данные. Но это уже совсем другая история…

Использование информации BOOT-сектора раздела NTFS

При проведении работ по восстановлению раздела NTFS или при "спасении" файла из неработоспособного раздела с помощью программы дискового редактора необходимо знать информацию об структуре и особенностях раздела. Эту нужную для работы информацию можно получить из BOOT-сектора раздела NTFS, но для этого нужно уметь использовать структуру информации BOOT-сектора и уметь найти его. Приведенные в данной статье сведения будут полезны специалистам, профессионально занимающимся "спасением" информации и восстановлением служебных областей файловых систем на жестких дисках.

Boot-sector раздела всегда содержится в блоке данных начального сектора раздела. Раздел жесткого диска можно найти по таблице разделов, которая находится в Главной загрузочной записи жесткого диска. Содержимое Главной загрузочной записи жесткого диска МВR - Master Boot Record (или Master Boot Sector) не зависит от типа конкретной операционной системы (см. рис. 1). MBR хранится в блоке данных (512 байт) первого сектора, нулевой поверхности, нулевого цилиндра жесткого диска. На рис. 1, начиная с адреса 1ВЕh в МВR, расположена таблица разделов (Partition table), которая определяет три раздела: раздел FAT16 (активный раздел), раздел NTFS, раздел FAT32 LBA (можно указать до 4-х разделов, а через расширенный раздел и более, но каждый раздел определяется строкой из 16 байт). В последних 2-х байтах (из 512 байтов MBR) содержится сигнатура (подпись) 55ААh. В самом начале BOOT-сектора и до адреса 1BEh расположена программа загрузчика операционной системы с жесткого диска (IPL2). В ее функции входит нахождение активного раздела диска, загрузка из этого раздела в оперативную память BOOT-сектора и передача управления на начало BOOT-сектора (т.е. на начало программы загрузчика IPL2 для продолжения процедуры загрузки операционной системы).

Рис. 1. Изображение содержимого MBR в 16-м виде и изображение таблицы разделов (Partition table) в виде, удобном нам для рассмотрения

Как определить, где на жестком диске находится раздел NTFS? Если мы можем видеть Partition table в удобном для нас виде (нижняя часть рис. 1), то сразу видно (по левому крайнему столбцу), что вторая строка таблицы определяет раздел NTFS. Столбец "Boot" строки содержит "No", а это говорит о том, что раздел не системный. Столбцы группы Starting "Сylind", "Head", "Sector" 2-й строки содержат в координатах CHS (цилиндр, головка, сектор) адрес физического блока (ячейки 512 байт) жесткого диска, с которого начинается данный раздел: х000, х01, х01, что в десятичной системе соответственно будет 0, 0, 1. Столбцы группы Ending "Сylind", "Head", "Sector" 2-й строки содержат в координатах CHS (цилиндр, головка, сектор) адрес физического блока (ячейки 512 байт) жесткого диска, на котором заканчивается данный раздел: х0FE, хFE, х3F, что в десятичной системе, соответственно, будет 254, 254, 63.

Столбец группы Relative "Start Sector", 2-й строки содержит количество секторов, предшествующих данному разделу х0000003F (63 в десятичной системе), а столбец группы Total "Sectors" содержит количество секторов в разделе х003E8200 (4096512 секторов в десятичной системе).



а)



б)

В)

Рис. 2

Дело обстоит несколько сложнее, если мы можем видеть содержимое MBR только в 16-м виде (верхняя часть рис. 1), но мы знаем, что таблица разделов (Partition table) начинается с адреса 1BEh, что каждый раздел определяется содержимым 16-ти байтной строки (рис. 2,а). Зная структуру строки таблицы разделов, мы можем получить ту же информацию, определяющую расположение раздела NTFS, из верхней части рисунка 1:

Первый байт строки содержит "флаг загрузки", если он равен 80h, то раздел системный, если 00h, то раздел не системный (см. рис. 2,б);

Следующие три байта в координатах CHS определяют адрес физического блока (ячейки 512 байт) жесткого диска, с которого начинается данный раздел (под номер головки отводится 1 байт, под номер сектора и номер цилиндра отведены 2 байта - см. рис. 7,б-в) - в нем находится системная информация, которую мы называем BOOT-сектор;

Следующий по порядку байт строки таблицы разделов содержит код файловой системы, которая поддерживается в данном разделе (см. рис. 3);

Следующие три байта в координатах CHS определяют адрес физического блока (ячейки 512 байт) жесткого диска, на котором заканчивается данный раздел (под номер головки отводится 1 байт, под номер сектора и номер цилиндра отведены 2 байта (см. рис. 2, б-в);

Следующие четыре байта содержат количество секторов, предшествующих данному разделу (рис. 2,б);

Следующие четыре байта содержат количество секторов в разделе (рис. 2,б).

Рис. 3. Примеры кодов и типов разделов жесткого диска

За последней строкой таблицы разделов в 2-х последних байтах (из 512 байтов MBR) содержится сигнатура (подпись) 55ААh. Таким образом, из второй 16-ти байтной строки таблицы разделов, которую мы выбрали по коду 07 (код файловой системы NTFS, расположенный в байте с адресом 1D2h - см. рис. 1), мы получим полную информацию о нужном нам разделе жесткого диска.

Основными компонентами файловой системы NTFS являются следующие структурные единицы:

Том NTFS,

Загрузочный сектор,

Таблица Master File Table,

Метаданные и атрибуты файлов.

При форматировании тома под NTFS создаются Главная файловая таблица (MFT - Master File Table) и метаданные. Каждый занятый сектор тома NTFS принадлежит какому-нибудь файлу. Даже метаданные файловой системы являются файлами (в разделе NTFS все хранится в виде файлов. Метаданные тоже являются файлами (точнее метафайлами, имена этих файлов начинаются со знака $, и они недоступны обычным средствам операционной системы, - система их “не видит”). NTFS рассматривает каждый файл или каталог как набор атрибутов. Том NTFS условно делится на части (см. рис. 4).



Рис. 4. Структура раздела жесткого диска отформатированного под том NTFS

В начале раздела NTFS расположен загрузочный сектор (BOOT-сектор), который содержит: блок параметров BIOS, содержащий сведения о структуре тома и структурах файловой системы и код программы (IPL2). Программа ILP 2 распознает используемую операционную систему и, используя ее, загружает в память файл Ntldr (загрузчик операционной системы Windows 200x), который "знает", как найти системные файлы необходимые для загрузки операционной системы. Загрузочный раздел, который содержит файлы операционной системы Windows 2000, может совпадать с системным разделом, но может находиться и в другом разделе того же жесткого диска или даже на другом жестком диске. Загрузочный сектор начинается с нулевого логического сектора раздела, он может занимать до 16 секторов и входит в состав метафайла $Boot. В разделе 12% кластеров отводятся под зону MFT, в этой зоне и располагается файл $MFT. Файл $MFT представляет собой централизованный каталог всех остальных файлов диска и самого себя (нулевая запись файла $MFT определяет сам файл $MFT). Файл $MFT состоит из записей фиксированного размера (обычно 1 Кбайт), и каждая запись определяет соответствующий файл (в обобщенном смысле). Остальные 88% диска представляют собой обычное пространство для хранения файлов. Запись каких-либо данных в первую область невозможна. MFT-зона, как правило, держится пустой - это делается для того, чтобы самый главный, служебный файл ($MFT) не фрагментировался при своем росте.



Рис. 5

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

Системные файлы (метафайлы) используются только файловой системой для хранения метаданных и поддержания работы файловой системы. Системные файлы записываются на том утилитой Format. Метаданные представляют собой файлы, которые NTFS использует для реализации структуры файловой системы. NTFS резервирует для метаданных первые 16 записей в таблице MFT (около 1 Мбайт). Остальные записи таблицы описывают файлы и каталоги. Поэтому первые 16 файлов называются метафайлами (см. табл. 1), они носят служебный характер и недоступны пользователю через операционную систему. Самый первый метафайл - это сам $MFT. Эти первые 16 записей файла $MFT имеют жестко фиксированное положение, так как на них указывает одно из полей блока параметров BIOS (BPB) загрузочного сектора раздела NTFS. Копия этих же 16 записей для повышения надежности хранится в геометрическом центре раздела диска, а одно из полей BPB содержит ссылку на них. Если в процессе загрузки операционной системы обнаружится, что одна из первых 16-ти записей испорчена, то система автоматически перейдет на использование их копий. Остальные записи MFT-файла могут располагаться, как и части любого другого файла, в произвольных кластерах раздела диска. Восстановить его положение можно с помощью его самого, используя как основу нулевую запись файла $MFT (записи файла $MFT пронумерованы от нуля).

Таблица 1. Системные файлы (метафайлы) NTFS



Все 16 метафайлов, которые определяются первыми 16-ю записями файла MFT, носят служебный характер, и каждый из них отвечает за какую-либо часть работы системы. NTFS может сместить, даже фрагментировать по диску, все свои служебные области (например, для обхода дефектов поверхности), за исключением первых 16 записей файла MFT. Получить какую-либо информацию о метафайлах стандартными средствами сложно. Для этих файлов указан их реальный размер и, посмотрев размер файла $MFT, можно узнать, например, сколько операционная система тратит на каталогизацию всего диска.

Итак, любой том NTFS содержит загрузочный сектор - BOOT, причем, содержимое загрузочного сектора раздела определяется конкретной операционной системой и используемой файловой системой. На рис. 5 показан пример содержимого BOOT-сектора раздела NTFS в шестнадцатеричном виде и удобном для человека виде. Подробно структура BOOT-сектора раздела NTFS показана в табл. 2.

При проведении работ с помощью программы дискового редактора нам будет нужна информация из блока параметров BIOS BOOT-сектора нашего раздела, которая определяет структуру раздела, - без этой информации корректная работа с разделом диска невозможна. Во-первых, мы должны убедиться, что это действительно раздел NTFS. Это можно сделать, посмотрев строку NTFS Signature: NTFS (рис. 6) или на рис. 5 посмотреть содержимое байтов с 3h по Ah (4E 54 46 53 20 20 20 20, что в кодах ASCII будет: NTFS).

Строка Bytes per sector: x0200 512 - указывает на размер блока данных сектора (200h или 512 в десятичной системе). Эту же информацию можно получить из байтов с адресом Bh и Ch на рис. 5.

Строка Sectors per cluster: x08 (рис. 6) - указывает на размер кластера данного раздела - 8 секторов (кластер - это наименьшая единица, выделяемая системой под размещение файлов). Эту же информацию можно получить из байта с адресом Dh на рис. 5.

Таблица 2. Структура BOOT-сектора раздела NTFS



Рис. 6. BOOT - сектор раздела NTFS в виде таблицы, отображающей поля BPB

Интересной для нас будет строка Sectors per track: 003F 63 и строка Heads: x00FF 255 (рис. 6), которые указывают количество секторов на дорожке жесткого диска и число головок (поверхностей). В современных дисках эти характеристики, как и количество цилиндров, являются "виртуальными", так как при низкоуровневом форматировании жесткого диска для обеспечения одинаковой плотности записи на "внутренних" и "внешних" дорожках используется "зонная" запись формата, которая разбивает дорожки на разное число секторов. Контроллер жесткого диска нас "обманывает", и мы работает с "виртуальными" дорожками, на которых имеется одинаковое число секторов, с "виртуальными" головками (поверхностями) и цилиндрами. Эту же информацию можно получить из байтов с адресом 18h -19h и 1Ah - 1Bh на рис. 5 (3F 00) и (FF00).

В строках BPB 1st MFT claster: x00 00 00 04 4 и 1st MFT mirror claster: x00 6B DF A0 7069600 указаны номера начального кластера файла $MFT и начального кластера файла MFT mirror - "зеркального отображения" первых 16-ти записей $MFT. Эту же информацию можно получить из байтов с адресом 1Ch -1Fh и 38h -3Bh на рис. 5 (3F 00 00 00) и (A0 DF 6B 00). Зная номер начального кластера файла $MFT, и зная размер кластера, мы можем найти его в разделе NTFS, а запись файла с номером ноль содержит информацию о расположении самого файла $MFT (кроме того, мы знаем, что этот файл не фрагментируется, его кластеры расположены друг за другом).



Рис. 8. Содержимое начального сектора начального кластера файла MFT (запись с номером 0)

Для каждого каталога и файла на томе NTFS в $MFT создается соответствующая запись. NTFS использует записи файла $MFT для описания соответствующих им файлов. Записи файла $MFT, или внешнее хранилище, на которое ссылаются записи, хранят всю информацию о файле, включая его размер, дату и время создания, права доступа, его содержимое, и, что самое главное, списки кластеров, выделенных файлам. NTFS выделяет пространство под запись файла $MFT в зависимости от размера кластеров файла. Атрибуты файла записываются в выделенное в файле $MFT пространство. Кроме атрибутов файла каждая запись содержит данные о расположении записи в таблице MFT. Обычно каждый файл занимает одну запись. Если же файл имеет большое количество атрибутов или сильно фрагментирован, может понадобиться больше записей. В этом случае первая запись файла (базовая) содержит ссылку на следующую запись. Небольшой файл (до 1500 байт) может целиком храниться в записи MFT (см. рис. 7). Возможность восстановления файлов из поврежденных разделов NTFS во многом определяется целостностью файла $MFT и его копии.

Подобный подход обеспечивает очень быстрый доступ к файлам. Начальная (с номером 0) запись файла $MFT описывает непосредственно Главную файловую таблицу. За ней следует запись зеркальной копии (mirror record) MFT. При искажении первой записи MFT файловая система считывает эту запись, чтобы найти дубликат файла MFT. Следующая запись в MFT - файл регистрации log file - используется для восстановления файлов. Местоположение начального кластера записей MFT и их зеркальных копий указаны в секторе начальной загрузки. Семнадцатая и последующие записи Главной файловой таблицы используются собственно файлами и каталогами на томе. В NTFS поиск файла производится только для непосредственного его использования. Записи каталога помещены внутри главной файловой таблицы так же, как записи файла. Вместо данных каталоги содержат индексную информацию. Небольшие записи каталогов находятся полностью внутри структуры MFT. Большие каталоги организованы в B-tree (эффективный способ адресации - бинарное дерево B-tree), имея записи с указателями на внешние кластеры, содержащие элементы каталога, которые не могли быть записаны внутри структуры MFT.

Каждому файлу на NTFS соответствует обязательный элемент - запись в файле $MFT. Все файлы упоминаются в MFT, где хранится вся информация о файле, за исключением собственно данных (имя файла, размер, положение на диске отдельных фрагментов, и т.д.). Если для информации не хватает одной записи MFT, то используются несколько, причем не обязательно расположенные подряд. Файл может не иметь данных, - в таком случае на него не расходуется свободное место самого диска. Если файл имеет не очень большой размер, тогда данные файла хранятся прямо в MFT (в оставшемся от основных данных месте в пределах одной записи MFT). Файлы, занимающие сотни байт, обычно не имеют своего "физического" воплощения в основной файловой области - все данные такого файла хранятся в одном месте - в MFT. Каждый файл на NTFS, в общем-то, имеет несколько абстрактное строение, - у него нет как таковых данных, а есть потоки данных (streams). Один из потоков соответствует собственно данным файла. Но большинство атрибутов файла - тоже потоки. Таким образом, в файловой системе NTFS каждому файлу жестко соответствует номер записи в MFT, а всё остальное - опционально. Так как символьные данные представлены в кодировке Unicode - 16-битном представлении, которое дает 65535 разных символов, имя файла может содержать любые символы, включая полый набор национальных алфавитов. Максимальная длина имени файла - 255 символов.

Стандарт Unicode для кодировки символов был предложен некоммерческой организацией Unicode Consortium. Для представления каждого символа в этом стандарте используются два байта, что позволяет закодировать очень большое число символов из разных письменностей. В документах Unicode могут соседствовать русские, латинские, греческие буквы, китайские иероглифы и математические символы. Кодовые страницы при использовании Unicode становятся ненужными. Коды в Unicode разделены на несколько областей. Область с кодами от 0000 до 007F содержит символы набора "Latin 1" (младшие байты кодов символов соответствуют кодировке ISO 8859-1). Далее идут области, в которых расположены знаки различных письменностей, а также знаки пунктуации и технические символы; часть кодов зарезервирована для использования в будущем. Символам кириллицы выделены коды в диапазоне от 0400 до 0451. Для работы с документами Unicode нужны соответствующие шрифты. Как правило, файл шрифта Unicode содержит начертания не для всех символов, определенных в стандарте, а лишь для символов из некоторых областей. В таблице MFT имена файлов тоже хранятся в кодировке Unicode. Хотя имена файлов NTFS используют набор символов Unicode с 16 битами, но проблема доступа к файлам из MS-DOS решена. NTFS автоматически генерирует поддерживаемое MS-DOS имя (восемь плюс три символа) для каждого файла. Таким образом, файлы NTFS могут использоваться через сеть операционными системами MS-DOS и OS/2. Это особенно важно для файловых серверов организации, которая использует персональные компьютеры с двумя или всеми тремя этими операционными системами. Создавая имена файла "восемь плюс три", NTFS также позволяет приложениям MS-DOS и Windows 3.х работать с файлами, имеющими длинные имена NTFS. Кроме того, при сохранении файла приложениями MS-DOS или Windows 3.х на томе NTFS сохраняются и имя файла "восемь плюс три" и длинное имя NTFS.

Каждая запись в файле $MFT, начинается с сигнатуры FILE (см. рис. 8). За ней расположены стандартная служебная информация и атрибуты записи, описывающие файл. Существуют еще записи для каталогов, элементов индекса и другие. Первая запись, содержащая имя $MFT файла MFT, описывает сам этот файл. Далее в таблице расположены записи для других системных файлов, таких как $MFTMirror, $LogFile, $Volume, $AttrDef и др. Если загрузочный сектор разрушен, то таблицу MFT можно найти, просматривая кластеры раздела с самого начала.

Типичная запись MFT (см. рис. 8) состоит из начального фрагмента фиксированного размера и набора атрибутов, имеющих в общем случае переменный размер. Для восстановления файлов нужно знать точный формат только атрибута данных. Что же касается других атрибутов, достаточно уметь определять их расположение и размер. Первые четыре байта в записи (+0;+1;+2;+3), описывающей файл, образуют слово FILE (см. рис. 3, 4). Следующие два байта - смещение так называемой области Fixup. В рассматриваемом случае значение смещения равно 002Ah (с учетом обратного порядка расположения байтов в слове). Область Fixup используется в процессе обнаружения ошибок чтения или записи. Она состоит из слов размером два байта.

Количество слов хранится в записи MFT со смещением 0006h. В области Fixup хранится значение 0003h, следовательно, область Fixup начинается со смещения 002Ah и простирается до 02Ah+(2*0003h)=002Fh. Сразу за областью Fixup начинаются поля атрибутов. Смещение первого атрибута равно 0030h. Первые четыре байта области атрибутов определяют тип, а следующие четыре - размер в байтах. Например, вслед за областью Fixup со смещением 0030h следует атрибут с типом 10h. Атрибут занимает 48 байт, следовательно, следующий атрибут (с типом 30h) начнется со смещением 0078h. Таким образом, можно выделить в записи MFT все атрибуты. В конце самого последнего записано значение FFFFFFFF - признак конца цепочки атрибутов. Для восстановления файлов наибольший интерес представляют атрибуты типа 30h и 80h. Первый из них хранит имя файла. По нему следует искать запись MFT, описывающую восстанавливаемый файл. Второй атрибут с типом 80 хранит список кластеров, выделенных файлу, или сам файл.

Как видно, тип атрибута, равный 80h, хранится в записи MFT со смещением 0160h. Всего атрибут данных, занимает D8h байт, так как именно это значение находится в четырехбайтовом поле со смещением +4h относительно начала атрибута. Байт со смещением +8h относительно начала атрибута данных - это признак резидентного размещения файла. Если его значение равно 1, запись MFT хранит только список кластеров, выделенных файлу (нужно прослеживать цепочки блоков VCN как в описываемом случае), а если оно равно 0 - файл резидентный и находится внутри самой записи MFT (для сокращения времени доступа). При этом размер резидентных данных, т. е. файла, указан в двухбайтовом слове со смещением +10, а смещение резидентных данных, т. е. файла, записано в двухбайтовом слове со смещением +14 относительно начала атрибута данных. Как правило, записи содержат только файлы небольших размеров.

В случае нерезидентного размещения файла, четыре байта со смещением +30h хранят длину файла, расположенного где-то на диске. В данном примере длина файла $MFT составляет B7B000h байт. Для определения расположения нерезидентного файла на диске, нужно проследить цепочку так называемых блоков виртуальных номеров кластеров Virtual Cluster Number (VCN), или просто блоков VCN. Показатель смещения начала этой цепочки хранится в двухбайтовом поле, имеющем смещение +20h байт относительно начала атрибута данных. В описываемом случае этот показатель равен +40h, а смещение области блоков VCN относительно начала записи MFT равно +01A0h (см. рис. 4). Файл, записанный в разделе NTFS, может быть сегментирован. Он состоит из одного или нескольких фрагментов, называемых экстентами. Размер и расположение каждого экстента описывается в блоке VCN. В зависимости от того, фрагментирован файл или нет, область VCN может содержать один блок или их набор. Блоки VCN имеют переменный размер, определяемый первым байтом. Формат блока стоит показать на конкретном примере. Возьмем первый блок VCN, имеющий в рассматриваемом примере смещение +01A0 относительно начала записи MFT:

31 20 D9 86 02

Размеры двух полей блока VCN определяют тетрады первого байта, содержащего значение 31h (3 - определяет размер второго поля блока VCN, а 1 - определяет размер первого поля блока VCN) Первое поле, имеющее длину один байт, хранит количество кластеров (20), выделенных экстенту файла. Второе поле, размером три байта, содержит номер первого кластера данного экстента файла (0286D9). Следовательно, в данном случае первому экстенту файла $MFT выделено 20 кластеров, а номер первого кластера для первого экстента равен 0286D9. Таким образом, определяем размер и расположение первого экстента файла. Второй блок VCN расположен сразу вслед за первым: 12 24 08 21

Для того чтобы определить первый кластер второго экстента, необходимо прибавить к адресу первого экстента смещение, указанное во втором блоке VCN (с учетом знака). В данном случае второй экстент размещен в кластере с номером 0286D9+21=286FA. Длина второго экстента составляет 0824 кластера. Анализируя остальные блоки VCN, можно определить размеры и расположение всех экстентов файла. Список блоков VCN закрывается байтом (смещение (+49)) с нулевым значением (см. рис. 8).

Если известно имя файла, подлежащего восстановлению, то нужно, просматривая атрибуты типа 30 всех записей файла MFT, найти соответствующую запись, определяющую искомый файл. Далее следует найти в этой записи атрибут данных и определить, резидентный он или нет. Если атрибут данных резидентный, то нужно сохранить сектор, содержащий запись MFT, в виде файла на жестком диске или дискете. Затем следует вырезать нужную часть данных и сохранить результат в новом файле. Эту операцию можно выполнить и в редакторе Norton Disk Editor для MS-DOS. Если атрибут нерезидентен, то, прослеживая цепочку блоков VCN, нужно определить расположение и размер экстентов восстанавливаемого файла. Далее следует прочитать данные экстента, а затем сохранить их в файле на диске (в блоке VCN установлено количество кластеров, выделенных экстенту, поэтому нужно выполнить пересчет количества кластеров в количество секторов). Восстановив все экстенты файла, их объединяют в один файл, определяют правильную длину файла, полученную из поля со смещением 30h атрибута данных.

Восстановление большого количества файлов может потребовать много времени из-за ручной обработки цепочек блоков VCN, которые могут быть очень длинными. Использовать автоматические средства восстановления желательно только в крайнем случае и очень осторожно, особенно, если речь идет о восстановлении очень важных данных. Автоматическая программа вовсе не обязательно сможет принять правильное решение, если после сбоя от данных мало что осталось, а опытный специалист, даже с простейшим редактором диска, частосможет, восстановить пропавшие файлы.

Вирус в загрузочном секторе жёсткого диска

В этой статье содержатся сведения, которые могут быть вам полезны в случае, когда:

  • хотим удалить Linux (любую ОС unix -подобную или нет) систему и оставить только Windows ;
  • после установки Linux перестал загружаться Windows ;
  • Windows перестад загружаться даже будучи единственной ОС;
  • "убит" загрузочный сектор жёсткого диска;
  • в загрузочном секторе жесткого диска "сидит" вирус.

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

Честно говоря, мне в моей практике приходилось пользоваться этой методой только в последнем случае, т.е. при ликвидации вируса, засевшего в загрузочном секторе жёсткого диска. Есть в этом мире и такие.

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






Сразу оговорюсь, картинки не мои. Я их позаимствовал на бескрайних просторах интернета. Свои, во время последней "ликвидации" не сделал. Вообще, до недавнего времени, мне приходилось сталкиваться с заражением загрузочного сектора жёсткого диска крайне редко. Не чаще одного раза в год. Но вот, за прошлую неделю принесли ДВА заражённых компьютера и ещё позвонил коллега с извечным вопросом русской интеллигенции "Что делать?..." Ему тоже принесли заражённый ящик. Честно говоря меня несколько обеспокоила частота... Вот я и решил выложить в сеть способ борьбы с этим недугом.

Как видно из картинок, суть вируса банальна. Заблокировать работу вашего компьютера и заставить перечислить определённую сумму денег куда-либо. Размер и валюта платежа, способ оплаты, реквизиты получателя бывают всякие разные. При этом вам обещают, что после оплаты вы получите код для разблокировки компьютера (способы получения кода тоже бывают всякие разные). Естественно, что отправив деньги, никакого кода вы не получите. На некоторых форумах есть деятели, которые якобы подбирают (за деньги, разумеется) нужные коды. Всё это чушь собачья. Денег никуда отправлять не надо. Они просто уйдут и обратно не вернутся. Коды тоже подбирать не надо, их просто нет.

Вирусы-блокираторы в наше время явление весьма распространённое. Редкий пользователь ПК не получал такого. Правда большинство из них поражают саму операционную систему. И проявляются в момент загрузки системы. Там есть свой алгоритм лечения. А тот, что мы рассматриваем, поражает загрузочный сектор жёсткого диска. Т.е. до загрузки системы дело не доходит.

Пробежавшись по различным форумам, я с сожалением отметил, что некоторые доморощенные компьютерные "гении" говорят, что бороться бесполезно и спасти вас может только переустановка системы с форматированием жесткого диска. К сожалению, многие убедились в ошибочности данного метода только после форматирования HDD во время первой перезагрузки (она возникает во время установки системы). Так что же всё-таки делать? А вот что...

Во-первых, хоть вирус сидит в загрузочном секторе, нужно проверить саму систему на предмет наличия компонент его восстановления. Их наличие весьма вероятно. Т.е. вы можете восстановить загрузку жёсткого диска и один раз запустить систему. Вирус восстановится, и при следующем запуске компьютера вы сможете наблюдать знакомую картинку.

Можно использовать два пути. Первый - подключить заражённый диск через USB -переходник к другому компьютеру. Второй - загрузить заражённый компьютер с помощью аварийного загрузочного CD (или как вариант флешки). Я предпочитаю CD . Надёжней. Т.е. загружаем компьютер заведомо незаражённой операционной системой. Ваш системный диск, в данной ситуации, выглядит как обычный добавочный жёсткий диск компьютера. Проверяем наличие подозрительных файлов в тех местах, где любят прятаться вирусы. Проверяем разделы реестра, отвечающие за автозагрузку и т.п. Т.е. выполняем обычную процедуру поиски вируса. В рамках данной статьи я её описывать не буду. Хотите? Давайте заявочки на ФОРУМЕ .

Почистили хардешник... Теперь приступаем к лечению его загрузочного сектора. В принципе, можно сначала разобраться с загрузочным сектором, потом приступать к чистке жёсткого диска и реестра (ещё не факт, что в системе тоже сидит вирусяка). Но, я предпочитаю именно такую последовательность.

1)Загружаемся с установочного диска Windows .



© 2024 beasthackerz.ru - Браузеры. Аудио. Жесткий диск. Программы. Локальная сеть. Windows