GRUB - лучшее решение для загрузки? Есть ли более легкая альтернатива?

26

У меня был довольно плохой опыт GRUB2. Я мог бы сказать (и сказал) некоторые неприятные вещи о его дизайне и процессе разработки. Мне особенно не нравятся его средства обновления: по любой причине он должен полуавтоматически обновлять несколько сценариев - один косвенно через другой в цепочке - для каждого обновления ядра - или много других незначительных (и, казалось бы, не связанных) изменений конфигурации.

Это прямо противоположно предыдущему опыту, с которым я столкнулся LILO- к которому я серьезно думаю вернуться - поскольку у меня никогда не было проблем с ним, и его конфигурация была довольно простой. Во-первых, насколько я помню, мне приходилось обновлять (или, точнее, только когда-либо обновлялось) один, просто управляемый текстовый файл конфигурации на каждое обновление ядра.

Так как же LILO работает на современном оборудовании с сегодняшними ядрами? Как работает GRUB? Как работают другие загрузчики? Должен ли я выполнить какие-либо предварительные условия, или это просто написать файл конфигурации и запустить liloкоманду, как я ее с любовью помню в старые времена? Обновляет ли пакет ядра (Debian / Ubuntu) обновление LILO, как это происходит с GRUB2?

Сообщество
источник
В зависимости от того, есть ли у вас тип прошивки EFI, вы можете обойтись без того, если вам нравится, и загрузить ядро ​​Linux из прошивки. Но вы все равно можете использовать LILO с EFI (eLILO в любом случае) или BIOS. Он находится в дереве исходников ядра и поддерживается. Если вы хотите знать, как выполнять EFI, я могу ответить на этот вопрос, но у меня нет личного опыта работы с LILO, просто знайте, что он сохраняется и работает.
mikeserv
Я помню, как использовал LILO в 2010 или 2011 году на Core 2 Duo. Я думаю, что это все еще должно работать (без учета UEFI и т. Д.), Архитектура ПК не сильно изменилась.
Ренан
@mikeserv, пожалуйста, напиши все, что ты знаешь о дуэте LILO-EFI. Любая информация по этой теме приветствуется.
Я на самом деле написал кое-что, что вы могли бы найти здесь ранее, и в котором кратко рассматриваются различия между uefi / bios. Дело в том, что UEFI включает в себя загрузчик, поэтому Grub / Lilo / что-нибудь является избыточным. Часто он не включает в себя менеджер загрузки - для меню и прочего
mikeserv
3
Это все еще то, что поставляется со Slackware. Это вряд ли крошечное сообщество.
Бандрами

Ответы:

28

ELILO

Управление загрузчиками EFI для Linux: использование ELILO

Мне действительно трудно решить, какую часть этого скопировать + вставить, потому что все это действительно хорошо, поэтому я просто попрошу вас прочитать ее.

Род Смит

Автор и поддерживает как gdiskи rEFInd.

Но прежде чем сделать это, я бы хотел немного прокомментировать это. Приведенная выше ссылка на ELILO ведет на одну из многих страниц загрузки UEFI, которую вы найдете на rodsbooks.com, написанную Родом Смитом. Он опытный технический писатель, и если вы когда-нибудь гуглили тему загрузки UEFI и не читали что-то из его, это, вероятно, потому что вы пропустили несколько лучших результатов.

Linux UEFI загружается

По сути, ядро ​​Linux может быть напрямую запущено прошивкой.

В приведенной выше ссылке он упоминает загрузчик заглушек EFI ядра Linux - это то, что вы должны использовать, по моему мнению, так как это позволяет ядру linux вызываться непосредственно самой прошивкой. Независимо от того, что вы делаете, что- то выполняется встроенным программным обеспечением - и это звучит так grub. Если прошивка может напрямую загружать ваше ядро ​​OS, что хорошего в загрузчике? Микропрограмма UEFI монтирует раздел GPT в формате FAT, помеченный esp таблицей разделов, и выполняет путь, который он там сохранил, в качестве переменной загрузки UEFI во встроенном модуле флэш-памяти. Поэтому вы можете поместить ядро ​​linux в этот раздел FAT и сохранить его путь в этой загрузочной переменной. Вдруг ядро ​​становится своим Загрузчик.

