LILO, LiLo (skr. od linux loader) – program komputerowy pozwalający wybrać i zainicjować system operacyjny po uruchomieniu komputera (tzw. program rozruchowy).

LILO
Ilustracja
Autor Werner Almesberger (1992–1998),
John Coffman (1999–2007),
Joachim Wiedorn (od 2010)
Język programowania Asembler, C
Rodzaj Program rozruchowy
Licencja Licencja BSD
Strona internetowa

LILO nie jest zależne od żadnego systemu plików, potrafi załadować jądro systemu operacyjnego Linux lub inny kod wykonywalny zarówno z dyskietki, jak i z dysku twardego. Program obsługuje od 1 do 16 różnych wpisów. Różne parametry startowe (takie jak urządzenie, z którego należy zamontować główny system plików) mogą być ustawiane niezależnie dla każdego wpisu.

LILO może zostać zainstalowany jako główny program rozruchowy w MBR (uruchamiany bezpośrednio przez BIOS) lub w sektorze rozruchowym partycji (uruchamiany pośrednio – z innego programu rozruchowego). Dla komputerów wykorzystujących UEFI zamiast BIOSu stosuje się program elilo[1].

LILO a GRUB

edytuj

LILO jest wykorzystywane praktycznie od pojawienia się pierwszego jądra Linux. Obecnie jednak coraz częściej jest zastępowane przez GRUB-a.

Dla początkujących użytkowników konfiguracja GRUB-a może wydawać się trudniejsza, ale po instalacji obsługa jest znacznie prostsza, gdyż po dodaniu nowego jądra nie trzeba zapisywać danych do sektora rozruchowego, natomiast stosując LILO jako program rozruchowy trzeba umieścić plik obrazu w stałym miejscu oraz każdorazowo po zmianie konfiguracji jądra dokonać aktualizacji sektora rozruchowego poleceniem lilo.

Opcje globalne

