- Arch Linux
- #1 2017-09-03 14:36:08
- [SOLVED] Boot without GRUB2
- #2 2017-09-03 15:05:17
- Re: [SOLVED] Boot without GRUB2
- #3 2017-09-03 15:14:48
- Re: [SOLVED] Boot without GRUB2
- #4 2017-09-03 15:38:19
- Re: [SOLVED] Boot without GRUB2
- Загрузка ОС Linux без загрузчика
- Введение
- Требования
- Входные данные
- Получаем и настраиваем своё ядро
- Сборка ядра
- Загрузка GNU/Linux без стороннего загрузчика
- Введение
- Настройка ядра
- Тестирование
- Перенастройка загрузки на рабочей системе
- Обновление ядра средствами genkernel
- Итоги
Arch Linux
You are not logged in.
#1 2017-09-03 14:36:08
[SOLVED] Boot without GRUB2
My problem is the following. I installed arch on a UEFI system in a ssd with grub2 and everything went ok, but when i remove the ssd, boot with another drive and get back with the ssd, my UEFI entry seems to disappear from my motherboard and i can’t boot arch again. I manage to get it back working using the arch live iso with efibootmgr and creating the entry using this command: efibootmgr -c -g -d /dev/sda -p 1 -w -L «Arch Linux (GRUB)» -l /EFI/arch_grub/grubx64.efi
But the problem persist, everytime i remove the drive the entry disappears and i have to do the entire process again.
So, there’s a way to use just the kernel to boot without grub2, creating a UEFI entry manually using efibootmgr and still be able to boot when the drive gets removed?
P.S. Sorry for my english i’m brazilian
Last edited by matfurla (2017-09-07 10:10:48)
#2 2017-09-03 15:05:17
Re: [SOLVED] Boot without GRUB2
The Arch kernel is by default EFISTUB enabled. That means UEFI can launch it directly. No boot loader or boot manager needed. I can pass on my command used on my system to write the entry to UEFI to launch the kernel directly but you seem to have somewhat different needs. What follows the -u option are the kernel parameters.
Are you not using GPT? An ESP?
Simple and Open
#3 2017-09-03 15:14:48
Re: [SOLVED] Boot without GRUB2
You may find that you still have the same issue even if you do change from GRUB.
Some motherboards (mine included) automatically delete UEFI entries for disks that are no longer attached to the system.
There’s no way round this without a firmware fix from the manufacturer.
No, it didn’t «fix» anything. It just shifted the brokeness one space to the right. — jasonwryan
Closing — for deletion; Banning — for muppetry. — jasonwryan
Online
#4 2017-09-03 15:38:19
Re: [SOLVED] Boot without GRUB2
The Arch kernel is by default EFISTUB enabled. That means UEFI can launch it directly. No boot loader or boot manager needed. I can pass on my command used on my system to write the entry to UEFI to launch the kernel directly but you seem to have somewhat different needs. What follows the -u option are the kernel parameters.
Are you not using GPT? An ESP?
Yes i’m using GTP and ESP, but i have another kind of problem. I know i can boot without grub, using only the kernel, but the problem is: how can i creat the UEFI entry using efibootmgr in a way that this entry persists even if i remove the ssd from the motherboard?
You may find that you still have the same issue even if you do change from GRUB.
Some motherboards (mine included) automatically delete UEFI entries for disks that are no longer attached to the system.
There’s no way round this without a firmware fix from the manufacturer.
I was afraid that was the case. But something seems wrong, i have installed arch before the same way and i could make it boot again even removing the drive when i used grub2. How can i make this again?
Источник
Загрузка ОС Linux без загрузчика
Введение
Здесь по возможности я постараюсь как можно проще и детальнее ответить на вопрос:
«Как можно загрузить Linux (на примере ubuntu) без использования загрузчика такого как GRUB 2, iELILO»
Здесь не будет разбираться как запустить/установить Ubuntu в режиме [UEFI only]. Для этого обратитесь сюда help.ubuntu.ru/wiki/установка_дистрибутива_на_компьютер_с_efi
и сюда help.ubuntu.ru/wiki/lubuntu-osinstallation
Все действия будут производиться на уже работающей системе.
Для того, чтобы воспользоваться данной возможностью необходимо соблюсти некоторые требования.
Требования
1. UEFI вместо BIOS (выставить режим [UEFI only]);
2. OS 64-bit;
3. Linux (Kernel >= 3.3);
Входные данные
Установленный дистрибутив lubuntu-13.04-desktop-amd64 с выставленным режимом [UEFI only]. Отключил Fast Boot (После завершения можно включить).
Полученная таблица разделов
Необходимо обратить внимание на 1 раздел, с него и будет осуществляться прямая загрузка ядра без участия отдельного загрузчика (например GRUB 2), предъявляемые к нему требования:
- Выставленный флаг boot;
- Рекомендуемый размер до 512 МБ (встречал разные рекомендации каким он должен быть размером, в основном это 200-300 МБ, от себя замечу, что на деле он будет занят на 5.3 МБ);
- Файловая система fat32/fat16/fat12 (UEFI имеет поддержку);
данный раздел не обязательно должен идти первым, главное, соблюсти требования выше (от себя советую поставить первым).
Подготовительные этапы выполнены, мы имеем работающую 64 битную операционную систему с выставленным режимом UEFI only и разделом для ядра (в данный момент там расположен GRUB, рядом мы положим ядро).
Получаем и настраиваем своё ядро
Загружаем ОС, открываем консоль.
Для того, чтобы ядро могло загрузиться без использования загрузчика, ему необходимо указать диск который будет монтироватся в качестве корневого, чтобы это сделать, нужно собрать своё ядро и указать ему опцию
у меня ОС установлена на диске sda2.
Обычно эту строку передаёт загрузчик GRUB вместе со многими другими параметрами
Замечание
На сайте разработчика Ubuntu написано, что если вы используется не оригинальное ядро, а собрали его сами, то им будет трудно вам оказать поддержку и отчёты об ошибках не присылайте. (https://help.ubuntu.com/community/Kernel/Compile)
Получим необходимые инструменты (может занять продолжительное время)
Теперь создадим директорию в которой будем совершать все действия, я назову папку v2, что будет символизировать модификацию последнего ядра системы.
Получить исходники последней версии ядра и подготовить окружение
Перейдём в папку linux-3.8.0
Теперь приступим к модификации конфигурации ядра
После выполнения последней команды вначале будет выведено уведомление:
Здесь как раз указано, что редактируем конфигурацию для 64 битного ядра, вводим Y, жмём ввод и получим окно
теперь открываем поиск (клавиша ‘/’), вводим cmdline и жмём ввод и видим то, что на скриншоте
затем жмём цифру 2 и переходим к правке параметра ‘Built-in kernel command line’, жмём ‘y’ и в данном поле выставляется звёздочка, символизирующая, что данный режим включен, теперь переходим на поле которое ниже, жмём ввод и вводим в него заветное
Эта и есть та самая опция, ради которой всё затевалось (Вместо sda2 подставьте свой диск).
Мы получили данный конфиг:
На этом этапе я остановился, собрал ядро, порадовался, что всё так просто и при загрузке свежесобранного ядра получил ошибку, что ядро не может найти корневой раздел (собственно это, ради чего весь процесс сборки ядра и затевался). Я долго недоумевал что же к чему и даже попробовал указать диск в формате UUID, но стабильно получал ошибку:
В процессе гугления выяснил, что драйвер дисковой системы должен быть встроен в ядро, а он был подключён модулем. В следствии чего ядро при загрузке немогло найти вообще жёсткий диск и рапортовала об этом ошибкой, что диск примонтировать не удалось.
Теперь необходимо установить ещё некоторые опции ядра.
Водим в консоль (запустите ещё одну)
и полученный вывод вставляем в окно ввода на сайте
Debian GNU/Linux device driver check page
жмём check, получаем:
из этого списка нам нужно включить драйвер дискового контроллера, в моём случае это ahci (Строка ‘Sata Controller’, Столбец ‘Driver’).
Снова жмём ‘/’ для поиска и вводим ‘ahci’. Для верности отмечаем все три найденных варианта для встраивания SATA_AHCI_PLATFORM, SATA_ACARD_AHCI и SATA_AHCI.
Теперь выбираем везде ‘exit’, в конце соглашаемся, сохраняем настройки выбором Yes. После чего в консоле отказываемся от редактирования конфигураций для других платформ, ибо они нам не нужны.
Сборка ядра
Теперь остаётся только подождать пока ядро будет собрано. В зависимости от мощности вашего компьютера зависит время сборки ядра, на моей машине процесс сборки занял чуть менее часа.
После сборки копируем полученное ядро на загрузочный раздел в папку ‘EFI/boot’, т.к раздел примонтирован к папке /boot/efi, в результате имеем путь /boot/efi/EFI/boot/
Теперь необходимо скопировать ядро в эту папку дав ему название bootx64.efi
Стоит отметить, что загрузка с использованием загрузчика GRUB всё равно будет доступна, стоит только переключить в UEFI (нажать del или F12 при загрузке). Это может пригодиться, если ядро по каким либо причинам не загрузилось.
Теперь необходимо сообщить UEFI о том, что мы хотим сделать загрузочным наше ядро, для этого нужно установить программу которая умеет редактировать настройки UEFI.
Убедимся, что у Вас есть доступ к UEFI переменным
Если отработало без ошибок, делаем последний штрих. Добавим наше ядро в UEFI с приоритетом на загрузку №1, название в кавычках после —label можете ввести своё. Регистр в пути к загрузчику не имеет значения, т.к он не регистро-зависимый.
Теперь в меню загрузки UEFI добавлена новая строчка с названием ‘Linux’, которая осуществляет прямую загрузку ядра. На этом всё. Можно перезагрузить компьютер и убедиться, что ядро загружается минуя загрузчик.
Чтобы убедиться, что ядро загружено вами собранное, введите
Вы увидете список параметров, передаваемых ядру при загрузке (мы их сами указали ранее):
Цель достигнута! Спасибо за внимание!
UPD:
Спасибо пользователю ValdikSS за ценное замечание. Достичь поставленную цель можно гораздо проще. Пересобирать ядро в данном случае нет необходимости. Его можно скопировать на FAT раздел вместе с initrd (из дириктории /boot) и указать загрузчику правильные параметры:
Источник
Загрузка GNU/Linux без стороннего загрузчика
В данной статье я приведу пример, как можно отказаться от использования стороннего загрузчика, будь то Grub или Lilo, если ваш компьютер поддерживает современный стандарт UEFI, пришедший на замену BIOS. Интересной особенностью будет то, что все работы проводим на уже установленной и рабочей системе.
По уровню сложности данная статья ориентирована на опытных пользователей Linux, т.к. некоторых моментов я касаюсь поверхностно, полагаясь на очевидность, чтобы не уходить от основной освещаемой темы.
Введение
Расскажу немного истории — являюсь пользователем Gentoo Linux уже более 5 лет, причем как основной и единственной ОС на всех используемых мною ноутбуках: Lenovo (от X61s до X1) и Apple MacBook Pro. Всегда при новой инсталляции использовал классический метод установки Gentoo на чистый жесткий диск, с использованием chroot. Таблицу партиций и загрузку системы настраивал дедовским способом, как завещал Handbook, на основе традиционного MBR.
Настройка ядра
Необходимо обеспечить поддержку загрузки с использованием UEFI в нашем ядре:
- CONFIG_EFI=y — включение поддержки стандарта UEFI
- CONFIG_EFI_STUB=y — включение возможности загружать ядро прошивкой UEFI, то что нам и надо
- CONFIG_EFI_VARS=y — включение интерфейса управления UEFI через переменные /sys/firmware/efi/vars/*, понадобится чтобы указать где искать ядро для загрузки, используется утилитой efibootmgr
При переходе на UEFI необходимо учесть то, что он не принимает параметры загрузки ядра, поэтому добавим все наши параметры в само ядро:
В примере используемые мною параметры, если говорить о необходимом минимуме, то хватит и указания где находится корневая файловая система:
После внесения указанных изменений компилируем и устанавливаем ядро по обычной процедуре. В Gentoo для этого есть очень удобный инструмент под названием genkernel. После сборки нам потребуется перезагрузить компьютер, т.к. некоторые новые параметры нам нужны для работы с прошивкой UEFI.
Тестирование
Для проверки работоспособности нашего ядра нужно попробовать загрузить ОС через UEFI, но чтобы не рисковать загрузочным разделом нашей рабочей системы, мы будем использовать usb-флешку, предварительно удалив с нее все разделы.
Подготовка
Для загрузки средствами UEFI нам потребуется особый раздел, который называется EFI Secure Partition или сокращенно ESP, на котором будет лежать всего один файл — это подготовленное нами ранее ядро с поддержкой UEFI. По своей сути это обычный GPT раздел с определенным типом и файловой системой FAT32.
Создание ESP-партиции
Для создание ESP-раздела нам потребуется пакет gptfdisk, информация из пакетной базы Gentoo:
Установить его можно выполнив команду с правами root’а:
Работа с данным инструментом почти ничем не отличается от всем знакомого fdisk. Допустим что наша usb-флешка определилась в системе как /dev/sdb и мы, конечно же, имеем права root’а. Выполняем следующие шаги:
В результате мы создали новую партицию sdb1 с типом ‘EFI System’ и размером 100 Мб, для тестирования этого вполне хватит. Теперь, как и с любой новой партицией, нам надо создать на ней файловую систему, в нашем случае это FAT32. Сделать очень просто — достаточно выполнить всего одну команду с правами root’а:
После выполнения команды, файловая система будет создана.
Копирование ядра
Монтируем новую партицию sdb1 в любой каталог и копируем туда наше подготовленное ядро, с включенным CONFIG_EFI_STUB и другими параметрами описанными выше (все команды выполнять с правами root’а):
Настройка BIOS
После подготовки тестовой usb-флешки необходимо перезагрузить компьютер и зайти в настройки BIOS и в разделе отвечающем за процесс загрузки выбрать использование UEFI. После чего загрузка системы должна пройти без каких-либо проблем, если ядро и флешка были подготовлены без ошибок. Тестирование можно считать пройденным и оставить систему загруженную с флешки.
Перенастройка загрузки на рабочей системе
По результатам пройденного выше теста, мы проверили что наше ядро корректно работает с прошивкой UEFI в нашем компьютере, поэтому приступим к миграции нашей рабочей системы на использование нового типа загрузки. Основная проблема в том что, система расположена на разделе созданном традиционной схемой разбиением на основе MBR (Master Boot Record), а для UEFI необходим GPT-раздел. Решается это проблема знакомым нам уже инструментом — gdisk из пакета sys-apps/gptfdisk. При первом запуске gdisk для нашего жесткого диска, пусть это будет /dev/sda, он предложит нам конвертировать таблицы разделов в формат GTP, предупредив о возможной потери данных. После чего проделаем все то что делали при создании usb-флешки, но с небольшими изменениями.
С учетом вышесказанного, план работ будет выглядеть следующим образом:
- отключить загрузочный раздел
- сделать резервную копию раздела
- выполнить конвертацию MBR -> GPT
- создать новую файловую систему на загрузочном разделе
- подключить к точке монтирования и скопировать ядро
- настроить прошивку UEFI
- перезагрузить систему и проверить результат
Далее остановимся на каждом пункте более подробно.
Отключить загрузочный раздел
В большинстве случаев загрузочный раздел подключен в каталог /boot и имеет первый номер среди партиций блочного устройства, т.е. /dev/sda1, с учетом того, что sda это наш системный диск. В моей системе все именно так, поэтому выполняем следующую команду, с правами root’а:
Если данный каталог не используется какими либо приложениями, то он молча и без проблем отключиться от корня и мы сможем выполнить резервное копирование всей партиции /dev/sda1.
Резервное копирование загрузочного раздела
На данном этапе нам необходимо сделать резервную копию всего раздела, чтобы иметь возможность быстро откатить все изменения. В идеальном случае можно выполнить бекап всей системы, если у вас есть под рукой необходимые инструменты. Копирование партиции выполняется следующим образом, опять же под root’ом:
Проверим пригодность нашей резервной копии:
После выполнения команды ls мы должны увидеть содержимое каталога аналогичное тому, что было в рабочей системе до отключения точки монтирования /boot.
Выполнить конвертацию таблицы MBR -> GPT
Переходим к работе с утилитой gdisk. Весь процесс конвертации прост и требует минимум участия с нашей стороны. От нас необходимо запустить команду gdisk, сменить тип партиции sda1 на EF00 (EFI System) и сохранить изменения, т.е. процедура полностью аналогична той что мы делали с usb-флешкой, за исключением того что партиции уже созданы. После сохранения настроек, наша таблица будет переведена в новый формат, используемый GPT и пригодный для работы с UEFI.
Создать новую файловую систему на новом загрузочном GPT-разделе
По аналогии с процедурой создания usb-флешки, нам надо подготовить файловую систему FAT32 на нашем загрузочном разделе, теперь уже типа ‘EFI System’, выполнив команду:
После выполнения команды, файловая система будет создана.
Подключить sda1 и скопировать ядро
На данном этапе нам необходимо скопировать подготовленное ядро на новый раздел. Для этого выполните:
Подготовка загрузочного раздела на этом закончена.
Настроить прошивку UEFI
Для того чтобы UEFI мог передать управление нашему ядру, необходимо указать где оно находится. Настройкой параметров прошивки UEFi занимается инструмент под названием efibootmgr:
Его необходимо установить, выполнив команду:
После установки выполним настройку UEFI следующей командой:
Подробное описание всех параметров можно посмотреть в man-странице по efibootmgr. Мы используем следующие параметры:
- —create — создаем новую переменную в загрузчике
- —label ‘Gentoo-3.6.11’ — название которое будет отображаться в списке загрузочных устройств
- —loader ‘\bzImage.efi’ — путь к загрузчику, в нашем случае он встроен в ядро, путь абсолютный и с использованием «\»
- —part 1 — использовать первую партицию блочного устройства sda
После выполнения команды будет показан подробный вывод о том какие изменения в UEFI были внесены.
Перезагрузить систему и проверить результат
На этом вся настройка завершена и нам осталось перезагрузить систему, предварительно отключив usb-флешку, чтобы посмотреть как система загрузится без использования стороннего загрузчика.
После успешной загрузки системы, пакет загрузчика можно удалять:
На этом все и можно работать с системой.
Обновление ядра средствами genkernel
При обновлении ядра в будущем, с использованием инструмента genkernel, несколько изменится процедура, т.к. ядро больше не надо инсталлировать в /boot. Поэтому вместо ‘genkernel all’ необходимо выполнять ‘genkernel kernel’, предварительно поправив параметр в значение INSTALL=«no» в конфигурации /etc/genkernel.conf. После сборки ядра, его необходимо переименовать и вручную скопировать в каталог /boot.
Процесс обновления в итоге будет выглядеть следующим образом:
Итоги
Плюсы:
- отказались от одной прокладки в процессе загрузки ОС
- уменьшилось время загрузки системы
- изучили приемы работы с новым стандартом UEFI, пришедшему на смену BIOS
Источник