Заглянемо на диск - формат завантажувального сектора, вміст partition table

"Багато речей, нам незрозумілі не
тому, що наші поняття слабкі, але
тому, що ці речі не входять в коло
наших понять ".
К.Прутков

Заглянемо на диск

Кожен, хто вперше потрапляє в дивний світ персональних комп'ютерів, неодмінно стикається буквально з лавиною нових англійських і українських термінів. Частина з них поки "неузаконена" (по крайней мере, у нас), тому під різними назвами нерідко приховані одні і ті ж поняття. Це часто призводить до плутанини навіть серед цілком кваліфікованих прикладних програмістів. Одне з найбільш типових термінологічних помилок, з яким доводиться стикатися на практиці, пов'язане з першим фізичним сектором на вінчестері і флоппі-диску (сектор 1, головка 0, циліндр 0).

"Якщо на клітці слона прочитаєш напис" буйвол ",
не вір очам своїм ".

"Дивись в корінь!"

Першим байтом Boot-сектора диска повинен бути або код безумовного переходу JMP (E9h) з подальшим 16-бітовим зміщенням, або код "короткого" (short) переходу JMP (EBh) з 8-бітовим зміщенням, причому третім байтом в цьому випадку є код операції NOP (90h). Закінчується сектор певної кодовою комбінацією - сигнатурою - 0AA55h.

Відразу за інструкцією JMP в цьому секторі слід 8-байтное поле, що резервуються для ідентифікації імені та версії OEM (Original Equipment Manufacturer), наприклад, MS DOS 3.3 або PC Tools.

Третім - головним компонентом Boot-сектора - є BIOS Parameter Block (BPB - блок параметрів BIOS). Це найважливіша структура даних, що містить, зокрема, тип носія (media descriptor), a також інші параметри, що характеризують формат диска (рис. 1).

Мал. 1. Формат Boot-сектора

"Не в сукупності шукай єдності,
але більш - в однаковості поділу ".

Резервується для IPL1

Елемент 1-го розділу

Елемент 2-го розділу

Елемент 3-го розділу

Елемент 4-го розділу

Мал. 2. Таблиця ділення диска (Disk Partition Table).

ОЗНАКА ЗАВАНТАЖЕННЯ
80h - завантаження розділ
00h - незагружаемую розділ

ПОЧАТОК РОЗДІЛУ ДИСКУ
біт 0-7: номер головки (0-255)
біт 0-5: номер сектора (1-63)
біт 6 і 7: старші біти номера циліндра
біт 0-7: молодші біти номера циліндра (0-1023)

ТИП РОЗДІЛУ
00 - розділ не використовується
01h - DOS 2.X з 12-бітової FAT
04h - DOS 3.X з 16-бітової FAT
05h - DOS 3.30 Extended-розділ
06h - DOS 4.X з 16-бітової FAT

КІНЕЦЬ РОЗДІЛУ ДИСКУ
біт 0-7: номер головки (0-255)
біт 0-5: номер сектора (1-63)
біт 6 і 7: старші біти номера циліндра
біт 0-7: молодші біти номера циліндра (0-1023)

ВІДНОСНИЙ СЕКТОР
Кількість секторів перед початком розділу

РОЗДІЛ
Кількість секторів в розділі

Рис.3. Формат полів опису диска

"Клацни кобилу в ніс - вона
махне хвостом ".

Програма IPL1 може видавати на екран три повідомлення. Якщо Partition Table містить більше одного завантажується розділу - видається повідомлення Invalid Partition Table; якщо Boot-сектор активного розділу не вдається вважати в пам'ять - видається повідомлення Error loading operation system; якщо в Boot-секторі відсутня сигнатура 0AA55h - видається повідомлення Missing operating system.

"Не будь кравців - скажи: як
розрізнив би ти службові відомства? "

Тепер ще про один важливий поле елементів Partition Table - "Тип розділу". Код в цьому полі вказує, який саме ОС належить даний розділ. Починаючи з DOS 3.0, максимальний розмір розділу фізичного диска може бути збільшений з 16 Мбайт до 32 Мбайт, завдяки введенню 16-бітних елементів FAT (File Allocation Table - таблиця розміщення файлів на диску). Хоча теоретично DOS 3.0 могла б керувати диском розміром аж до 134 Мбайт. Дійсно, якщо врахувати, що максимальна кількість кластерів 65535, а кожен кластер містить 4 сектори розміром по 512 байт: 65535 * 4 * 512 = 134215680 байт. Але межа в 32 МБ диктується тут відомою структурою BPB в Boot-секторі розділу диска, в якій для загальної кількості що належать диску секторів відведено лише два байта (максим. 65535). Таким чином, максимальний розмір дійсно становить: 65535 * 512 = 33553920 байтів.

