От FAT к NTFS и обратно

От FAT к NTFS и обратно
С выходом операционных систем Windows 2000, а затем и WindowsXP стал очевидным переход к новому качественному уровню продуктов как для офисного, так и для бытового использования. Каковы же основные отличия этих версий операционных систем от получивших широкое распространение Windows 9x (к которым, без сомнения, можно отнести и Windows Millennium)? Об этом уже немало писалось на страницах как "Компьютерной газеты", так и многих других периодических изданий. Однако все авторы особо отмечают использование нового ядра Windows NT, что повысило надежность работы операционной системы с точки зрения корректности выполнения многозадачных приложений, расширило возможности сетевых настроек и позволило использовать файловую систему NTFS (New Technology File System), надежность которой подтверждена годами использования на серверных платформах.

Остановимся на последнем отличии. Почему именно NTFS и почему только сейчас? Дело в том, что способ хранения файлов в этой системе аналогичен способу хранения информации в системах управления базами данных, использующих механизм транзакций. Транзакция — это последовательность элементарных операций, которая может быть либо выполнена полностью, либо полностью отменена. Такой подход гарантирует защиту от нарушения файловой структуры даже при выключении питания компьютера в самый неподходящий момент. Однако поддержка механизма транзакций в файловой системе требует дополнительных затрат времени процессора и снижает производительность компьютера, что и являлось основным фактором, сдерживающим широкое распространение системы NTFS в сфере персональных компьютеров. Современные компьютеры, оснащенные оперативной памятью от 64 Мб и процессорами Celeron и лучше, имеют достаточный запас производительности для использования NTFS.

Однако сегодня во многих организациях имеется уже сформировавшийся парк компьютеров на базе процессоров Pentium первого поколения, которые вполне успешно справляются с офисными приложениями. Как правило, такие системы работают под управлением Windows 95/98 и используют файловую систему FAT, хотя именно в организациях предъявляются повышенные требования к надежности хранения информации. Последние версии операционных систем, о которых шла речь выше, для компьютеров такого класса являются слишком тяжеловесными. Как же получить преимущества файловой системы NTFS, избежав при этом затрат на модернизацию вычислительной техники?

Возможный выход заключается в использовании на рабочих местах операционной системы Windows NT 4.0 Workstation. Несмотря на то, что ее презентация состоялась в девяностых годах прошлого века, при использовании Service Pack 6 и установке Internet Explorer 5.0 с аксессуарами она способна предоставить вполне современный пользовательский интерфейс, аналогичный Windows 98, расширенный набор сетевых настроек и поддержку файловой системы NTFS.

Однако при переходе на Windows NT пользователь может столкнуться с неожиданной проблемой. Дело в том, что установка Windows NT возможна только либо на раздел FAT 16 (с последующим преобразованием в NTFS), либо на новый раздел, который формируется из неиспользовавшейся до этого области дискового пространства. Второй вариант очень мало вероятен, потому что, как правило, дискового пространства никогда не бывает слишком много, настолько, чтобы держать значительную его часть не размеченным. Первый вариант возможен, однако FAT 16 слишком расточительна при использовании на разделах большого объема.

Поэтому будем предполагать, что пользователь желает установить Windows NT на компьютер, жесткий диск которого разбит на разделы FAT 32. Как быть в такой ситуации? Переформатирование раздела ни к чему, кроме потери информации, не приведет, потому что тип файловой системы, FAT 16 или FAT 32, выбирается на этапе формирования разделов. Изменить же тип раздела без его уничтожения программа FDISK не позволяет, а чтобы уничтожить первый раздел, нужно предварительно уничтожить все последующие, естественно, со всей хранящейся на них информацией.

Самым удобной, а в случае, если раздел больше 2 Гб, то и единственной альтернативой является использование специальной программы, позволяющей изменять как тип файловой системы раздела, так и его размер, причем зачастую с сохранением всей имеющейся информации. Примером может служить программа Partition Magic, поддерживающая множество типов файловых систем и имеющая все возможности стандартного менеджера дисков FDISK.

Но в этой статье речь пойдет о способе изменения файловой системы раздела без использования какого бы то ни было специализированного программного обеспечения, за исключением того, что содержится на стандартном загрузочном диске Windows 98. Собственно, для реализации такой операции потребуются только загрузочные файлы и редко используемый отладчик Debug.Exe.

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

