Що таке GRUB: Повний посібник з менеджера завантаження GNU

Останнє оновлення: 14 жовтня 2025
Автор: TecnoDigital
  • GRUB — це менеджер завантаження GNU, який вибирає та завантажує операційну систему, підтримуючи BIOS/UEFI та Multiboot.
  • GRUB 2 додає модулі, покращену підтримку файлових систем, пошук UUID та графічне меню/термінал.
  • Конфігурація керується через /etc/default/grub та 40_custom, перегенеруючи її за допомогою update-grub або grub2-mkconfig.
  • Безпека: Захистіть GRUB паролем, використовуйте шифрування LUKS та встановіть надійні політики паролів.

Загальна ілюстрація про GRUB

Якщо ви встановили GNU/Linux на свій комп'ютер або використовуєте кілька операційних систем, ви, ймовірно, чули про GRUB. Це невелика, але потужна програма, яку ви бачите безпосередньо перед завантаженням системи, що дозволяє вам вибрати, що завантажувати. Хоча вона часто залишається непоміченою, її роль є вирішальною для запуску операційної системи та плавної передачі керування ядру.

У світі завантаження ПК GRUB став фактичним стандартом завдяки своїй потужності та гнучкості. Зародившись у рамках проекту GNU, зараз він є найпоширенішим менеджером завантаження в GNU/Linux , сумісним з широким спектром архітектур та файлових систем, зручним для новачків і водночас швейцарським ножем для тих, хто ретельно налаштовує кожну деталь процесу завантаження.

Що таке GNU GRUB і для чого він потрібен?

GNU GRUB (GNU GRand Unified Bootloader) — це менеджер багатозавантаження: програмне забезпечення, яке запускає прошивка (BIOS або UEFI) під час увімкнення комп’ютера для вибору та завантаження операційної системи. Воно дозволяє користувачам вибирати пункти меню, передавати параметри ядру, завантажуватися з мережі та навіть взаємодіяти з консоллю для усунення певних проблем.

Він в основному використовується в дистрибутивах GNU/Linux, хоча також використовувався іншими системами, такими як Solaris на x86. У сучасних системах UEFI прошивка безпосередньо завантажує виконуваний файл GRUB, розташований у системному розділі EFI (ESP) , за умови, що він зареєстрований у NVRAM; у BIOS/MBR GRUB займає початкові сектори диска та продовжує роботу звідти.

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

Екран параметрів завантаження GRUB

Технічний паспорт та дані про проект

GRUB є частиною екосистеми GNU та розповсюджується як вільне програмне забезпечення за ліцензією GNU GPL v3 або пізнішої . Його розробка є програмним забезпеченням з відкритим вихідним кодом, офіційним репозиторієм, системою відстеження помилок, веб-сайтом та дуже активною спільнотою.

Він написаний переважно на C та асемблері та працює на кількох платформах: IA-32, x86-64 та PowerPC, серед інших. Поточна гілка — GRUB 2 (переробка історичної версії «GRUB Legacy»). Остання випущена стабільна версія — 2.12 (20 грудня 2023 р.). Якщо ви хочете перевірити свою локальну версію, ви можете виконати таку команду: grub-install --version і ви побачите відповідний ланцюжок.

Трохи історії та еволюції

GRUB розпочався як ініціатива Еріха Стефана Болейна в контексті GNU Hurd та мікроядра Mach. Щоб вирішити розбіжності в методах завантаження, була створена Специфікація багатозавантаження (Multiboot Specification), яка сприяла тому, щоб завантажувачі та ядра «розмовляли однією мовою». У 1999 році Гордон Мацігкайт та Йошінорі Окудзі очолили її прийняття як офіційного пакета проекту GNU.

Приблизно у 2002 році група японських дослідників започаткувала PUPA (Попередню універсальну архітектуру програмування) з метою переписування GRUB, щоб зробити його більш надійним та модульним. Ці зусилля призвели до появи GRUB 2 , тоді як попередня версія стала відомою як "GRUB Legacy" (версія 0.97 востаннє оновлювалася у 2005 році). З 2007 року кілька дистрибутивів перейшли на GRUB 2, і до кінця 2009 року переважна більшість включала його за замовчуванням.

Схема процесу завантаження GRUB

Як завантажити комп'ютер за допомогою GRUB (BIOS та UEFI)