Для того, щоб зберегти сумісність з DOS 2.X, в DOS 3.0 була залишена можливість управляти розділами диска з 12-бітними елементами FAT. Тому все DOS З.х-розділи диска розміром менше 16.7 Мбайт використовують 12-бітові елементи FAT. Так що при використанні розділів диска не перевищує зазначений код в поле "Тип розділу" буде відповідати DOS 2.X. Розміри розділів вінчестера, починаючи з DOS 4.0, переступили межу в 32 МБ і теоретично можуть досягати фантастичною поки цифри - 2048 Мбайт. Для цього формат BPB було розширено, і під поле загального числа секторів диска було відведено вже 4 байта. Ревним прихильникам DOS версії 3.30 не слід забувати, що Extended-розділ практично не може перевищувати обсягу, але повинен бути поділений на логічні диски (D, E, F і т.д.) з об'ємом кожного не більше 32 Мбайт.

"У всіх частинах земної кулі
є свої, навіть іноді дуже
цікаві, інші частини ".

Якщо поле "Тип розділу" містить код 05h (Extended-розділ), то фізичний сектор, який визначається в поле "Початок розділу диска", є зовсім не Boot-сектором Extended-розділу, а вторинним Master Boot-сектором вінчестера (Secondary Boot Sector) . Цей сектор містить власну таблицю розділів, звану Таблицею Логічного Диска (Logical Drive Table), і неодмінну сигнатуру 0AA55h. Ця таблиця і визначає місце розташування і розмір розділу, з яким DOS, взагалі кажучи, звертається, як з окремим фізичним диском. Вторинний Master Boot-сектор відрізняється від Master Boot-сектора, по-перше, тим, що він не містить програми IPL1 і, відповідно, ніколи не визначає завантажувальний диск. По-друге, Таблиця Логічного Диска містить максимум два 16-байтних елемента, а не чотири, як у Partition Table. Причому, якщо поле "Тип розділу" першого елемента таблиці визначає версію DOS, то таке ж поле другого елементу таблиці (якщо він існує) містить код Extended-розділу - 05h. Таким чином, другий елемент Таблиці Логічного Диска визначає наступний вторинний Master Boot-сектор і т.д. (Рис. 4). Кожен диск, який визначається Таблицею Логічного Диска, чесно містить Boot-сектор, дві копії FAT, кореневу директорію, безумовно, область даних і форматується за допомогою DOS. Зрозуміло, що розташування Boot-сектора логічного диска визначається першим 16-байтним елементом Таблиці.

Рис.4. Формування логічних дисків вінчестера.

"Де початок того кінця, яким закінчується початок?"

Число секторів до початку розділу зберігається в 4-байтним поле "Відносний сектор". Це число визначається шляхом послідовного підрахунку секторів, починаючи з сектора 1, головки 0, циліндра 0 фізичного диска, і збільшення номера сектора на доріжці, потім номера головки, потім циліндра. Число секторів в розділі зберігається в 4-байтним поле "Розмір". Як і для попереднього поля, перше слово містить молодшу частину числа, друге - старшу.

"Що маємо не бережемо;
втративши - плачемо ".

"І при залізницях краще
зберігати двоколку ".

"Плюнь тому в очі, хто скаже,
що можна осягнути неосяжне! "

Останнім часом для конфігурації вінчестера замість утиліти FDISK часто використовують спеціальні програми - "диск-менеджери". Серед них широко поширені такі програми, як Disk Manager, Advanced Disk Manager, Speed ​​Stor. Вони мають власні таблиці розділів, свої драйвери дискових пристроїв, причому необхідна службова інформація може зберігатися в другому фізичному секторі (сектор 2, головка 0, циліндр 0). Застосування "диск-менеджерів" пов'язане з наданням ними таких додаткових можливостей, як захист логічного диска від запису, організація парольного захисту і, звичайно, створення логічних дисків розміром більше 32 Мбайт при роботі з DOS 3.30.

Разом з Козьми Пруткова
склав А. Борзенко

Підтримайте сайт, пожертвуйте біткоіни:
17Fnmua2H2ct91b4QzogCsjv4tj48tjKXP