102.2 Урок 1
Сертифікат: |
LPIC-1 |
---|---|
Версія: |
5.0 |
Розділ: |
102 Установка Linux та керування пакунками |
Тема: |
102.2 Встановлення менеджера завантаження |
Урок: |
1 з 1 |
Вступ
Коли комп’ютер увімкнено, першим програмним забезпеченням, яке запускається, є завантажувач. Це фрагмент коду, єдиною метою якого є завантаження ядра операційної системи та передача йому управління. Ядро завантажить необхідні драйвери, ініціалізує обладнання, а потім завантажить решту операційної системи.
GRUB — це завантажувач, який використовується в більшості дистрибутивів Linux. Він може завантажувати ядро Linux або інших операційних систем, таких як Windows, і може обробляти декілька образів ядра та параметрів як окремі записи меню. Вибір ядра під час завантаження здійснюється за допомогою клавіатури, а через командний рядок можна відредагувати опції завантаження і параметри.
Більшість дистрибутивів Linux встановлюють і налаштовують GRUB (насправді, GRUB 2) автоматично, тому звичайному користувачеві не потрібно думати про це. Однак системному адміністратору важливо знати, як керувати процесом завантаження, щоб ви могли відновити систему після збою завантаження, наприклад, після невдалого оновлення ядра.
У цьому уроці ви дізнаєтеся про те, як встановити, налаштувати та взаємодіяти з GRUB.
Порівняння GRUB Legacy та GRUB 2
Початкова версія GRUB (Grand Unified Bootloader), тепер відома як GRUB Legacy, була розроблена в 1995 році як частина проекту GNU Hurd, а пізніше була прийнята як стандартний завантажувач багатьох дистрибутивів Linux, замінюючи попередні альтернативи, такі як LILO.
GRUB 2 — це повністю переписаний GRUB, який прагне бути зрозумілішим, безпечнішим, надійнішим та потужнішим. Серед багатьох переваг над GRUB Legacy у нього більш гнучкий конфігураційний файл (з набагато більшою кількістю команд і умовних операторів, схожий на мову сценаріїв), більш модульний дизайн та краща локалізація/інтернаціоналізація.
Також є підтримка тем і графічних меню завантаження із заставками, можливість завантажувати ISO-файли LiveCD безпосередньо з жорсткого диска, краща підтримка архітектур, відмінних від x86, універсальна підтримка UUID (що полегшує ідентифікацію дисків і розділів) і багато іншого.
GRUB Legacy більше не розробляється (останній випуск 0.97 був у 2005 році), і сьогодні більшість основних дистрибутивів Linux інсталюють GRUB 2 як завантажувач за замовчуванням. Однак ви все ще можете знайти системи, що використовують GRUB Legacy, тому важливо знати, як його використовувати та чим він відрізняється від GRUB 2.
Де знаходиться завантажувач?
Історично жорсткі диски в IBM PC-сумісних системах розділялися за схемою розподілу MBR, створеною в 1982 році для IBM PC-DOS (MS-DOS) 2.0.
У цій схемі перший 512-байтовий сектор диска називається головним завантажувальним записом (Master Boot Record) і містить таблицю з описом розділів на диску (таблиця розділів), а також код завантаження, який називається завантажувачем.
Коли комп’ютер увімкнено, цей дуже мінімальний (через обмеження розміру) код завантажувача завантажується, виконується і передає керування вторинному завантажувачу на диску, зазвичай розташованому в просторі 32 КБ між MBR і першим розділом, який у свою чергу завантажить операційну систему(и).
На диску, розділеному на розділи MBR, код завантаження GRUB встановлюється на MBR. Він завантажує образ “ядра”, встановлений між MBR і першим розділом, та передає йому керування. З цього моменту GRUB може завантажувати решту необхідних ресурсів (визначення меню, файли конфігурації та додаткові модулі) з диска.
Однак MBR має обмеження на кількість розділів (спочатку максимум 4 основних розділи, пізніше максимум 3 основних розділи з 1 розширеним розділом, розділеним на певну кількість логічних розділів) і має максимальний розмір диска 2 ТБ. Щоб подолати ці обмеження, була створена нова схема розподілу під назвою таблиця розділів GUID (GPT, GUID Partition Table), частина стандарту інтерфейсу розширюваної «прошивки» (UEFI, Unified Extensible Firmware Interface).
Диски з поділеними GPT-розділами можна використовувати як на комп’ютерах з традиційним BIOS ПК, так на комп’ютерах з мікропрограмою UEFI. На комп’ютерах з BIOS друга частина GRUB зберігається в спеціальному завантажувальному розділі BIOS.
У системах з мікропрограмою UEFI GRUB завантажується мікропрограмою з файлів grubia32.efi
(для 32-розрядних систем) або grubx64.efi
(для 64-розрядних систем) з розділу, який називається системним розділом EFI (ESP, EFI System Partition).
Розділ /boot
У Linux файли, необхідні для процесу завантаження, зазвичай зберігаються на завантажувальному розділі, змонтованому в кореневій файловій системі в каталозі /boot
.
Завантажувальний розділ не потрібен у сучасних системах, оскільки завантажувачі, такі як GRUB, зазвичай можуть монтувати кореневу файлову систему і шукати потрібні файли в каталозі /boot
, але це хороша практика, оскільки вони відокремлюють файли, необхідні для процесу завантаження від решти файлової системи.
Зазвичай цей розділ є першим на диску. Це тому, що оригінальний BIOS IBM PC адресував диски за допомогою циліндрів, головок і секторів (CHS, Cylinder, Head, Sector), з максимумом 1024 циліндрів, 256 головок і 63 сектори, що призвело до максимального розміру диска 528 МБ (504 МБ під MS-DOS). Це означає, що все, що перевищує цю позначку, буде недоступне, якщо не буде використана інша схема адресації диску, наприклад, логічна адресація блоків (LBA, Logical Block Addressing).
Тому для максимальної сумісності розділ /boot
зазвичай розташований на початку диску і закінчується перед циліндром 1024 (528 МБ), гарантуючи, що комп’ютер завжди зможе завантажити ядро. Рекомендований розмір цього розділу на комп’ютері становить 300 МБ.
Іншими причинами для окремого розділу /boot
є шифрування та стиснення, оскільки деякі методи можуть ще не підтримуватися GRUB 2, або якщо вам потрібно мати кореневий розділ системи (/
), відформатований за допомогою файлової системи, яка не підтримується.
Вміст завантажувального розділу
Вміст розділу /boot
може відрізнятися в залежності від архітектури системи або завантажувача, що використовується, але в системі на базі x86 ви зазвичай знайдете файли, розглянуті нижче. Більшість із них мають в своїй основі суфікс -VERSION
, де -VERSION
є версією відповідного ядра Linux. Так, наприклад, файл конфігурації для версії ядра Linux 4.15.0-65-generic
матиме назву config-4.15.0-65-generic
.
- Конфігураційний файл
-
Цей файл, зазвичай називається
config-VERSION
(див. приклад вище), він зберігає параметри конфігурації для ядра Linux. Цей файл генерується автоматично, коли компілюється або встановлюється нове ядро, і користувач не повинен безпосередньо змінювати його. - Карта системи
-
Цей файл являє собою пошукову таблицю, що відповідає іменам символів (наприклад, змінних або функцій) та їх відповідній позиції в пам’яті. Це корисно під час налагодження такого роду системних збоїв, відомих як паніка ядра, оскільки дозволяє користувачеві знати, яка змінна або функція була викликана під час збою. Як і для файлу конфігурації, ім’я зазвичай
System.map-VERSION
(наприклад,System.map-4.15.0-65-generic
). - Ядро Linux
-
Це власне ядро операційної системи. Зазвичай має ім’я
vmlinux-VERSION
(наприклад,vmlinux-4.15.0-65-generic
). Ви також можете знайти ім’яvmlinuz
замістьvmlinux
,z
в кінці означає, що файл був стиснутий. - Початковий RAM-диск
-
Він зазвичай називається
initrd.img-VERSION
і містить мінімальну кореневу файлову систему, завантажену до RAM-диску, що містить утиліти та модулі ядра, необхідні для того, щоб ядро могло змонтувати справжню кореневу файлову систему. - Файли, пов’язані з завантажувачем
-
У системах із встановленим GRUB вони зазвичай розташовані у
/boot/grub
і включають файл конфігурації GRUB (/boot/grub/grub.cfg
для GRUB 2 або/boot/grub/menu.lst
у разі GRUB Legacy), модулі (у/boot/grub/i386-pc
), файли перекладу (у/boot/grub/locale
) та шрифти (у/boot/grub/fonts
).
GRUB 2
Встановлення GRUB 2
GRUB 2 можна встановити за допомогою утиліти grub-install
. Якщо система не завантажується, вам потрібно буде завантажитися за допомогою Live CD або диску відновлення. З’ясуйте, який розділ є завантажувальним для вашої системи, змонтуйте його, а потім запустіть утиліту.
Note
|
Наведені нижче команди припускають, що ви увійшли як root. Якщо ні, спочатку запустіть |
Першим диском у системі зазвичай є завантажувальний пристрій, і вам може знадобитися інформація про те, чи є на диску завантажувальний розділ. Цю інформацію можна отримати за допомогою утиліти fdisk
. Щоб вивести список всіх розділів на першому диску вашої машини, використайте:
# fdisk -l /dev/sda Disk /dev/sda: 111,8 GiB, 120034123776 bytes, 234441648 sectors Units: sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disklabel type: dos Disk identifier: 0x97f8fef5 Device Boot Start End Sectors Size Id Type /dev/sda1 * 2048 2000895 1998848 976M 83 Linux /dev/sda2 2002942 234440703 232437762 110,9G 5 Extended /dev/sda5 2002944 18008063 16005120 7,6G 82 Linux swap / Solaris /dev/sda6 18010112 234440703 216430592 103,2G 83 Linux
Завантажувальний розділ позначається символом «*» під стовпцем завантаження. У наведеному вище прикладі це /dev/sda1
.
Тепер створіть тимчасовий каталог у каталозі /mnt
і змонтуйте розділ під ним:
# mkdir /mnt/tmp # mount /dev/sda1 /mnt/tmp
Потім запустіть grub-install
, вказавши йому на завантажувальний пристрій (не розділ) і каталог, де змонтовано завантажувальний розділ. Якщо у вашій системі є виділений завантажувальний розділ, використовується команда:
# grub-install --boot-directory=/mnt/tmp /dev/sda
Якщо ви встановлюєте GRUB в систему, яка не має завантажувального розділу, а лише каталог /boot
у кореневій файловій системі, вкажіть на нього grub-install
. Отже, команда наступна:
# grub-install --boot-directory=/boot /dev/sda
Налаштування GRUB 2
Типовим файлом конфігурації для GRUB 2 є /boot/grub/grub.cfg
. Цей файл створюється автоматично, і не рекомендується редагувати його вручну. Щоб внести зміни до конфігурації GRUB, вам потрібно відредагувати файл /etc/default/grub
, а потім запустити утиліту update-grub
, щоб створити відповідний файл.
Note
|
|
У файлі /etc/default/grub
є деякі параметри, які керують поведінкою GRUB 2, такі як завантаження ядра за замовчуванням, час очікування, додаткові параметри командного рядку тощо. Найважливішими з них є:
GRUB_DEFAULT=
-
Пункт меню за замовчуванням для завантаження. Це може бути числове значення (наприклад,
0
,1
тощо), ім’я пункту меню (наприклад,debian
) абоsaved
, яке використовується разом ізGRUB_SAVEDEFAULT=
, що пояснюється нижче . Пам’ятайте, що пункти меню починаються з нуля, тому перший пункт меню —0
, другий —1
тощо. GRUB_SAVEDEFAULT=
-
Якщо для цієї опції встановлено значення
true
, а дляGRUB_DEFAULT=
встановлено значенняsaved
, тоді параметр завантаження за замовчуванням завжди буде останнім, вибраним у меню завантаження. GRUB_TIMEOUT=
-
Час очікування в секундах перед вибором пункту меню за замовчуванням. Якщо встановлено значення
0
, система завантажить запис за замовчуванням без показу меню. Якщо встановлено значення-1
, система чекатиме, поки користувач вибере опцію, незалежно від того, скільки часу це займе. GRUB_CMDLINE_LINUX=
-
Тут перераховані параметри командного рядка, які будуть додані до записів для ядра Linux.
GRUB_CMDLINE_LINUX_DEFAULT=
-
За замовчуванням для кожного ядра Linux генеруються два пункти меню, один із параметрами за замовчуванням і один для відновлення. За допомогою цієї опції ви можете додати додаткові параметри, які будуть додані лише до запису за замовчуванням.
GRUB_ENABLE_CRYPTODISK=
-
Якщо встановлено значення
y
, такі команди, якgrub-mkconfig
,update-grub
таgrub-install
, будуть шукати зашифровані диски та додавати команди, необхідні для доступу до них під час завантаження. Це вимикає автоматичне завантаження (GRUB_TIMEOUT=
з будь-яким значенням, відмінним від-1
), оскільки потрібна парольна фраза, щоб розшифрувати диски, перш ніж отримати доступ до них.
Управління пунктами меню
Коли запущено update-grub
, GRUB 2 перевірить ядра та операційні системи на комп’ютері та згенерує відповідні пункти меню у файлі /boot/grub/grub.cfg
. Нові записи можна вручну додати до файлів сценаріїв у каталозі /etc/grub.d
.
Ці файли мають бути виконуваними та обробляються в числовому порядку за допомогою update-grub
. Тому 05_debian_theme
обробляється перед 10_linux
і так далі. Записи спеціального меню зазвичай додаються до файлу 40_custom
.
Основний синтаксис для пункту меню показано нижче:
menuentry "Default OS" { set root=(hd0,1) linux /vmlinuz root=/dev/sda1 ro quiet splash initrd /initrd.img }
Перший рядок завжди починається з menuentry
і закінчується на {
. Текст між лапками буде відображатися як мітка запису в меню завантаження GRUB 2.
Параметр set root
визначає диск і розділ, де розташована коренева файлова система операційної системи. Зверніть увагу, що в GRUB 2 диски нумеруються від нуля, тому hd0
є першим диском (sda
під Linux), hd1
— другим тощо. Однак розділи нумеруються, починаючи з одиниці. У наведеному вище прикладі коренева файлова система розташована на першому диску (hd0
), першому розділі (1
) або sda1
.
Замість того, щоб безпосередньо вказувати пристрій і розділ, GRUB 2 також може шукати файлову систему з певною міткою або універсальним унікальним ідентифікатором (UUID, Universally Unique Identifier). Для цього використовуйте параметр search --set=root
, а потім параметр --label
і мітку файлової системи для пошуку, або --fs-uuid
, за яким слідує UUID файлової системи.
Ви можете знайти UUID файлової системи за допомогою команди нижче:
$ ls -l /dev/disk/by-uuid/ total 0 lrwxrwxrwx 1 root root 10 nov 4 08:40 3e0b34e2-949c-43f2-90b0-25454ac1595d -> ../../sda5 lrwxrwxrwx 1 root root 10 nov 4 08:40 428e35ee-5ad5-4dcb-adca-539aba6c2d84 -> ../../sda6 lrwxrwxrwx 1 root root 10 nov 5 19:10 56C11DCC5D2E1334 -> ../../sdb1 lrwxrwxrwx 1 root root 10 nov 4 08:40 ae71b214-0aec-48e8-80b2-090b6986b625 -> ../../sda1
У наведеному вище прикладі UUID для /dev/sda1
– це ae71b214-0aec-48e8-80b2-090b6986b625
. Якщо ви бажаєте встановити його як кореневий пристрій для GRUB 2, командою буде search --set=root --fs-uuid ae71b214-0aec-48e8-80b2-090b6986b625
.
Під час використання команди search
зазвичай додається параметр --no-floppy
, щоб GRUB не витрачав час на пошук на дискетах.
Рядок linux
вказує, де розташовано ядро операційної системи (у цьому випадку файл vmlinuz
у корені файлової системи). Після цього ви можете передати параметри командного рядка до ядра.
У наведеному вище прикладі ми вказали кореневий розділ (root=/dev/sda1
) і передали три параметри ядра: кореневий розділ повинен бути змонтований лише для читання (ro
), більшість повідомлень журналу має бути вимкнено (quiet
) і має відображатися заставка (splash
).
Рядок initrd
вказує, де розташований початковий диск RAM. У наведеному вище прикладі файл initrd.img
розташований у корені файлової системи.
Note
|
Більшість дистрибутивів Linux насправді не розміщують ядро та initrd у кореневому каталозі кореневої файлової системи. Натомість тут розміщуються посилання на фактичні файли всередині каталогу або розділу |
Останній рядок пункту меню повинен містити лише символ }
.
Взаємодія з GRUB 2
Під час завантаження системи з GRUB 2 ви побачите меню параметрів. Використовуйте клавіші зі стрілками, щоб вибрати параметр, і Enter, щоб підтвердити та завантажити вибраний запис.
Tip
|
Якщо ви бачите лише зворотний відлік, але не меню, натисніть Shift, щоб відкрити меню. |
Щоб відредагувати параметр, виберіть його за допомогою клавіш зі стрілками та натисніть E. Це відобразить вікно редактора з вмістом menuentry
, пов’язаного з цією опцією, як визначено в /boot/grub/grub.cfg
.
Після редагування параметра натисніть Ctrl+X або F10 для завантаження, або Esc, щоб повернутися до меню.
Щоб увійти до оболонки GRUB 2, натисніть C на екрані меню (або Ctrl+C у вікні редагування). Ви побачите такий командний рядок: grub >
Введіть help
, щоб побачити список усіх доступних команд, або натисніть Esc, щоб вийти з оболонки та повернутися до екрана меню.
Note
|
Пам’ятайте, що це меню не з’явиться, якщо для |
Завантаження з оболонки GRUB 2
Ви можете використовувати оболонку GRUB 2 для завантаження системи на випадок, якщо неправильна конфігурація в пункті меню призведе до її збою.
Перше, що вам слід зробити, це дізнатися, де знаходиться завантажувальний розділ. Ви можете зробити це за допомогою команди ls
, яка покаже вам список розділів і дисків, які знайшов GRUB 2.
grub> ls (proc) (hd0) (hd0,msdos1)
У наведеному вище прикладі все легко. Існує лише один диск (hd0)
з лише одним розділом на ньому: (hd0,msdos1)
.
Перераховані диски та розділи будуть відрізнятися у вашій системі. У нашому прикладі перший розділ hd0
називається msdos1
, оскільки диск був розділений за схемою розбиття MBR. Якби він був розділений за допомогою GPT, ім’я було б gpt1
.
Для завантаження Linux нам знадобиться ядро та початковий RAM-диск (initrd). Давайте перевіримо вміст (hd0,msdos1)
:
grub> ls (hd0,msdos1)/ lost+found/ swapfile etc/ media/ bin/ boot/ dev/ home/ lib/ lib64/ mnt/ opt/ proc/ root/ run/ sbin/ srv/ sys/ tmp/ usr/ var/ initrd.img initrd.img.old vmlinuz cdrom/
Ви можете додати параметр -l
до ls
, щоб отримати довгий список, подібний до того, що ви отримаєте на терміналі Linux. Використовуйте Tab для автозаповнення імен дисків, розділів і файлів.
Зверніть увагу, що у нас є образи ядра (vmlinuz
) і initrd (initrd.img
) прямо в кореневому каталозі. Якщо ні, ми можемо перевірити вміст /boot
за допомогою list (hd0,msdos1)/boot/
.
Тепер встановіть завантажувальний розділ:
grub> set root=(hd0,msdos1)
Завантажте ядро Linux за допомогою команди linux
, за якою слідує шлях до ядра та параметр root=
, щоб повідомити ядру, де розташована коренева файлова система операційної системи.
grub> linux /vmlinuz root=/dev/sda1
Завантажте початковий диск RAM за допомогою initrd
, а потім вкажіть повний шлях до файлу initrd.img
:
grub> initrd /initrd.img
Тепер завантажте систему за допомогою boot
.
Завантаження за допомогою Rescue Shell
У разі збою завантаження GRUB 2 може завантажити аварійну оболонку, спрощену версію оболонки, про яку ми згадували раніше. Ви розпізнаєте це за командним рядком, який відображається як grub rescue>
.
Процес завантаження системи з цієї оболонки майже такий самий, як було показано раніше. Однак вам потрібно буде завантажити кілька модулів GRUB 2, щоб все запрацювало.
З’ясувавши, який розділ є завантажувальним (з ls
, як показано раніше), скористайтеся командою set prefix=
, а потім повним шляхом до каталогу, що містить файли GRUB 2. Зазвичай /boot/grub
. У нашому прикладі:
grub rescue> set prefix=(hd0,msdos1)/boot/grub
Тепер завантажте модулі normal
та linux
за допомогою команди insmod
:
grub rescue> insmod normal grub rescue> insmod linux
Далі встановіть для завантажувального розділу set root=
, як було вказано раніше, завантажте ядро Linux (з linux
), початковий диск RAM (initrd
) і спробуйте завантажитися за допомогою boot
.
GRUB Legacy
Встановлення GRUB Legacy при запущеній системі
Щоб встановити GRUB Legacy на диск при запущеній системі, ми скористаємося утилітою grub-install
. Основною командою є grub-install DEVICE
, де DEVICE
— цє диск, на який потрібно встановити GRUB Legacy. Прикладом може бути /dev/sda
.
# grub-install /dev/sda
Зверніть увагу, що вам потрібно вказати пристрій, на якому буде встановлено GRUB Legacy, наприклад /dev/sda/
, а не розділ, як у /dev/sda1
.
За замовчуванням GRUB скопіює необхідні файли до каталогу /boot
на вказаному пристрої. Якщо ви хочете скопіювати їх до іншого каталогу, використовуйте параметр --boot-directory=
, за яким слід вказати повний шлях до місця, куди слід скопіювати файли.
Встановлення GRUB Legacy з оболонки GRUB
Якщо ви не можете завантажити систему з якоїсь причини і вам потрібно переінсталювати GRUB Legacy, ви можете зробити це з оболонки GRUB на завантажувальному диску GRUB Legacy.
З оболонки GRUB (введіть c
у меню завантаження, щоб перейти до підказки grub>
), першим кроком є встановлення завантажувального пристрою, який містить каталог /boot
. Наприклад, якщо цей каталог знаходиться в першому розділі першого диску, команда буде такою:
grub> root (hd0,0)
Якщо ви не знаєте, який пристрій містить каталог /boot
, ви можете задати GRUB шукати його за допомогою команди find
, як показано нижче:
grub> find /boot/grub/stage1 (hd0,0)
Потім встановіть завантажувальний розділ, як зазначено вище, і скористайтеся командою setup
, щоб встановити GRUB Legacy на MBR і скопіювати необхідні файли на диск:
grub> setup (hd0)
Після завершення перезавантажте систему, і вона має завантажитися нормально.
Налаштування записів меню GRUB Legacy та їх параметрів
Записи меню GRUB Legacy та їх параметри зберігаються у файлі /boot/grub/menu.lst
. Це простий текстовий файл зі списком команд і параметрів, які можна редагувати безпосередньо за допомогою вашого улюбленого текстового редактора.
Рядки, які починаються з #
, вважаються коментарями, а порожні рядки ігноруються.
Пункт меню містить щонайменше три команди. Перша, title
, встановлює назву операційної системи на екрані меню. Друга, root
, повідомляє GRUB Legacy, з якого пристрою або розділу завантажуватися.
Третій запис, kernel
, визначає повний шлях до образу ядра, який має бути завантажений, коли вибрано відповідний запис. Зауважте, що цей шлях відноситься до пристрою, зазначеного в параметрі root
.
Нижче наведено простий приклад:
# This line is a comment title My Linux Distribution root (hd0,0) kernel /vmlinuz root=/dev/hda1
На відміну від GRUB 2, у GRUB Legacy як диски так і розділи нумеруються з нуля. Отже, команда root (hd0,0)
встановить завантажувальний розділ як перший розділ (0
) першого диску (hd0
).
Ви можете пропустити оператор root
, якщо ви вкажете пристрій завантаження перед шляхом у команді kernel
. Синтаксис такий самий, тому:
kernel (hd0,0)/vmlinuz root=dev/hda1
еквівалентно:
root (hd0,0) kernel /vmlinuz root=/dev/hda1
Обидва завантажуватимуть файл vmlinuz
з кореневого каталогу (/
) першого розділу першого диска (hd0,0
).
Параметр root=/dev/hda1
після команди kernel
повідомляє ядру Linux, який розділ слід використовувати як кореневу файлову систему. Це параметр ядра Linux, а не команда GRUB Legacy.
Note
|
Щоб дізнатися більше про параметри ядра, див. https://www.kernel.org/doc/html/v4.14/admin-guide/kernel-parameters.html. |
Можливо, вам знадобиться вказати розташування початкового образу RAM Disk для операційної системи за допомогою параметра initrd
. Повний шлях до файлу можна вказати, як у параметрі kernel
, так і вказати пристрій або розділ перед шляхом, наприклад:
# This line is a comment title My Linux Distribution root (hd0,0) kernel /vmlinuz root=/dev/hda1 initrd /initrd.img
GRUB Legacy має модульну конструкцію, де модулі (зазвичай зберігаються як файли .mod
у /boot/grub/i386-pc
) можуть бути завантажені для додавання додаткових функцій, таких як підтримка нестандартного обладнання, файлових систем або нових алгоритмів стиснення.
Модулі завантажуються за допомогою команди module
, за якою слідує повний шлях до відповідного файлу .mod
. Майте на увазі, що, так само як для образів ядра та initrd, цей шлях відноситься до пристрою, зазначеного в команді root
.
У наведеному нижче прикладі буде завантажено модуль 915resolution
, необхідний для правильного встановлення роздільної здатності кадрового буфера в системах із відеочіпсетами Intel серії 800 або 900.
module /boot/grub/i386-pc/915resolution.mod
Ланцюгове завантаження інших операційних систем
GRUB Legacy можна використовувати для завантаження непідтримуваних операційних систем, таких як Windows, за допомогою процесу під назвою ланцюгове завантаження (chainloading). Спочатку завантажується GRUB Legacy, а коли вибрано відповідний параметр, завантажується завантажувач для потрібної системи.
Типовий запис для ланцюгового завантаження Windows буде виглядати так:
# Load Windows title Windows XP root (hd0,1) makeactive chainload +1 boot
Розглянемо кожен параметр. Як і раніше, root (hd0,1)
визначає пристрій і розділ, де знаходиться завантажувач операційної системи, яку ми хочемо завантажити. У цьому прикладі другий розділ першого диска.
makeactive
-
встановлює прапорець, який вказує, що це активний розділ. Це працює лише на первинних розділах DOS.
chainload +1
-
повідомляє GRUB завантажити перший сектор завантажувального розділу. Тут зазвичай розташовуються завантажувачі.
boot
-
запустить завантажувач і завантажить відповідну операційну систему.
Вправи до посібника
-
Яке розташування за замовчуванням для файлу конфігурації GRUB 2?
-
Які кроки необхідно виконати, щоб змінити налаштування GRUB 2?
-
До якого файлу слід додати користувацькі пункти меню GRUB 2?
-
Де зберігаються пункти меню для GRUB Legacy?
-
Як увійти в оболонку GRUB з меню GRUB 2 або GRUB Legacy?
Дослідницькі вправи
-
Уявіть, що користувач налаштовує GRUB Legacy для завантаження з другого розділу першого диску. Він пише наступний елемент спеціального меню:
title My Linux Distro root (hd0,2) kernel /vmlinuz root=/dev/hda1 initrd /initrd.img
Однак система не завантажується. Що не так?
-
Уявіть, що у вас є диск, ідентифікований як
/dev/sda
з кількома розділами. Яку команду можна використати, щоб дізнатися, який розділ є завантажувальним у системі? -
Яку команду можна використати, щоб дізнатися UUID розділу?
-
Розглянемо наступний запис для GRUB 2
menuentry "Default OS" { set root=(hd0,1) linux /vmlinuz root=/dev/sda1 ro quiet splash initrd /initrd.img }
Змініть його так, щоб система завантажувалась з диска з UUID
5dda0af3-c995-481a-a6f3-46dcd3b6998d
-
Як ви можете налаштувати GRUB 2 на очікування 10 секунд перед завантаженням пункту меню за замовчуванням?
-
Які потрібні команди для встановлення GRUB на перший розділ другого диска з оболонки GRUB Legacy?
Підсумки
На цьому уроці ми дізналися
-
Що таке завантажувач.
-
Відмінності між GRUB Legacy і GRUB 2.
-
Що таке завантажувальний розділ і який його вміст.
-
Як встановити GRUB Legacy і GRUB 2.
-
Як налаштувати GRUB Legacy і GRUB 2.
-
Як додати користувацькі пункти меню до GRUB Legacy і до GRUB 2.
-
Як взаємодіяти з екраном меню та консоллю GRUB Legacy і GRUB 2.
-
Як завантажити систему з оболонки GRUB Legacy/GRUB 2 або оболонки відновлення.
На цьому уроці обговорювалися такі команди:
-
grub-install
-
update-grub
-
grub-mkconfig
Відповіді на вправи до посібника
-
Яке розташування за замовчуванням для файлу конфігурації GRUB 2?
/boot/grub/grub.cfg
-
Які кроки необхідно виконати, щоб змінити налаштування GRUB 2?
Внести зміни до файлу
/etc/default/grub
, потім оновити конфігурацію за допомогоюupdate-grub
. -
До якого файлу слід додати користувацькі пункти меню GRUB 2?
/etc/grub.d/40_custom
-
Де зберігаються пункти меню для GRUB Legacy?
/boot/grub/menu.lst
-
Як увійти в оболонку GRUB з меню GRUB 2 або GRUB Legacy?
Натиснути
c
на екрані меню.
Відповіді до дослідницьких вправ
-
Уявіть, що користувач налаштовує GRUB Legacy для завантаження з другого розділу першого диску. Він пише наступний елемент спеціального меню:
title My Linux Distro root (hd0,2) kernel /vmlinuz root=/dev/hda1 initrd /initrd.img
Однак система не завантажується. Що не так?
Завантажувальний розділ неправильний. Пам’ятайте, що, на відміну від GRUB 2, GRUB Legacy рахує розділи від нуля. Отже, правильною командою для другого розділу першого диска має бути
root (hd0,1)
. -
Уявіть, що у вас є диск, ідентифікований як
/dev/sda
з кількома розділами. Яку команду можна використати, щоб дізнатися, який розділ є завантажувальним у системі?Використовуйте
fdisk -l /dev/sda
. Завантажувальний розділ буде позначено зірочкою (*
) у списку. -
Яку команду можна використати, щоб дізнатися UUID розділу?
Використовуйте
ls -la /dev/disk/by-uuid/
і знайдіть UUID, який вказує на розділ. -
Розглянемо наступний запис для GRUB 2
menuentry "Default OS" { set root=(hd0,1) linux /vmlinuz root=/dev/sda1 ro quiet splash initrd /initrd.img }
Змініть його так, щоб система завантажувалась з диска з UUID
5dda0af3-c995-481a-a6f3-46dcd3b6998d
Вам потрібно буде змінити оператор
set root
. Замість того, щоб вказувати диск і розділ, доручіть grub шукати розділ із потрібним UUID.menuentry "Default OS" { search --set=root --fs-uuid 5dda0af3-c995-481a-a6f3-46dcd3b6998d linux /vmlinuz root=/dev/sda1 ro quiet splash initrd /initrd.img }
-
Як ви можете налаштувати GRUB 2 на очікування 10 секунд перед завантаженням пункту меню за замовчуванням?
Додайте параметр
GRUB_TIMEOUT=10
до/etc/default/grub
. -
Які потрібні команди для встановлення GRUB на перший розділ другого диска з оболонки GRUB Legacy?
grub> root (hd1,0) grub> setup (hd1)