Зробити запис у завантажувальний сектор mbr. Що вибрати – GPT чи MBR? Пояснюємо, чим відрізняються стандарти. Що означають ці абревіатури

Головна / Корисне ПЗ

MBR і GPT. Основні питання.

MBR та GPT – визначення.

Windows пропонує нам 2 опції: Master Boot Record(MBR) – Головна Завантажувальний Запис – та Globally Unique Identifier Partition Table(GPT) – Глобально Унікальний Ідентифікатор Таблиці Розділів. Остання отримала підтримку, починаючи з версій Vista/Windows Server 2008 . Однак Windows XP 64-хбітна теж підтримувала цей формат.

MBR- Вона ж Master Boot Record– це основний завантажувальний запис на жорсткому диску. Знаходиться вона на початку вінчестера, тобто в перших секторах жорсткого диска. Його завдання – вибрати розділ диска, в якому завантажуватиметься операційна система (власне, головний завантажувальний запис для цього і був створений). Це робиться за допомогою короткого виконуючого коду, який BIOS після самодіагностики вивантажує в . Далі виконуючий код MBR бере кермо правління в свої руки і завантажує ОС у вказаному розділі жорсткого диска (інформація про розділи також міститься в завантажувальної запису). До речі, саме тому головний завантажувальний запис не можна створити на диску, який не можна розділити на частини і навпаки, його можна створити там, де можливий поділ носія даних на кілька дискових, хай і віртуальних пристроїв.

Якщо MBR пошкоджено, операційна система ніколи не запуститься. Якщо пошкоджено не лише запис MBR, а й сектор із головним завантажувальним записом – диск можна використовувати лише як підставку для чашок або розламати на магнітики та дати пограти дитині.

MBR і GPT. Чому уникають MBR?

Через давність розробок, MBR не розуміє, що таке велике дискове місце. Для MBR «велике» починається з величини обсягу 2,2 терабайта. MBR, повторюю, такі обсяги не читає і відображати не в змозі. Далі, MBR сприймає існування лише чотирьох первинних розділів (primary partition) або три первинні розділи плюс один розширений. Таким чином, якщо розділів потрібно більше, то користувачеві потрібно буде створити вторинну структуру на дисковому просторі. Користувачеві ПК вона відома як розширений розділ (extended partition) - тобто спеціальний тип розділу диска, що є розширенням первинного розділу. Містить головний завантажувальний запис (MBR) з власною таблицею розділів, а це дозволяє не зважати на обмеження цієї таблиці і дозволяє мати на диску більше чотирьох розділів. На жорсткому диску можливо, як ви вже здогадалися, кілька розширених розділів. І вже після створення розширеного розділу доводиться створювати один або кілька розділів логічних ... Втім, правила розбиття на розділи для MBR складні та обмежені. Тому в боротьбі таблиць MBR та GPT на зміну головного завантажувального запису повсюдно йде GPT.

MBR і GPT. Що таке GPT?

GPT– GUID (Globally Unique Identifier) ​​Partition Table – таблиця розділів глобально (статично) унікального ідентифікатора. Висловлюючись технічно, GPT використовує більш сучасну систему адресації логічних блоків, що дозволяє не просто подолати планку в 2,2 Тб, а й створювати та успішно обробляти диски об'ємом трохи більше 9 зеттабайт, тобто про обмеження обсягу для створюваного розділу можна забути. Крім того, GPT більш надійна, бо зміст та таблиця розділів диска записані і на початку, і в кінці диска. Якщо один із них пошкоджений, другий відновлюється за образом і подобою вцілілого. Це забирає певний «життєвий» простір у вінчестера, а, отже, і у нас з вами, тому невеликих об'ємів диски цілком життєздатні одночасно з MBR і GPT. GPT має сенс цілеспрямовано ставити лише на дисках об'ємом від 500 Гбайт (краще ще більше).
Далі завдяки нововведенням тепер і сама кількість розділів на вінчестері необмежена. 128 версій операційних систем Windows одному комп'ютері немає, звісно, ​​сенсу, але у деяких випадках установка відразу кількох операційних систем різних поколінь цілком виправдана. Хоча, говорячи про різні покоління, я маю на увазі лише останні версії Windowsпочинаючи з Vista. Так, ОС до XP у 32-бітній версії включно GPT не підтримуються. І, звичайно, не забудьте про проблему порогового значення 2 Тбайта, якщо ви є щасливим володарем таких обсягів інформації. Ось тут і починає спливати питання про конвертування назад в MBR, яке я розгляну трохи пізніше. Єдине, про що я згадаю відразу – що питання про таблицю розмітки вінчестера (MBR та GPT) та встановлений базовий програмне забезпеченняматеринської плати (BIOS або UEFI) у процесі встановлення операційної системи стоять у нерозривному зв'язку.

MBR і GPT. Порівняння.

А яка мені різниця?

Якщо у вас не мультизавантаження, то майже ніяке. Як ви вже зрозуміли, сучасні операційні системи сімейства Windows чудово працюють під керуванням обох файлових таблиць. Просто під час встановлення операційних систем або розгляду варіанта мультизавантажувальної версії (вам знадобиться MBR) комп'ютера користувачеві потрібно пам'ятати кілька моментів:

  • GPT – більш сучасна
  • GPT вимагатиме від Windows, щоб та завантажувалася тільки в режимі (про колишні завантажувачі доведеться забути)
  • MBR вимагає від колишніх поколінь Windows завантаженняв режимі BIOS(втім, 64-бітові версії можуть завантажуватися і в режимі UEFI)

На цьому теоретичну частину про MBR та GPT я пропоную закінчити та перейти до практичних питань встановлення операційних систем та конвертування таблиць дисків:

Як дізнатись, яка версія таблиці у мене?

Перевірити, як завжди легко. Затискаємо клавіші Windows + R, вводимо команду diskmgmt.msc. У вікні консолі виберемо ліворуч Управління дисками. Виберіть будь-який з розділів, клацніть правою кнопкою миші та натисніть Властивості(це ж вікно можна знайти прямо з Провідника системи зі списком локальних дисків) :

У вікні з присутніх дисків (там все) виберіть жорсткий, що цікавить, і знову двічі по ньому клацніть. З'явиться вікно властивостей конкретного диска, де ви знайдете вкладку Тома. У ній знайдемо кнопку Заповнити:

Можна зайти з іншого боку. Утиліта від Windows

У консолі послідовно набираємо команди:

Diskpart list disk

І що бачимо? Під ідентифікатором GPT нічого немає, значить цей стиль розділу ставлення до даному дискуніякого не має:

Успіхів нам усім

Прочитано: 283

Вибір одного зі стандартів GPT або MBR може виявитися досить простим для власника нового комп'ютера з великим жорстким диском та сучасним інтерфейсом UEFI.

Такі параметри вимагають переходу більш сучасний стандарт.

Тоді як за наявності більш-менш ПК вибір може бути зроблений на користь практично застарілого MBR - а він може виявитися взагалі єдиним варіантом.

Зміст:

Що означають ці абревіатури?

Будь-який жорсткий диск або твердотільний накопичувачперед використанням для запису операційної системи, системної та іншої інформації обов'язково розбивається розділи.

Стандарт MBR, що розшифровується як «Головний завантажувальний запис», являє собою старий спосібзберігання даних, GPT (або "таблиця розділів GUID") - новий.

Обидва вони необхідні ще й для зберігання відомостей про початок і кінець кожного розділу, завдяки яким система дізнається розташування секторів і визначає, чи є ця частина диска завантажувальної чи ні.

Хоча при цьому MBR вважається надійним і простим – і відновлення потрібно нечасто.

До мінусів стандарту відноситьсянеможливість підтримки великої кількості розділів – невеликий недолік для HDD розміромдо 500 ГБ, але вже досить серйозний для терабайтних чи навіть 4-терабайтних моделей.

При необхідності створити більше 4 розділів потрібно використовувати досить складну технологію EBR.

Друга проблема, пов'язана із збільшенням обсягів жорстких дисків, полягає у неможливості працювати з розділами більше 2,2 ТБ.

Переваги та недоліки нового стандарту

Удосконалений стандарт GPT, який поступово замінює MBR, входить до складу технології UEFI, який, у свою чергу, замінює застарілий інтерфейс BIOS.

Кожен розділ має свій унікальний ідентифікатор- дуже довгий рядоксимволів. Перевагою GPT у порівнянні зі застарілим стандартом можна назвати:

  • відсутність обмежень обсягом розділу.Точніше, максимальна величина все ж таки існує – але досягти її вийде не раніше, ніж через кілька десятиліть;
  • необмежену кількість розділів- До 264 в цілому, до 128 для ОС Windows.

На диску, що підтримує стандарт MBR, дані про розділи та завантаження розташовані в тому самому місці. При пошкодженні цієї частини накопичувача у користувача ПК виникає низка проблем.

Ще одна відмінність GPT - зберігання циклічного надлишкового коду, що дозволяє контролювати збереження даних.

Пошкодження інформації призводить до негайної спроби її відновлення.

У той час як при використанні MBR дізнатися про проблему виходить після того, як система перестала завантажуватися, а її розділи зникли.

Серед мінусів стандарту варто відзначити відсутність підтримки попередніх технологій. І хоча операційна система з застарілим інтерфейсом розпізнає , ймовірність її завантаження мінімальна. Крім того, при використанні цього варіанта не можна призначати імена всім дискам, так само як розділам, а відновлення даних не завжди доступне - через обмеження кількості та розташування дублікатів таблиць.

Сумісність

Спроба налаштувати диск GPTза допомогою технологій, що підтримують тільки MBR, ні до чого не призведе– таким чином, захисний варіант головного завантажувального запису запобігає випадковому перезапису та розмітці за старим стандартом.

Системи Windows завантажуються з розмічених за технологією GPT дисків тільки на пристроях, що підтримують інтерфейс UEFI – тобто на ноутбуках та ПК з windows від Vista до 10-ї.

Якщо прошивка материнської плати містить , розділи будуть читатись, але завантаження, швидше за все, не відбудеться.

Хоча ці ж операційні системи здатні працювати з GPT-дисками як сховище інформації.

Слід знати:Стандарт GPT підтримується й іншими операційними системами, зокрема Linux. А на комп'ютерах Apple ця технологія замінила стару таблицю розділів APT.


Порівняння стандартів

Для оцінки подібності та відмінностей двох стандартів, можливостей їх роботи, накопичувачами та завантажувальним інтерфейсом, варто створити невелику порівняльну таблицю.

По ній набагато простіше визначитися з тим, який стандарт розділів використовуватиме для свого комп'ютера.

Табл. 1. Порівняльні характеристики MBR та GPT
Стандарт MBR GPT
Робота з прошивками З BIOS та з UEFIТільки з UEFI
Підтримка Windows Усі версії, починаючи з найпершихТільки 64-бітові версії Windows 7 та Vista, всі варіанти Віндоус 8 та 10
Читання та запис Будь-які платформиУсі операційні системи Windowsвід Vista та вище + XP Professional 64-біт
Число розділів одного диска Не більше 4До 264
Максимальний розмір розділу 2,2 ТБ9,4 х 109 ТБ
Вбудований мультизавантажувач ВідсутнєЄ

Проблеми роботи з новим стандартом та їх вирішення

Існування двох стандартів може призвести до виникнення певних проблем. Особливо, якщо на комп'ютері заборонено завантаження іншим способом, крім використання жорсткого диска.

Виправити ситуацію дозволяє перехід до , який не дозволяє працювати з новим стандартом – і при спробі завантажитись на екрані виникає помилка, що повідомляє про наявність стилю розділів GPT.

Вирішити проблему не так складно – для цього потрібно взяти звичайний завантажувальний дискз ОС Віндоус та виконати такі дії:

  • Почати завантаження з диска;
  • Дійти до моменту вибору розділу, у якому виникає проблема;
  • Запустити консоль(одночасне натискання Shift та F10);
  • Почати роботузі спеціальною утилітою, ввівши команду diskpart .

Після того як програма запущена, слід набрати «list disk» , що призведе до появи на екрані списку пронумерованих дисків.

Тепер достатньо ввести в командному рядку«clean» , очистивши зайву інформацію, і перейти до перетворення стандартів.

Для того, щоб диск GPT був перетворений на застарілий формат, слід ввести команду convert mbr , що дозволяє працювати з диском і ставити на нього будь-яку платформу.

Ця ж утиліта забезпечує роботу з розділами.

