15%

Economisește 15% la toate serviciile de găzduire

Testează-ți abilitățile și obține Reducere la orice plan de găzduire

Utilizați codul:

Skills
Începeți
08.10.2024

Ce Este LILO (Linux Loader)? Arhitectură, Configurare și Comparație cu GRUB

LILO (Linux Loader) este un bootloader vechi pentru Linux și sisteme de operare de tip Unix, care încarcă nucleul direct dintr-o adresă de disc stocată la momentul instalării, fără a necesita suport pentru drivere de sistem de fișiere în timpul secvenței de pornire. Funcționează în etapa pre-OS — fie din Master Boot Record (MBR), fie dintr-un sector de boot al partiției — și transferă controlul CPU către nucleul Linux după ce îl încarcă în memorie.

Pentru majoritatea sistemelor de producție de astăzi, LILO a fost înlocuit de GRUB2. Cu toate acestea, înțelegerea funcționării sale interne rămâne esențială pentru inginerii care întrețin infrastructuri vechi, sisteme embedded sau servere izolate de rețea, unde un bootloader minimal și determinist reprezintă o alegere arhitecturală deliberată.

Cum funcționează procesul de boot LILO la nivel scăzut

Când o mașină pornește, BIOS-ul execută POST (Power-On Self-Test), apoi citește primii 512 octeți ai discului bootabil — MBR-ul. Dacă LILO este instalat acolo, acei 512 octeți conțin loader-ul de primă etapă al LILO. Secvența se desfășoară astfel:

  1. Etapa 1 (codul MBR): BIOS-ul încarcă 512 octeți din MBR în memorie la adresa `0x7C00` și transferă execuția către acesta. Acest mic stub știe un singur lucru: să localizeze și să încarce Etapa 2.
  2. Etapa 2 (fișierul map): LILO citește fișierul său map (`/boot/map`), care a fost scris la momentul instalării de comanda `lilo`. Acest map conține adresele absolute ale blocurilor de disc ale fiecărei imagini de nucleu și ale intrărilor chain-loader. Nu are loc nicio analiză a sistemului de fișiere — LILO folosește adrese brute de sectoare LBA/CHS.
  3. Prezentarea meniului de boot: Dacă `prompt` este setat în `lilo.conf`, LILO afișează un meniu text. Directiva `timeout` controlează cât timp așteaptă înainte de a folosi opțiunea implicită.
  4. Încărcarea nucleului: LILO citește imaginea nucleului de la adresele de disc precalculate în memoria inferioară, apoi o decomprimă și o relocalizează.
  5. Transferul controlului: LILO transmite parametrii liniei de comandă ai nucleului și locația discului RAM inițial (`initrd`) către nucleu, care preia inițializarea hardware-ului.

Implicație arhitecturală critică: Deoarece LILO codifică adresele absolute ale blocurilor de disc la momentul instalării, orice modificare a fișierului nucleului, a structurii partiției sau a `lilo.conf` necesită rularea din nou a `/sbin/lilo` pentru a regenera map-ul. Uitarea acestui pas după o actualizare a nucleului este cea mai frecventă cauză a eșecurilor de boot LILO.

Configurarea LILO: O analiză aprofundată a `/etc/lilo.conf`

LILO este configurat în întregime prin `/etc/lilo.conf`. Mai jos este un exemplu reprezentativ pentru producție cu adnotări care acoperă opțiuni pe care documentația originală le omite frecvent:

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

“`

După fiecare editare, aplicați modificările cu:

“`bash

sudo /sbin/lilo -v