edytuj
  • backup = plik zapasowy – wskazuje nazwę pliku, do którego kopiowany zostaje oryginalny sektor startowy, zamiast (standardowo) do pliku /boot/boot.nr_urządzenia (nr_urządzenia jest zależny od typu dysku)
  • boot = urządzenie inicjacji – ustala nazwę urządzenia, które powinno zawierać sektor startowy; w przypadku gdy nie ma zmiennej boot, domyślnie wybrane zostaje urządzenie aktualnie zamontowane jako katalog główny
  • compact – uaktywnia tryb, w którym LILO łączy żądania odczytu sąsiednich sektorów dysku w celu przyspieszenia inicjacji; używanie tej opcji jest zalecane przy uruchamianiu z dyskietki; użycie opcji compact może być jednak sprzeczne z opcją linear
  • default = nazwa – jako domyślny obraz startowy wskazuje nazwę obrazu; w przypadku braku tej opcji, zastosowany zostanie pierwszy obraz określony w pliku konfiguracyjnym
  • delay = czas sekundy – wskazuje w dziesiątych częściach sekundy czas, po którym nastąpi inicjacja obrazu; w przypadku braku opcji delay, LILO uruchamia się bez czekania, a w przypadku użycia opcji serial, czas wynosi co najmniej 20
  • disk = nazwa urządzenia – definiuje parametry dysku wskazanego przez nazwę urządzenia; przeważnie opcja ta nie jest potrzebna, gdyż LILO samodzielnie potrafi zdefiniować parametry dysku
  • bios = kod urządzenia bios – numer BIOS-u używany do definiowania urządzenia; zazwyczaj pierwszy dysk to 0x80, a drugi to 0x81
  • cylinders = cylindry – liczba cylindrów na dysku
  • heads = głowice – liczba głowic na dysku
  • innaccessible – informuje LILO, o tym że BIOS nie może czytać dysku; stosuje się go do zabezpieczenia systemu, aby nie stał się nieinicjowany, w przypadku gdy LILO myśli, że BIOS może go odczytać
  • partion = urządzenie partycji – rozpoczyna nową sekcję partycji
  • sectors = sektory – liczba sektorów na ścieżce
  • disktab = plik tablica dysku – ustala ścieżkę pliku disktab
  • ignore-table – informuje LILO, aby ignorował uszkodzone tablice partycji
  • fix-table – umożliwia zastosowanie adresów 3D w postaci sektor/głowica/cylinder w tablicach partycji
  • force-backup = plik zapasowy – działa podobnie do opcji backup, ale nadpisuje istniejącą kopie zapasową
  • install = sektor inicjacji – instaluje wskazany plik jako nowy sektor inicjacji, zamiast domyślnego /boot/boot.b
  • linear – generuje, niezależne od geometrii dysku, linowe adresy sektorów, zamiast adresów 3D;
  • map = plik mapy – wskazuje położenie pliku mapy; standardowo /boot/map
  • message = plik komunikatu – określa plik, którego zawartość ma być wyświetlona przed znakiem zgłoszenia inicjacji; np. może być to znak (ctrl L), który czyści ekran; w przypadku modyfikacji pliku komunikatu, bądź zmienienia jego lokalizacji, należy przebudować plik mapy; plik komunikatu może mieć maksymalnie 65 535 bajtów
  • timeout = czas sekundy – określa czas oczekiwania liczony w dziesiątych częściach sekundy na naciśnięcie klawisza; jeśli w ciągu tego czasu nie zostanie naciśnięty żaden klawisz inicjowany zostaje domyślny obraz
  • verbose = poziom – określa poziom opisu aktualnego stanu (od 0 do 5 – im większa cyfra tym opis jest dokładniejszy)
  • prompt – wymusza wprowadzenie konfiguracji inicjującej z klawiatury; jeśli opcja prompt będzie włączona, a timeout wyłączona przeładowanie systemu będzie niemożliwe bez udziału użytkownika
  • serial = parametry – wskazuje parametry portu szeregowego, który jest inicjowany i boot loader akceptuje dane wysłane z niego i z klawiatury;
    parametry:
    • port – wybór jednego z czterech portów szeregowych (numeracja rozpoczyna się od 0, które odpowiada COM1)
    • bps – liczba bodów portu; obsługiwane ilości: 110, 150, 300, 600, 1200, 2400, 4800, 9600 (standardowo jest to 2400)
    • parity – określa parzystość linii; ‘n’ – brak parzystości, ‘e’ – linia szeregowa parzysta, ‘o’ – linia szeregowa nieparzysta
    • bits – liczba bitów danych na znak, jednak obsługiwane jest jedynie 7 lub 8 bitów; 8 gdy brak parzystości, w przeciwnym razie 7

Opcjami globalnymi mogą być również opcje jądra: append, read-only, read-write, root, vga

Opcje obrazu

edytuj
  • alias = nazwa – ustawia drugą nazwę dla obrazu; nazwy można używać zamiennie z tą zdefiniowaną opcją label
  • image = nazwa ścieżki – określa plik zawierający obraz startowy jądra Linuksa;
  • label = nazwa – ustala nazwę aktualnego obrazu jądra
  • loader = łańcuchowy program ładowania – wskazuje program ładowania dla innego systemu operacyjnego, któremu LILO przekazuje kontrole w celu uruchomienia tego systemu; w przypadku gdy system będzie startował z dyskietki, lub z dysku który nie jest pierwszym dyskiem twardym, musi zostać ustalony „łańcuchowy” program ładujący
  • lock – mówi programowi LILO, aby zapisał wiersz poleceń inicjacji, a następnie używał go jako domyślnego przy następnych inicjacjach;
  • optional – powoduje pominięcie obrazu, jeśli nie był on dostępny przy tworzeniu mapy
  • password = hasło – powoduje ochronę hasłem danego obrazu
  • range = sektory – wskazuje zakres sektorów mający zostać zmapowane do pliku mapy, gdy obraz startuje z urządzenia; można podać zasięg: początek – koniec lub początek + liczba, gdzie początek i koniec to numery sektorów, a liczba określa ile należy dodać do początku; w przypadku wskazania tylko początku zmapowany zostaje tylko jeden sektor
  • restricted – informuje, że hasło przy inicjacji obrazu jest potrzebne gdy w wierszu poleceń zostaną określone parametry
  • table = urządzenie – określa urządzenie zawierające tablicę partycji; brak tej opcji oznacza że program ładowania początkowego nie poinformuje o partycjach inicjowany system operacyjny; opcja stosowana dla nielinuksowych systemów operacyjnych; opcja nie może być stosowana z opcją unsafe
  • unsafe – mówi, że sektor inicjacji nie ma być dostępny podczas tworzenia mapy; opcja stosowana dla nielinuksowych systemów operacyjnych; opcja nie może być stosowana z opcją table

