15%

Zaoszczędź 15% na wszystkich usługach hostingowych

Sprawdź swoje umiejętności i zdobądź Rabat na dowolny plan hostingowy

Użyj kodu:

Skills
Rozpocznij
08.10.2024

Co to jest LILO (Linux Loader)? Architektura, konfiguracja i porównanie z GRUB

LILO (Linux Loader) jest starszym programem rozruchowym dla Linux i systemów operacyjnych podobnych do Unix, który ładuje jądro bezpośrednio z adresu dysku zapisanego w czasie instalacji, bez konieczności obsługi sterownika systemu plików podczas sekwencji rozruchowej. Działa na etapie przed uruchomieniem systemu operacyjnego — z Master Boot Record (MBR) lub sektora rozruchowego partycji — i przekazuje kontrolę CPU do jądra Linux po załadowaniu go do pamięci.

W większości dzisiejszych systemów produkcyjnych LILO został zastąpiony przez GRUB2. Jednak zrozumienie jego wewnętrznego działania pozostaje niezbędne dla inżynierów utrzymujących starszą infrastrukturę, systemy wbudowane lub serwery izolowane od sieci, gdzie minimalny, deterministyczny program rozruchowy jest świadomym wyborem architektonicznym.

Jak działa proces rozruchu LILO na niskim poziomie

Gdy maszyna się włącza, BIOS wykonuje POST (Power-On Self-Test), a następnie odczytuje pierwsze 512 bajtów dysku rozruchowego — MBR. Jeśli LILO jest tam zainstalowany, te 512 bajtów zawiera program ładujący pierwszego etapu LILO. Sekwencja przebiega następująco:

  1. Etap 1 (kod MBR): BIOS ładuje 512 bajtów z MBR do pamięci pod adresem `0x7C00` i przekazuje do niego wykonanie. Ten mały fragment kodu zna tylko jedno zadanie: zlokalizować i załadować Etap 2.
  2. Etap 2 (plik mapy): LILO odczytuje swój plik mapy (`/boot/map`), który został zapisany w czasie instalacji przez polecenie `lilo`. Ta mapa zawiera bezwzględne adresy bloków dyskowych każdego obrazu jądra i wpisu chain-loadera. Nie dochodzi tu do parsowania systemu plików — LILO używa surowych adresów sektorów LBA/CHS.
  3. Prezentacja menu rozruchowego: Jeśli `prompt` jest ustawione w `lilo.conf`, LILO wyświetla menu tekstowe. Dyrektywa `timeout` kontroluje czas oczekiwania przed wybraniem domyślnej opcji.
  4. Ładowanie jądra: LILO odczytuje obraz jądra z wstępnie obliczonych adresów dyskowych do pamięci niskiej, a następnie dekompresuje go i przenosi.
  5. Przekazanie kontroli: LILO przekazuje parametry wiersza poleceń jądra i lokalizację początkowego dysku RAM (`initrd`) do jądra, które przejmuje inicjalizację sprzętu.

Krytyczna implikacja architektoniczna: Ponieważ LILO koduje bezwzględne adresy bloków dyskowych w czasie instalacji, każda zmiana pliku jądra, układu partycji lub `lilo.conf` wymaga ponownego uruchomienia `/sbin/lilo` w celu regeneracji mapy. Zapomnienie o tym kroku po aktualizacji jądra jest najczęstszą przyczyną awarii rozruchu LILO.

Konfiguracja LILO: Szczegółowe omówienie `/etc/lilo.conf`

LILO jest konfigurowany wyłącznie przez `/etc/lilo.conf`. Poniżej znajduje się reprezentatywny dla środowiska produkcyjnego przykład z adnotacjami obejmującymi opcje, które oryginalna dokumentacja często pomija:

“`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

“`

Po każdej edycji zastosuj zmiany za pomocą:

“`bash

sudo /sbin/lilo -v

“`

Flaga `-v` włącza szczegółowe dane wyjściowe, pokazując każde jądro i wpis chain-loadera podczas mapowania. Zawsze weryfikuj kod wyjścia — wartość niezerowa oznacza, że mapa nie została pomyślnie zapisana.