“`

Indicatorul `-v` activează ieșirea detaliată, afișând fiecare intrare de nucleu și chain-loader care este mapată. Verificați întotdeauna codul de ieșire — o valoare diferită de zero înseamnă că map-ul nu a fost scris cu succes.

Parametri de configurare frecvent omișiți

  • `lba32`: Fără această directivă pe discuri mai mari de 8 GB, LILO revine la adresarea CHS și nu va reuși să localizeze nucleele dincolo de limita de 8 GB. Aceasta este o modalitate de eșec silențios care a cauzat nenumărate întreruperi de producție pe hardware vechi.
  • `compact`: Reduce timpul de boot pe discurile rotative prin comasarea citirilor de sectoare adiacente. Incompatibil cu unele scenarii de boot de pe dischetă.
  • `vga=`: Transmite un parametru de mod video nucleului. Util pentru servere headless unde doriți o rezoluție specifică de framebuffer în consolă.
  • `append=`: Transmite parametri arbitrari ai liniei de comandă nucleului. Echivalent cu argumentele liniei `linux` din GRUB.
  • `password=`: Restricționează bootarea unei intrări specifice cu o parolă. Rețineți că această parolă este stocată în text simplu în `lilo.conf`, deci permisiunile fișierului (`chmod 600`) sunt obligatorii.

Scenarii de instalare LILO

Instalarea în 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

“`

Instalarea într-un sector de boot al partiției

Când utilizați un manager de boot precum System Commander, este posibil să doriți LILO pe sectorul de boot al unei partiții, nu în MBR:

“`ini

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

“`

Aceasta este, de asemenea, abordarea corectă atunci când LILO este chain-loaded de un alt bootloader.

Eliminarea LILO