Теперь перейдем к рассмотрению сути проблемы. Пусть в распоряжении пользователя имеется жесткий диск, содержащий несколько разделов FAT, причем первый раздел (диск C:), на который предполагается устанавливать Windows NT, имеет файловую систему FAT 32. Так как в случае успешного выполнения описанных ниже действий будет потеряна информация только с раздела C:, то необходимую информацию с него можно временно переписать на другие разделы (диски D:, E:, и т.д.). При этом нельзя забывать, что Windows NT в базовом варианте вообще не обслуживает разделы FAT 32. Поэтому для получения доступа к другим логическим дискам после ее установки следует позаботиться о наличии соответствующей программы-драйвера.

Однако следует понимать, что в случае ошибки может быть потеряна вся хранящаяся на жестком диске информация, поэтому еще раз вспомните предупреждение, изложенное выше. Вообще, практика показывает, что удобнее на диске C: хранить операционную систему и приложения (например, Microsoft Office, Photo Shop и т.д.), а все пользовательские данные (документы, таблицы, базы данных) — на каком-нибудь другом разделе. Это позволяет свободно манипулировать с диском C:, выполняя при необходимости даже его форматирование с последующим восстановлением операционной системы и приложений с дистрибутивных носителей информации. При этом данные пользователя находятся в относительной безопасности.

Чтобы изменить тип файловой системы, нужно знать, где содержится соответствующая информация. Каждый жесткий диск, используемый на IBM-совместимых компьютерах, имеет так называемую таблицу разделов (Partition Table), которая размещается в самом первом секторе жесткого диска, получившего название MBR (Master Boot Record). Для того чтобы однозначно указать на сектор жесткого диска, необходимо знать три его "координаты": номер головки, номер цилиндра и номер сектора. Когда речь идет о физических секторах (как, например, в этой статье), головки и цилиндры нумеруются с "нуля", а сектора — с "единицы". Таким образом, "координаты" сектора MBR будут следующими: головка 0, цилиндр 0, сектор 1.

Теперь можно прочитать содержащуюся в этом секторе информацию. Для этого служит функция операционной системы с номером 13 16 (индекс "16" означает, что число записано в шестнадцатеричной системе счисления). Она позволяет как читать информацию из физических секторов жесткого диска в память, так и выполнять обратную операцию. И если считывание — вполне безобидная процедура, то необдуманная запись в сектор MBR может привести к полной потере информации на жестком диске. Поэтому обращение с этой функцией требует предельного внимания.

Однако как же выполнить чтение сектора? Тут-то нам и понадобится загрузочная дискета с программой-отладчиком DEBUG. Сначала желательно загрузить компьютер именно с этой дискеты. Затем из командной строки запускается отладчик. На экране появится приглашение к вводу команд отладчика в виде "дефиса". В ответ на приглашение нужно ввести команду, позволяющую записать небольшую программу на языке ассемблера, начиная с адреса 100:

A:\>debug

-a 100

XXXX:0100 mov ah, 2

XXXX:0102 mov al, 1

XXXX:0104 mov ch, 0

XXXX:0106 mov cl, 1

XXXX:0108 mov dh, 0

XXXX:010A mov dl, 80

XXXX:010C mov bx, 200

XXXX:010F int 13

XXXX:0111 jmp 0

XXXX:0114

-

Первые четыре шестнадцатеричные цифры адреса (до "двоеточия") зависят от конфигурации памяти и указывают на ее сегмент, в котором разместилась программа. Так как выходить за границы этого сегмента не предполагается, то они в тексте статьи заменены на последовательность "XXXX". Интерес будут представлять только последние четыре цифры адреса.

Приведем краткое описание программы. Первая команда выбирает функцию чтения сектора. Вторая (с адресом 102 16 ) задает количество читаемых секторов (следует помнить, что в MS DOS размер сектора всегда равен 512 байт). Команды с адресами 104 16 – 108 16 задают координаты сектора: CH – номер цилиндра, CL – номер сектора, DH – номер головки. Команда с адресом 10A 16 заносит в регистр DL номер жесткого диска, над которым будет выполнена операция. Жесткие диски в контексте функции 13 16 нумеруются с 80 16 . В регистр BX очередная команда заносит адрес области памяти, в которую будет прочитана информация с диска (в данном случае информация будет прочитана в область, начинающуюся с адреса 200 16 ). Следующая команда запускает процесс считывания сектора в память, а последняя служит для корректного завершения этой маленькой программы. Когда будут введены все команды, появится приглашение ввести команду с адресом 114 16 . В ответ достаточно просто нажать клавишу "ВВОД".

