Заглянемо на диск - формат завантажувального сектора, вміст 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