Коли ви вмикаєте ПК, прошивка виконує перевірки (оперативної пам'яті, тактової частоти, пристроїв, порядку завантаження) та шукає завантажувач. У системах з BIOS/MBR керування передається до Головний завантажувальний запис (MBR), початкові 512 байтів дискаGRUB був розділений на етапи: Етап 1 (мінімальний код у MBR), Етап 1.5 (у пізніших секторах, мости для розуміння файлових систем) та Етап 2 (меню та розширені функції). У GRUB 2 цього "1.5" більше не існує; тепер є певні образи, такі як boot.img, core.img та модулі (*.mod), що комбінуються відповідно до інсталяції.

  Відмінності між Windows Pro та Enterprise та іншими випусками

У UEFI процес є більш прямим: прошивка виконує бінарний файл GRUB EFI з розділу EFI , за умови, що він правильно встановлений та зареєстрований. В обох випадках GRUB відображає меню або консоль, завантажує вибране ядро, а потім передає йому виконання.

Специфікація та сумісність з мультизавантаженням

GRUB реалізує Multiboot, що дозволяє завантажувати сумісні ядра без спеціальних «трюків». Крім того, для систем, які його не підтримують (наприклад, Windows або DOS ), він пропонує ланцюгове завантаження, орієнтуючись на перший сектор розділу, де знаходяться його завантажувачі.

Він має широку сумісність з файловими системами: Btrfs, ext2/3/4, FAT12/16/32, exFAT, HFS/HFS+, ISO9660, Nilfs2, NTFS, ReiserFS, ZFS, ROMFS, JFS, XFS та інші. Він також може читати дані з томів LVM та RAID-масивів, що є значною перевагою, коли структура сховища складна.

Рекомендовані особливості та функції

  • Інтерфейс меню Налаштовуваний та дуже гнучкий інтерактивний термінал з автозаповненням за допомогою клавіші Tab та комбінаціями клавіш у стилі Bash.
  • Підтримка LBA (адресація логічних блоків) подолати класичні обмеження BIOS та зчитувати дані понад 1024 циліндри.
  • Місткість для мережеве завантаження (PXE/TFTP) та віддалені термінали, корисні в централізованих сценаріях управління.
  • Автоматичне розпакування та розпізнавання кількох форматів виконуваних файлів.
  • Постійне зберігання змінних за допомогою зберегти_середовище/завантажити_середовище y grub-editenv (коли платформа це дозволяє).
  • Виявлення всієї оперативної пам'яті, незалежність від геометрії диска та механізми пошуку за мітками та UUID.
  • Графічна підтримка меню та фонів, а також модульний дизайн, який core.img невеликий та завантажує модулі за потреби.

Ключова термінологія: пристрої, розділи та шляхи

GRUB називає диски та розділи по-своєму. Перший диск зазвичай (hd0), перший розділ (hd0,1) У GRUB 2 (пам'ятайте: у GRUB 2 нумерація починається з 1; у Legacy вона починалася з 0). Щоб посилатися на весь диск, розділ опускається: (hd0).

Для позначення файлів пристрій поєднується зі шляхом: (hd0,1)/ruta/al/archivo. Він також підтримує списки блокувань (списки блоків), коли необхідно вказати точне розташування файлу на диску, який не відображається як такий у файловій системі, наприклад (hd0,1)+1 для першого сектора розділу, корисного з chainloader +1.

«Коренева файлова система» в GRUB не те саме, що «/» в Linux. Це просто кореневий розділ, з якого GRUB зчитуватиме свої файли ; як тільки ядро ​​Linux бере на себе управління, воно визначає свій власний фактичний кореневий каталог, і все інше в GRUB стає неважливим.

Інтерфейси GRUB

GRUB пропонує три основні режими перегляду. Найбільш знайомим є меню з попередньо налаштованими записами; ви можете переміщатися за допомогою клавіш зі стрілками, завантажуватися за допомогою Enter, редагувати запис за допомогою "e" або відкривати консоль за допомогою "c".

Редактор вхідних даних дозволяє змінювати рядки на льоту (додавати за допомогою "o/O", редагувати за допомогою "e", видаляти за допомогою "d") і, якщо все виглядає правильно, завантажуватися за допомогою "b". Він ідеально підходить для тестування параметрів ядра без торкання файлів.

Консольний режим — це найпотужніший: він підтримує контекстне автодоповнення, комбінації клавіш для редагування та всі внутрішні команди GRUB для пошуку дисків, завантаження ядра/initrd або ланцюгового завантаження. Якщо файл конфігурації відсутній або пошкоджений, GRUB запустить вас тут, щоб ви могли вручну вирішити проблему.

Поширені повідомлення про помилки

Помилки можуть з'являтися на початковому етапі (більш обмежена кількість) або під час завантаження меню та модулів (більш детальний опис). Нижче наведено збірку типових кодів, які може відображати GRUB, перефразованих для ясності :

  • 1: Недійсний або неабсолютний шлях; 2: Недійсний тип файлу (не звичайний файл); 3–4: Пошкоджені дані/заголовок під час розпакування; 5: пошкоджена таблиця розділів або недійсний.
  • 6: Несумісність Stage1/Stage2; 7: Завантаження менше 1 МБ не підтримується; 8: Спроба завантаження без завантаження ядра; 9: Невідома помилка завантаження.
  • 10: Функції багатозавантаження не підтримуються; 11: Пристрій не розпізнано; 12: Недійсний пристрій; 13: Непідтримуваний формат виконуваного файлу.
  • 14: Файлова система запобігає зчитуванню всього файлу; 15: файл не знайдено; 16: Невідповідна структура файлової системи.
  • 17: Не вдається змонтувати вибраний розділ; 18: Циліндр поза діапазоном, що підтримується BIOS (типово для старіших дисків); 19: Initrd перед ядром.
  • 20: Модулі перед мультизавантажувальним ядром; 21: Вибраний диск не існує; 22: Неіснуючий розділ; 23: Помилка інтерпретації числа.
  • 24: Доступ до блоку поза розділом; 25: Помилка читання диска; 26: Забагато символічних посилань; 27: Невідома команда.
  • 28: Елемент не поміщається в пам'яті; 29: Помилка запису на диск; 30: Недійсний аргумент; 31: Файл не вирівняний по секторах (ReiserFS, використовуйте хвіст).
  • 32: Потрібна автентифікація; 33: Послідовний пристрій не налаштовано; 34: Немає вільних секторів для етапу 1.5 після MBR (конфлікт з EZ-BIOS або занадто ранній запуск розділу).
  150 покращень Firefox на Linux та ключові нові функції браузера

Основні команди GRUB

У консолі можна виконувати дуже корисні інтерактивні команди. Наприклад, boot запускає останній завантажений (ядро або ланцюговий завантажувач), та chainloader <archivo> завантажує сектор або файл з ланцюжка; типове скорочення для Windows — chainloader +1.

displaymem відображає використання пам'яті відповідно до BIOS, що зручно, якщо ви не впевнені щодо виявленої оперативної пам'яті. За допомогою initrd <archivo> ви вказуєте початковий образ RAM-диска, необхідний ядру.

Для встановлення в MBR з консолі GRUB Legacy ви використовували install з маршрутами до stage1, stage2 і, за бажанням, до файлу конфігурації. Сьогодні в GRUB 2, з системи, звичайною справою є використання grub-install та перегенеруйте меню за допомогою update-grub/grub2-mkconfig.

Команда kernel вказує бінарний файл ядра та його параметри, наприклад: kernel /vmlinuz root=/dev/sda5Зазвичай цьому передує root (hdX,Y) o rootnoverify щоб встановити розділ, з якого GRUB буде читати.

Файли конфігурації та директиви

У старій версії GRUB меню знаходилося в /boot/grub/menu.lst o grub.conf, з такими директивами, як color, default, fallback, hiddenmenu, password, timeout, splashimage і блоки title із замовленнями для кожної системи.

Класичним прикладом (перефразовано) буде розділ Linux з root (hd0,2), kernel з кореневий параметр=/…І boot; та ще один для Windows з rootnoverify (hd0,1) y chainloader +1.

У GRUB 2 автоматично згенерований файл має вигляд /boot/grub/grub.cfgНе рекомендується редагувати його вручну; натомість його коригують /etc/default/grub (такі значення, як GRUB_TIMEOUT, GRUB_DEFAULTтощо) та додаються власні записи /etc/grub.d/40_customПотім його виконують update-grub o grub2-mkconfig щоб відновити меню.

Ключові відмінності між GRUB Legacy та GRUB 2

  • Файл конфігурації взяв назву menu.lst/grub.conf a grub.cfg, з оновленим синтаксисом і командами, а також автоматичною генерацією за допомогою grub-mkconfig.
  • Нумерація розділів починається в 1 році у GRUB 2 (у Legacy він починався з 0).
  • Збереження змінних з save_env/load_env у деяких конфігураціях.
  • Краще виявлення маршруту та пошук за UUID/тегамипідтримується більше файлових систем.
  • Пряме читання з LVM та RAID.
  • Графіка терміналу та меню, а також реорганізовані зображення: етап 1.5 зник; boot.img, core.img та динамічні модулі (*.mod).

Безпека та посилення захисту за допомогою GRUB

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

Встановити один надійний пароль щоб обмежити зміну записів або доступ до консолі. У GRUB 2 використовуйте імена користувачів та паролі з grub-mkpasswd-pbkdf2 та налаштувати відповідні правила у скриптах /etc/grub.d/.

Він також включає шифрування диска за допомогою LUKS , тож навіть якщо хтось вкраде комп’ютер, він не зможе прочитати дані. Це також гарантує, що політика паролів системи є суворою для зменшення атак методом повного перебору.

Керуйте історією журналів з розумом : ті, що дають підказки про зловмисника, слід мінімізувати або централізувати за допомогою засобів контролю доступу; ті, що допомагають відстежувати спроби зловмисників, слід агрегувати та аналізувати в безпечному місці.

Щоб виявити інші встановлені системи та автоматично створити записи, встановіть os-proberЦе заощадить ваш час і запобіжить помилкам під час відтворення меню.

  SAP: особливості та переваги

Встановлення та обслуговування

Якщо ви не встановили GRUB під час встановлення вашого дистрибутива, ви можете зробити це пізніше. У GRUB 2, з системної панелі, запустіть sudo grub-install /dev/sdX (замініть диск своїм), а потім sudo update-grub o sudo grub2-mkconfig -o /boot/grub/grub.cfgВи побачите меню під час наступного завантаження.

З консолі GRUB Legacy класична процедура полягає в тому, щоб вказати root-права та запустити інсталяцію: root (hd1,0) слідує setup (hd1,0) для першого розділу другого диска, або setup (hd1) якщо ви вкажете на MBR цього другого диска.

Редагувати безпосередньо /boot/grub/grub.cfg Це не найкраща ідея в GRUB 2, навіть якщо це технічно можливо. Рекомендований маршрут змінити /etc/default/grub, використовувати /etc/grub.d/40_custom для власного контенту та регенерації.

Практичні питання та корисні скорочення

Як дізнатися, який розділ завантаження знаходиться на /dev/sda? У системах BIOS/MBR: sudo fdisk -l /dev/sda (див. зірочку для «Завантаження»). У GPT/UEFI: lsblk -o NAME,FSTYPE,PARTTYPE,PARTFLAGS,MOUNTPOINT і знайдіть розділ EFI (FAT32, введіть EF00/flags esp). Також sudo efibootmgr -v відображає записані записи завантаження.

Як отримати UUID розділу? з blkid o lsblk -f, Наприклад: sudo blkid /dev/sda2 повертає своє UUID та інші метадані.

Як зробити так, щоб GRUB 2 чекав 10 секунд перед введенням запису за замовчуванням? Налаштування /etc/default/grub з GRUB_TIMEOUT=10 (і, якщо застосовується, GRUB_TIMEOUT_STYLE=menu) та виконує sudo update-grub o grub2-mkconfig.

Команди GRUB Legacy для встановлення на перший розділ другого диска? Відкрийте консоль та виконайте команду: root (hd1,0) а потім setup (hd1,0)Якби вам потрібен був MBR, це було б setup (hd1).

Кроки для зміни конфігурації GRUB 2? 1) Редагувати /etc/default/grub (наприклад, GRUB_DEFAULT, GRUB_TIMEOUT), 2) додати записи в /etc/grub.d/40_custom якщо вони вам потрібні, 3) регенеруйте за допомогою update-grub/grub2-mkconfig, 4) перезавантажте та протестуйте.