Теперь все готово для чтения сектора MBR. Еще раз проверьте правильность ввода программы. Если обнаружены какие-нибудь ошибки, их можно исправить, введя команду "a <адрес>", где <адрес> — адрес корректируемой команды. Например, если по адресу 10C 16 находится команда "mov bx, 222", ее можно исправить следующим образом:

-a 10C

XXXX:010C mov bx, 200

XXXX:010F

-

Чтобы снова вывести на экран текст всей программы, надо подать следующую команду:

-u 100 l 14

XXXX:0100 B402 MOV AH,02

XXXX:0102 B001 MOV AL,01

XXXX:0104 B500 MOV CH,00

XXXX:0106 B101 MOV CL,01

XXXX:0108 B600 MOV DH,00

XXXX:010A B280 MOV DL,80

XXXX:010C BB0002 MOV BX,0200

XXXX:010F CD13 INT 13

XXXX:0111 E9ECFE JMP 0000

-

В ней "100 16 " указывает адрес начала программы, а 14 16 — ее длину в байтах.

После проверки программу можно выполнить. Для этого подается команда "g" следующим образом:

-g =100

Нормальное завершение работы программы

-

Посмотрим теперь, какая информация содержится в таблице разделов. Сектор MBR записан по адресу 200 16. Смещение относительно его начала к таблице разделов равно 1BE 16, ее размер равен 42 16 байт. Для просмотра таблицы разделов нужно выполнить команду "d":

-d 3be l 42

XXXX:03B0 80 Hb


XXXX:03C0 Sb Cb id He S e Ce ss ss - ss ss nn nn nn nn 00 Hb


XXXX:03D0 Sb Cb 05 He Se Ce ss ss - ss ss nn nn nn nn 00 00

XXXX:03E0 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00

XXXX:03F0 00 00 00 00 00 00 00 00-00 00 00 00 00 00 55 AA


-

Сектор MBR завершается сигнатурой 55AA 16, наличие которой в распечатке памяти позволяет убедиться в том, что чтение было выполнено правильно. В таблице разделов может храниться информация о четырех "логических" дисках. MSDOS и Windows позволяют использовать значительно большее их количество за счет маленькой хитрости. Одна из записей таблицы разделов может содержать ссылку на так называемый дополнительный раздел, который имеет структуру, аналогичную основному разделу, та, в свою очередь, –– еще на один дополнительный раздел и т.д.

Каждая запись таблицы разделов имеет длину 16 байт и содержит следующую информацию об описываемом ею разделе:


Смещение

Размер, байт

Содержание

+00

1
Признак загрузочного диска (80 — загрузочный, 00 — нет)

+01

1
Начальная головка

+02

1
Начальный сектор

+03

1
Начальный цилиндр

+04

1
Идентификатор файловой системы

+05

1
Последняя головка

+06

1
Последний сектор

+07

1
Последний цилиндр

+08

4
Относительный номер начального сектора

+0С

4
Количество секторов в разделе

Примечание к таблице.
Деление на сектор/цилиндр по границе байта принято условно, потому что цилиндры кодируются 10-разрядным двоичным числом, и два старших разряда помещаются в байте с номером цилиндра. При загрузке регистра CX таким двухбайтовым числом, он готов к использованию в функции 13 16 .

Так как нужно изменить файловую систему основного раздела (диска C:), то достаточно рассмотреть первую запись таблицы разделов. Как следует из приведенных выше таблицы и распечатки, идентификатор файловой системы находится по адресу 3С2 16, и в случае FAT 32 он будет равен 0B 16 . Чтобы изменить FAT 32 на FAT 16, достаточно вместо 0B 16 записать 06. Сделать это можно с помощью команды "e" отладчика:

-e 3c2

166B:03C2 0B.06

-

После этого лучше еще раз просмотреть содержимое памяти, соответствующее таблице разделов с помощью команды "d 3be l 42", чтобы убедиться, что все сделано правильно.

Теперь наступило время выполнить самый ответственный шаг — записать измененный сектор MBR на жесткий диск. После этого отменить изменения будет уже невозможно.

Для этого в программе, которая все еще находится в памяти по адресу 100 16, нужно исправить первую команду так, чтобы в регистр AH записывалось число 03, что соответствует операции записи содержимого памяти в сектор на диске:

-a 100

166B:0100 mov ah, 03

166B:0102

-

Остальные параметры менять не следует, так как они остаются такими же, как и при чтении сектора в память. После проверки программы (а ее текст можно вывести на экран командой "u 100 l 14") ее можно выполнить:

