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

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


Часть II

... и напомню что все участие биоса машины в ее загрузке заключается
кроме определения параметров оборудования в том что он заставляет
свой компютер прочитать в память первый сектор на диске. Дальше
начинает работу маленькая программа которая записана в этом секторе.
Ее мы тоже не будем рассматривать побайтно - главное для нас в том
что она находит и грузит загрузочный раздел диска, отмеченный в нашей
таблице словом Yes.
То что я скажу тебе сейчас - большая тайна ( для чайников :)
Ты можешь поставить Yes в любом разделе - и если он отформатирован
заранее командой FORMAT как загрузочный диск - то он у тебя и будет
загрузочным. А кто тебе сказал что во всем надо слушаться умную
фирму Microsoft, которая за нас решила как нам сделать свой диск ?
Разумеется, мы бы страдали гораздо меньше если бы биос машины позволял
грузить загрузочную запись не с самого первого сектора на диске, как
это принято всеми кто делает IBM-совместимые машины, а с какого-нибудь
другого, идеальным вариантом было бы предоставить владельцу машины
возможность выбора. ( Хотя кто знает - может от этого было бы только
больше путаницы ). Но что имеем, то имеем, поэтому если при поломке
диска не читается его первый сектор - чаще всего диск выбрасывают.
Перейдем к колонке N 2 - разумеется, она в нашей таблице означает
второй раздел. Здесь я произвольно внес данные 400/0/1 - что означает
что на каком-то гипотетическом диске существует раздел, начинающийся
с первого сектора нулевой поверхности четырехсотого цилиндра.
Причем раздел этот FDISK обозначила как Extended, то есть расширенный.
Что это означает ? - Да просто это начало той области диска где
будут размещены все логические диски, которым будут поставлены
в соответствие буквы D, E, F и так далее - таким образом операционная
система обходит предел в четыре раздела, отведенный под разбивку
диска в Partition Table. Разумеется, наличие Extended Partition вовсе
не обязательно, мы можем обойтись всего одним разделом, главным,
отведя под него всю площадь диска ( или какую-угодно его часть, но
не менее 1 МБ - так требует FDISK ). Конструкция Extended Partition
в случае наличия в нем более чем одного логического раздела повторяет
конструкцию главной загрузочной записи, то есть мы можем и ее
изобразить такой же табличкой как на FIG.1, с той лишь разницей
что теперь вместо ссылки на загрузочный раздел в ней будет ссылка на
тот конкретный номер цилиндра, поверхности и сектора, с которого
начинается диск D, остальные диски снова получают ссылку в разделе
Extended - и так до конца, до последнего логического диска в системе.
( Разумеется, сетевые диски, виртуальные, а также те, которые создает
системная утилита SUBST.EXE, входящая в стандартный комплект поставки
не самых старых версий DOS и WINDOWS, к нашему жесткому диску не имеют
никакого отношения - операционная система подключает их так как ей это
будет указано или по умолчанию дает им буквы стандартным образом ).
Таким образом получается ступенчатая конструкция :

( 0/0/1 )
_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
_/ Cylinder _/ 1 _/ 400 _/
_/ Head _/ 0 _/ 0 _/
_/ Sector _/ 1 _/ 1 _/
_/ Boot _/ Yes _/ No _/
_/ System _/ DOS16 _/ Extended _/
_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/

( 400/0/1 )
_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
_/ Cylinder _/ 400 _/ 600 _/
_/ Head _/ 1 _/ 0 _/
_/ Sector _/ 1 _/ 1 _/
_/ Boot _/ No _/ No _/
_/ System _/ DOS16 _/ Extended _/
_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/


( 600/0/1 )
_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
_/ Cylinder _/ 600 _/ 800 _/
_/ Head _/ 1 _/ 0 _/
_/ Sector _/ 1 _/ 1 _/
_/ Boot _/ No _/ No _/
_/ System _/ DOS16 _/ Extended _/
_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/

FIG.2