Pentru a restaura MBR-ul original (de exemplu, înainte de a-l înlocui cu 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

“`

Nu utilizați niciodată `dd if=/dev/zero` pe întregul MBR — va distruge tabela de partiții.

LILO vs. GRUB: Comparație tehnică

Tabelul următor acoperă dimensiunile care contează cel mai mult pentru un administrator de sisteme care alege între cele două, inclusiv câteva nuanțe absente din majoritatea comparațiilor:

CaracteristicăLILOGRUB2
**Conștientizarea sistemului de fișiere**Niciuna — folosește adrese brute ale blocurilor de discSuport complet pentru ext2/3/4, XFS, Btrfs, ZFS, FAT, NTFS
**Metoda de aplicare a configurației**Trebuie rulat `/sbin/lilo` după fiecare modificareCitește `grub.cfg` dinamic la momentul bootării
**Gestionarea actualizărilor nucleului**Rerulare manuală necesară; ușor de uitat`update-grub` / `grub-mkconfig` automatizează acest lucru
**Editarea parametrilor de boot**Nu este posibilă la momentul bootăriiEditor interactiv în meniul de boot (apăsați `e`)
**Suport UEFI**NuDa (GRUB2 suportă UEFI Secure Boot)
**Tabela de partiții GPT**Limitată / nesigurăSuport complet
**Limita dimensiunii discului**8 GB fără `lba32`; practic nelimitat cu aceastaNicio limită practică
**Boot din rețea (PXE)**NuDa (prin modulele `grub-efi` și tftp)
**Modul de recuperare/salvare**Niciunul încorporatShell de recuperare încorporat
**Scripting în configurație**NuDa (scripting de tip bash în `grub.cfg`)
**Suport Initrd/initramfs**DaDa
**Detectarea multi-OS**Numai intrări manuale`os-prober` detectează automat sistemele de operare instalate
**Dimensiunea binară / amprenta**Foarte mică (~20 KB)Mai mare (~1–4 MB cu module)
**Dezvoltare activă**Abandonat (ultima versiune în 2015)Menținut activ
**Secure Boot**NuDa (prin shim + GRUB semnat)

Verdict pentru sistemele de producție: GRUB2 este alegerea corectă pentru orice sistem care rulează un nucleu mai nou decât aproximativ 3.x, folosind GPT, UEFI, LVM sau software RAID. Propunerea de valoare a LILO astăzi este limitată la medii embedded sau vechi, unde modelul său de încărcare determinist, agnostic față de sistemul de fișiere, reprezintă un avantaj mai degrabă decât o limitare.

Când LILO este încă instrumentul potrivit

În ciuda vârstei sale, LILO rămâne adecvat în scenarii specifice:

  • Sisteme Linux embedded unde amprenta bootloader-ului trebuie să fie sub 32 KB și locația nucleului nu se schimbă niciodată.
  • Hardware vechi (anterior anului 2000) unde modulele GRUB2 depășesc memoria disponibilă sau BIOS-ul are probleme de compatibilitate cu încărcarea în etape a GRUB.
  • Medii forensice și de recuperare unde un bootloader minimal și cunoscut ca funcțional este preferabil unuia complex cu capacități de scripting.
  • Sisteme izolate de rețea unde simplitatea și auditabilitatea modelului de configurare plat al LILO reduc suprafața de atac.
  • Scopuri educaționale — codul sursă și secvența de boot ale LILO sunt semnificativ mai simple decât cele ale GRUB2, făcându-l un subiect excelent pentru cursurile de internale ale sistemelor de operare.

Pentru orice implementare modernă — fie că provizionați un mediu de VPS Hosting, configurați un Server Dedicat sau configurați un stack de dezvoltare pe Găzduire Web Shared — GRUB2 este alegerea implicită și corectă pentru bootloader.

Moduri comune de eșec LILO și diagnosticare

Înțelegerea codurilor de eroare ale LILO este esențială pentru recuperare. LILO afișează un șir parțial din `LILO` în timpul bootării pentru a indica progresul:

Caractere afișateEtapă atinsăCauza probabilă a eșecului
_(nimic)_MBR neîncărcatBIOS-ul nu găsește dispozitivul bootabil
`L`Etapa 1 încărcatăEroare la încărcarea Etapei 2; cale greșită a fișierului map
`LI`Etapa 2 încărcatăBinarul Etapei 2 incompatibil sau corupt
`LIL`Fișierul map găsitFișierul map corupt sau la adresă greșită
`LIL?`Fișierul map încărcatFișierul map încărcat de la adresă greșită
`LILO`Încărcare completăMeniul de boot afișat cu succes

Procedura de recuperare

Dacă LILO nu reușește să booteze după o actualizare a nucleului:

  1. Bootați de pe un CD live sau un mediu de recuperare.
  2. Montați partiția rădăcină: `mount /dev/sda1 /mnt`
  3. Chroot: `chroot /mnt`
  4. Verificați că `/etc/lilo.conf` indică calea corectă a nucleului.
  5. Rulați din nou: `/sbin/lilo -v`
  6. Reporniți.

Dacă fișierul map însuși este corupt, este posibil să fie nevoie să reinstalați pachetul `lilo` pentru a restaura `/boot/boot.b` înainte de a rula din nou comanda.

Considerații de securitate

LILO precede modelele moderne de securitate a firmware-ului și are mai multe limitări importante:

  • Fără suport Secure Boot: LILO nu poate participa în lanțul de încredere UEFI Secure Boot. Pe sistemele unde verificarea integrității firmware-ului este necesară, GRUB2 cu un shim semnat este obligatoriu.
  • Slăbiciuni ale protecției prin parolă: Directiva `password=` din `lilo.conf` stochează credențialele în text simplu. Restricționați strict permisiunile fișierului (`chmod 600 /etc/lilo.conf`, deținut de root).
  • Vulnerabilitate la accesul fizic: Fără o parolă BIOS/UEFI, un atacator cu acces fizic poate boota de pe suporturi externe și ocoli complet LILO.
  • Fără integrare TPM: LILO nu poate efectua measured boot sau interacționa cu un TPM pentru atestare, spre deosebire de GRUB2 cu module adecvate.

Pentru serverele unde criptarea discului, measured boot sau atestarea de la distanță fac parte din arhitectura de securitate — cum ar fi un VPS cu cPanel sau un Server Dedicat întărit — aceste limitări fac LILO inadecvat.

Migrarea de la LILO la GRUB2

Dacă întrețineți un sistem vechi care rulează încă LILO și trebuie să migrați:

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

“`

Nu eliminați pachetul `lilo` până când nu ați confirmat că GRUB2 bootează cu succes. Păstrați un USB de recuperare live disponibil în timpul migrării.

Dacă serverul dvs. folosește Panouri de Control VPS care interacționează cu bootloader-ul (de exemplu, pentru comutarea nucleului sau modul de recuperare), verificați compatibilitatea panoului cu GRUB2 înainte de migrare.

Concluzii tehnice cheie: Matricea de decizie

Folosiți această listă de verificare pentru a determina dacă LILO este adecvat pentru mediul dvs.:

Folosiți LILO dacă:

  • Sistemul folosește firmware BIOS (nu UEFI)
  • Discul folosește tabela de partiții MBR (nu GPT)
  • Nucleul și structura partiției sunt statice și se schimbă rar
  • Amprenta bootloader-ului trebuie minimizată (sisteme embedded)
  • Studiați internalele secvenței de boot în scopuri educaționale

Nu folosiți LILO dacă:

  • Sistemul folosește firmware UEFI (LILO este incompatibil)
  • Discul folosește partiționare GPT
  • Nucleele sunt actualizate regulat prin managerul de pachete
  • Necesitați Secure Boot, atestare TPM sau measured boot
  • Sistemul folosește LVM, software RAID sau Btrfs pentru sistemul de fișiere rădăcină
  • Aveți nevoie de editarea interactivă a parametrilor de boot pentru depanare
  • Sistemul este conectat la internet sau supus cerințelor de conformitate în materie de securitate

Regulă operațională: Ori de câte ori editați `/etc/lilo.conf` sau actualizați un nucleu pe un sistem gestionat de LILO, rularea `/sbin/lilo -v` nu este opțională — este la fel de obligatorie ca editarea în sine. Automatizați acest lucru cu un hook post-instalare al nucleului dacă managerul dvs. de pachete îl suportă.

Întrebări frecvente

Ce se întâmplă dacă actualizez nucleul Linux pe un sistem LILO fără a rula `/sbin/lilo`?

Fișierul map al LILO indică în continuare adresele blocurilor de disc ale nucleului vechi. Sistemul va boota nucleul anterior ca și cum actualizarea nu s-ar fi produs niciodată — sau, dacă imaginea nucleului vechi a fost suprascrisă, va încărca date corupte și va intra în panică. Rulați întotdeauna `/sbin/lilo -v` imediat după orice actualizare a nucleului.

Poate LILO să booteze de pe un disc partiționat GPT?

Nu în mod fiabil. LILO a fost proiectat pentru tabele de partiții MBR. Discurile GPT folosesc un MBR de protecție care permite tehnic instalarea LILO, dar LILO nu are conștientizarea intrărilor de partiții GPT și nu poate localiza în mod fiabil partițiile dincolo de primele patru. Folosiți GRUB2 pentru orice disc GPT.

Este LILO compatibil cu sistemele UEFI?

Nu. LILO este un bootloader din era BIOS, fără suport pentru aplicații EFI. Pe sistemele UEFI, firmware-ul așteaptă un binar `.efi` în format PE în Partiția de Sistem EFI. LILO nu poate furniza acest lucru. GRUB2, systemd-boot sau rEFInd sunt alegerile corecte pentru UEFI.

Care este diferența dintre valoarea `timeout` a LILO și secundele reale?

Directiva `timeout` este măsurată în zecimi de secundă. O valoare de `50` este egală cu 5 secunde, `100` este egală cu 10 secunde. Aceasta este o configurare greșită frecventă — administratorii care se așteaptă la un timeout de 50 de secunde și setează `timeout=50` vor obține o fereastră de 5 secunde în schimb.

Poate LILO să booteze de pe volume LVM sau software RAID?

Nu. Deoarece LILO rezolvă locațiile nucleului la adrese absolute ale blocurilor de disc la momentul instalării, nu poate gestiona straturile de abstractizare introduse de LVM sau MD RAID. Partiția `/boot` trebuie să se afle pe o partiție simplă accesibilă direct de BIOS. Acesta este unul dintre principalele motive arhitecturale pentru care GRUB2 a înlocuit LILO în distribuțiile Linux moderne.

15%

Economisește 15% la toate serviciile de găzduire

Testează-ți abilitățile și obține Reducere la orice plan de găzduire

Utilizați codul:

Skills
Începeți