Często pomijane parametry konfiguracyjne

  • `lba32`: Bez tej dyrektywy na dyskach większych niż 8 GB, LILO wraca do adresowania CHS i nie będzie w stanie zlokalizować jąder poza granicą 8 GB. Jest to tryb cichej awarii, który spowodował niezliczone przestoje produkcyjne na starszym sprzęcie.
  • `compact`: Skraca czas rozruchu na dyskach talerzowych poprzez łączenie odczytów sąsiednich sektorów. Niekompatybilny z niektórymi scenariuszami rozruchu z dyskietki.
  • `vga=`: Przekazuje parametr trybu wideo do jądra. Przydatne dla serwerów bez monitora, gdzie chcesz określonej rozdzielczości framebuffera w konsoli.
  • `append=`: Przekazuje dowolne parametry wiersza poleceń jądra. Odpowiednik argumentów linii `linux` w GRUB.
  • `password=`: Ogranicza uruchamianie określonego wpisu za pomocą hasła. Należy pamiętać, że to hasło jest przechowywane w postaci zwykłego tekstu w `lilo.conf`, więc uprawnienia do pliku (`chmod 600`) są obowiązkowe.

Scenariusze instalacji LILO

Instalacja do 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

“`

Instalacja do sektora rozruchowego partycji

Podczas korzystania z menedżera rozruchu, takiego jak System Commander, możesz chcieć umieścić LILO w sektorze rozruchowym partycji zamiast w MBR:

“`ini

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

“`

Jest to również właściwe podejście, gdy LILO jest chain-ładowany przez inny program rozruchowy.

Usuwanie LILO

Aby przywrócić oryginalny MBR (np. przed zastąpieniem przez 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

“`

Nigdy nie używaj `dd if=/dev/zero` na pełnym MBR — zniszczy to tablicę partycji.

LILO vs. GRUB: Porównanie techniczne

Poniższa tabela obejmuje wymiary najważniejsze dla administratora systemów wybierającego między tymi dwoma rozwiązaniami, w tym kilka niuansów nieobecnych w większości porównań:

FunkcjaLILOGRUB2
**Świadomość systemu plików**Brak — używa surowych adresów bloków dyskowychPełna obsługa ext2/3/4, XFS, Btrfs, ZFS, FAT, NTFS
**Metoda stosowania konfiguracji**Należy uruchomić `/sbin/lilo` po każdej zmianieOdczytuje `grub.cfg` dynamicznie podczas rozruchu
**Obsługa aktualizacji jądra**Wymagane ręczne ponowne uruchomienie; łatwo zapomnieć`update-grub` / `grub-mkconfig` automatyzuje to
**Edycja parametrów rozruchu**Niemożliwa podczas rozruchuInteraktywny edytor w menu rozruchowym (naciśnij `e`)
**Obsługa UEFI**NieTak (GRUB2 obsługuje UEFI Secure Boot)
**Tablica partycji GPT**Ograniczona / zawodnaPełna obsługa
**Limit rozmiaru dysku**8 GB bez `lba32`; praktycznie nieograniczony z nimBrak praktycznego limitu
**Rozruch sieciowy (PXE)**NieTak (przez `grub-efi` i moduły tftp)
**Tryb ratunkowy / odzyskiwania**Brak wbudowanegoWbudowana powłoka ratunkowa
**Skryptowanie w konfiguracji**NieTak (skryptowanie podobne do bash w `grub.cfg`)
**Obsługa Initrd/initramfs**TakTak
**Wykrywanie wielu systemów operacyjnych**Tylko ręczne wpisy`os-prober` automatycznie wykrywa zainstalowane systemy operacyjne
**Rozmiar binarny / ślad**Bardzo mały (~20 KB)Większy (~1–4 MB z modułami)
**Aktywny rozwój**Porzucony (ostatnie wydanie 2015)Aktywnie utrzymywany
**Secure Boot**NieTak (przez shim + podpisany GRUB)

Werdykt dla systemów produkcyjnych: GRUB2 jest właściwym wyborem dla każdego systemu działającego na jądrze nowszym niż około 3.x, używającego GPT, UEFI, LVM lub programowego RAID. Propozycja wartości LILO jest dziś ograniczona do środowisk wbudowanych lub starszych, gdzie jego deterministyczny, niezależny od systemu plików model ładowania jest atutem, a nie wadą.

Kiedy LILO jest nadal właściwym narzędziem

