User Tools

Site Tools


установка_и_настройка_загрузчика_lilo

This is an old revision of the document!


Установка и настройка загрузчика LILO

В недалёком прошлом стандартным загрузчиком Linux был LILO - LInux LOader. От более распространённого на данный момент GRUB его отличает в разы меньший размер и простота в настройке.

О некоторых особенностях устройства LILO

LILO состоит из двух частей: первичного загрузчика LI и вторичного LO.

LI располагается в MBR и умеет только загружать LO. Вторичный загрузчик передает управление ядру или вызывает загрузчик другой операционной системы, например, богомерзкой Windows. LO находится в файле на диске (по умолчанию /boot/boot.b).

О файловых системах LI и LO не знают. Из-за этого LI не способен понять что такое “/boot/boot.b”. Поэтому адрес размещения этого файла LI хранит в виде “цилиндр/головка/сектор”. В LI его записывает утилита /sbin/lilo, которую нужно запускать после любого изменения LO или его конфигурационного файла - /etc/lilo.conf.

У вторичного загрузчика LO есть собственная карта размещения файлов (по умолчанию /boot/map). По ней он ищет загружаемое ядро и образ виртуального диска, поэтому после любого изменения ядра или загружаемых модулей тоже обязательно запускать утилиту lilo. Эта утилита обновляет загрузчику информацию о расположении данных на диске, которая, как было сказано выше, нужна ему в весьма специфичном виде, ввиду непонимания файловых систем.

Любопытно, что четыре буквы приглашения LILO — это отметки об успешном окончании четырех шагов загрузки. Если вы видите меньше четырех букв, то это значит:

  • L<xx> : первичный загрузчик запустился, но не смог загрузить вторичный. Двузначное число хх — это код ошибки. Обычно причина ошибки — аппаратный сбой.
  • LI : LI смог загрузить вторичный загрузчик, но не смог передать ему управление. Причина: перемещение /boot/boot.b без запуска утилиты lilo. Чаще всего это значит, что вы удалили или добавили раздел.
  • LIL : LO запустился, но не смог прочитать карту размещения файлов. Аппаратный сбой.
  • LIL? : LO загрузился по неправильному адресу. Причина — перемещение /boot/boot.b без запуска утилиты lilo.
  • LIL- : испорчена карта размещения файлов. Причина — перемещение /boot/map без запуска утилиты lilo.
  • Ещё одной причиной любой из этих ошибок может быть неправильное указание геометрии диска (несовпадение ее с фактической).

Установка

На ALT Linux и большинстве других дистрибутивов

apt-get install -y lilo

Настройка

Если после устновки пакета файла /etc/lilo.conf ещё не существует, его создаст автоматически следующая команда

liloconfig

Cозданный файл может указывать загрузчику на другое ядро и образ RAM-диска, нежели те, которые ранее загружал GRUB, и, как правило, отсуствуют пункты для загрузки других систем, установленных на ваш компьютер.

Пример стандартного файла /etc/lilo.conf

  # /etc/lilo.conf
  
  ### LILO global section ### 
  
  lba32 # Large block access
  boot = /dev/sda # Предписывает записать MBR на первый жёсткий диск. Без этой опции /sbin/lilo не выдаст ошибку, однако загрузчик установится в никуда
  root = /dev/sda5 # Корень файловой системы в моём случае расположен на пятом разделе
  map = /boot/map # Карта LO
  install = menu # Будет псевдографическое меню загрузчика
  menu-scheme = Wb:Yr:Wb:Wb # Цветовая схема меню
  prompt # Будет выдаваться приглашение загрузчика. Если пункт отсутствует, приглашение можно получить по нажатию Shift
  compact # BIOS data check будет проходить быстро
  timeout = 100 # Задержка 10(!) секунд перед выбором пункта по умолчанию
  vga = normal # Графический режим 80x25 символов. Есть ещё ext - 80x50
  
  default = Linux # Ядро, загружаемое по умолчанию, соответствующее указанной метке. Если не указано, загружается первое в списке.
  
  ### LILO per-image section ###
  
  image = /boot/vmlinuz-std-def
        label = "Linux"
        read-only # Режим монтирования на время загрузки
        initrd = /boot/initrd-std-def.img # Для данного ядря использовать этот образ initrd
        root = /dev/sda5 # Монтировать этот раздел как корневой
        append="init=/usr/bin/myInit" # Передача ядру параметров. Необязательный пункт.
  
  other = /dev/sda1 # Раздел, накотором загрузчик маздая
        label = "MS-Windows"
        table = /dev/sda # Диск, на котором таблица разделов

Установка фонового изобразения

