Структура жесткого диска DOS

Автор статьи: Господин J
Сайт Автора: Нет
E-mail Автора: johnd@white-star.com
Дата публикации: 26.03.2005


Часть IV

Мы еще разберем подробнее все подводные камни которые могут
тебя ожидать в п.4-7, а сейчас вернемся к поиску чистого
( то есть - чистого от сбойных секторов ) места для системной
области загрузочного диска ДОС.
Количество секторов которое тебе нужно для этого пройти вручную
легко подсчитать - во-первых - корневой каталог на 512 записей
получится если отвести для него 32 сектора размером в 512 байт
каждый ( одна запись занимает 32 байта - ну по-крайней мере -
в стандарте ДОС, WINDOWS потом сама установится :). Подсчитать
нужный размер FAT чуточку сложней - для начала ты должен знать
точно сколько секторов на твоем диске ты хочешь отвести под
данный логический раздел, а главное - остановить свой выбор на
оптимальном значении размера кластера - то есть группы секторов
объединенных общей пометкой в FAT. Чтоб ты не мучался - скажу
по секрету - ДОС не поймет чего ты хочешь, если ты попытаешься
задать количество кластеров более чем 65536 - в этой системе
так глупо все устроено что FAT читается в память вся целиком -
а там для нее отведено только вот столечко места. Конечно, если
диск не маленький - то чтобы осилить его весь без остатка тебе
придется увеличить и размер кластера, но увеличивать его более
чем необходимо для этого я тебе не советую - хотя бы потому что
каждому файлу система может отвести не менее одного кластера.
То есть - черт возьми - я сам это только что сообразил ! - на
одном логическом диске ДОС не может быть более чем 65536 файлов
и каталогов... Как жаль... Ну ладно, утешься тем что в других
операционных системах это по-другому.
Существуют 12-тибитная, 16-тибитная и 32-битная версии FAT.
Это означает что для пометки одного кластера в секторах, отведенных
под FAT, используется 12 или 16 или 32 бита данных. Поскольку
12-тибитная FAT используется в основном на дискетах ( а также -
пи автоматической разбивке диска на логические разделы объема
меньшего, чем 16 МБайт), а 32-хбитная в ДОС не используется - то
мы будем говорить только о 16-ти битной. 16 бит равно двум байтам,
значит в одном секторе, отведенном под FAT, помещается таблица
расположения 256 кластеров. И для максимально возможного в ДОС
количества кластеров - 65535 - понадобится всего лишь 256 секторов.
Я не ошибся на единицу ? - Ах, да, я ошибся в первый раз - когда
сказал что кластеров может быть 65536 - нет, на один меньше,
так как первые два байта первого сектора FAT занимает код, означающий
для операционной системы просто начало 16-битной FAT.
( Лишнее напоминание о необходимости точно выполнять все расчеты -
никаких округлений и ошибок, хотя если ты отведешь под FAT пару-тройку
лишних секторов, то система этого скорее всего не заметит, - они
просто никогда не будут ею использованы. Тут возникает один большой
соблазн - использовать такой метод для того чтобы спрятать какие-то
важные данные так чтобы никто их не мог найти. Ну, много данных
так не спрятать, однако если ты купишь уже отформатированный кем-то
до тебя диск - проверь на всякий случай, а не сидит ли в таком
укромном месте какой-нибудь "подарочек". Насколько я знаю, даже
Касперский ничего в этой области не проверяет. )
...ВИРУСОПИСАТЕЛИ - ВСЕ СЮДА !
( Я надеюсь, еженедельное обновление антивирусных программ
является действительно еженедельным, только в этот раз обновлять
кое-кому придется скорее всего не базы :)
Ну, и последнее - размер системных файлов подсчитать уж совсем
просто, таким образом мы кажется ничего не забыли.
Если тебе лень считать на калькуляторе (или на клочке газеты - что
кстати надежнее - потом можно проследить собственные ошибки ) - то
можешь просто пройти пару тысяч секторов, чем больше диск - тем больше
нужно пройти. Диск-эдитор так уж устроен что если ему попадается
сбойный сектор, то он сам на нем остановится, и чтобы перешагнуть
через него, тебе придется отменить пару раз чтение, выбрав в меню
соответствующий пункт. Обычно стоит прислушиваться к системному
динамику машины - пока все нормально, он не издаст ни звука.
А если сбой - то перепрыгиваешь на пару ( или пару десятков )
цилиндров вглубь и продолжаешь поиск достаточно хорошего места
для системной области. По существу, FDISK делает то же самое, она
только с очень плохими областями не в состоянии работать.
Есть один интересный момент который позволяет ускорить процесс по
крайней мере в несколько раз:
Когда ты в первый раз запускаешь диск-эдитор с загрузочной дискеты,
а жесткий диск еще не отформатирован ( или просто с ним что-то не то:)
то конечно в твоей системе еще как бы и нет никакого логического
раздела жесткого диска - ни C ни D и т.д. тут еще и не пахнет.
Хотя диск исправно жужжит и даже обнаруживается биосом без проблем.
Ты просто нажимаешь Enter - и диск-эдитор читает логическую структуру
твоей дискеты с которой ты его запустил. Сразу после запуска и парочки
предупреждений он показывает тебе корневой каталог дискеты.
Далее ты должен нажать клавишу Alt и в первой выпавшей простынке
главного меню выбрать режим чтения дисков - при этом диск-эдитор
перечитает все имеющиеся в системе ЛОГИЧЕСКИЕ диски. Конечно, если
ты не умудришься подключить второй дисковод или даже второй жесткий
диск, то кроме диска A он тебе ничего и не предложит - ОДНАКО ...
Если ты не будешь слишком торопиться, то сможешь прочитать варианты
режимов чтения дисков в правой половинке развернувшейся таблички -
и вот тут-то надо аккуратно клавишей Tab ( или можно стрелками )
перейти в эту самую половинку и пробелом выставить точку там где
тебе нужно - а нужно конечно чтение физических дисков. И О ЧУДО !
- В левой половинке таблички сразу появится диск C - или просто
Hard Disk 1 - если он у тебя один :-). Он-то тебе и нужен.
Остается только установить точку напротив него - и нажать Enter.
Если начальный сектор диска исправен - то он прочитается сразу,
причем - в режиме чтения дампа данных, приблизительно так, как
показывает данные в любом файле большинство операционных оболочек
при нажатии после клавиши F3 клавиши F4 - по крайней мере FAR,
ДОС-навигатор и Norton-Commander предоставляют такой сервис.
Конечно, мы можем просматривать просто дамп диска - при этом -
как сказал известный герой нашего с тобой любимого фильма
"Трое в одной лодке, не считая собаки" - что поймано, о том и
рассказано. Но он ведь добавил еще и пару слов, сделавших всю
фразу афоризмом : "ГЛАВНОЕ - КАК !".
Вот тут - самое время вспомнить что диск-эдитор кроме просто
просмотра данных на диске в виде дампа способен еще и по-разному
интерпретировать эти самые данные - причем ему опять же
в большинстве случаев ( исключения я оговорю особо )
абсолютно НАПЛЕВАТЬ, какой именно в действительности сектор диска
ты просматриваешь и что в нем записано - он будет очень послушно
интерпретировать эти данные так как тебе того захочется.
А более всего тебе сейчас должно хотеться только одно - нажать
на клавишу - F6 ;-).
Если ты не понял - повторю еще раз - F6. Дошло ? - Нет, я вижу.
Тебе ведь сейчас нужно будет пролистать громадное количество
секторов - а при выводе их содержимого на экран программа DE.EXE
( или все ее близнецы-братья ) пользуется функциями БИОС напрямую,
это тебе не игрушка которая обходит функции биос и пишет данные прямо
в нужную область видеопамяти - тогда, когда Нортон писал свой диск-
эдитор, таких игрушек еще может даже и не было. Точно не было -
даже DOOM появился в 1993 году ( у них ). А функции вывода на экран,
встроенные в биос, очень тормозят работу - ну еще бы, ведь они не
менялись бог знает сколько лет, еще с времен первых машин.
Да и менять никто не собирается особо - ну зачем обижать священную
корову? - Поэтому в нашей ситуации приходится приспосабливаться -
выводить на экран как можно меньше информации в расчете на сектор.
Сравним количество символов на сектор которое должно быть выведено
на экран в режиме чтения ( тьфу - ПОКАЗА ) дампа ( читает он все
одно и то же ) - с количеством, которое приходится на сектор
в режиме ПОКАЗА Partition - ну подсчитать это просто :
Пускай
0000:0000 A0 A1 ........... AE AF АБВГДЕЖЗИЙКЛМНОП - это одна
строка из 32-х, которыми 512-байтный сектор выводится на экран
в стандартном режиме. Всего в строке 16x3+8=56 символов - таким
образом при просмотре одного сектора в этом режиме через биос
прогоняется 56x32=64x32-8x32=... ого ! - Почти два килобайта.
Ну конечно - а что ты хотел, если сначала в строке выводится
шестнадцатеричное смещение первого в строке байта от начала
сектора ( при просмотре файла - от начала файла ), затем идут
шестнадцать байт в шестнадцатеричной же записи - то есть 32 знака,
и еще шестнадцать байт в нормальном виде ( при этом, конечно,
управляющие символы с кодом до 31 и еще некоторые при показе
заменяются точками - а то биос не так может понять попытку
прогнать некоторые из этих кодов - например, код 07 вызовет
писк динамика - и это еще будут только цветочки ).
На самом деле я еще сделал большую скидку - ведь выводится еще и
номер сектора от начала диска и много другой служебной информации.
Может быть даже, что на прогон одного только сектора через видео-
-функции биос расходуется целых три килобайта данных, которые
нуждаются в обновлении в каждой строке, которая ползет вверх
по экрану когда ты давишь на кнопку PageDown или просто "стрелку
вниз". Не будем залезать в такие дебри - и так ясно что много.
А что происходит когда ты включаешь режим показа ( интерпретации )
Partition ?
- Ну тут все гораздо проще - ведь выводится всего четыре строки -
- при любом подсчете не более 320-ти символов - то есть практически
вдвое меньше чем в самом секторе. ( там еще рамки - но они не в счет)
Таким образом самый быстрый режим просмотра - именно этот, при этом
через биос прогоняется грубо говоря в десять раз меньше информации,
значит то же количество секторов ты сможешь пролистать в десять раз
быстрее ( если конечно, ты дочитал до этого места и не умер с голоду
- или со скуки :).
Ну, думаю ты все понял и уже приготовил спичку чтобы заклинить
клавишу PageDown в нужном месте диска.
Больше я не буду так подробно все расписывать, тебе просто надо
будет воспринимать все, что я пишу, на веру, хотя если ты немного
пошевелишь мозгами то обнаружишь что все именно так как я это
описал.
И давай пока листается диск, сделаем перерыв. ( Только не вздумай
бросать его на произвол судьбы - ты должен убавить громкость
своего телевизора чтобы не пропустить писк системного динамика
если в выбранной тобой области диска окажется плохой сектор -
динамик запищит как только спичка до него дойдет :).
Так что если тебе хочется посмотреть боевик - то это не самая
лучшая идея. Уж лучше попить кофе - или, в зависимости от твоего
аппетита относительно размера FAT на том диске который ты задумал
создать практически голыми руками - или у тебя даже есть время
чтобы пообедать.
Приятного аппетита !