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

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

P.!
Ты пишешь что твой диск начал сбоить и NDD каждый раз находит на нем
новые сбойные кластеры. Жалко что я не могу быстренько заняться
им - ну что ж, попытаюсь пояснить что ты должен сделать сам.
Извини, за возможные длинноты - но чтобы писать кратко, нужно иметь
много времени. ( Кажется, это сказал Вольтер - или его слуга :)
Ну, я тут устроился поудобней, переписал на постоянно доступный диск
лучший мой клип, запустил его в автоповторе и скинул окно на полку -
чтоб не очень тормозил, у меня ж нет такой карты как у тебя, когда
на весь экран - так он вообще виден как бы через кадр, и все - в паузе,
так что голос и изображение не синхронизированы, но мне так даже больше
нравится. Надо будет подсказать кому-нибудь, может получиться неплохо
если это использовать как прием.
Надеюсь, у тебя тоже найдется что-то подходящее для чтения этого
нескладного и длинного письма. Может быть, это будет Земфира или Настя,
не знаю, мне они тоже нравятся... Когда ты состаришься - ты поймешь, что
все что привлекает мужчину в женщине - это ее голос, все остальное -
только атрибуты, обязательные - но не они определяют твой интерес к ней,
хотя пока ты молод, в это поверить трудно, почти невозможно.
И раз уж мы с тобой определились с отношением к женщинам,
то давай перейдем к нашим лошадям ;) Должен сказать, меня твое письмо
больше обрадовало чем огорчило - диски все-равно когда-нибудь умирают,
зато у тебя начал прорезаться слух: "долго стучит головками" - твои слова.
ГОЛОС ТВОЕГО ДИСКА ТЫ ДОЛЖЕН УЗНАВАТЬ ДАЖЕ СКВОЗЬ ГЛУБОКИЙ ЭРОТИЧЕСКИЙ СОН.
( Кажется я что-то напутал - эротический сон не бывает глубоким, более
того, в глубоком сне не бывает сновидений. На всякий случай спроси
про это у своего психиатра, а то мой уже с год как начал мне что-то
недоговаривать :).
Ладно, повеселились и хватит, открой корпус и приготовь системную
дискету, приступим.
Надеюсь диск еще опознается биосом и все логические разделы что я на нем
установил руками, тоже доступны.
Надеюсь, он еще способен грузиться с каждого из них - если, конечно,
ты не забыл как это делается.
Для начала вспомним его историю - или как говорят терапевты, анамнез.
Во-первых - он был уже плохим когда мы его только приобрели, несмотря
на клятвенные заверения К. о том что он его тестировал и ничего
подозрительного не нашел. Он - торговец, и ему нужно заработать свои
деньги, иначе он не сможет оплатить свои счета за мобильник etc.,
а про меня он знает что я все-равно сделаю то что он мне дает :)
А может он немного приврал просто потому что было первое апреля ?
Все центральные улицы города были забиты толпами веселящихся школьников,
студентов и просто туристов, в одном месте мы увидели "человека
с ружьем", в другом - статую Свободы в тельняшке и с примусом вместо
факела в руке.
Когда кончился праздник, разошлись последние ряженые и мы проводили
автобус с твоими одноклассниками и засели за диск, тогда и обнаружилось
что он не слушался FORMAT - и даже FDISK отказывалась с ним работать -
и только по одной причине - кто-то, возможно даже не К., а предыдущий
хозяин - попытался сделать низкоуровневое форматирование.
Не знаю, какой программой он пользовался при этом, была ли это
стандартная программа биоса машины или какая-либо навороченная
очередная версия Partition Magic - но он чуть не уничтожил диск.
По какой-то причине два цилиндра - второй и третий - абсолютно
не читались при просмотре диска в физическом режиме.
( Здесь и далее я буду говорить о режимах имея в виду только одну
программу из комплекта Нортон-утилит, de.exe или diskedit.exe )
Поняв это, я сделал единственно возможную вещь - исключил из обращения
плохую область целиком, просто указав в Partition Table что первый
раздел начинается не с первого а с десятого цилиндра ( а может - с
двадцатого, я сейчас уже не помню точно, помню только что для гарантии
я решил тогда "перепрыгнуть" через плохую область с некоторым запасом,
хоть ты и клянчил поменьше урезать место, диск мол и так маленький,
каких-то три гектара :).
Как только я проделал эту простую операцию, для нашего диска стала
возможной работа с FORMAT ( не дай бог не запусти FDISK - ею этот диск
перебить на другие разделы не удастся, и даже хуже того - плохая зона
снова вылезет наружу и FDISK снова откажется работать.)

