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

Пан J

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-байтний сектор виводиться на екран

в стандартному режимі. Всього в рядку 16×3 +8 = 56 символів – таким

чином при перегляді одного сектора цього режимі через біос

проганяється 56×32 = 64×32-8×32 =… ого! – Майже два кілобайт.

Ну звичайно – а що ти хотів, якщо спочатку в рядку виводиться

шістнадцяткове зсув першого в рядку байти від початку

сектору (при перегляді файлу – від початку файлу), потім йдуть

шістнадцять байт в шістнадцятковій ж записи – тобто 32 знака,

і ще шістнадцять байт в нормальному вигляді (при цьому, звичайно,

керуючі символи з кодом до 31 і ще деякі при показі

замінюються точками – а то біос не так може зрозуміти намагання

прогнати деякі з цих кодів – наприклад, код 07 викличе

писк динаміка – і це ще будуть тільки квіточки).

Насправді я ще зробив велику знижку – адже виводиться ще й

номер сектора від початку диска і багато іншої службової інформації.

Може бути навіть, що на прогін одного тільки сектору через відео-

-Функції біос витрачається цілих три кілобайти даних, які

потребують оновлення в кожному рядку, яка повзе вгору

по екрану коли ти тиснеш на кнопку PageDown або просто "стрілку

вниз ". Не будемо залазити в такі нетрі – і так ясно що багато.

А що відбувається коли ти включаєш режим показу (інтерпретації)

Partition ?

– Ну тут все набагато простіше – адже виводиться всього чотири рядки –

– При будь-якому підрахунку не більше 320-ти символів – тобто практично

вдвічі менше ніж у самому секторі. (Там ще рамки – але вони не в рахунок)

Таким чином найшвидший режим перегляду – саме цей, при цьому

через біос проганяється грубо кажучи в десять разів менше інформації,

значить те ж кількість секторів ти зможеш перегорнути у десять разів

швидше (якщо звичайно, ти дочитав до цього місця і не помер з голоду

– Або з нудьги:).

Ну, думаю ти все зрозумів і вже приготував сірник щоби заклинити

клавішу PageDown в потрібному місці диска.

Більше я не буду так детально все розписувати, тобі просто треба

буде сприймати все, що я пишу, на віру, хоча якщо ти трохи

поворушити мізками то виявиш що все саме так як я це

описав.

І давай поки перегортаються диск, зробимо перерву. (Тільки не думай

кидати його напризволяще – ти повинен зменшити гучність

свого телевізора щоб не пропустити писк системного динаміка

якщо в обраній тобою області диска виявиться поганою сектор –

динамік запищить як тільки сірник до нього дійде:).

Так що якщо тобі хочеться подивитися бойовик – то це не сама

краща ідея. Вже краще попити кави – або, залежно від твого

апетиту щодо розміру FAT на тому диску який ти задумав

створити практично голими руками – або в тебе навіть є час

щоб пообідати.

Смачного!

Схожі статті:


Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*