В недалёком прошлом стандартным загрузчиком Linux был LILO - LInux LOader. От более распространённого на данный момент GRUB его отличает в разы меньший размер и простота в настройке.
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 — это отметки об успешном окончании четырех шагов загрузки. Если вы видите меньше четырех букв, то это значит:
На ALT Linux и большинстве других дистрибутивов
apt-get install -y lilo
Если после устновки пакета файла /etc/lilo.conf ещё не существует, его создаст автоматически следующая команда
liloconfig
Cозданный файл может указывать загрузчику на другое ядро и образ RAM-диска, нежели те, которые ранее загружал GRUB, и, как правило, отсуствуют пункты для загрузки других систем, установленных на ваш компьютер.
# /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 # Диск, на котором таблица разделов
Подготовим фоновую картинку:
Теперь приступим к редактированию файла lilo.conf. Ниже перечислены некоторые параметры, которыми можно настроить графическое меню. За дополнительной информацией обращайтесь в man lilo.conf.
Данный параметр задает цвета в меню. Каждый параметр влияет на свой объект: передний план (foreground), фон (background) и тени текста (shadow) соответственно. Остальные 3 параметра означают то же самое, но для выбранного (активного) пункта меню. При перечислении не используйте пробелы. Значения параметров - индексы палитры, которые были определены на предыдущем шаге. Если Вы не выбрали цвет, то можно оставить пустое значение (но не забудьте запятую). По умолчанию, фон прозрачный, и тени отсутствуют.
Пример файла /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=планировщик |
| earlyprintk | Может оказаться полезным, когда возникает ситуация “Booting the kernel (entry_offset: 0x00000080).”, и ядро не загружается дальше | earlyprintk=ttyS0 |
На данном компьютере нужно загрузиться с флешки (диска) в 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) Сообщение возможно в следующих случаях:
(например, проблемы с initramfs-linux.img (отстутствие, повреждение и др.)
Расшифровка block(0,0), block(N,0), block(N,M) …. без перевода
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_(Русский)