Наприклад, введення команди "create partition primary size=X"створює розділ розміром X Гб, "format fs=ntfs label="System" quick"виконує форматування в NTFS, а "active" дозволяє розділу стати активним.

Висновки

Вирішуючи, який стандарт використовувати, GPT або MBR, слід визначити, який завантажувальний інтерфейс використовується, і який розмір жорсткого диска на ПК.

За наявності прошивки БІОС робота з GPT буде неможливою. Для більш сучасного комп'ютераУкомплектований , навпаки, не варто вибирати MBR.

На порівняно нових материнських платах, випущених останніми роками, вже встановлено інтерфейс UEFI – а отже, проблем із GPT не буде.

Проте розміри дисків збільшуються ненабагато– небагато покупців вибирають комп'ютери з HDD об'ємом більше 2 ТБ і, тим більше, потребують 2,2-терабайтних розділів.

Через це особливих підстав вибирати цей стандарт у звичайного користувачапоки не існує- А ось для сервера він стане чудовим варіантом.

Відео:

Головна завантажувальна запис

Головна завантажувальна запис(англ. master boot record, MBR) - код і дані, необхідні для подальшого завантаження операційної системи і розташовані в перших фізичних секторах (найчастіше в першому) на жорсткому диску або іншому пристрої зберігання інформації.

MBR містить невеликий фрагмент коду, що виконується, таблицю розділів (partition table) і спеціальну сигнатуру.

Функція MBR - «перехід» у розділ жорсткого диска, з якого слід виконувати «подальший код» (зазвичай - завантажувати ОС). На «стадії MBR» відбувається вибір розділу диска, завантаження коду ОС відбувається на пізніших етапах алгоритму.

У процесі запуску комп'ютера, після закінчення початкового тесту (Power-on self-test - POST), Базова система введення-виводу (BIOS) завантажує "код MBR" в оперативну пам'ять (в IBM PC зазвичай з адреси 0000:7c00) і передає управління завантажувального коду, що знаходиться в MBR.

Роль та місце MBR у завантаженні комп'ютера (для архітектури x86)

У процесі завантаження комп'ютера x86 спочатку завжди відпрацьовується BIOS. На цій стадії, крім тестування та ініціалізації обладнання комп'ютера, відбувається також вибір пристрою, з якого відбуватиметься подальше завантаження. Це може бути дискета, жорсткий диск, мережевий ресурс, вбудований ПЗП або будь-який інший пристрій (алгоритм вибору завантажувального пристроюможе бути різним і залежить від реалізації BIOS). Після вибору завантажувального пристрою керування всією подальшою завантаженням BIOSповністю передає цей пристрій.

У випадку, якщо пристрій має лише один розділ (наприклад, дискету або мережеве завантаження), то вибір однозначний, і завантаження продовжується відразу з цього пристрою. Однак, якщо пристрій містить декілька розділів, кожен з яких потенційно може бути завантажувальним (як, наприклад, у разі жорстких дисків), виникає невизначеність: з якого саме розділу робити завантаження. Для вирішення неоднозначності вибору розділу було запропоновано винести це питання з ведення BIOS і передати цей вибір самому пристрою. Виникла ідея використати для цього невелику програму, Записану на носії, яка і здійснювала б даний вибір. Так виникла концепція MBR.

Таким чином, потенційна наявність кількох завантажувальних розділів, серед яких необхідно здійснити вибір – це ключовий момент у необхідності появи та відпрацювання MBR. Для пристроїв з єдиним (або однозначно заданим) завантажувальним розділом концепція MBR не має сенсу і не використовується.

Розвиток MBR

Іноді MBR крім основної функції (вибору розділу) включаються також інші функції, наприклад, авторизація. Але це вже розширення та доповнення до основної функції та завдання MBR. Такі системи не набули широкого поширення.

Інші (не x86) системи

У зв'язку з тим, що в інших системах застосовуються інші архітектурні рішення (починаючи від активації заліза і закінчуючи завантаженням ОС), концепція MBR може бути застосовна до них.

Стандартизація MBR

Затвердженого стандарту на структуру MBR не існує, однак, є «традиції, що склалися», яких дотримуються більшість MBR від різних виробників.

Інші формати MBR

Завантажувачі, відмінні від стандартних Windows-завантажувачів, можуть використовувати весь простір між MBR і першим розділом (близько 32 кб) для власних цілей. У таких випадках під MBR розуміють весь завантажувальний код, а для виділення перших 512 байт кажуть, що вони розташовані в MBS (Master Boot Sector) - головному завантажувальному секторі.

Алгоритм роботи коду MBR від Microsoft

BIOS (до MBR)

  • BIOS проводить початкову ініціалізацію обладнання (заліза)
  • BIOS визначає, з якого пристрою виконувати подальше завантаження: дискета, флеш-накопичувач, жорсткий диск і т. д. (вибір пристрою залежить від версії та від налаштувань BIOS)
даному описірозглядається лише випадок завантаження з жорсткого диска]
  • BIOS зчитує один сектор (512 байт), який знаходиться за адресою: "циліндр 0, головка 0, сектор 1", і поміщає його в область пам'яті за адресою 0000:7c00
  • BIOS перевіряє, що цей сектор закінчується сигнатурою 55ААh
[якщо це не так, то керування повертається назад до BIOS]
  • BIOS передає керування за адресою 0000:7c00 (тобто сектору MBR)

MBR

Вибір завантажувального розділу та перевірка цілісності MBR:

  • MBR копіює себе з адреси 0000:7c00 на адресу 0000:0600 (звільняючи місце для майбутнього завантаження вже завантажувача ОС)
  • MBR переглядає по черзі всі записи про розділи та шукає перший запис про «активний» (== «завантажувальний») розділ (тобто шукає розділ, позначений як 80h)
  • У разі успіху (розділ, позначений як 80h - знайдено) MBR запам'ятовує номер цього розділу