Pomimo swojego wieku, LILO pozostaje odpowiedni w określonych scenariuszach:

  • Wbudowane systemy Linux, gdzie ślad programu rozruchowego musi być mniejszy niż 32 KB, a lokalizacja jądra nigdy się nie zmienia.
  • Starszy sprzęt (sprzed 2000 roku), gdzie moduły GRUB2 przekraczają dostępną pamięć lub BIOS ma problemy ze zgodnością z ładowaniem etapowym GRUB.
  • Środowiska kryminalistyczne i odzyskiwania danych, gdzie znany, minimalny program rozruchowy jest preferowany nad złożonym z możliwościami skryptowania.
  • Systemy izolowane od sieci, gdzie prostota i możliwość audytu płaskiego modelu konfiguracji LILO zmniejsza powierzchnię ataku.
  • Cele edukacyjne — kod źródłowy LILO i sekwencja rozruchowa są znacznie prostsze niż GRUB2, co czyni go doskonałym tematem dla kursów dotyczących wewnętrznego działania systemów operacyjnych.

W przypadku każdego nowoczesnego wdrożenia — niezależnie od tego, czy konfigurujesz środowisko VPS Hosting, konfigurujesz Serwer Dedykowany, czy konfigurujesz stos deweloperski na Współdzielonym Hostingu WWW — GRUB2 jest domyślnym i właściwym wyborem programu rozruchowego.

Typowe tryby awarii LILO i diagnostyka

Zrozumienie kodów błędów LILO jest kluczowe dla odzyskiwania systemu. LILO drukuje częściowy ciąg `LILO` podczas rozruchu, aby wskazać postęp:

Wydrukowane znakiOsiągnięty etapPrawdopodobna przyczyna awarii
_(nic)_MBR nie załadowanyBIOS nie znajduje urządzenia rozruchowego
`L`Etap 1 załadowanyBłąd ładowania Etapu 2; zła ścieżka pliku mapy
`LI`Etap 2 załadowanyBinarka Etapu 2 niekompatybilna lub uszkodzona
`LIL`Plik mapy znalezionyPlik mapy uszkodzony lub pod złym adresem
`LIL?`Plik mapy załadowanyPlik mapy załadowany z błędnego adresu
`LILO`Pełne załadowanieMenu rozruchowe wyświetlone pomyślnie

Procedura odzyskiwania

Jeśli LILO nie uruchamia się po aktualizacji jądra:

  1. Uruchom z live CD lub środowiska ratunkowego.
  2. Zamontuj partycję główną: `mount /dev/sda1 /mnt`
  3. Chroot: `chroot /mnt`
  4. Sprawdź, czy `/etc/lilo.conf` wskazuje na właściwą ścieżkę jądra.
  5. Uruchom ponownie: `/sbin/lilo -v`
  6. Uruchom ponownie system.

Jeśli sam plik mapy jest uszkodzony, może być konieczna ponowna instalacja pakietu `lilo` w celu przywrócenia `/boot/boot.b` przed ponownym uruchomieniem polecenia.

Kwestie bezpieczeństwa

LILO poprzedza nowoczesne modele bezpieczeństwa oprogramowania układowego i ma kilka istotnych ograniczeń:

  • Brak obsługi Secure Boot: LILO nie może uczestniczyć w łańcuchu zaufania UEFI Secure Boot. W systemach, gdzie wymagana jest weryfikacja integralności oprogramowania układowego, obowiązkowy jest GRUB2 z podpisanym shimem.
  • Słabości ochrony hasłem: Dyrektywa `password=` w `lilo.conf` przechowuje dane uwierzytelniające w postaci zwykłego tekstu. Ściśle ogranicz uprawnienia do pliku (`chmod 600 /etc/lilo.conf`, właściciel root).
  • Podatność na fizyczny dostęp: Bez hasła BIOS/UEFI, atakujący z fizycznym dostępem może uruchomić system z zewnętrznego nośnika i całkowicie ominąć LILO.
  • Brak integracji z TPM: LILO nie może wykonywać mierzonego rozruchu ani współpracować z TPM w celu atestacji, w przeciwieństwie do GRUB2 z odpowiednimi modułami.

W przypadku serwerów, gdzie szyfrowanie dysku, mierzony rozruch lub zdalna atestacja są częścią architektury bezpieczeństwa — takich jak VPS z cPanel lub zabezpieczony Serwer Dedykowany — te ograniczenia czynią LILO nieodpowiednim.

Migracja z LILO do GRUB2

Jeśli utrzymujesz starszy system nadal działający na LILO i musisz przeprowadzić migrację:

“`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

“`

Nie usuwaj pakietu `lilo` dopóki nie potwierdzisz, że GRUB2 uruchamia się pomyślnie. Trzymaj pod ręką live USB ratunkowy podczas migracji.