Де розмістити користувацькі меню в GRUB 2? En /etc/grub.d/40_custom (або власні файли в /etc/grub.d/ з належними дозволами). Ніколи не редагуйте вручну /boot/grub/grub.cfg окрім випадків надзвичайної ситуації.

Де зберігалися записи в GRUB Legacy? En /boot/grub/menu.lst o grub.conf, згідно з розподілом.

Як отримати доступ до консолі GRUB з меню? Натисніть клавішу «c» у GRUB 2 або Legacy. Щоб редагувати певний запис, натисніть «e». Обидва комбінації клавіш дуже корисні, коли потрібно діагностувати проблеми на льоту.

Приклади поширених варіантів

Вибір завантаження за замовчуванням: GRUB_DEFAULT=0 починається перший інінг; з GRUB_DEFAULT=saved запам'ятовує останню використану конфігурацію. Після зміни, повторно створити конфігурацію.

Час очікування: GRUB_TIMEOUT=4 регулює затримку меню; за допомогою 0 запускається без паузи; у деяких випадках ви можете приховати меню за допомогою GRUB_TIMEOUT_STYLE=hidden для чистішого початку.

Оновлення меню: на Debian/Ubuntu та похідних системах, sudo update-grubв інших, sudo grub2-mkconfig -o /boot/grub/grub.cfg. Переконайтеся, що у вас є os-prober встановлено, якщо ви хочете автоматично виявляти інші системи.

Хоча GRUB також з'являється в контекстах поза межами GNU/Linux, пам'ятайте, що це не служба підтримки. Якщо ваша проблема стосується саме Windows, найпрактичнішим рішенням буде звернутися до форумів, присвячених цій системі, для отримання цілеспрямованої допомоги.

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

UEFI Bootkit
Пов'язана стаття:
UEFI Bootkit: Bootkitty на Linux та спадщина BlackLotus