15%

Збережіть 15% на всі хостинг-послуги

Перевірте свої навички і отримайте Знижку на будь-який план хостингу

Використовуй код:

Skills
Почати
08.10.2024

Що таке LILO (Linux Loader)? Архітектура, конфігурація та порівняння з GRUB

LILO (Linux Loader) — це застарілий завантажувач для Linux та Unix-подібних операційних систем, який завантажує ядро безпосередньо з дискової адреси, збереженої під час встановлення, без необхідності підтримки драйвера файлової системи під час послідовності завантаження. Він працює на етапі до запуску ОС — або з Master Boot Record (MBR), або з завантажувального сектора розділу — і передає управління CPU ядру Linux після його завантаження в пам’ять.

Для більшості сучасних виробничих систем LILO був замінений GRUB2. Однак розуміння його внутрішньої роботи залишається важливим для інженерів, які обслуговують застарілу інфраструктуру, вбудовані системи або ізольовані сервери, де мінімальний, детермінований завантажувач є свідомим архітектурним вибором.

Як працює процес завантаження LILO на низькому рівні

Коли машина вмикається, BIOS виконує POST (Power-On Self-Test), потім зчитує перші 512 байт завантажувального диска — MBR. Якщо там встановлено LILO, ці 512 байт містять завантажувач першого етапу LILO. Послідовність розгортається наступним чином:

  1. Етап 1 (код MBR): BIOS завантажує 512 байт з MBR у пам’ять за адресою `0x7C00` і передає виконання до нього. Цей крихітний фрагмент знає лише одне завдання: знайти та завантажити Етап 2.
  2. Етап 2 (файл карти): LILO зчитує свій файл карти (`/boot/map`), який був записаний під час встановлення командою `lilo`. Ця карта містить абсолютні адреси дискових блоків кожного образу ядра та запису ланцюгового завантажувача. Тут не відбувається розбору файлової системи — LILO використовує необроблені адреси секторів LBA/CHS.
  3. Відображення меню завантаження: Якщо `prompt` встановлено в `lilo.conf`, LILO відображає текстове меню. Директива `timeout` контролює час очікування перед вибором за замовчуванням.
  4. Завантаження ядра: LILO зчитує образ ядра з попередньо обчислених дискових адрес у нижню пам’ять, потім розпаковує та переміщує його.
  5. Передача управління: LILO передає параметри командного рядка ядра та розташування початкового RAM-диска (`initrd`) ядру, яке бере на себе ініціалізацію апаратного забезпечення.

Критичне архітектурне значення: Оскільки LILO кодує абсолютні адреси дискових блоків під час встановлення, будь-яка зміна файлу ядра, розмітки розділів або `lilo.conf` вимагає повторного запуску `/sbin/lilo` для регенерації карти. Забуття цього кроку після оновлення ядра є найпоширенішою причиною збоїв завантаження LILO.

Конфігурація LILO: Детальний розгляд `/etc/lilo.conf`

LILO налаштовується повністю через `/etc/lilo.conf`. Нижче наведено репрезентативний для виробничого середовища приклад з анотаціями, що охоплюють параметри, які оригінальна документація часто пропускає:

“`ini

Global section

boot=/dev/sda # Install LILO to the MBR of /dev/sda

map=/boot/map # Path to the map file (must be on a non-LVM, non-RAID partition)

install=/boot/boot.b # Second-stage boot loader binary

prompt # Always show the boot menu

timeout=100 # Wait 10 seconds (units are 1/10th of a second)

default=linux-stable # Default entry label

lba32 # Enable LBA32 addressing — critical for disks > 8 GB

compact # Merge adjacent read requests; speeds up boot on HDD

Linux kernel entry

image=/boot/vmlinuz-5.4.0

label=linux-stable

initrd=/boot/initrd.img-5.4.0

root=/dev/sda1

read-only # Mount root read-only initially; fsck runs before remount rw

append="quiet splash"

Fallback kernel entry

image=/boot/vmlinuz-4.19.0

label=linux-fallback

initrd=/boot/initrd.img-4.19.0

root=/dev/sda1

read-only

Chain-load Windows from a second partition

other=/dev/sda2

label=windows

table=/dev/sda # Partition table to pass to the Windows bootloader

“`

Після кожного редагування застосуйте зміни за допомогою:

“`bash

sudo /sbin/lilo -v

“`

