- PVSM.RU - https://www.pvsm.ru -
Здесь по возможности я постараюсь как можно проще и детальнее ответить на вопрос:
«Как можно загрузить Linux (на примере ubuntu) без использования загрузчика такого как GRUB 2, iELILO»
Здесь не будет разбираться как запустить/установить Ubuntu в режиме [UEFI only]. Для этого обратитесь сюда help.ubuntu.ru/wiki/установка_дистрибутива_на_компьютер_с_efi [1]
и сюда help.ubuntu.ru/wiki/lubuntu-osinstallation [2]
Все действия будут производиться на уже работающей системе.
Для того, чтобы воспользоваться данной возможностью необходимо соблюсти некоторые требования.
1. UEFI вместо BIOS (выставить режим [UEFI only]);
2. OS 64-bit;
3. Linux (Kernel >= 3.3);
Установленный дистрибутив lubuntu-13.04-desktop-amd64 с выставленным режимом [UEFI only]. Отключил Fast Boot (После завершения можно включить).
Полученная таблица разделов
user@pc:~$ sudo parted /dev/sda print
Model: ATA mSata Smartbuy 3 (scsi)
Disk /dev/sda: 32,0GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Number Start End Size File system Name Flags
1 1049kB 99,6MB 98,6MB fat32 boot
2 99,6MB 27,8GB 27,7GB ext4
3 27,8GB 32,0GB 4182MB linux-swap(v1)
Необходимо обратить внимание на 1 раздел, с него и будет осуществляться прямая загрузка ядра без участия отдельного загрузчика (например GRUB 2), предъявляемые к нему требования:
данный раздел не обязательно должен идти первым, главное, соблюсти требования выше (от себя советую поставить первым).
Подготовительные этапы выполнены, мы имеем работающую 64 битную операционную систему с выставленным режимом UEFI only и разделом для ядра (в данный момент там расположен GRUB, рядом мы положим ядро).
Загружаем ОС, открываем консоль.
Для того, чтобы ядро могло загрузиться без использования загрузчика, ему необходимо указать диск который будет монтироватся в качестве корневого, чтобы это сделать, нужно собрать своё ядро и указать ему опцию
CONFIG_CMDLINE="root=/dev/sda2 ro"
у меня ОС установлена на диске sda2.
Обычно эту строку передаёт загрузчик GRUB вместе со многими другими параметрами
Замечание
На сайте разработчика Ubuntu написано, что если вы используется не оригинальное ядро, а собрали его сами, то им будет трудно вам оказать поддержку и отчёты об ошибках не присылайте. (https://help.ubuntu.com/community/Kernel/Compile [3])
Получим необходимые инструменты (может занять продолжительное время)
sudo apt-get install fakeroot build-essential crash kexec-tools makedumpfile kernel-wedge
sudo apt-get install libncurses5 libncurses5-dev libelf-dev asciidoc binutils-dev
Теперь создадим директорию в которой будем совершать все действия, я назову папку v2, что будет символизировать модификацию последнего ядра системы.
user@pc:~$ mkdir v2
user@pc:~$ cd v2
Получить исходники последней версии ядра и подготовить окружение
user@pc:~/v2$ apt-get source linux-image-$(uname -r)
user@pc:~/v2$ sudo apt-get build-dep linux-image-$(uname -r)
Перейдём в папку linux-3.8.0
cd linux-3.8.0
Теперь приступим к модификации конфигурации ядра
chmod a+x debian/scripts/*
chmod a+x debian/scripts/misc/*
fakeroot debian/rules clean
fakeroot debian/rules editconfigs
После выполнения последней команды вначале будет выведено уведомление:
Do you want to edit config: amd64/config.flavour.generic? [Y/n]
Здесь как раз указано, что редактируем конфигурацию для 64 битного ядра, вводим Y, жмём ввод и получим окно
теперь открываем поиск (клавиша '/'), вводим cmdline и жмём ввод и видим то, что на скриншоте
затем жмём цифру 2 и переходим к правке параметра 'Built-in kernel command line', жмём 'y' и в данном поле выставляется звёздочка, символизирующая, что данный режим включен, теперь переходим на поле которое ниже, жмём ввод и вводим в него заветное
root=/dev/sda2 ro
Эта и есть та самая опция, ради которой всё затевалось (Вместо sda2 подставьте свой диск).
Мы получили данный конфиг:
VFS: Cannot open root device "sda2" or unknown-block(0,0) error -6
Please append a correct "root=" boot option; here are the available partitions:
Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(0,0)
В процессе гугления выяснил, что драйвер дисковой системы должен быть встроен в ядро, а он был подключён модулем. В следствии чего ядро при загрузке немогло найти вообще жёсткий диск и рапортовала об этом ошибкой, что диск примонтировать не удалось.
Теперь необходимо установить ещё некоторые опции ядра.
Водим в консоль (запустите ещё одну)
lspci -n
и полученный вывод вставляем в окно ввода на сайте
Debian GNU/Linux device driver check page [4]
жмём check, получаем:
из этого списка нам нужно включить драйвер дискового контроллера, в моём случае это ahci (Строка 'Sata Controller', Столбец 'Driver').
Снова жмём '/' для поиска и вводим 'ahci'. Для верности отмечаем все три найденных варианта для встраивания SATA_AHCI_PLATFORM, SATA_ACARD_AHCI и SATA_AHCI.
Теперь выбираем везде 'exit', в конце соглашаемся, сохраняем настройки выбором Yes. После чего в консоле отказываемся от редактирования конфигураций для других платформ, ибо они нам не нужны.
user@pc:~/v2/linux-3.8.0$ fakeroot debian/rules clean
user@pc:~/v2/linux-3.8.0$ fakeroot debian/rules binary-headers binary-generic
Теперь остаётся только подождать пока ядро будет собрано. В зависимости от мощности вашего компьютера зависит время сборки ядра, на моей машине процесс сборки занял чуть менее часа.
После сборки копируем полученное ядро на загрузочный раздел в папку 'EFI/boot', т.к раздел примонтирован к папке /boot/efi, в результате имеем путь /boot/efi/EFI/boot/
sudo mkdir -p /boot/efi/EFI/boot/
Теперь необходимо скопировать ядро в эту папку дав ему название bootx64.efi
user@pc:~/v2/linux-3.8.0$ sudo cp ./debian/build/build-generic/arch/x86_64/boot/bzImage /boot/efi/EFI/boot/bootx64.efi
Стоит отметить, что загрузка с использованием загрузчика GRUB всё равно будет доступна, стоит только переключить в UEFI (нажать del или F12 при загрузке). Это может пригодиться, если ядро по каким либо причинам не загрузилось.
Теперь необходимо сообщить UEFI о том, что мы хотим сделать загрузочным наше ядро, для этого нужно установить программу которая умеет редактировать настройки UEFI.
sudo apt-get install efibootmgr
Убедимся, что у Вас есть доступ к UEFI переменным
sudo modprobe efivars
Если отработало без ошибок, делаем последний штрих. Добавим наше ядро в UEFI с приоритетом на загрузку №1, название в кавычках после --label можете ввести своё. Регистр в пути к загрузчику не имеет значения, т.к он не регистро-зависимый.
sudo efibootmgr --create --part 1 --label "Linux" --loader 'efibootbootx64.efi'
Теперь в меню загрузки UEFI добавлена новая строчка с названием 'Linux', которая осуществляет прямую загрузку ядра. На этом всё. Можно перезагрузить компьютер и убедиться, что ядро загружается минуя загрузчик.
sudo reboot
Чтобы убедиться, что ядро загружено вами собранное, введите
cat /proc/cmdline
Вы увидете список параметров, передаваемых ядру при загрузке (мы их сами указали ранее):
root=/dev/sda2 ro
Цель достигнута! Спасибо за внимание!
Статья, имеющая подобную тематику:
Загрузка GNU/Linux без стороннего загрузчика [5]
Источники мудрости знаний:
Автор: LookingAhead
Источник [12]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/linux/45303
Ссылки в тексте:
[1] help.ubuntu.ru/wiki/установка_дистрибутива_на_компьютер_с_efi: http://help.ubuntu.ru/wiki/установка_дистрибутива_на_компьютер_с_efi
[2] help.ubuntu.ru/wiki/lubuntu-osinstallation: http://help.ubuntu.ru/wiki/lubuntu-osinstallation
[3] https://help.ubuntu.com/community/Kernel/Compile: https://help.ubuntu.com/community/Kernel/Compile
[4] Debian GNU/Linux device driver check page: http://kmuto.jp/debian/hcl/
[5] Загрузка GNU/Linux без стороннего загрузчика: http://habrahabr.ru/post/165575/
[6] help.ubuntu.com/community/UEFI: https://help.ubuntu.com/community/UEFI
[7] www.ondatechnology.org/wiki/index.php?title=Booting_the_Linux_Kernel_without_a_bootloader: http://www.ondatechnology.org/wiki/index.php?title=Booting_the_Linux_Kernel_without_a_bootloader
[8] swift.siphos.be/linux_sea/kernelbuilding.html#idm3437981411120: http://swift.siphos.be/linux_sea/kernelbuilding.html#idm3437981411120
[9] askubuntu.com/questions/71332/kernel-panics-with-cannot-open-root-device-error-where-do-i-append-the-root: http://askubuntu.com/questions/71332/kernel-panics-with-cannot-open-root-device-error-where-do-i-append-the-root
[10] wiki.ubuntu.com/Kernel/BuildYourOwnKernel: https://wiki.ubuntu.com/Kernel/BuildYourOwnKernel
[11] www.rodsbooks.com/efi-bootloaders/: http://www.rodsbooks.com/efi-bootloaders/
[12] Источник: http://habrahabr.ru/post/196926/
Нажмите здесь для печати.