15%

Спести 15% на всички хостинг услуги

Тествай уменията си и получи Отстъпка за всеки хостинг план

Използвайте код:

Skills
За начало
08.10.2024

Какво е LILO (Linux Loader)? Архитектура, конфигурация и сравнение с GRUB

LILO (Linux Loader) е остарял буутлоудър за Linux и Unix-подобни операционни системи, който зарежда ядрото директно от адрес на диска, записан по време на инсталацията, без да изисква поддръжка на драйвер за файлова система по време на последователността на зареждане. Той работи на етапа преди OS — или от Master Boot Record (MBR), или от секторa за зареждане на дял — и предава управлението на 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 (map файл): LILO чете своя map файл (`/boot/map`), който е бил записан по време на инсталацията от командата `lilo`. Този map съдържа абсолютните адреси на дисковите блокове на всяко ядро и запис на верижен буутлоудър. Тук не се извършва разбор на файловата система — LILO използва сурови LBA/CHS адреси на сектори.
  3. Представяне на менюто за зареждане: Ако `prompt` е зададен в `lilo.conf`, LILO показва текстово меню. Директивата `timeout` контролира колко дълго изчаква преди да избере стойността по подразбиране.
  4. Зареждане на ядрото: LILO чете образа на ядрото от предварително изчислените адреси на дисковите блокове в ниската памет, след което го декомпресира и премества.
  5. Предаване на управлението: LILO предава параметрите на командния ред на ядрото и местоположението на началния RAM диск (`initrd`) на ядрото, което поема инициализацията на хардуера.

Критично архитектурно следствие: Тъй като LILO кодира абсолютните адреси на дисковите блокове по време на инсталацията, всяка промяна в файла на ядрото, оформлението на дяловете или `lilo.conf` изисква повторно изпълнение на `/sbin/lilo` за регенериране на map файла. Забравянето на тази стъпка след актуализация на ядрото е най-честата причина за неуспешно зареждане на 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` активира подробен изход, показващ всяко ядро и запис на верижен буутлоудър, който се картографира. Винаги проверявайте кода за изход — ненулева стойност означава, че map файлът не е записан успешно.

Често пропускани конфигурационни параметри

  • `lba32`: Без тази директива на дискове с обем над 8 GB, LILO се връща към CHS адресиране и няма да успее да намери ядра след границата от 8 GB. Това е режим на тихо отказване, причинил безброй производствени прекъсвания на наследен хардуер.
  • `compact`: Намалява времето за зареждане на въртящи се дискове чрез обединяване на четения на съседни сектори. Несъвместим с някои сценарии за зареждане от флопи.
  • `vga=`: Предава параметър за видео режим на ядрото. Полезен за сървъри без монитор, където искате конкретна резолюция на framebuffer в конзолата.
  • `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**Само ръчни записи`os-prober` автоматично разпознава инсталираните OS
**Размер на бинарния файл / отпечатък**Много малък (~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, което го прави отличен предмет за курсове по вътрешна структура на OS.

За всяко съвременно внедряване — независимо дали осигурявате среда за VPS Хостинг, конфигурирате Dedicated сървър или настройвате стек за разработка на Споделен уеб хостинг — GRUB2 е стандартният и правилен избор на буутлоудър.

Чести режими на отказване на LILO и диагностика

Разбирането на кодовете за грешки на LILO е от решаващо значение за възстановяването. LILO отпечатва частичен низ от `LILO` по време на зареждане, за да покаже напредъка:

Отпечатани символиДостигнат етапВероятна причина за отказ
_(нищо)_MBR не е зареденBIOS не открива буутируемо устройство
`L`Етап 1 зареденГрешка при зареждане на Етап 2; грешен път до map файла
`LI`Етап 2 зареденБинарният файл на Етап 2 е несъвместим или повреден
`LIL`Map файлът е намеренMap файлът е повреден или на грешен адрес
`LIL?`Map файлът е зареденMap файлът е зареден от грешен адрес
`LILO`Пълно зарежданеМенюто за зареждане е показано успешно

Процедура за възстановяване

Ако LILO не успее да зареди след актуализация на ядрото:

  1. Заредете от live CD или среда за спасяване.
  2. Монтирайте основния дял: `mount /dev/sda1 /mnt`
  3. Chroot: `chroot /mnt`
  4. Проверете дали `/etc/lilo.conf` сочи към правилния път на ядрото.
  5. Изпълнете отново: `/sbin/lilo -v`
  6. Рестартирайте.

Ако самият map файл е повреден, може да се наложи да преинсталирате пакета `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 или защитен Dedicated сървър — тези ограничения правят 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` не е по избор — то е толкова задължително, колкото самото редактиране. Автоматизирайте това с hook за инсталиране на ядро след инсталация, ако вашият мениджър на пакети го поддържа.

Често задавани въпроси

Какво се случва, ако актуализирам ядрото на Linux на система с LILO, без да изпълня `/sbin/lilo`?

Map файлът на LILO все още сочи към адресите на дисковите блокове на старото ядро. Системата ще зареди предишното ядро, сякаш актуализацията никога не е извършена — или, ако старият образ на ядрото е бил презаписан на място, ще зареди повредени данни и ще изпадне в паника. Винаги изпълнявайте `/sbin/lilo -v` веднага след всяка актуализация на ядрото.

Може ли LILO да зарежда от диск с GPT разделяне?

Не надеждно. LILO е проектиран за MBR таблици на дяловете. GPT дисковете използват защитен MBR, който технически позволява инсталирането на LILO, но LILO няма осведоменост за GPT записите на дялове и не може надеждно да намери дялове след първите четири. Използвайте GRUB2 за всеки GPT диск.

Съвместим ли е LILO с UEFI системи?

Не. LILO е буутлоудър от епохата на BIOS без поддръжка на EFI приложения. На UEFI системи фърмуерът очаква бинарен файл `.efi` в PE формат в EFI System Partition. 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
За начало