Прапорець `-v` вмикає детальний вивід, показуючи кожен запис ядра та ланцюгового завантажувача, що відображається. Завжди перевіряйте код виходу — ненульове повернення означає, що карта не була успішно записана.

Параметри конфігурації, які часто пропускають

  • `lba32`: Без цієї директиви на дисках розміром понад 8 GB LILO повертається до адресації CHS і не зможе знайти ядра за межею 8 GB. Це прихований режим збою, який спричинив незліченну кількість виробничих збоїв на застарілому обладнанні.
  • `compact`: Скорочує час завантаження на обертових дисках шляхом об’єднання суміжних зчитувань секторів. Несумісний з деякими сценаріями завантаження з дискети.
  • `vga=`: Передає параметр відеорежиму ядру. Корисно для безголових серверів, де потрібна певна роздільна здатність фреймбуфера в консолі.
  • `append=`: Передає довільні параметри командного рядка ядра. Еквівалент аргументів рядка `linux` у GRUB.
  • `password=`: Обмежує завантаження певного запису паролем. Зверніть увагу, що цей пароль зберігається у відкритому тексті в `lilo.conf`, тому права доступу до файлу (`chmod 600`) є обов’язковими.

Сценарії встановлення LILO

Встановлення в MBR

“`bash

Verify the target device

lsblk -o NAME,SIZE,TYPE,MOUNTPOINT

Install LILO to MBR of /dev/sda

sudo /sbin/lilo -b /dev/sda

“`

Встановлення в завантажувальний сектор розділу

При використанні менеджера завантаження, наприклад System Commander, можливо, вам захочеться розмістити LILO в завантажувальному секторі розділу, а не в MBR:

“`ini

boot=/dev/sda1 # Install to partition boot sector, not MBR

“`

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

Видалення LILO

Щоб відновити оригінальний MBR (наприклад, перед заміною на GRUB):

“`bash

Overwrite MBR with a generic boot sector, preserving the partition table

sudo dd if=/usr/lib/syslinux/mbr/mbr.bin of=/dev/sda bs=440 count=1

“`

Ніколи не використовуйте `dd if=/dev/zero` на повному MBR — це знищить таблицю розділів.

LILO проти GRUB: Технічне порівняння

Наступна таблиця охоплює аспекти, які найбільше важливі для системного адміністратора при виборі між двома варіантами, включаючи кілька нюансів, відсутніх у більшості порівнянь:

ФункціяLILOGRUB2
**Підтримка файлової системи**Відсутня — використовує необроблені адреси дискових блоківПовна підтримка ext2/3/4, XFS, Btrfs, ZFS, FAT, NTFS
**Метод застосування конфігурації**Необхідно запускати `/sbin/lilo` після кожної зміниДинамічно зчитує `grub.cfg` під час завантаження
**Обробка оновлень ядра**Потрібен ручний повторний запуск; легко забути`update-grub` / `grub-mkconfig` автоматизує це
**Редагування параметрів завантаження**Неможливо під час завантаженняІнтерактивний редактор у меню завантаження (натисніть `e`)
**Підтримка UEFI**НіТак (GRUB2 підтримує UEFI Secure Boot)
**Таблиця розділів GPT**Обмежена / ненадійнаПовна підтримка
**Обмеження розміру диска**8 GB без `lba32`; практично необмежено з нимБез практичних обмежень
**Мережеве завантаження (PXE)**НіТак (через `grub-efi` та модулі tftp)
**Режим відновлення**Відсутній вбудованийВбудована оболонка відновлення
**Скриптування в конфігурації**НіТак (bash-подібне скриптування в `grub.cfg`)
**Підтримка Initrd/initramfs**ТакТак
**Виявлення кількох ОС**Лише ручні записи`os-prober` автоматично виявляє встановлені ОС
**Розмір бінарного файлу / слід**Дуже малий (~20 KB)Більший (~1–4 MB з модулями)
**Активна розробка**Покинутий (останній реліз 2015)Активно підтримується
**Secure Boot**НіТак (через shim + підписаний GRUB)

Висновок для виробничих систем: GRUB2 є правильним вибором для будь-якої системи, що працює на ядрі новішому за приблизно 3.x, використовує GPT, UEFI, LVM або програмний RAID. Цінність LILO сьогодні обмежена вбудованими або застарілими середовищами, де його детермінована, незалежна від файлової системи модель завантаження є перевагою, а не недоліком.

