Структура жорсткого диска 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>

*

*