Подготовим фоновую картинку:

  • Откройте изоборажение в GIMP.
  • Сожмите его до размеров 640×480. Изображение → Размер изображения… → Разомкнуть цепочку, чтобы изменение высоты не влияло на изменение ширины и наоборот → Изменить
  • Переведите изображение в индексированный режим. Изображение → Режим → Индексированный
  • Там же выберите “Создать оптимальную палитру” и установите 16-цветовой режим.
  • Откройте диалог “Цветовая карта”. Обычно её можно найти на одной из шести маленьких вкладок в правой верхней части редактора. Выберите, какие цвета вы будете использовать в дальнейшем для отображения пунктов загрузчика и часов. В файле lilo.conf необходимо ссылаться на цвета по их индексу, которые вы найдёте в цветовой карте.
  • Экспортируйте изображение в формат bmp и переместите его в папку /boot. В диалоге экспорта установите параметр «Не сохранять данные о цветовом пространстве».

Теперь приступим к редактированию файла lilo.conf. Ниже перечислены некоторые параметры, которыми можно настроить графическое меню. За дополнительной информацией обращайтесь в man lilo.conf.

  • bitmap=<bitmap-file> Пропишите здесь путь к файлу, который вы подготовили.
  • bmp-colors=<fg>,<bg>,<sh>,<hfg>,<hbg>,<hsh>

Данный параметр задает цвета в меню. Каждый параметр влияет на свой объект: передний план (foreground), фон (background) и тени текста (shadow) соответственно. Остальные 3 параметра означают то же самое, но для выбранного (активного) пункта меню. При перечислении не используйте пробелы. Значения параметров - индексы палитры, которые были определены на предыдущем шаге. Если Вы не выбрали цвет, то можно оставить пустое значение (но не забудьте запятую). По умолчанию, фон прозрачный, и тени отсутствуют.

  • bmp-table=<x>,<y>,<ncol>,<nrow>,<xsep>,<spill> В данном параметре указывается место, где будет расположено меню. X и Y - числовые координаты, также можно указывать единицу измерения (англ. p) для использования пиксельных координат.
  • bmp-timer=<x>,<y>,<fg>,<bg>,<sh> В данном параметре описывается местоположение и цвет таймера, который отсчитывает время до загрузки выбранного по умолчанию пункта. Как и в предыдущем случае, цвета - индексы палитры, X и Y - координаты.

Пример файла /etc/lilo.conf

  # /etc/lilo.conf
  
  ### LILO global section ### 
  
  lba32
  boot = /dev/sda
  root = /dev/sda5
  map = /boot/map 
  # install = menu 
  # menu-scheme = Wb:Yr:Wb:Wb
  prompt
  compact
  timeout = 100 
  vga = normal
  
  bitmap=/boot/FreeCrunchTime.bmp
  bmp-colors=6,0,0,6,0,2
  bmp-table=10p,10p
  bmp-timer=20p,50p,6,0,0
  
  default = Linux
  ...
  ...
  ...

Возможный результат

Напутствие

Никогда не забывайте говорить загрузчику о любых вносимых в него изменениях

lilo

Примечание

Командная строка загрузчика

Прервать автозагрузку можно нажатием клавиши Shift (или Tab). Появится приглашение вида “boot:”, которое будет ожидать от пользователя ввода имени загружаемого образа. Очередное нажатие Tab позволит вывести список загружаемых образов.

Если вы введете команду help, то получите список всех команд LILO.

Чтобы загрузиться в однопользовательском режиме (например, для восстановления системы после аварии), введите в строке приглашения:

<метка_варианта> single

single - это один из параметров ядра, есть ещё много других. Некоторые из них смотрите ниже.

Параметры ядра

Параметр Описание Пример
boot_delay Вывод сообщений ядра с задержкой в указанное количество секунд boot_delay=1
vga Задаёт VGA-режим. При значении “ask” ядро спрашивает какой режим нужно использовать vga=ask (ещё normal или ext)
quiet Отключает большинство сообщений ядра quiet
splash При загрузке отображается графическая завтавка splash
init Позволяет выбрать программу, которая будет самым старшим родительским процессом, будь то система инициализации или любая другая программа, например bash init=/bin/bash
root Позволяет указать раздел диска с корневой файловой системой root=/dev/sda5
ro Монтирует корневую файловую систему в режиме “Только чтение”. Применяется по умолчанию. После проверки файловой системы программой fsck корневая файловая система перемонтируется в режим rw “Чтение и запись”.
rw Монтирует корневую файловую систему в режиме “Чтение и запись”. При его использовании нельзя запускать программы типа fsck
rootdelay Ждать указанное количество секунд перед монтированием корневой файловой системы rootdelay=10
rootflags Задаёт флаги корневой файловой системы
rootfstype Задаёт тип корневой файловой системы. Бывает полезен, если не удалось определить автоматически
rootwait Ожидание появления корневой файловой системы. Полезен, когда таковая расположена на съёмном ностеле (флешке, диске). rootwait
mem Определяет объём оперативной памяти. Полезен, если ядро не может само справится с его подсчётом. Указывать объём надо обязательно с “M”, иначе ядро будет думать, что указанное число - байты mem=760M
reboot Задаёт тип перезагрузки: cold или warm, т. е. “холодная” или “горячая” reboot=warm
single Запускает систему в однопользовательском режиме для отладки single
nodmraid Отключает программные RAID-массивы, организованные на уровне BIOS nodmraid
nopcmcia Отключает PCMCIA-карты (для ноутбуков). Говорят, с ними бывают проблемы. nopcmcia
nodma Отключает DMA (Direct Memory Access) для IDE-устройств nodma
noapm Отключает APM (Advanced Power Management) - расширенное управление питанием noapm
nousb Отключает поддержку USB nousb
noscsi Отключает поддержку SCSI noscsi
pci=noacpi Не использовать ACPI для управления PCI-прерываниями pci=noacpi
acpi=off Польностью отключает ACPI (Advanced Configuration and Power Interface). Полезен на некоторых ноутбуках, когда не удаётся установить (а потом загрузить) Linux acpi=off
edd=off Отключает EDD (Enhanced Dick Drive). Если загрузка остановилась на сообщении ядра Probing EDD, этот параметр должен помочь edd=off
elevator Позволяет выбрать планировщик ввода/вывода elevator=планировщик