Jeśli Twój serwer używa Paneli Sterowania VPS, które współdziałają z programem rozruchowym (np. do przełączania jądra lub trybu ratunkowego), przed migracją sprawdź zgodność panelu z GRUB2.

Kluczowe wnioski techniczne: Macierz decyzyjna

Użyj tej listy kontrolnej, aby określić, czy LILO jest odpowiedni dla Twojego środowiska:

Użyj LILO, jeśli:

  • System używa oprogramowania układowego BIOS (nie UEFI)
  • Dysk używa tablicy partycji MBR (nie GPT)
  • Jądro i układ partycji są statyczne i rzadko się zmieniają
  • Ślad programu rozruchowego musi być zminimalizowany (systemy wbudowane)
  • Studiujesz wewnętrzne działanie sekwencji rozruchowej w celach edukacyjnych

Nie używaj LILO, jeśli:

  • System używa oprogramowania układowego UEFI (LILO jest niekompatybilny)
  • Dysk używa partycjonowania GPT
  • Jądra są regularnie aktualizowane przez menedżera pakietów
  • Wymagasz Secure Boot, atestacji TPM lub mierzonego rozruchu
  • System używa LVM, programowego RAID lub Btrfs dla głównego systemu plików
  • Potrzebujesz interaktywnej edycji parametrów rozruchu do rozwiązywania problemów
  • System jest dostępny z Internetu lub podlega wymogom zgodności z przepisami bezpieczeństwa

Zasada operacyjna: Za każdym razem, gdy edytujesz `/etc/lilo.conf` lub aktualizujesz jądro w systemie zarządzanym przez LILO, uruchomienie `/sbin/lilo -v` nie jest opcjonalne — jest tak samo obowiązkowe jak sama edycja. Zautomatyzuj to za pomocą haka post-instalacyjnego jądra, jeśli Twój menedżer pakietów to obsługuje.

Często zadawane pytania

Co się stanie, jeśli zaktualizuję jądro Linux w systemie LILO bez uruchamiania `/sbin/lilo`?

Plik mapy LILO nadal wskazuje na stare adresy bloków dyskowych jądra. System uruchomi poprzednie jądro tak, jakby aktualizacja nigdy nie nastąpiła — lub, jeśli stary obraz jądra został nadpisany w miejscu, załaduje uszkodzone dane i wpadnie w panikę. Zawsze uruchamiaj `/sbin/lilo -v` natychmiast po każdej aktualizacji jądra.

Czy LILO może uruchamiać się z dysku partycjonowanego GPT?

Nie w sposób niezawodny. LILO został zaprojektowany dla tablic partycji MBR. Dyski GPT używają ochronnego MBR, który technicznie pozwala na instalację LILO, ale LILO nie ma świadomości wpisów partycji GPT i nie może niezawodnie zlokalizować partycji poza pierwszymi czterema. Używaj GRUB2 dla każdego dysku GPT.

Czy LILO jest kompatybilny z systemami UEFI?

Nie. LILO jest programem rozruchowym ery BIOS bez obsługi aplikacji EFI. W systemach UEFI oprogramowanie układowe oczekuje binarki `.efi` w formacie PE w partycji systemowej EFI. LILO nie może tego zapewnić. GRUB2, systemd-boot lub rEFInd są właściwymi wyborami dla UEFI.

Jaka jest różnica między wartością `timeout` LILO a rzeczywistymi sekundami?

Dyrektywa `timeout` jest mierzona w dziesiątych częściach sekundy. Wartość `50` równa się 5 sekundom, `100` równa się 10 sekundom. Jest to częsta błędna konfiguracja — administratorzy oczekujący 50-sekundowego limitu czasu, którzy ustawią `timeout=50`, otrzymają zamiast tego 5-sekundowe okno.

Czy LILO może uruchamiać się z woluminów LVM lub programowego RAID?

Nie. Ponieważ LILO rozwiązuje lokalizacje jądra do bezwzględnych adresów bloków dyskowych w czasie instalacji, nie może obsługiwać warstw abstrakcji wprowadzonych przez LVM lub MD RAID. Partycja `/boot` musi znajdować się na zwykłej partycji bezpośrednio dostępnej przez BIOS. Jest to jeden z głównych powodów architektonicznych, dla których GRUB2 zastąpił LILO w nowoczesnych dystrybucjach Linux.

15%

Zaoszczędź 15% na wszystkich usługach hostingowych

Sprawdź swoje umiejętności i zdobądź Rabat na dowolny plan hostingowy

Użyj kodu:

Skills
Rozpocznij