====== Установка и настройка загрузчика 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** : первичный загрузчик запустился, но не смог загрузить вторичный. Двузначное число хх — это код ошибки. Обычно причина ошибки — аппаратный сбой. * **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 # Корень файловой системы в моём случае расположен на пятом разделе # Также можно указать корневой раздел в формате UUID. Уточнить нужный UUID можно командой lsblk -o +uuid,name #root=/dev/disk/by-uuid/XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX 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 # Монтировать этот раздел как корневой. При загрузке с initrd этот параметр можно не указывать append="init=/usr/bin/myInit root=/dev/sdb2" # Передача ядру параметров. Необязательный пункт. other = /dev/sda1 # Раздел, накотором загрузчик маздая label = "MS-Windows" table = /dev/sda # Диск, на котором таблица разделов ==== Установка фонового изобразения ==== Подготовим фоновую картинку: * Откройте изоборажение в GIMP. * Сожмите его до размеров 640x480. Изображение -> Размер изображения... -> Разомкнуть цепочку, чтобы изменение высоты не влияло на изменение ширины и наоборот -> Изменить * Переведите изображение в индексированный режим. Изображение -> Режим -> Индексированный * Там же выберите "Создать оптимальную палитру" и установите 16-цветовой режим. * Откройте диалог "Цветовая карта". Обычно её можно найти на одной из шести маленьких вкладок в правой верхней части редактора. Выберите, какие цвета вы будете использовать в дальнейшем для отображения пунктов загрузчика и часов. В файле lilo.conf необходимо ссылаться на цвета по их индексу, которые вы найдёте в цветовой карте. * Экспортируйте изображение в формат bmp и переместите его в папку /boot. В диалоге экспорта установите параметр «Не сохранять данные о цветовом пространстве». Теперь приступим к редактированию файла lilo.conf. Ниже перечислены некоторые параметры, которыми можно настроить графическое меню. За дополнительной информацией обращайтесь в man lilo.conf. * bitmap= Пропишите здесь путь к файлу, который вы подготовили. * bmp-colors=,,,,, Данный параметр задает цвета в меню. Каждый параметр влияет на свой объект: передний план (foreground), фон (background) и тени текста (shadow) соответственно. Остальные 3 параметра означают то же самое, но для выбранного (активного) пункта меню. При перечислении не используйте пробелы. Значения параметров - индексы палитры, которые были определены на предыдущем шаге. Если Вы не выбрали цвет, то можно оставить пустое значение (но не забудьте запятую). По умолчанию, фон прозрачный, и тени отсутствуют. * bmp-table=,,,,, В данном параметре указывается место, где будет расположено меню. X и Y - числовые координаты, также можно указывать единицу измерения (англ. p) для использования пиксельных координат. * bmp-timer=,,,, В данном параметре описывается местоположение и цвет таймера, который отсчитывает время до загрузки выбранного по умолчанию пункта. Как и в предыдущем случае, цвета - индексы палитры, 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-logo_02.02.2024.jpg?|}} ===== Напутствие ===== Никогда не забывайте говорить загрузчику о любых вносимых в него изменениях 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=планировщик | | earlyprintk | Может оказаться полезным, когда возникает ситуация "Booting the kernel (entry_offset: 0x00000080).", и ядро не загружается дальше | earlyprintk=ttyS0 | ==== Настройка загрузчика из 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 ==== Возможные ошибки при загрузке ядра (ДОПИСАТЬ) ==== **TODO:** продублировать это в статью про зугрузку ядра из 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_loading_process|Процесс загрузки Linux от включения компьютера до ввода пароля]] Д. Н. Колисниченко, Питер В. Аллен - Linux. Полное руководство. Страница 286. https://vk.com/doc-192448749_653131007?hash=aZCBFHAzAuBHulPxCQsrlOZDXV0Zv3tFPYZaeflQD2c Arch Linux Wiki https://wiki.archlinux.org/title/LILO_(Русский)