Загрузчики

В системах UEFI загрузчики являются избыточными - ELILO включен.

Проблема загрузчиков, которые были разработаны для решения этой проблемы, заключалась в том, что системы BIOS считывали только первый сектор раздела, помеченного загрузкой, и выполняли его. Немного сложно сделать что-то осмысленное с 512-байтовым ядром, поэтому обычным делом было написать крошечную утилиту, которая смонтировала бы файловую систему, в которой вы держали реальное ядро, и загружала его по цепочке.

На самом деле 512 байт часто было недостаточно даже для загрузчиков. grubнапример, на самом деле цепная загрузка сама перед тем, как когда-либо загружать ядро, потому что она встраивает свою вторую стадию в пустое пространство между загрузочным сектором и первым сектором вашей файловой системы. Это вроде грязного взлома - но это сработало.

Bootmanagers

Тем не менее, для простоты настройки может быть полезен некоторый посредник.

REFInd Род Смит запускает как приложение EFI - это относительно новая концепция. Это программа, которая выполняется с диска и возвращается в прошивку. Что делает rEFInd - это позволяет вам управлять меню загрузки и затем возвращать ваш выбор загрузки в микропрограмму для выполнения. Он поставляется с драйверами файловой системы UEFI - так, например, вы можете использовать загрузчик заглушки EFI ядра в не-FAT- разделе (например, текущем /boot). Он очень прост в управлении - если такая вещь вообще необходима - и добавляет простоту ядра исполняемой системы к удобству настраиваемого загрузчика.

Атомная косвенность

Ядру не нужны символические ссылки - оно может mount --bind.

Если на вашем пути есть какой-то путь, /где вы должны запретить символические ссылки, это так /boot. Сиротливая символическая ссылка /boot- это не та проблема, с которой вам когда-либо придется сталкиваться. Тем не менее, достаточно распространенной практикой является установка сложных косвенных сообщений в /bootнескольких дистрибутивах - даже если это ужасная идея - для обработки обновлений ядра на месте и / или нескольких конфигураций ядра.

Это проблема для систем EFI, не настроенных для загрузки драйверов файловой системы (например, поставляемых с пакетом rEFInd), поскольку FAT в целом является довольно глупой файловой системой и не понимает их.

Лично я не использую драйверы файловой системы UEFI, поставляемые с rEFInd, хотя большинство дистрибутивов содержат пакет rEFInd, который можно установить через менеджер пакетов и забыть только об использовании их собственной ужасной символьной /bootконфигурации и упакованных драйверов rEFInd файловой системы UEFI.

Мой Конфиг

Однажды я написал набор инструкций и разместил здесь , но это выглядит так:

% grep esp /etc/fstab && 
> ls /esp/EFI

LABEL=ESP          /esp  vfat defaults      0 1
/esp/EFI/arch_root /boot none bind,defaults 0 0 

arch_root/  arch_sqsh/  arch_xbmc/  BOOT/  ipxe/

Так что я просто поместил эти две строки в моем /etc/fstabуказании на папку, в которой я собираюсь разместить новую установку Linux, /bootи я почти закончил беспокоиться обо всем этом. Я также должен сделать:

cat /boot/refind_linux.conf 

"Arch" "root=LABEL=data rootflags=subvol=arch_root,rw,ssd,compress-force=lzo,space_cache,relatime"

Помимо установки refind-efiпакета с помощью pacmanпервого, это все, что требуется для установки столько отдельных установок / конфигураций, сколько я хочу. Обратите внимание, что большая часть этой строки состоит из специфичных для btrfs параметров монтирования, указанных в качестве параметров ядра. Более типичный /boot/refind_linux.conf, вероятно, будет выглядеть так:

"Menu Entry" "root=/dev/sda2"

И это все, что нужно.

rodsbooks.com

Если вы все еще хотите ELILO, то вы можете найти инструкции по установке по ссылке выше. Если вы хотите REFInd, вы найдете ссылки на него в первом абзаце. В основном, если вы хотите выполнить какую-либо конфигурацию загрузки UEFI, сначала прочтите rodsbooks.com .