[якщо переглянуто всі 4 записи та не знайдено розділ, позначений як 80h, то викликається INT 18h. Це повертає керування назад у BIOS, що може призводити або до завантаження BASIC, або до повторної спроби завантажити систему з диска, або перезавантаження комп'ютера - залежно від версії та реалізації BIOS]
  • MBR переглядає всі записи, що залишилися, і перевіряє, що це єдиний активний розділ (що більше розділів, помічених 80h, на цьому фізичному диску не існує)
[якщо знаходяться інші розділи, помічені 80h, то MBR виводить повідомлення про помилку (зазвичай це щось типу Invalid partition table), після чого система зависає в нескінченному циклі, з якого можна вийти тільки перезавантаженням комп'ютера]
  • MBR перевіряє, що в даному полі для всіх 4 розділів немає інших значень, крім «00h» і «80h»
[якщо знаходяться розділи, позначені значенням, відмінним від 00h або 80h, то MBR виводить повідомлення про помилку («Invalid partition table»), система зависає, потрібно перезавантаження комп'ютера]

На цьому закінчується перевірка MBR і починається підготовка до завантаження ОС:

  • MBR зчитує перший сектор логічного диска, позначеного як «завантажувальний» та поміщає цей сектор за адресою 0000:7c00
  • MBR перевіряє, що цей сектор закінчується сигнатурою 55ААh
[якщо цієї сигнатури тут немає, то виводиться повідомлення «Missing operating system» і комп'ютер підвисає, потрібно перезавантаження]
  • MBR передає керування за адресою 0000:7c00 (тобто завантажувальному сектору вибраного логічного розділу диска)

Завантажувальний сектор логічного диска (після MBR)

Завантажувальний сектор залежить від типу файлової системи на логічному розділі диска і містить код, що виконує знаходження та завантаження власне операційної системи на даному типіфайлової системи

Структура MBR

Код завантажувача

Після завершення процедури POST в ОЗП за адресою 0x0000:0x7c00 записується код завантажувача, після чого йому передається управління. Завдання завантажувача - проаналізувати таблицю розділів жорсткого диска, потім або передати управління завантажувального коду активного розділу, або завантажити в RAM ядро ​​операційної системи та передати йому управління.

Таблиця розділів

У таблиці розділів зберігається інформація про тип розділу та його розташування на жорсткому диску.

Сигнатура

Останні два байти MBR називаються сигнатурою. Значення цих байтів має бути 55h AAh. Якщо це не так, запис вважається некоректним.

Структура опису розділу

Ознака активності розділів

Ознака активності розділу - ознака, що означає можливість завантаження операційної системи з розділу. Для стандартних завантажувачів може приймати такі значення:

  • 80h – розділ є активним;
  • 00h – розділ є неактивним;
  • інші значення є помилковими та ігноруються.

Початок розділу / Кінець розділу

Координати початку та кінця розділу в CHS-форматі (циліндр, головка, сектор). CHS не дозволяє виконувати адресацію більш ніж 7,8 ГБ даних, і для адресації до розділів, що знаходяться за межами 7,8 ГБ, використовується LBA-адресація.

Код типу розділу

Код файлової системи, що використовується на цьому розділі.

Коди типів розділів
Код Тип розділу
00h Порожній запис
01h 12-бітна FAT
04h 16-бітна FAT до 32 Мбайт
05h Розширений розділ
06h 16-бітна FAT понад 32 Мбайт
07h Windows NT NTFS (і деякі інші - тип визначається за

вмісту завантажувального запису)

0Bh 32-бітна FAT
0Ch 32-бітна FAT з використанням LBA
0Eh LBA VFAT (те ж саме і 06h, з використанням LBA)
0Fh Розширений розділ LBA (те ж саме і 05h, з використанням LBA)
17h Прихований розділ NTFS
1Bh Прихований розділ 32-бітної FAT (те що 0Bh)
1Ch Прихований розділ 32-бітної FAT з використанням LBA (те що 0Ch)
1Eh Прихований розділ LBA VFAT (те, що й 06h, з використанням LBA)
82h Linux swap
83h Linux
85h Linux extended
86h Розділ FAT-16 stripe-масиву Windows NT
87h Розділ NTFS stripe-масиву Windows NT
B6h Дзеркальний master-розділ FAT-16 Windows NT
B7h Дзеркальний master-розділ NTFS Windows NT
С6h Дзеркальний slave-розділ FAT-16 Windows NT
С7h Дзеркальний slave-розділ NTFS Windows NT

У випадку, якщо використовується розширений розділ, координати початку розділу вказують на EBR.

У цьому розділі я розповім як написати власний менеджер мультизавантаження. Менеджер мультизавантаження є кодом, що знаходиться в завантажувальному секторі, і на вибір користувача завантажує будь-яку з декількох операційних систем, встановлених на комп'ютері. У процесі обговорення ви познайомитеся з перериванням INT 13h, таблицею розділів тощо. Стандартний завантажувач, що встановлюється більшістю операційних систем за умовчанням, занадто примітивний, щоб його сприймати всерйоз, а нестандартні завантажувачі від незалежних розробників зазвичай надто неповороткі та ненадійні. Ось і давайте напишемо свій! Поки ми його писатимемо, ми пізнаємо дао і дзен асемблера, навчимося налагоджувати програми без відладчика і ближче познайомимося з низькорівневими інтерфейсами вінчестера.

Інтерфейс INT 13h

Керувати дисками можна через порти вводу/вывода, і через BIOS. Порти набагато могутніші та цікавіші, проте BIOS програмується набагато простіше, до того ж вона підтримує велику кількість різнокаліберних накопичувачів, абстрагуючись від конструктивних особливостей кожної конкретної моделі. Тому діятимемо через неї, а точніше, через інтерфейс переривання INT 13h.

Номер функції заноситься в регістр AH. У разі читання він дорівнює двом. Регістр AL відповідає за кількість секторів, що обробляються. Оскільки ми збираємось читати по одному сектору за операцію, занесемо сюди одиницю. Регістр DH зберігає номер головки, a DL – номер приводу (80h – перший жорсткий диск, 81h - другий і т.д.). П'ять молодших бітів регістру CL задають номер сектора, біти регістра CL, що залишилися, і вісім бітів регістра CH визначають номер циліндра, який ми хочемо прочитати. Реєстрова пара ES:BX вказує на адресу буфера-приймача. Ось, власне, і все. Після виконання команди INT 13h дані, що зчитуються, виявляться в буфері, а якщо відбудеться помилка (наприклад, головка "спіткнеться" про BAD-сектор), то BIOS встановить прапор переносу (carry flag), і ми будемо змушені або повторити спробу, або вивести сумне повідомлення на екрані.

Код цієї програми мовою асемблера представлений у лістингу 5.6.

Лістинг 5.6. Код, який зчитує завантажувальний сектор або розширену таблицю розділів

MOV SI, 1BEh; Перейти до першого розділу
MOV AX, CS; Налаштовуємо ES
MOV ES, AX
MOV BX, buf; Зміщення буфера
...
read_all_partitions:
MOV AX, bud; Читати 1 сектор з диска

MOV DH, ; Стартовий номер голівки
MOV CX, ; Стартовий сектор із циліндром INT 13h
JC error; Помилка читання
;Обробляємо лічений boot-сектор або розширену таблицю розділів
;===================================================================
;
CMP byte, 80h
JZ LOAD_BOOT; Це завантажувальний сектор
; Передаємо на нього керування
CMP byte, 05h
JZ LOAD_CHS_EXT ; Це розширена таблиця розділів
; у форматі CHS
CMP byte, 0Fh
JZ LOAD_LBA_EXT ; Це розширена таблиця розділів
; у форматі LBA
ADD SI, 10h; Переходимо на наступний розділ
CMP SI, 1EEh
JNA read_all_partitions; Читаємо всі розділи один за одним
...buf rb 512; Буфер на 512 байт

Запис сектора в режимі CHS відбувається практично так само, тільки регістр AH дорівнює не 02h, a 03h. З режимом LBA розібратися набагато складніше, але ми, як справжні хакери, його обов'язково подужаємо.

Читання сектора здійснюється функцією 42h (AH = 42h). У регістр DL , як і раніше, заноситься номер приводу, а ось регістрова пара DS:SI вказує на адресний пакет (disk address packet), що є просунутою структурою формату, описаного в табл. 5.4.

Таблиця 5.4. Формат адресного пакета, який використовується для читання та записування секторів у режимі LBA

Зміщення Тип Опис
00h BYTE Розмір пакета – 10h або 18h
01h BYTE Поле зарезервовано і має дорівнювати нулю
02h WORD Скільки секторів читати
04h DWORD 32-розрядна адреса буфера-приймача у форматі seg:offs
08h QWORD Стартовий номер сектора для читання
10h QWORD 64-розрядна плоска адреса буфера-приймача. Використовується лише у випадку, якщо 32-розрядна адреса дорівнює FFFF:FFFF

Код, що читає сектор у режимі LBA, у випадку виглядає так, як показано в лістингу 5.7.

Лістинг 5.7. Код, який здійснює читання сектора з диска в режимі LBA

MOV DI, 1BEh; Перейти до першого розділу
MOV AX, CS; Налаштовуємо...
MOV buf_seg; ...сегмент
MOV EAX, ; Зміщення partition щодо
; початку розділу
ADD EAX, EDI; EDI має містити номер сектора
; поточного MBR
MOV;
...
read_all_partitions:
MOV АН, 42h; Читати сектор в режимі LBA
MOV DL, 80h; Читати з першого диска
MOV SI, dap; Зміщення адресного пакету INT 13h
JC error; Помилка читання
...
dap:
packet_size db 10h; розмір пакету 10h байт
reserved db 00h; "Заначка" для майбутніх розширень
N_SEC dw 01h; Читаємо один сектор
buf_seg dw 00h; Сюди буде занесено сегмент буфера-приймача
buf_off dw buf; Зміщення буфера-приймача
X_SEC dd 0; Сюди буде занесено номер сектору для читання
dd 0; Хіст, що реально не використовується
; 64-бітної адреси
buf rb 512; Буфер на 512 байт

Запис здійснюється аналогічно до читання, тільки регістр AH містить не 42h , a 43h . Регістр AL визначає режим: якщо біт 0 дорівнює 1, BIOS виконує не запис, а її емуляцію. Біт 2, будучи зведеним, записує з перевіркою. Якщо регістр AL дорівнює 0, виконується звичайний запис за промовчанням.

Тепер, освоївшись із дисковими перериваннями, перейдемо до обговорення інших аспектів програмування.

Створюємо код завантажувача

Найкраще завантажувачі програмуються на FASM. З погляду асемблера завантажувач є звичайним двійковим файлом, гранично допустимий обсяг якого становить 1BBh (443) байт. Небагато? Але не поспішатимемо з висновками. Кожен розділ завжди починається з початку циліндра, а це означає, що між кінцем MBR і початком розділу є щонайменше n вільних секторів, де n == sectors per track . Практично всі сучасні вінчестери мають по 64 сектори на доріжку, що дає нам: 443 + 63*512 == 32699 байт або приблизно 32 Кбайт. Та в цей обсяг навіть графічний інтерфейсз мишею вмістити можна! Однак робити цього ми не будемо. Справжні хакери працюють у текстовому режимі з командним рядком.

Як вже говорилося, BIOS завантажує MBR за адресою 7C00h, тому на початку асемблерного коду має стояти директива ORG 7C00h, а ще – USE16, адже завантажувач виконується у 16-розрядному реальному режимі. Пізніше, за бажання, він може перейти до захищеного режиму, але це буде вже потім. Не лізтимемо в такі нетрі.

Виявивши завантажувальний розділ (а виявити це можна за прапором 80h, що знаходиться по нульовому зміщенню від початку розділу), завантажувач повинен вважати перший сектор цього розділу, помістивши його в пам'яті за адресою 0000:7C00h, тобто в точності поверх свого тіла. А ось це вже недобре! І щоб не викликати крах системи, завантажувач повинен заздалегідь перенести своє тіло на іншу адресу, що зазвичай здійснюється командою MOVSB. Копіюватися можна за будь-якою з адрес пам'яті - від 0080:0067h до 9FE00h. Пам'ять, розташовану нижче 0080:0067h, краще не чіпати, тому що тут знаходяться вектори переривань і системні змінні BIOS, а від A000h і вище починається область відображення ПЗУ, так що гранично доступна адреса дорівнює A000h - 200h (розмір сектора) == 9FE.

Не забувайте, що чіпати регістр DL у жодному разі не можна, оскільки в ньому передається номер завантажувального приводу. Деякі завантажувачі містять помилку, завжди завантажуючись з першого жорсткого диска, і це в той час, як BIOS вже більше 10 років дозволяє змінювати порядок завантаження, і тому завантажувальним може бути будь-який привід.

Правду кажучи, FASM - це єдиний відомий мені асемблер, який "перетравлює" команду далекого виклику JMP 0000:7C00h безпосередньо. Всі інші асемблери змушують перекручуватися приблизно так: PUSH offset_of_target/PUSH segment_of_target/RETF . Тут ми заштовхуємо у стек сегмент та зміщення цільової адреси та виконуємо далекий RETF, що переносить нас на потрібне місце. Ще можна скористатися кодом, що самодифікується, зібравши команду JMP FAR "вручну", або просто розмістити цільову адресу в одному сегменті з вихідною адресою (наприклад, 0000:7C00h ? 0000:7E00h). Однак ці підходи моторошні та стомлюючі.

Загалом, скелет нашого завантажувача виглядатиме так, як показано у лістингу 5.8.

Лістинг 5.8. Скелет найпростішого завантажувача написаний на FASM

use16
ORG 7C00h
CLD; Копіюємо зліва направо
; (у бік збільшення адрес)
MOV SI,7C00h; Звідки копіювати
MOV DI,7E00h; Куди копіювати
MOV CX,200h; Довжина сектора
REP MOVSB; Копіюємо
; // Вибираємо розділ, який ми хочемо завантажити,
; // зчитуємо його на згадку за адресою 0000:7C00h
; // (див. лістинги 5.7 та 5.6)
JMP 0000:7C00h; Передаємо управління на завантажувальний сектор

Записуємо завантажувач у головний завантажувальний запис

Під старенькою MS-DOS записати свій завантажувач у MBR було легко. Для цього достатньо смикнути переривання INT 13h, функція 03h (запис сектора). Але під Windows NT цей прийом не працює, і доводиться вдаватися до послуг функції CreateFile . Якщо замість імені файлу, що відкривається, вказати назву пристрою, наприклад, .PHYSICALDRIVE0 (перший фізичний диск), ми зможемо вільно читати і записувати його сектора викликами ReadFile і WriteFile відповідно. При цьому прапор dwCreationDisposition має бути встановлений на значення OPEN_EXISTING, а прапор dwShareMode - на значення FILE_SHARE_WRITE. Ще будуть потрібні права системного адміністратора, інакше нічого не вийде.

Закінчений приклад виклику CreateFile виглядає, як показано у лістингу 5.9.

Лістинг 5.9. Відкриття безпосереднього доступу до жорсткому дискупід Windows NT

XOR EAX, EAX
PUSH EAX; hTemplateFile
PUSH dword FILE_ATTRIBUTE_NORMAL; dwFlagsAndAtributes
PUSH dword OPEN_EXISTING; dwCreationDisposition
PUSH EAX; lpSecurityAttributes
PUSH dword FILE_SHARE_WRITE; dwShareMode
PUSH dword (GENERIC_WRITE OR GENERIC_READ) ; dwDesiredAccess
PUSH DEVICE_NAME; Ім'я пристрою
CALL CreateFile; Відкриваємо пристрій
INC EAX
TEST EAX, EAX
JZ error
DEC EAX
...
DEVICE_NAME db ".PHYSICALDRIVE0",0
BUF RB 512; Буфер

Відкривши фізичний диск і переконавшись у успішності цієї операції, ми повинні прочитати оригінальний MBR-сектор у буфер, перезаписати перші 1BBh байт, ні в якому разі не чіпаючи таблицю розділів і сигнатуру 55h AAh (адже ми не хочемо, щоб диск перестав завантажуватися, вірно? ). Тепер залишається записати оновлений код MBR на місце та закрити дескриптор пристрою. Після перезавантаження всі зміни набудуть чинності.

Примітка

Щоправда, цілком можливо, що внесені вами зміни і не подумають набути чинності. Завантажувач жорстоко мститься за найменші помилки проектування. Тому, щоб не втратити вміст своїх розділів, спочатку краще попрактикуватися на VMWare або будь-якому іншому емуляторі PC.

Під Windows 9 xЗрозуміло, трюк з CreateFile не працює. Але там можна скористатися симуляцією переривань із DMPI або звернутися до драйвера ASPI. Обидва способи були докладно описані у моїй книзі "Техніка захисту компакт-дисків від копіювання". Однак, хоча в ній йдеться про CD, а не HDD, жорсткі диски програмуються аналогічно.

Перш ніж писати власний завантажувач, рекомендується вивчити наявні нестандартні завантажувачі. Всі наведені нижче завантажувачі розповсюджуються за ліцензією GPL або BSD, тобто без обмежень.

Ge2000.asm – ретельно прокоментований Stealth-вірус, що підміняє системний завантажувач своїм власним. Хоча це і вірус, але він не небезпечний і може бути використаний у навчальних цілях.

Mbr.asm - гранично простий, але повнофункціональний завантажувач із підтримкою розділів понад 8 Гбайт.

Bootasm - чудовий менеджер мультизавантаження з докладними коментарями, переходить у захищений режим, може вантажитися з дискети, компакт-диска, zip-дискети, вінчестера тощо. Підтримує розділи понад 8 Гбайт, показує індикатор завантаження та робить багато інших корисних речей, які не завадить вивчити.

Налагодження коду завантажувача

Налагоджувати код завантажувача неймовірно важко. Завантажувач отримує керування задовго до запуску операційної системи, коли жодні налагоджувачі ще не працюють. Декілька років тому це представляло величезну проблему, і при розробці "наворочених" завантажувачів доводилося або вбудовувати в них інтегрований міні-наладчик, або вишукувати помилки вручну, вивчаючи лістинги з олівцем у руці. З появою емуляторів все змінилося. Достатньо запустити такий емулятор, як BOCHS (рис. 5.5), і ви зможете налагоджувати завантажувач як будь-яку іншу програму!


Рис. 5.5. Зовнішній виглядемулятора BOCHS в процесі налагодження завантажувального сектора

Програмування завантажувачів - одна з небагатьох областей, в яких застосування асемблера дійсно обґрунтовано. Мови високого рівня для цього надто абстраговані від обладнання. Крім того, вони недостатньо гнучкі. Ось чому хакери так люблять возитися із завантажувачами, додаючи сюди безліч нових можливостей, включаючи автоматичне завантаженняз CD-ROM або дисків SCSI, протидія вірусам, парольний захистіз шифруванням даних і т.д. Тут справді є де розвернутися, і є на чому показати всі свої можливості. Як додаткове читання я рекомендував би вам кілька дуже цікавих джерел. Ось вони:

? MBR та OS Boot Records- Маса цікавого матеріалупо MBR (на англійській мові): http://thestarman.narod.ru/asm/mbr/MBR_in_detail.htm;

? BOCHS- відмінний емулятор з вбудованим налагоджувачем, що значно полегшує процес "пуско-налагодження" завантажувальних секторів. Безкоштовний, розповсюджується з вихідними текстами: http://bochs.sourceforge.net;

? http://www.koders.com(рис. 5.6) - відмінний пошуковик, націлений на пошук вихідних кодів, ключовому слову MBR видає величезну кількість завантажувачів на будь-який смак;


Рис. 5.6. Пошук вихідних текстів завантажувачів MBR на сайті Koders

? Ralf Brown Interrupt List(Рис. 5.7) - знаменитий "Список переривань" (Interrupt List) Ральфа Брауна (Ralf Brown), що описує всі переривання, включаючи недокументовані (англійською мовою): http://www.pobox.com/~ralf;


Рис. 5.7. Перегляд легендарного "Списку переривань" Ральфа Брауна

OpenBIOS - проект "Відкритого BIOS", що розповсюджується у вихідних текстах. Допомагає зрозуміти деякі неочевидні моменти обробки системного завантажувача: http://www.openbios.info/docs/index.html.

15.5. Відновлення головною завантажувальною записи ( MBR)

Сектор диска, в якому зберігається його таблиця розбиття, або головний завантажувальний запис ( MBR - Master Boot Record ) , є найважливішою зоною накопичувача. У цьому секторі ємністю 512 байт містяться описи логічних розділів (не більше чотирьох) , а також інструкція із запуску операційної системи. Якщо MBR виявиться пошкодженою, система не зможе навіть пізнати жорсткий диск, не кажучи вже про те, щоб завантажитися з нього. На жаль, втрачений головний завантажувальний запис відновити надзвичайно важко (з можливістю доступу до всіх даних, що зберігаються на жорсткому диску) . Однак існує кілька програм, які дозволяють у деяких випадках реконструювати цю важливу область диска. До них відносяться пакет Norton Utilities для Windows, програми MIRROR ( DOS 5.0) та UNFORMAT ( DOS 6.2 x ) для дисків із файловими системами FAT 16, а також програма FDISK - Останній засіб відновлення пошкодженого головного завантажувального запису.

15.5.1. ПрограмиMIRRORіUNFORMAT

Застрахуватися від неприємних наслідків завжди простіше, ніж потім їх долати – ця велика істинасправедлива і для відновлення даних. Якщо в системі встановлена ​​операційна система DOS версії 5.0 або пізнішої, то для збереження резервної копії та подальшого відновлення головного завантажувального запису можете скористатися двома програмами: MIRROR. EXE та UNFORMAT. COM . Поки жорсткий диск ще не вийшов з ладу, введіть наступну команду: MIRROR/PARTN

Програма MIRROR входила лише до складу DOS 5.0, а наступних версіях ОС від неї з незрозумілих причин відмовилися. Однак її можна запозичити зі старих дистрибутивів або пошукати в Інтернет-архівах.

Після запуску програма MIRROR запросить ім'я дисководу. Вставте завантажувальну дискету в дисковод А: або В: і дайте вказівку програмі створити копію таблиці розбиття жорсткого диска на цій дискеті. Роблячи таку операцію регулярно (Скажімо, раз на півроку) , Ви завжди матимете в запасі "рятувальну" дискету на випадок виникнення неприємностей з жорстким диском. Якщо його MBR виявиться пошкодженою, то завантажте комп'ютер ззгаданої дискети (На неї, крім таблиці розбиття, повинен бути скопійований ще й файл UNFORMAT . COM ) та введіть команду

UNFORMAT/PARTN Програма UNFORMAT попросить вказати місцезнаходження та ім'я файлу з резервною копією MBR (зазвичай він називається RARTNSAV . FIL ) . Введіть буквене позначеннянакопичувача (А: або В:), де знаходиться дискета з цим файлом, і робота програми продовжиться. Якщо у вас немає сумнівів у достовірності збережених даних про розбиття диска, підтвердіть своє бажання їх відновити, а потім перезавантажте комп'ютер із жорсткого диска. Якщо на ньому було пошкоджено лише головний завантажувальний запис, комп'ютер повинен працювати нормально.

Немає необхідності регулярно копіювати головний завантажувальний запис. Вона змінюється тільки при переформатуванні диска, тому достатньо створити резервну копію один раз безпосередньо після цієї процедури.

15.5.1.1. Використання програми FDISKз ключем /MBR

Ви, мабуть, читали та чули, що програму FDISK не можна використовувати для відновлення даних, оскільки вона вносить такі зміни до структури диска, після яких інформація, що зберігалася на ньому, стає недоступною. Це правда – але не вся. У цій програмі передбачена недокументована функція, що дозволяє відновити завантажувальний код на початку MBR , не торкаючись саму таблицю розбиття. Якщо головний завантажувальний запис не вдається реконструювати ніякими іншими засобами, можна скористатися командою FDISK/MBR та спробувати відновити хоча б її частину. Запущена із ключем / MBR, програма FDIS До працює автоматично. На екран не буде виведено навіть її меню – програма просто відновить код на початку MBR і поверне управління операційною системою DOS . Враховуючи потенційну небезпеку програми FDISK , використовувати цю недокументовану можливість можна лише як останній засіб відновлення головного завантажувального запису. В результаті виконання команди FDISK/MBR ваші дані, за ідеєю, не повинні загубитися, але всяке буває! Тому, перш ніж йти на крайні заходи, створіть резервну копію максимально можливої ​​кількості даних із жорсткого диска.

Використовуйте лише ту версію програми FDISK яка відповідає вашій операційній системі. Наприклад, якщо в комп'ютері встановлено ОС Windows 98, то запустіть на виконання файл FDISK. EXE , записаний на стартовому диску Windows 98

15.5.2. ПрограмаRESCUEPROFESSIONAL

Що ж робити в тих випадках, коли вам необхідно дістатися доданих, що зберігаються на жорсткому диску, але відомості про його розбиття втрачені і не піддаються відновленню, або на екран виводиться повідомлення на кшталтTrack 0 bad, disk unusable (нульова доріжка пошкоджена, диск використовувати неможливо) ! Rescue Professional компанії AllMicro є автономним (самозавантажується) засобом відновлення даних, причому його програмна частина розроблена таким чином, що взаємодіє безпосередньо з апаратними засобами комп'ютера і дозволяє відновлювати як окремі файли, так і цілі директорії. На відміну від описаних раніше процедур відновлення даних, при виконанні яких робляться спроби тією чи іншою мірою відновити працездатність накопичувачів, Rescue Professional не коригує пошкоджені таблиці розбиття або завантажувальні записи DOS . Єдина мета цієї програми – забезпечити управління накопичувачем (якщо, звичайно, він справний) та відновити максимально можливу кількість файлів із тих, що їй вдасться виявити на диску.

15.5.3. Відновлення даних після випадкового переформатування диска

У процесі високорівневого форматування, яке виконується за допомогою програми FORMAT , перезаписується завантажувальний сектор та кореневий каталог диска. Крім того, при форматуванні перевіряється надійність запису та зчитування даних у всіх кластерах, і відомості про пошкоджені осередки розміщення даних заносяться в FAT . За ідеєю, форматування є руйнівним процесом, тобто. записані на диску дані після його виконання стають недоступними. Проте, самі вони нікуди не зникають. Це означає, що навіть після випадкового форматування розділу диска, дані, що зберігалися на ньому, ще можна врятувати. В операційній системі Windows ні власних коштівдля відновлення даних на випадково переформатованому диску, але існують інші програми, що дають змогу зберегти копії даних із системних областей дисків та за необхідності використовувати їх для відновлення зіпсованих розділів. Якщо ви працюєте у середовищі DOS 6.2 x , то можете скористатися з цією метою програмою UNFORMAT (запозиченої з пакета PC Tools фірми Central Point ) . Наприклад, для відновлення попереднього стану диска С: введіть командуunformat з: Врахуйте одну важливу обставину: програму UNFORMAT потрібно запускати відразу після форматування,поки таблиця розміщення файлів ще пуста. Це є необхідною умовою успішного виконанняпрограми UNFORMAT . Поява нових файлів на диску може порушити її роботу і не дозволити їй відновити колишні дані.

15.5.3.1. ПрограмаEasyRecovery

Якщо жорсткий диск виходить з ладу, його зазвичай відправляють у спеціалізовану майстерню. Там накопичувач приводять у такий стан, щоб з нього можна було б рахувати дані. Якщо апаратна частина накопичувача в порядку, то можна скористатися програмою EasyRecovery фірми Ontrack для порятунку даних, дістатися яких іншими способами не вдається. Ця програма призначена для відновлення інформації самими користувачами та дозволяє реконструювати файлові структури дисків (У тому числі і в розділах, розміри яких перевищують 8,4 Гбайт) . EasyRecovery не намагається виправити пошкодження на диску і нічого на нього не записує. Таблиця розміщення файлів відновлюється в пам'яті комп'ютера, після чого дані пересилаються до іншого накопичувача. (наприклад, другий жорсткий диск) . У цьому розділі розглядаються основні можливості програми EasyRecovery і наводяться деякі практичні рекомендаціїщодо її застосування.

У більшості випадків процес відновлення даних відбувається без вашої участі. Вам потрібно вибрати файли, а відновляться вони чи ні - залежить не від вас. Тим не менш, існує кілька правил, при дотриманні яких можна досягти найкращих результатів.

· Запорукою успішного відновлення даних є регулярне створення резервних копійваших робочих даних. Навіть якщо вам доведеться перевстановити операційну системуі всі програми, то за наявності такої копії ви зможете швидко відновити ситуацію та продовжити роботу. Якщо у вас такої копії не виявиться, і ви не можете відновити дані на диску, то вся виконана вами робота піде нанівець.

· Перш ніж кидатися відновлювати дані, перевірте, чи правильно встановлені в BIOS параметри накопичувача Зміна параметрів геометричної моделі жорсткого диска зазвичай призводить до того, що він (або його частина) стає недоступним. У деяких випадках "відновлення даних" може звестися лише до настроювання параметрів BIOS.

· Не користуйтеся кількома програмами відновлення даних. Наприклад, не варто запускати CHKDSK перед використанням програми EasyRecovery . Більш потужні засоби відновлення даних можуть неправильно інтерпретувати результати роботи таких простих програм, як CHKDSK ..

· Заздалегідь підготуйте резервний накопичувач, на який записуватимуться відновлені дані (інший накопичувач на жорсткому диску, мережевий диск, накопичувач типу Jaz або Zip ) . На ньому має бути достатньо вільного місцядля розміщення відновлених файлів (при використанні дисководів типу Jaz або Zip запасіться достатньою кількістю змінних носіїв) .

· Виділіть достатній обсяг оперативної пам'ятідля тимчасового зберігання відновлених даних (там вони будуть перебувати до моменту їх перенесення в резервний накопичувач) . Якщо в якості оперативної пам'яті використовується частина простору жорсткого диска (файл підкачки) , то переконайтеся в тому, що на ньому є достатньо вільного місця - і ніколи не розміщуйте файл підкачки на відновлюваному (Тобто не цілком надійному) диск.

· Програми відновлення даних можуть працювати досить довго. Будьте готові до того, що частиною свого робочого часу вам доведеться пожертвувати (навряд чи вам вдасться попрацювати на комп'ютері, поки йтиме відновлення файлів) .

· Перед тим як скористатися програмою відновлення даних, переконайтеся, що вона сумісна з файловою системоюцікавого для вас розділу жорсткого диска ( FAT 16, FAT 32 або NTFS ) та здатна обробляти томи відповідного розміру. Якщо програма не підходить по одному з параметрів, спроба її використання може остаточно поховати всі надії на відновлення втрачених даних - в результаті роботи такої програми вони будуть знищені остаточно. Переконайтеся, що програма відновлення даних оновлена ​​до останньої версії (або принаймні в ній виправлені помилки) .

· Щоб уникнути неприємних наслідків, підключіть комп'ютер - принаймні на час відновлення даних - до джерела безперебійногоного харчування.

© 2022 androidas.ru - Все про Android