This is an old revision of the document!
Table of Contents
Установка и настройка загрузчика 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 # Zapisat MBR na первvyi жёсткого диска. Bez etogo parametra lilo otrabotaet uspeshno, no rezultat budet ne tot, chto nado
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) Сообщение возможно в следующих случаях:
- не обнаруживается жесткий диск - наиболее вероятно при unknown-block(0,0)
- не обнаруживается раздел (нет поддержки и др.)
- нет доступа к файловой системе - наиболее вероятно при unknown-block(N,0)
- не обнаруживается раздел, потому что неправильное устройство было передано в конфигурации загрузчика
- раздел обнаруживается, но есть проблемы с загрузой (причин много) - наиболее вероятно при unknown-block(N,M)
(например, проблемы с initramfs-linux.img (отстутствие, повреждение и др.)
Расшифровка block(0,0), block(N,0), block(N,M) …. без перевода
- (0,0) : first number 0 means could not read from the disk at all
- (N,M) : N is some ID that got assigned to the disk. …. M is the partition withing that ID as in /dev/sdaM.
- (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_(Русский)