Часть I

Вряд ли вся механика так очевидна для тебя - ладно, повторим еще раз,
только с картинками :

P A R T I T I O N T A B L E
==================================

1 2 3 4

_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
_/ _/ _/ _/ _/ _/
_/ Cylinder _/ 1 _/ 400 _/ - _/ - _/
_/ Head _/ 0 _/ 0 _/ - _/ - _/
_/ Sector _/ 1 _/ 1 _/ - _/ - _/
_/ Boot _/ Yes _/ No _/ - _/ - _/
_/ System _/ DOS16 _/ Extended _/ Unused _/ Unused _/
_/ _/ _/ _/ _/ _/
_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/

FIG.1

Перед нами максимально упрощенная таблица разделов жесткого диска
в том виде, в каком ее обычно создает FDISK при отсутствии физических
дефектов поверхности.
Конечно, таблица разделов содержит больше информации - ведь программам,
работающим с диском, надо знать не только в каком месте начинается тот
или иной раздел, но и где он заканчивается, поэтому и таблица, которую
ты можешь увидеть при просмотре диск-эдитором первого сектора нулевой
поверхности нулевого цилиндра несколько сложнее нашей схемы.
( Если тебе не терпится забежать вперед, то не забудь что диск-эдитор
имеет несколько режимов интерпретации данных, читаемых из сектора на
жестком диске, режим просмотра Partition включается клавишей F6, причем
программе наплевать какой на самом деле сектор диска ты просматриваешь -
она просто интерпретирует просматриваемые данные так как тебе этого
хочется - и согласно значению байт в определенных местах текущего сектора)
Расшифруем содержимое таблицы :
В самой левой колонке я просто поместил названия для тех данных которые
размещены в следующих четырех колонках - это номера цилиндров,головок
и секторов с которых начинается соответствующий раздел, а также
признак его активности ( Yes ) или неактивности ( No ) - собственно
говоря - Yes означает что данный раздел - загрузочный, причем
по большому счету системе неважно где он находится, это только
Fdisk стремится прописать его в 1/0/1 - то есть в первый сектор
первой поверхности нулевого цилиндра, если сразу за ним не обнаружит
плохих секторов.
Последняя строка обозначает тип файловой системы, которая применяется
в данном разделе диска. В нашем случае - DOS16, конечно - открытым
текстом в самом секторе этого не увидеть, для обозначения типа
файловой системы и многих других параметров используется более экономный
способ - при этом для записи этих данных отводится по одному-два
байта. Так сделано для того чтобы поля с параметрами разделов
занимали в маленьком 512-байтном секторе как можно меньше места.
А под сами разделы отведено всего лишь четыре таких поля - и все это
только затем чтоб оставить побольше места для программы начальной
загрузки ( куда иногда влазят со своими поправками бутовые вирусы :).
Программа начальной загрузки диска ( не торопись - пока только ДИСКА,
а не операционной системы ) вместе с полями параметров разделов и
заголовком сектора и составляет так называемый
MBR - Master Boot Record
- по-русски - главную загрузочную запись. Объем ее - 512 байт,
то есть равен размеру одного сектора диска, - если это стандартный
IBM-совместимый диск. Изредка применяется другой размер сектора, но
нам сейчас это неинтересно. 512 байт - общепринятый стандарт.
В начале MBR обычно можно увидеть сокращенное название операционной
системы, чья FDISK сделала этот сектор, в конце - пару строк текста
стандартных сообщений об ошибках - на тот случай если что-то
нехорошее произойдет с теми частями системы которые должны грузиться
сразу вслед за MBR. ( Ты можешь немного поэкспериментировать,
если сумеешь вытереть их и восстановить потом без посторонней помощи -
при попытке загрузки с такого диска ты увидишь этот текст на экране .)
Последние два байта в секторе занимает код 55 AA - при загруженном
драйвере русификатора экрана это читается как Uк. Этих признаков тебе
будет достаточно чтобы опознать этот сектор даже если твой диск
был заражен вирусом, который переместил его куда поглубже, но не
слишком далеко от исходного места. Вирус это делает затем
чтобы иметь возможность подставлять вместо себя исходный сектор
для проверки антивирусу. По крайней мере - если это умный вирус.
И если какой-нибудь балбес забудет что для полной гарантии ему
надо грузонуть машину с чистой системной дискеты, то никакой DrWeb
с Касперским и Aidstest`ом ( последнего было бы достаточно для большей
части бутовых) ему уже не помогут. Как-то на работе я не затер
бутовый вирус а переместил его еще немного дальше чем он сам перемещал
исходный сектор - ну в область на нулевой поверхности нулевого же
цилиндра, просто затем что мне нужно было чтоб на диске лежал
эталон для сравнения, для того чтобы узнать в конце концов, какой
из глупых юзеров постоянно пытается загрузить машину со своей
зараженной вирусом дискеты ( или просто забывает эту дискету
в дисководе и включает машину ). Был жуткий скандал. Два программиста
кстати, очень грамотных в своей области, когда я попросил их настроить
одну программу на этой машине, обнаружили этот вирус с помощью AVP,
обвинили меня в разгильдяйстве, и переформатировали диск. Поводом же
к запуску антивируса послужила плохая работа старой нерусифицирован-
ной версии Нортон-коммандера. Я-то знал, что Нортон просто не может
управиться со слишком большим для него диском, поэтому пользовался
Волковым, а для работы с архивами - ДОС-навигатором. Но откуда же
я мог знать что они еще не вырасли из пеленок и так же как и ты
обожают Нортон - свою первую операционную оболочку. У них хватило
ума заремить VC в AUTOEXEC.BAT но как-то не хватило опыта понять
что немедленно после запуска NC начавшиеся проблемы связаны именно
с этими их действиями. Воистину - в чужом глазу соринка видна,
в своем же и бревна не заметишь. В результате я получил выговор,
меня стали считать разгильдяем, (слава богу - хоть не вирусописателем:),
но самое главное - они грохнули мои архивы, так как им просто
не хватало места на диске куда они перебрасывали данные на время
форматирования моего диска. Спасибо хоть установили на нем вместо
громоздкой 32-битной старую, но такую понятную 16-битную версию FAT.
А самое смешное было в том что когда мне вернули машину, я снова
обнаружил мою отсадку в том же месте где она и была ! Ничего с ней
не сделалось от форматирования - ведь FORMAT и НЕ ЗАГЛЯДЫВАЕТ
даже в область до первого сектора логического диска. А FDISK ТОЛЬКО
ПЕРВЫЕ СЕКТОРА каждой поверхности протирает кодом FF. И если бы
не дай бог у этих ребят было чуточку поменьше самоуверенности и
чуть поболее времени - чтоб они запустили Касперского еще раз,
- то не знаю что бы со мной было. Касперский в общем-то прав когда
ищет вирус в зоне где бутовый в принципе неактивен, он же не знает
что я держу его там просто для своей проверки. Дело в том что есть
много новых вирусов - и видимо он считает что лучше перестраховаться.
А молодежь слепо доверяет ему, я могу назвать массу случаев когда
DOC-файл индицируется Касперским как зараженный - в то время как
он всего-навсего создан не самой распоследней наикрутейшей версией
WORD`а - а скромным стареньким WRITE. Кто об этом знает, постоянно
конфликтует с теми, кто этого не знает - последние обвиняют первых
в том что те пытаются подсунуть им завирусенные письма. Это просто
ВИРУСОФОБИЯ, обычное у нас явление.
( Зато первые со злорадством читают в письмах вторых все их системные
настройки - и пути к сетевым принтерам, и имя файл-сервера - ну много
чего может почерпнуть грамотный хакер из коротенького письма юного балбеса,
которое тот, желая подчеркнуть свою крутость, пишет в DOC-формате).
Но мы кажется отвлеклись, более того - макровирусы - не бутовые.
Они сами нуждаются в хорошей работе системы. А самый красивый
бутовый вирус я когда-то видел на своей первой XT - это был LPT.
Он так и называется по имени - системному имени ! - принтерного порта,
потому что все что он делает - это перепрограммирует порт вывода
на принтер - и тот начинает печатать такое ... Видимо, написал его
бедный программист с целью собрать побольше клиентов для друга,
занимавшегося аппаратной русификацией матричных принтеров :-))
Однако вернемся же к нашим баранам, тьфу - лошадям !