Opcje jądra

edytuj
  • append = ciąg – dołącza ciąg do parametrów przekazywanych do jądra; zazwyczaj tę opcję stosuje się do określenia parametrów sprzętowych
  • initrd = nazwa pliku – wskazuje plik, który będzie ładowany przy inicjowaniu dysku RAM
  • literal = ciąg – działa tak jak append, ale zamiast dołączania zastępuje obecne opcje jądra
  • noinitrd – gwarantuje, że plik initrd zostanie przeczytany po inicjacji jądra
  • prompt ramdisk = 0/1 – mówi, czy jądro potrzebuje dyskietki zawierającej obraz dysku RAM; 0 – nie, 1 (domyślnie) – tak
  • ramdisk = rozmiar – stosuje się tylko dla jąder starszych niż wersja 1.3.48; dla nowszych jąder stosuje się opcje: load_ramdisk, prompt_ramdisk, ramdisk_size, ramdisk_start
  • ramdisk size = n – wskazuje ilość pamięci przeznaczonej na dysk RAM; wartość podawana w kilobajtach; domyślnie 4096
  • ramdisk start = przesunięcie – stosowana przy instalacji Linuksa w przypadku gdy obraz RAM i plik jądra są na tej samej dyskietce; przesunięcie informuje, gdzie rozpoczyna się obraz RAM na dyskietce; wartość w kilobajtach
  • read-only – mówi, że główny system plików montowany jest w trybie tylko do odczytu
  • read-write – mówi, że główny system plików montowany jest w trybie odczytu i zapisu
  • root = urządzenie głównego katalogu – określa urządzenie, które zostanie zamontowane jako główny katalog
  • vga = tryb – określa tekstowy tryb VGA ustawiany podczas inicjalizacji; istnieją następujące tryby:
    • ask – zapytanie użytkownika o tryb tekstowy
    • extended (zamiennie ext) – wybór trybu 80x50
    • normal – wybór trybu 80x25

Opcje jądra mogą być określane w pliku lilo.conf, bądź w wierszu poleceń

Opcje polecenia „lilo”

edytuj
  • -C plik konfiguracyjny – określa plik konfiguracyjny zamienny dla pliku domyślnego (lilo.conf);
  • -I etykieta – wyświetla na ekranie ścieżkę do jądra wskazaną przez etykietę, bądź komunikat -błędu w przypadku nie znalezienia pasującej etykiety
  • -q – wyświetla aktualnie zmapowane pliki
  • -r główny katalog – przed rozpoczęciem działania lilo przekierowuje do wskazanego katalogu; opcja wykorzystywana do naprawy konfiguracji
  • -R wiersz poleceń – określa standardowe polecenie dla programu startowego, które zostanie wykorzystane następnym razem (ale tylko raz, ponieważ zostanie ono usunięte przez program ładujący)
  • -t – informuje, że jest to test; podczas użycia tego polecenia nie zostanie zapisany nowy sektor inicjacji ani plik map
  • -u nazwa urządzenia – sprawdza aktualność urządzenia na podstawie przypisanego mu czasu, a następnie odinstalowuje lilo, odtwarzając zachowany sektor startowy z pliku /boot/boot.nr_urządzenia
  • -U nazwa urządzenia – robi to samo co polecenie -u, z tą różnicą, że nie sprawdza aktualności
  • -v – zwraca wynik w postaci opisu
  • -V – wyświetla numer używanej wersji lilo