Коли LILO все ще є правильним інструментом

Незважаючи на свій вік, LILO залишається доречним у певних сценаріях:

  • Вбудовані системи Linux, де розмір завантажувача повинен бути менше 32 KB, а розташування ядра ніколи не змінюється.
  • Застаріле обладнання (до 2000 року), де модулі GRUB2 перевищують доступну пам’ять або BIOS має проблеми сумісності з поетапним завантаженням GRUB.
  • Криміналістичні середовища та середовища відновлення, де відомий надійний мінімальний завантажувач є кращим за складний зі скриптовими можливостями.
  • Ізольовані системи, де простота та можливість аудиту плоскої моделі конфігурації LILO зменшує поверхню атаки.
  • Навчальні цілі — вихідний код LILO та послідовність завантаження значно простіші, ніж у GRUB2, що робить його чудовим предметом для курсів з внутрішньої будови ОС.

Для будь-якого сучасного розгортання — незалежно від того, чи ви налаштовуєте середовище VPS Хостингу, конфігуруєте Виділений Сервер, або налаштовуєте стек розробки на Спільному Веб-хостингу — GRUB2 є стандартним і правильним вибором завантажувача.

Поширені режими збоїв LILO та діагностика

Розуміння кодів помилок LILO є критичним для відновлення. LILO виводить частковий рядок `LILO` під час завантаження для індикації прогресу:

Виведені символиДосягнутий етапЙмовірна причина збою
_(нічого)_MBR не завантаженоBIOS не знаходить завантажувальний пристрій
`L`Етап 1 завантаженоПомилка завантаження Етапу 2; неправильний шлях до файлу карти
`LI`Етап 2 завантаженоБінарний файл Етапу 2 несумісний або пошкоджений
`LIL`Файл карти знайденоФайл карти пошкоджений або за неправильною адресою
`LIL?`Файл карти завантаженоФайл карти завантажено з неправильної адреси
`LILO`Повне завантаженняМеню завантаження відображено успішно

Процедура відновлення

Якщо LILO не завантажується після оновлення ядра:

  1. Завантажтеся з live CD або середовища відновлення.
  2. Змонтуйте кореневий розділ: `mount /dev/sda1 /mnt`
  3. Chroot: `chroot /mnt`
  4. Перевірте, що `/etc/lilo.conf` вказує на правильний шлях до ядра.
  5. Повторно запустіть: `/sbin/lilo -v`
  6. Перезавантажтеся.

Якщо сам файл карти пошкоджений, можливо, вам знадобиться перевстановити пакет `lilo` для відновлення `/boot/boot.b` перед повторним запуском команди.

Міркування щодо безпеки

LILO передує сучасним моделям безпеки мікропрограмного забезпечення та має кілька важливих обмежень:

  • Відсутність підтримки Secure Boot: LILO не може брати участь у ланцюжку довіри UEFI Secure Boot. На системах, де потрібна перевірка цілісності мікропрограмного забезпечення, обов’язковим є GRUB2 з підписаним shim.
  • Слабкості захисту паролем: Директива `password=` в `lilo.conf` зберігає облікові дані у відкритому тексті. Суворо обмежте права доступу до файлу (`chmod 600 /etc/lilo.conf`, власник root).
  • Вразливість до фізичного доступу: Без пароля BIOS/UEFI зловмисник з фізичним доступом може завантажитися із зовнішнього носія та повністю обійти LILO.
  • Відсутність інтеграції з TPM: LILO не може виконувати виміряне завантаження або взаємодіяти з TPM для атестації, на відміну від GRUB2 з відповідними модулями.

Для серверів, де шифрування диска, виміряне завантаження або віддалена атестація є частиною архітектури безпеки — наприклад, VPS з cPanel або захищений Виділений Сервер — ці обмеження роблять LILO непридатним.

Міграція з LILO на GRUB2

Якщо ви обслуговуєте застарілу систему, що все ще працює на LILO, і вам потрібно виконати міграцію:

“`bash

1. Install GRUB2

sudo apt-get install grub2 # Debian/Ubuntu

sudo yum install grub2-tools # RHEL/CentOS

2. Install GRUB2 to MBR

sudo grub-install /dev/sda

3. Generate GRUB configuration

sudo update-grub # Debian/Ubuntu

sudo grub2-mkconfig -o /boot/grub2/grub.cfg # RHEL/CentOS

4. Verify the new configuration

sudo grep -i menuentry /boot/grub/grub.cfg

5. Reboot and confirm GRUB2 loads

sudo reboot

“`