Часть 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 ничем мне не смогла помочь.
Поэтому я сделал то что сделал - разберемся поэтапно.

Часть III


Собственно говоря, если у тебя сбоит лишь один раздел - то ты можешь
его легко отключить полностью, просто поставив в Partition вместо
Yes, No ( или Extended ) метку Unused - а когда дочитаешь все,
что я тут написал - вернуться к отключенному разделу снова.
При этом тебе даже не надо будет затирать нулями цифры в этой
строке Partition - cистема просто не будет видеть этот раздел !
При любой записи в системную область диска не забудь сделать
резервную копию этой области. Я обычно обхожусь копией на самом
диске, но в особо ответственных случаях делаю копию на дискету,
и даже правку делаю сначала там же, а потом измененные данные
подсаживаю на диск. В нашем случае тебе достаточно отключить
режим Read Only, а затем нажав F6, найти нужную строку в первом
физическом секторе и в нужном поле нажать букву "U", потом -
попытаться "пролистать" диск хотя бы до следующего сектора -
диск-эдитор сам тебя спросит, не хочешь ли ты в самом деле что-то
записать ? Отвечай: "Конечно, хочу !"
Но если ты все еще не понял, плюс тебе жаль одной трети диска -
то читай дальше...
Так как же я сделал твои три гектара пригодными к употреблению ?
(Между прочим, ты бы мог проследить за этим сам, когда я уродовался
с диском - вместо того чтобы вместе с "аж два О." смотреть Никиту
по телевизору :)
1) Загрузил машину с плохим диском с дискеты, на которой лежал
мой джентльменский набор - пара программ для тестирования
параметров жесткого диска, любимый диск-эдитор и сверх того -
содранная в файл на дискете копия MBR жесткого диска чуть меньшего
размера и с другими параметрами CHS. Конечно, я нашел место
на дискете и еще для кое-чего - но об этом позже.
2) Записал карандашиком на клочке газеты количество цилиндров,
головок и секторов диска - в том виде в каком биос машины
пожелал его определить. ( Должен сказать, многие старые биосы
с автодетектом безбожно врут и часто сбивают с толку новичка,
однако причина этого не в том что биос плохой - нет, он хороший,
а чаще - в том, что кто-то уже постарался на другой машине - а это
значит - с другим биосом - отформатировать этот диск с другими
параметрами CHS. К счастью, нашему диску повезло - он не попал
в такую переделку, поэтому параметры определенные автодетектом и
параметры, которые определила тестирующая программа, совпали -
ну, конечно, со скидкой на LBA - ведь большинство простых
тестирующих программ читают данные CHS прямо из встроенного
контроллера диска - никто не успел нашему диску подпортить паспорт:).
3) Запустил диск-эдитор и посмотрел на это невозделанное поле
площадью в три гектара - мне предстояло забить на нем пару
колышков. Прошелся вхолостую по нему, начиная где-то с десятого
цилиндра ( а может - с двадцатого - посмотри сам, откуда у тебя
начинается первый раздел). Тут надо набраться терпения, хорошо
заранее приготовить кофе или найти в телевизоре достаточно скучную
передачу, - такую чтоб не отвлекала от наблюдения за диском.
Обычно я использую толстую спичку чтобы заклинить клавишу PageDown.
Для чего это нужно ? - Ну, видишь ли, если FDISK работать не хочет,
то кому-то же надо сделать эту работу все-равно. Конечно, я не
прохожу весь диск до конца - на это и недели может не хватить.
Вполне достаточно перечитать такой объем диска которого по твоим
подсчетам с головой хватит для того чтобы туда влезло две копии FAT,
а также корневой каталог и системные файлы - они должны располагаться
сразу за корневым каталогом друг за дружкой, причем самым первым
идет IO.SYS, за ним - MSDOS.SYS ну и COMMAND.COM.
Я может быть повторюсь, но FDISK делает то же самое, только
с нашим диском она не смогла это проделать из-за слишком
обширной сбойной области.
4) Скопировал в первый сектор диска файл с дискеты - я ленивый, но
хитрый, поэтому на моей лискете всегда есть парочка файлов,
в которых записаны копии MBR и сектора ДОС какого-нибудь диска.
Кроме того, иногда я копирую таким же образом первый сектор FAT,
хотя вообще его можно нарисовать руками.
MBR - а точнее - программу загрузки которая в нем записана, руками
не нарисуешь, если конечно у тебя не феноменальная память на коды
в шестнадцатеричной записи. Поэтому лучше его заранее содрать
с рабочего диска с какой-либо подходящей версией ДОС.
5) Подправил данные в MBR так чтобы прямо из него диск-эдитор
мог переходить на сектор ДОС - то есть в то место которое я для
него заранее нашел. На этом этапе наиболее трудный момент -
точно подсчитать число "скрытых" секторов - то-есть расстояние
от MBR до сектора ДОС. Если ты здесь что-то напутаешь, то будешь
иметь очень интересные глюки, дело в том что диск-эдитор - очень
послушный инструмент, но абсолютно лишен средств контроля за
твоими ошибками ;) - и все, чем он тебе может помочь на этом этапе
работы - это подсчет этого числа, если ты сумеешь заставить его
это сделать. Я обычно использую при этом такой прием :
- устанавливаю чтение диска с сектора ДОС и указываю в поле
"сколько секторов читать" все девятки - то есть заведомо больше
чем их вообще есть на диске. Эту ошибку диск-эдитор исправляет сам -
и указывает точно сколько всего секторов ты читаешь. После чего
остается только вычесть это число из общего числа секторов на диске.
Напоследок требуется еще прописать в отведенном для этого поле MBR
сколько же секторов ты отводишь под данный раздел. Тут важно не
указать число большее чем расстояние до следующего раздела, а то
твои файлы могут затереть его начало ( зато ты можешь припрятать
кусочек диска на черный день ;)
6) Забудь все о чем я говорил в предыдущих пяти пунктах - я забыл
провести инструктаж по технике безопасности.
Ты должен пользоваться только такой версией диск-эдитора, настройки
которого по умолчанию не позволяют вручную править байты в секторах
диска. Мой любимый вариант de.exe именно такой. И только когда мне
нужно что-то подправить - я вхожу в меню Options, там выбираю
Configuration и убираю птичку Read Only. При этом не надо делать
Save а лучше сразу Tab`ом перейти на Ok, а то программа имеет глупую
привычку сохранять настройки в файле norton.ini, а при запуске
- читать их оттуда. Само по себе это было бы не страшно, вот
только если ты хочешь править диск с которого грузился - то этот
настроечный файл может тебе напакостить, случайно записавшись как-
раз в потерянный каталог, запись о котором в FAT ты еще не успел
восстановить :-(( Никогда не работай без страховки!
Лучше всего запускать программу с защищенной от записи дискеты,
- тогда она при запуске только лишний раз ругнется на отсутствие
на дискете настроечного файла, зато и не сможет никогда записать
опасный вариант настроек.
И лучше пользоваться самой старой версией de.exe, какую сможешь
найти - она работает сама по себе, без библиотеки вдвое большего
размера, которая только занимает место на дискете, столь необходимое
для других файлов. Та версия которой пользуюсь я, может работать
под управлением любой версии ДОС, как-то я запускал ее на машине
с менее чем 512 кБ памяти и под вторым ДОС`ом. Мне тогда пришлось
собирать раздел второго ДОС буквально по кусочкам: один сектор оттуда,
другой отсюда, но я же хотел сделать его загрузочным - и сделал.
(Хоть он и не видел второго раздела - с ДОС-6.22, - просто потому
что во втором ДОС`е еще не существовало такого понятия - второй
раздел, более того - у него вообще не было и таблицы разделов.
Диск второго ДОС представлял собой как бы просто одну очень большую
дискету и начинался прямо с сектора ДОС, за которым следовали две
копии FAT - и мне пришлось здорово попотеть, чтобы запихнуть эту
конструкцию вглубь диска - я ведь хотел чтобы основной системой
на диске был все-таки 6.22-й ДОС, при загрузке с раздела которого
раздел второго ДОС был прекрасно виден и я таким образом мог
подгружать в него поочередно старые версии разных программ для
изучения их особенностей в родной среде, пользуясь всеми
преимуществами современной версии ).
7) После записи MBR и коррекции его я обычно записываю сектор ДОС,
корректирую данные в нем ( потому что его я тоже беру с другого
диска ), потом записываю две пустые копии FAT и протираю нулями
корневой каталог. После чего перегружаюсь с дискеты - и в моей
системе вдруг появляется отформатированный диск С. Теперь все что
мне нужно сделать - это записать на него системные файлы
в нужной последовательности ( смотри пункт 3 ). Фактически
сейчас я описал то что делает команда FORMAT C: /S
( вот только если диск имеет сбойные сектора, то ты можешь
никогда не дождаться от нее такого результата ).
Именно по этой причине - я ведь не был уверен что дальше первых
двух-трех сбойных цилиндров диск абсолютно невредим, - я и сделал
руками всю работу не только за FDISK, но и за FORMAT.
Если ты считаешь, что программа FORMAT нумерует сектора и кластеры,
то тебе такое может показаться невероятным - однако чем на самом
деле отличается восьмой например сектор 2169-го кластера от пятого
сектора 33170-го кластера ? - Да ничем - FORMAT не нумерует сектора
и кластеры, она только отводит определенное место под две копии FAT,
протирает нулями те сектора в которых будет корневой каталог и пишет
сектор ДОС, где указаны все параметры логического раздела.
Ну может быть - записывает еще системные файлы - если ты не забудешь
ее попросить с помощью указания специального параметра в командной
строке : " FORMAT /S ". А нумеровать сектора... или кластеры... -
какая глупость ! - Кому это нужно ? При поиске нужного кластера и ДОС
и WINDOWS отсчитывают просто требуемое количество секторов от начала
логического диска, причем сектор ДОС считается его первым сектором,
а корневой каталог - первым кластером, что и показывает тебе диск-
эдитор. Второй кластер - это, собственно, начало зоны, отведенной для
записи иформации на диске, и если ты вздумаешь забить весь диск одним
огромным файлом - то он будет начинаться со второго кластера, а в FAT
будет записан просто ряд чисел 3, 4, и так далее - до N - что означает:
"Продолжение данного файла ищите в кластере номер 3, 4, ..., N .
Для пометки последнего кластера отведенного под файл в FAT принят
один и тот же для любого по счету кластера код. Подробней - потом.
А пока не мешает уточнить что если ты научишься делать это вручную,
то даже при обширной плохой зоне на диске ты сможешь его использовать,
так как эту зону не составит особого труда пометить в FAT вручную или
с помощью специальной программы которая менее привередлива чем
FORMAT и специально написана для того чтобы отыскивать и помечать
в FAT плохие кластеры - судьба кластера таким образом определяется
качеством его секторов.

Часть 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 на том диске который ты задумал
создать практически голыми руками - или у тебя даже есть время
чтобы пообедать.
Приятного аппетита !