Parametry uruchomieniowe LILO

edytuj

Kombinacja klawisza ⇪ Caps Lock bądź Scroll Lock z Ctrl, ⇧ Shift lub Alt (alternatywnie podanie dyrektywy prompt) powoduje przełączenie LILO w tryb interaktywny. Chcąc wybrać konfigurację inicjującą należy wprowadzić nazwę zdefiniowaną jako etykieta (z ang. label). Po wciśnięciu klawisza ‘Tab’, wyświetlą się dostępne konfiguracje startowe. Ponadto można przekazywać parametry (podobnie jak przy uruchamianiu programu z shella). LILO przekazuje podczas uruchamiania do jądra linię poleceń, która powstaje poprzez połączenie tych parametrów. Następnie wszystkie parametry zawierające znak =, zostają umieszczone w środowisku init, a pozostałe zostają przekazane jako zwykłe parametry.

Komunikaty

edytuj

Komunikaty startowe LILO

edytuj
  • no message – żaden fragment programu rozruchowego LILO nie został załadowany
  • L – załadowana została tylko pierwsza część LILO
  • LI – druga część została załadowana, ale jej wykonywanie nie powiodło się
  • LIL – druga część została uruchomiona, ale nie może ona odczytać tablic deskryptorów z pliku mapy
  • LIL? – załadowano drugą część programu ładującego pod niewłaściwy adres
  • LIL- – druga część odczytała tablicę deskryptorów, ale jest ona błędna
  • LILO – pomyślnie załadowano program ładujący

Komunikaty o błędach

edytuj
Kod błędu Nazwa Opis
0x00 Internal error błąd wewnętrzny; generowany przez procedurę odczytywania sektorów, w przypadku wykrycia wewnętrznej niezgodności; prawdopodobnie przyczyną tego błędu jest nieprawidłowy plik mapy
0x01 Illegal instruction niedopuszczalny rozkaz
0x02 Address label not found nie znaleziono etykiety adresu; błąd przy odczytywaniu nośnika
0x03 Disk is write protected dysk zabezpieczony przed zapisem
0x04 Sector not found nie znaleziono sektora; błąd spowodowany poprzez nieprawidłowe dane dotyczące geometrii; niekiedy błąd ten jest spowodowany przez flagę compact
0x06 Change line active aktywna linia zmiany; zazwyczaj błąd spowodowany poprzez otwarcie oraz zamknięcie napędu podczas procesu uruchamiania
0x08 DMA overflow nadmiar DMA
0x09 DMA transfer exceeds 64K limit transfer DMA przekracza limit 64K
0x0C Invalid media niewłaściwy nośnik; błąd spowodowany uszkodzonym nośnikiem
0x10 CRC error błąd CRC; błąd informujący o tym iż dane na nośniku są uszkodzone
0x20 Controller error błąd sterownika
0x40 Seek error błąd szukania; problem z nośnikiem
0x80 Timeout przekroczenie limitu czasu; napęd dysku jeszcze nie jest przygotowany, bądź jest otwarty

Błędy o nr: 0x01, 0x03, 0x08, 0x20 nie powinny nigdy wystąpić.

Zobacz też

edytuj

Przypisy

edytuj

Bibliografia

edytuj
  • „Linux Kernel – Jądro Systemu” – M. Beck, H. Bohme, M. Dziadzka, U. Kunitz, R. Magnus, D. Verworner
  • „Jak działa LINUX” – S. Shavor, J. D’Anjou, S. Fairbrother, D. Kehn, J. Kellerman, P. McCarty
  • „Linux – podręcznik użytkownika” – E. Siever
  • „Linux – sterowniki urządzeń” – A. Rubini

Linki zewnętrzne

edytuj