Не видаляйте пакет `lilo` до підтвердження успішного завантаження GRUB2. Тримайте live rescue USB доступним під час міграції.

Якщо ваш сервер використовує Панелі керування VPS, що взаємодіють із завантажувачем (наприклад, для перемикання ядра або режиму відновлення), перевірте сумісність панелі з GRUB2 перед міграцією.

Ключові технічні висновки: Матриця рішень

Використовуйте цей контрольний список, щоб визначити, чи підходить LILO для вашого середовища:

Використовуйте LILO, якщо:

  • Система використовує мікропрограмне забезпечення BIOS (не UEFI)
  • Диск використовує таблицю розділів MBR (не GPT)
  • Ядро та розмітка розділів статичні та рідко змінюються
  • Розмір завантажувача повинен бути мінімальним (вбудовані системи)
  • Ви вивчаєте внутрішню роботу послідовності завантаження в навчальних цілях

Не використовуйте LILO, якщо:

  • Система використовує мікропрограмне забезпечення UEFI (LILO несумісний)
  • Диск використовує розбиття GPT
  • Ядра регулярно оновлюються через менеджер пакетів
  • Вам потрібен Secure Boot, атестація TPM або виміряне завантаження
  • Система використовує LVM, програмний RAID або Btrfs для кореневої файлової системи
  • Вам потрібне інтерактивне редагування параметрів завантаження для усунення несправностей
  • Система підключена до Інтернету або підпадає під вимоги відповідності безпеці

Операційне правило: Кожного разу, коли ви редагуєте `/etc/lilo.conf` або оновлюєте ядро в системі під управлінням LILO, запуск `/sbin/lilo -v` є не опціональним — він є таким же обов’язковим, як і саме редагування. Автоматизуйте це за допомогою хука після встановлення ядра, якщо ваш менеджер пакетів це підтримує.

Часті запитання

Що станеться, якщо я оновлю ядро Linux у системі з LILO без запуску `/sbin/lilo`?

Файл карти LILO все ще вказує на адреси дискових блоків старого ядра. Система завантажить попереднє ядро, ніби оновлення ніколи не відбувалося — або, якщо старий образ ядра був перезаписаний на місці, завантажить пошкоджені дані та впаде в паніку. Завжди запускайте `/sbin/lilo -v` одразу після будь-якого оновлення ядра.

Чи може LILO завантажуватися з диска з розбиттям GPT?

Ненадійно. LILO був розроблений для таблиць розділів MBR. Диски GPT використовують захисний MBR, який технічно дозволяє встановлення LILO, але LILO не має уявлення про записи розділів GPT і не може надійно знаходити розділи за межами перших чотирьох. Використовуйте GRUB2 для будь-якого диска GPT.

Чи сумісний LILO з системами UEFI?

Ні. LILO — це завантажувач епохи BIOS без підтримки EFI-додатків. На системах UEFI мікропрограмне забезпечення очікує бінарний файл `.efi` у форматі PE в системному розділі EFI. LILO не може це забезпечити. GRUB2, systemd-boot або rEFInd є правильним вибором для UEFI.

У чому різниця між значенням `timeout` у LILO та реальними секундами?

Директива `timeout` вимірюється в десятих частках секунди. Значення `50` дорівнює 5 секундам, `100` — 10 секундам. Це поширена помилка конфігурації — адміністратори, які очікують тайм-аут 50 секунд і встановлюють `timeout=50`, отримають вікно в 5 секунд.

Чи може LILO завантажуватися з томів LVM або програмного RAID?

Ні. Оскільки LILO визначає розташування ядра за абсолютними адресами дискових блоків під час встановлення, він не може обробляти рівні абстракції, введені LVM або MD RAID. Розділ `/boot` повинен знаходитися на звичайному розділі, безпосередньо доступному BIOS. Це одна з основних архітектурних причин, чому GRUB2 замінив LILO в сучасних дистрибутивах Linux.

15%

Збережіть 15% на всі хостинг-послуги

Перевірте свої навички і отримайте Знижку на будь-який план хостингу

Використовуй код:

Skills
Почати