Настройка загрузчика из LiveCD

На данном компьютере нужно загрузиться с флешки (диска) в live или rescue режим. Далее системе нужно поменять корневой каталог.

[rescue]# lsblk
NAME   MAJ:MIN RM   SIZE RO TYPE MOUNTPOINTS
sda      8:0    0 465,8G  0 disk  
├─sda1   8:2    0   4,1G  0 part 
├─sda2   8:3    0  59,6G  0 part  
├─sda3   8:4    0     1K  0 part 
├─sda4   8:5    0  20,5G  0 part 
└─sda5   8:6    0 381,3G  0 part
sdb      8:0    0   8,0G  0 disk /
sr0     11:0    1  1024M  0 rom

Корневым каталогом должен стать корневой раздел системы, установленной на жёсткий диск - /dev/sda2. Монтируем его и некоторые разделы текущей системы - они пригодятся в процессе генерации - в /mnt.

[rescue]# mount /dev/sda2 /mnt
[rescue]# mount --bind /proc /mnt/proc
[rescue]# mount --bind /dev /mnt/dev
[rescue]# mount --bind /sys /mnt/sys

Меняем корень

[rescue]# chroot /mnt

Теперь можно редактировать конфиг загрузчика

[rescue /]# $EDITOR /etc/lilo.conf

Применяем изменения

[rescue /]# lilo

После того как отработала команда нужно покнуть среду croot. Это делается сочетанием клавиш Ctrl + D.

Можно перезагружаться

[rescue]# reboot

Возможные ошибки (ДОПИСАТЬ)

из DOC — Unable to mount root fs on unknown-block(N,M) Сообщение возможно в следующих случаях:

  1. не обнаруживается жесткий диск - наиболее вероятно при unknown-block(0,0)
  2. не обнаруживается раздел (нет поддержки и др.)
  3. нет доступа к файловой системе - наиболее вероятно при unknown-block(N,0)
  4. не обнаруживается раздел, потому что неправильное устройство было передано в конфигурации загрузчика
  5. раздел обнаруживается, но есть проблемы с загрузой (причин много) - наиболее вероятно при unknown-block(N,M)

(например, проблемы с initramfs-linux.img (отстутствие, повреждение и др.)

Расшифровка block(0,0), block(N,0), block(N,M) …. без перевода

  1. (0,0) : first number 0 means could not read from the disk at all
  2. (N,M) : N is some ID that got assigned to the disk. …. M is the partition withing that ID as in /dev/sdaM.
  3. (N,0) : partition 0 means a raw non-partitioned partition as in /dev/sda

https://archlinux.org.ru/forum/topic/21604/

Device Boot Start End Sectors Size Id Type

/dev/sda1 2048 4194303 4192256 2G 82 Linux swap / Solaris

/dev/sda2 * 4194304 35321855 31127552 14.8G 83 Linux

/dev/sda3 35321856 76689407 41367552 19.7G 83 Linux

/dev/sda4 76689408 250066943 173377536 82.7G 5 Extended

/dev/sda5 76691456 250066943 173375488 82.7G 83 Linux

GPT PMBR size mismatch (2642919 != 15237119) will be corrected by write. The backup GPT table is not on the end of the device.

Потом я ввёл

parted -l /dev/sda
Fix

Читайте также

Процесс загрузки Linux от и до

Д. Н. Колисниченко, Питер В. Аллен - Linux. Полное руководство. Страница 286. https://vk.com/doc-192448749_653131007?hash=aZCBFHAzAuBHulPxCQsrlOZDXV0Zv3tFPYZaeflQD2c

Arch Linux Wiki https://wiki.archlinux.org/title/LILO_(Русский)

установка_и_настройка_загрузчика_lilo.1726495333.txt.gz · Last modified: 2024/09/16 14:02 by uf4n