mikeserv
источник
3

Я использую LILO вместо GRUB2. Честно говоря, это был не мой выбор - установка GRUB2 завершилась неудачно в установщике Debian Live CD, но затем была возможность установить LILO, что оказалось успешным. У меня 2 года ноутбук работает под управлением Debian Stable. ЛИЛО работает для меня безупречно.

Larsoden
источник
1

LILO по-прежнему можно использовать даже с BIOS UEFI. Обычно UEFI может загружать ядро ​​Linux напрямую. Это зависит от самого UEFI.

Однако, если вам нужен экран выбора загрузки, например, если вы загружаетесь в несколько ОС на одном компьютере, тогда может пригодиться небольшой загрузчик.

Я бы хотел вместо этого использовать EXTLINUX . Это вариант SYSLINUX, но он находится в extразделах -типа.

Прелесть EXTLINUX в ​​том, что, хотя он более расширяемый и имеет гораздо больше возможностей, чем LILO, он может быть таким же простым и активно поддерживаться.

Полемон
источник
-1 Пакет ядра (deb / ubuntu) не будет обновлять EFI. (EFI не будет читать fs, которые поддерживают символические ссылки, поэтому вы не можете просто использовать мой ответ). +1 за EXTLINUX как более новую альтернативу LILO. Ваша ссылка показывает, что он поддерживает несколько других файловых систем, что является хорошим знаком. Поддержка EFI выглядит немного новой, хотя там, где это необходимо.
sourcejedi
@sourcejedi - ты не прав. Система EFI, в которой загружены надлежащие драйверы файловой системы EFI, может легко обрабатывать символические ссылки.
mikeserv
По какой-то причине прямые ссылки на syslinux.com, по-видимому, запрещены.
Полемон
@mikeserv Я знаю, но загрузка драйвера файловой системы показалась мне несколько неясной в большинстве случаев. Вам даже нужно установить какой-нибудь сценарий EFI (терминология?), Чтобы загрузить драйвер и затем ядро. О, и я держу пари, что никто не имеет подписей MS Secure Boot для этих драйверов, так что это еще один червячный код: с.
sourcejedi
@sourcejedi - пожалуйста, прочитайте ответ, который я написал здесь? И да - вам понадобятся некоторые средства загрузки драйвера.
mikeserv
1

Я не помню ни одного эквивалента update-grub. Однако есть старая система, которая все еще поддерживается в Debian. (Он используется для загрузки на моем сервере ARM).

Самое последнее ядро ​​является символической ссылкой /boot/vmlinuzи initrd для /boot/initrd.img. Он обновляется пакетом ядра. Загрузчик указывает на те & разыменовывает символическую ссылку при каждой загрузке.

Так что вы вполне можете не получить вариант восстановления. В любом случае, это не самый проверенный вариант, поэтому еще лучше сохранить рабочий загрузочный диск :-).


Обновление: если вашей целью является что-то кроме буквального запуска LILO на современном компьютере, возможно, есть лучшие альтернативы, как описано в других ответах здесь :).

Вышесказанное имеет смысл только для оригинальной версии LILO для BIOS. Современное оборудование обеспечивает совместимость с BIOS поверх EFI, если вам не нужна безопасная загрузка или загрузка Windows 8 из того же меню. Теоретически вы можете заставить ELILO работать, но он не поддерживает безопасную загрузку или загрузку Windows 8. В общем, ELILO больше не имеет смысла, так что я думаю, что за этим не так много сообщества.

sourcejedi
источник
тьфу. символические ссылки в / из /bootгрязного решения любой проблемы.
mikeserv
Welp Lilo мертв (и Uboot устарел), так что да. Какую проблему вы имели в виду? Люди пока не используют FAT для / boot ... BootLoaderSpec - хороший проект, но пока его нет ... и тому есть веская причина (злые патенты, FLOSS-совместимая лицензия, предоставляемая только для взаимодействия EFI).
sourcejedi
Это было хорошее редактирование.
mikeserv