Здесь над каждой табличкой указан ее адрес на диске. Кроме того, если
ты внимательно проанализируешь содерхимое табличек - то заметишь что
каждый раздел имеет как бы двойной адрес - первый - это собственно начало
раздела, второй - адрес сектора загрузки данного раздела, будем для
краткости называть его DOS-сектором. И если первые сектора создаются
программой FDISK, то вторые - ну и все остальное - FAT и корневой каталог
- программой FORMAT. Вторая просто делает что нужно в тех пределах,
которые определены первой, и когда она благополучно заканчивает свою
скромную, но важную работу, диск сияет первозданной чистотой - кроме
корневого каталога и, может быть, двух-трех системных файлов на нем
ничего нет. Размер корневого каталога жестко ограничен - мы после
уточним где именно и как, а пока отметим только что он выдается диску
как паспорт - один раз в жизни - и количество записей в нем не может
быть более 512 ( как правило, но если тебе очень хочется, ты можешь
попробовать это число изменить - при начальной разбивке диска. Только
делать это тебе придется скорее всего вручную и за последствия никто
не может поручиться.) Он размещается в самом начале логического диска,
впереди него только две копии FAT ( я как-то попытался сделать четыре,
но какая-не-помню глупая версия ДОС не поняла что я от нее хотел.)
Впереди всех :) копий FAT находится так называемый сектор ДОС - или
просто загрузочный сектор данного логического раздела. ( Это он выдает
на экран компютера сообщение об отсутствии на твоем диске системных
файлов, если вдруг ты забудешь о том что делаешь и вытрешь их, а после
попробуешь перезагрузить систему :) с него же. В нашей таблице только
отмечено местонахождение этого сектора, саму структуру сектора ДОС
и назначение записей в нем мы обсудим позже.
Сразу отметим что FDISK во всех его версиях не работает с количеством
цилиндров большим чем 1024. Фирмы-производители жестких дисков, биосов
и контроллеров нашли кое-какой выход из этой почти тупиковой ситуации -
при количестве цилиндров большем чем 1024 пользователь выбирает
( а чаще - биос предлагает ) режим работы с диском когда реальные
физические цилиндры (Cylinder), головки ( Head) и сектора ( Sector)
как бы меняются полномочиями - или функциями, не суть важно - главное
что при этом количество их изменяется в 2 в степени раз таким образом
что произведение - а значит и реальная площадь диска остаются теми же,
однако FDISK получает возможность доступа ко всему диску - так как
конечно при этом изменение числовых параметров диска производится
таким образом что количество цилиндров приводится к любому числу
меньшему чем 1024. Разумеется, при этом увеличивается количество
головок и секторов ( а на эти числа тоже есть определенный предел,
правда он определяется уже не программой FDISK а несколько другими
критериями, но в данном случае для нас это неважно ).
Такой режим возможен потому, что встроенный контроллер жесткого диска
транслирует данные о цилиндрах и поверхностях таким образом что
общая площадь диска остается неизменной ( ну откуда же в самом деле
может взяться дополнительная ? ) - изменяется УСЛОВНО только число
цилиндров, поверхностей и секторов. В биосе машины этот режим имеет
два варианта отображения - LBA и LARGE, нормальный режим так и
называется NORMAL. Наиболее продвинутые биосы автоматически выбирают
оптимальный режим, если диск так и отформатирован - то ты можешь
больше не заглядывать в биос с целью изменения установленных там
параметров жесткого диска когда к тебе в гости заявится какой-то
приятель с другим диском и попросит проверить его на твоей машине.
Режим AUTO как-раз и нужен для таких случаев, вот уж если чего-то
не получается - тогда другое дело.
Предельная площадь диска может составлять таким образом

C H S b
1024x128x63x512 = 4032 MB

С более современными биосом машины и встроенным контролером жесткого
диска этот предел еще выше, но твой диск пока до него не дошел :-(
и если мы с тобой его не починим, то его придется выбросить.
Надо сказать, режим LBA или Large совершенно не смущает FDISK -
ее не интересуют такие подробности. Это довольно тупая программа.
Однако должен отметить что в некоторых случаях она снисходительно
прощает ошибки юзеров и даже - о чудо ! - способна самостоятельно
"перепрыгнуть" через область физических дефектов в начале диска,
если они не слишком обширны - при этом она очень аккуратно форматирует
определенным кодом каждый первый сектор каждой поверхности на всех
цилиндрах диска. Только недавно мне удалось таким образом отформатировать
музейный диск - 20 МБ IBM на музейной же машине - IBM PS-2 model 30
( то есть на ХТ со встроенными контроллерами - MCGA в том числе ).
Причем диск мне пришлось собирать из двух - родной диск этой машины
имел слишком уж поцарапанные поверхности, а тот, с которого я снял
узел для замены, все-равно не было никакой возможности подключить
к старшей модели этой же серии - IBM PS-2 model 50 = 286x8MHz -
без инсталляционной дискеты это невозможно.
В этом диске действительно было 4 головки и 615 цилиндров ( а в старых
дисках большего объема я видел и большее количество поверхностей ).
Современные же IDE-диски имеют как правило всего лишь две реально
существующих поверхности - и при этом на их крышке написано иногда
удивительно большое число сторон - то есть я хочу сказать - какая тебе
разница, LBA, LARGE или NORMAL, если даже в последнем варианте глазам
слишком любопытного новичка, вскрывшего свой диск, предстает картина
под названием "Не верь глазам своим" - в современных дисках все поверх-
ности виртуальны. Только FDISK об этом все-равно не догадывается и
делает исправно свою работу, не задумываясь о том, как ее дурят :-)
Но на нашем диске FDISK ничем мне не смогла помочь.
Поэтому я сделал то что сделал - разберемся поэтапно.