-g =100

Нормальное завершение работы программы

-

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

Итак, таблица разделов исправлена. Если теперь перезагрузить компьютер с все той же загрузочной дискеты и запустить программу FDISK, она покажет, что первый раздел имеет файловую систему FAT 16. Однако есть еще один нюанс. Информация о разделе хранится не только в секторе MBR, но и в первом, загрузочном секторе самого раздела. Поэтому попытка переформатировать диск C: с помощью программы FORMAT не удастся.

Для того чтобы полностью подготовить раздел к форматированию, нужно стереть его собственный загрузочный сектор. А так как загрузочный сектор раздела является его первым сектором, то его "координаты" можно определить все из той же таблицы разделов, которая хранится в MBR. Если обратиться к распечатке памяти, содержащей таблицу разделов, то "координаты" загрузочного сектора основного раздела начинаются с адреса 3BF 16 и обозначены там следующим образом: Hb – номер головки, Sb – номер сектора, Cb – номер цилиндра. Эти координаты необходимо внести в программу, то есть исправить команды с адресами 104 16 – 108 16 (при этом не забывая об особенности нумерации секторов и цилиндров, см. примечание к описанию таблицы разделов).

Перед тем, как очищать загрузочный сектор, желательно убедиться в правильности определения его координат. Для этого после исправления команд, отвечающих за настройку "координат" сектора, нужно первую команду снова настроить на чтение сектора, то есть по адресу 100 записать "mov ah, 2". Если из таблицы разделов, например, видно, что Hb = 1, Sb = 1, Cb = 0, то программа должна выглядеть следующим образом:

-u 100 l 14

2804:0100 B402 MOV AH,02

2804:0102 B001 MOV AL,01

2804:0104 B500 MOV CH,00

2804:0106 B101 MOV CL,01

2804:0108 B601 MOV DH,01

2804:010A B280 MOV DL,80

2804:010C BB0002 MOV BX,0200

2804:010F CD13 INT 13

2804:0111 E9ECFE JMP 0000

-

Тогда после ее выполнения командой "g =100" можно оценить правильность ввода координат, просмотрев результат считывания с помощью команды "d 200 l 200". Последние байты загрузочного сектора должны содержать сообщения операционной системы типа "Invalid system disk" и имена системных файлов "Io.Sys" и "Msdos.Sys", а в самом конце записана все та же сигнатура 55AA 16 .

После такой проверки можно предполагать, что координаты загрузочного сектора определены правильно. Для его очистки достаточно записать в сектор 512 нулевых байтов. Чтобы подготовить образ очищенного загрузочного сектора в памяти, надо выполнить команду отладчика "f 200 l 200 0". После этого можно настроить программу на запись (то есть по адресу 100 16 ввести команду "mov ah, 03") и выполнить ее. Теперь информация о том, что раздел содержал файловую систему FAT32, утрачена окончательно и бесповоротно.

После перезагрузки компьютера с дискеты ( перезагрузку нужно выполнить обязательно! ) можно переформатировать диск C: с помощью программы FORMAT, в результате чего на нем будет создана файловая система FAT 16. Теперь можно приступать к установке операционной системы Windows NT и использовать все ее преимущества, в том числе и файловую систему NTFS.

Итак, в этой статье был рассмотрен способ изменения файловой системы основного раздела жесткого диска. Отметим, что этот способ работает только в том случае, если размер основного раздела меньше 2 Гб, потому что FAT 16 не поддерживает разделы большего размера. При изменении файловой системы теряется вся информация, содержащаяся на разделе, а в случае ошибки может быть безвозвратно утеряна информация, содержащаяся на всех разделах жесткого диска, поэтому пользоваться сведениями из этой статьи следует с осторожностью, осознавая все возможные последствия. Однако при известной осторожности можно сохранить как структуру разделов жесткого диска, так и информацию на разделах, которых не коснулись изменения. После установки операционной системы желательно убедиться в отсутствии нарушений файловой структуры всех логических дисков, использовав для этого программу Scan Disk или Norton Disk Doctor.

И в заключение остается только добавить, что сведения, приведенные в данной статье, можно использовать и для обратного преобразования NTFS в FAT 16/32, учитывая, что идентификатор системы NTFS — 07 16, FAT 16 — 06 16, FAT 32 — 0B 16 .

Игорь Орещенков


Компьютерная газета. Статья была опубликована в номере 29 за 2002 год в рубрике soft :: ос

©1997-2024 Компьютерная газета