Пользователь
0,0
рейтинг
14 января 2013 в 07:57

Администрирование → Загрузка GNU/Linux без стороннего загрузчика tutorial

В данной статье я приведу пример, как можно отказаться от использования стороннего загрузчика, будь то 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 необходимо учесть то, что он не принимает параметры загрузки ядра, поэтому добавим все наши параметры в само ядро:
CONFIG_CMDLINE="root=/dev/sda2 rootfstype=ext4 quiet splash=silent,fadein,theme:natural_gentoo console=tty1"

В примере используемые мною параметры, если говорить о необходимом минимуме, то хватит и указания где находится корневая файловая система:
CONFIG_CMDLINE="root=/dev/sda2"


После внесения указанных изменений компилируем и устанавливаем ядро по обычной процедуре. В Gentoo для этого есть очень удобный инструмент под названием genkernel. После сборки нам потребуется перезагрузить компьютер, т.к. некоторые новые параметры нам нужны для работы с прошивкой UEFI.

Тестирование


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

Подготовка

Для загрузки средствами UEFI нам потребуется особый раздел, который называется EFI Secure Partition или сокращенно ESP, на котором будет лежать всего один файл — это подготовленное нами ранее ядро с поддержкой UEFI. По своей сути это обычный GPT раздел с определенным типом и файловой системой FAT32.

Создание ESP-партиции

Для создание ESP-раздела нам потребуется пакет gptfdisk, информация из пакетной базы Gentoo:
* sys-apps/gptfdisk
     Available versions:  0.8.4 ~0.8.5 {{kernel_linux}}
     Homepage:            http://www.rodsbooks.com/gdisk/
     Description:         gdisk - GPT partition table manipulator for Linux


Установить его можно выполнив команду с правами root'а:
emerge sys-apps/gptfdisk

Работа с данным инструментом почти ничем не отличается от всем знакомого fdisk. Допустим что наша usb-флешка определилась в системе как /dev/sdb и мы, конечно же, имеем права root'а. Выполняем следующие шаги:
# gdisk /dev/sdb

Command (? for help): n
Partition number (2-128, default 1): 1
First sector (34-3790814, default = 2048) or {+-}size{KMGTP}: 2048
Last sector (2049-3790814, default = 3790814) or {+-}size{KMGTP}: +100M
Current type is 'Linux filesystem'
Hex code or GUID (L to show codes, Enter = 8300): EF00
Changed type of partition to 'EFI System'

Command (? for help): w

Final checks complete. About to write GPT data. THIS WILL OVERWRITE EXISTING
PARTITIONS!!

Do you want to proceed? (Y/N): y
OK; writing new GUID partition table (GPT) to /dev/sdb.
The operation has completed successfully.


В результате мы создали новую партицию sdb1 с типом 'EFI System' и размером 100 Мб, для тестирования этого вполне хватит. Теперь, как и с любой новой партицией, нам надо создать на ней файловую систему, в нашем случае это FAT32. Сделать очень просто — достаточно выполнить всего одну команду с правами root'а:
# mkfs.vfat -F 32 /dev/sdb1

После выполнения команды, файловая система будет создана.

Копирование ядра

Монтируем новую партицию sdb1 в любой каталог и копируем туда наше подготовленное ядро, с включенным CONFIG_EFI_STUB и другими параметрами описанными выше (все команды выполнять с правами root'а):
# mount /dev/sdb1 /mnt/
# cp /usr/src/linux/arch/x86_64/boot/bzImage /mnt/bzImage.efi
# umount /dev/sdb1


Настройка BIOS

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

Перенастройка загрузки на рабочей системе


По результатам пройденного выше теста, мы проверили что наше ядро корректно работает с прошивкой UEFI в нашем компьютере, поэтому приступим к миграции нашей рабочей системы на использование нового типа загрузки. Основная проблема в том что, система расположена на разделе созданном традиционной схемой разбиением на основе MBR (Master Boot Record), а для UEFI необходим GPT-раздел. Решается это проблема знакомым нам уже инструментом — gdisk из пакета sys-apps/gptfdisk. При первом запуске gdisk для нашего жесткого диска, пусть это будет /dev/sda, он предложит нам конвертировать таблицы разделов в формат GTP, предупредив о возможной потери данных. После чего проделаем все то что делали при создании usb-флешки, но с небольшими изменениями.
С учетом вышесказанного, план работ будет выглядеть следующим образом:
  1. отключить загрузочный раздел
  2. сделать резервную копию раздела
  3. выполнить конвертацию MBR -> GPT
  4. создать новую файловую систему на загрузочном разделе
  5. подключить к точке монтирования и скопировать ядро
  6. настроить прошивку UEFI
  7. перезагрузить систему и проверить результат

Далее остановимся на каждом пункте более подробно.

Отключить загрузочный раздел

В большинстве случаев загрузочный раздел подключен в каталог /boot и имеет первый номер среди партиций блочного устройства, т.е. /dev/sda1, с учетом того, что sda это наш системный диск. В моей системе все именно так, поэтому выполняем следующую команду, с правами root'а:
# umount /boot

Если данный каталог не используется какими либо приложениями, то он молча и без проблем отключиться от корня и мы сможем выполнить резервное копирование всей партиции /dev/sda1.

Резервное копирование загрузочного раздела

На данном этапе нам необходимо сделать резервную копию всего раздела, чтобы иметь возможность быстро откатить все изменения. В идеальном случае можно выполнить бекап всей системы, если у вас есть под рукой необходимые инструменты. Копирование партиции выполняется следующим образом, опять же под root'ом:
# dd if=/dev/sda1 of=/root/sda1_backup.img

Проверим пригодность нашей резервной копии:
# mount -o loop /root/sda1_backup.img /mnt
# ls -al /mnt && umount /mnt

После выполнения команды ls мы должны увидеть содержимое каталога аналогичное тому, что было в рабочей системе до отключения точки монтирования /boot.

Выполнить конвертацию таблицы MBR -> GPT

Переходим к работе с утилитой gdisk. Весь процесс конвертации прост и требует минимум участия с нашей стороны. От нас необходимо запустить команду gdisk, сменить тип партиции sda1 на EF00 (EFI System) и сохранить изменения, т.е. процедура полностью аналогична той что мы делали с usb-флешкой, за исключением того что партиции уже созданы. После сохранения настроек, наша таблица будет переведена в новый формат, используемый GPT и пригодный для работы с UEFI.

Создать новую файловую систему на новом загрузочном GPT-разделе

По аналогии с процедурой создания usb-флешки, нам надо подготовить файловую систему FAT32 на нашем загрузочном разделе, теперь уже типа 'EFI System', выполнив команду:
# mkfs.vfat -F 32 /dev/sda1

После выполнения команды, файловая система будет создана.

Подключить sda1 и скопировать ядро

На данном этапе нам необходимо скопировать подготовленное ядро на новый раздел. Для этого выполните:
# mount /dev/sda1 /boot
# cp /usr/src/linux/arch/x86_64/boot/bzImage /boot/bzImage.efi
# umount mount /dev/sda1

Подготовка загрузочного раздела на этом закончена.

Настроить прошивку UEFI

Для того чтобы UEFI мог передать управление нашему ядру, необходимо указать где оно находится. Настройкой параметров прошивки UEFi занимается инструмент под названием efibootmgr:
* sys-boot/efibootmgr
     Available versions:  (~)0.5.4
     Homepage:            http://developer.intel.com/technology/efi
     Description:         Interact with the EFI Boot Manager on IA-64 Systems

Его необходимо установить, выполнив команду:
echo "sys-boot/efibootmgr" >> /etc/portage/package.keywords
emerge sys-boot/efibootmgr

После установки выполним настройку UEFI следующей командой:
efibootmgr --create  --label 'Gentoo-3.6.11' --loader '\bzImage.efi' --part 1 

Подробное описание всех параметров можно посмотреть в man-странице по efibootmgr. Мы используем следующие параметры:
  • --create — создаем новую переменную в загрузчике
  • --label 'Gentoo-3.6.11' — название которое будет отображаться в списке загрузочных устройств
  • --loader '\bzImage.efi' — путь к загрузчику, в нашем случае он встроен в ядро, путь абсолютный и с использованием "\"
  • --part 1 — использовать первую партицию блочного устройства sda

После выполнения команды будет показан подробный вывод о том какие изменения в UEFI были внесены.

Перезагрузить систему и проверить результат

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

После успешной загрузки системы, пакет загрузчика можно удалять:
grep sys-boot /var/lib/portage/world | xargs emerge -Cv


На этом все и можно работать с системой.

Обновление ядра средствами genkernel


При обновлении ядра в будущем, с использованием инструмента genkernel, несколько изменится процедура, т.к. ядро больше не надо инсталлировать в /boot. Поэтому вместо 'genkernel all' необходимо выполнять 'genkernel kernel', предварительно поправив параметр в значение INSTALL=«no» в конфигурации /etc/genkernel.conf. После сборки ядра, его необходимо переименовать и вручную скопировать в каталог /boot.

Процесс обновления в итоге будет выглядеть следующим образом:
# genkernel kernel
* Gentoo Linux Genkernel; Version 3.4.45
* Running with options: kernel
...
* Kernel compiled successfully!
...
* Do NOT report kernel bugs as genkernel bugs unless your bug
* is about the default genkernel configuration...
* 
* Make sure you have the latest ~arch genkernel before reporting bugs.

# cp /usr/src/linux/arch/x86_64/boot/bzImage /boot/bzImage.efi
# init 6


Итоги



Плюсы:
  • отказались от одной прокладки в процессе загрузки ОС
  • уменьшилось время загрузки системы
  • изучили приемы работы с новым стандартом UEFI, пришедшему на смену BIOS


Минусы:
  • не нашел


Источники информации:


Юрий Малыгин @phs
карма
28,0
рейтинг 0,0

Похожие публикации

Реклама помогает поддерживать и развивать наши сервисы

Подробнее
Спецпроект

Самое читаемое Администрирование

Комментарии (104)

  • –8
    Статья хорошая, только я все никак не могу понять, зачем покупать MacBook Pro и ставить отличную от MacOS операционную систему?
    • +30
      Потому что в маке железо хорошее, даже сейчас, а ось…
      Собственно например Линус так тоже делает.
    • +9
      У эппл неплохое железо, да и чего уж там — дизайн на высоте. Сам подумываю купить домой imac — жду когда начнутся поставки и в инете появится инфа о работоспособности Linux на нем — если все работает, то можно брать.

      UPD. опять не обновил страницу, перед тем как постить коммент :-(
      • 0
        Все различие в железе это материнская память, остальное можно и самому собрать, все равно все в Китае делают. А переплачивать за дизайн не вижу смысла. У меня компьютер двухлетней давности, и железо намного лучше чем тогдашнее железо iMac, а цена ниже.
        • +8
          Назовёте другой ноутбук с IPS-панелью высокого разрешения?
          • 0
            Dell. Правда, понятие высокого, это всё относительно. Там, как минимум, FULL HD.
          • 0
            Lenovo T/W
            Матовый FullHD IPS на 14.3''
            • 0
              Можно конкретную модель? Я знаю только про старые таблеты и X230, в T430/530 и W530 стоит обычная TN, а IPS доступен в качестве опции для Dell Precision и HP EliteBook.
            • +1
              Ну, Lenovo Thinkpad — это своего рода «чёрный эппл», если сравнивать по качеству. Качество железа не уступает макбукам (а по надёжности так макбуки явно в проигрыше), только вот они все чёрные :)

              Да и ценники у них не сильно отличаются.
              • 0
                Ну у меня Lenovo Ideapad: качество сборки хромает, а матрица так вообще УГ, разрешение всего лишь 13XXxXXX. Хотя начинка шикарная и клава очень удобная
                • 0
                  Наверно поэтому направлению «Ideapad» осталось жить чуть меньше двух лет. Lenovo ликвидирует этот бренд. Подробности.
                • +1
                  Ну вы не сравнивайте Ideapad и Thinkpad. Это вообще разные производства.
          • +1
            Есть новинка — ASUS Zenbook U500
            • 0
              Как раз девушка себе такой купила. Я теперь не могу смотреть на свой экран без слез. Там шикарная матрица — IPS, FullHD + матовое покрытие.
            • –2
              угу, только скорее всего на него поставить линупс сложнее чем на мак (чтобы все заработало) :)
              • 0
                Не знаю как про U500, а вот этим летом я покупал Asus Zenbook UX32VD. И уже полгода не могу не нарадоваться. Расширяемый до 10GB RAM, очень качественно выполненый корпус и сравнительно не большая цена из-за HDD, который тоже меняеться на 256GB SSD, все тот же FullHD+ IPS, Core i7 и Linux x64 все это дает ощущение реальной свободы и приятные ощущения от работы за этой машинкой. Мегапозитивно. Рекомендую всем разработчикам!
                • +1
                  Я немножко оправдаюсь и возьму свои слова обратно. У меня возникла масса проблем с UX31E, часть из которых пришлось решать руками, часть не решилась, однако на прошлой неделе выполнил sudo pacman -Syu и все стало хорошо =)
              • +4
                К логопеду.
    • –1
      Мне пофиг на карму, но заметил, если что-то писать про мак или линукс, то минусы ловишь быстро…
      • +6
        Попробуйте троллить про windows, минусов получите с такой же скоростью.
        Операционка — это для айтишника религия. Не надо никого обижать и навязывать своё мнение.
        • –3
          Дело не в реглигии, дело в том, что любой компьютер Apple — это не набор железа + отдельно софт, а, грубо говоря, программно-аппаратный комплекс.

          И покупка mac для установки туда Windows/Linux/BSD это как… не знаю, например купить домашний кинотеатр с крутой акустикой, а потом использовать его как монитор для сидения в инете. Неэффективная трата денег — проще и значительно дешевле купить просто монитор или телевизор.

          Так и тут. Фактически, возможности купленного ПАК будут использованы меньше, чем на половину. А денег уплачено — столько же.
          • +2
            А проблемы в ОС считаются гарантийным случаем на маках?
          • +1
            Почему при установке GNU/Linux возможности «будут использованы меньше, чем на половину»?
            • 0
              Наверно имеется ввиду, что ОС будет оплачена зря.
              • 0
                Не будем рассматривать меркантильные стороны вопроса. С точки зрения пользователя Linux, на железе Apple никакого ущемления в возможностях не обнаружил. Есть только неудовлетворенность относительно батарейки, т.к. до Macbook был Lenovo x301, который держал зарял до 4х часов.
              • –1
                «Оплачена»… Через год выйдет новая макось, и если хочешь её использовать, её придётся «оплачивать» снова. И потом снова.
          • –1
            >программно-аппаратный комплекс.
            матерь божья! А любой другой компьютер это, стало быть не программно и не аппаратный комплекс?
    • +2
      Я тоже вижу в этом мало смысла. Ну и мне денег жалко на такой поступок.
    • +2
      Повелся на дизайн и качество экрана. Сейчас уже смигрировал на Lenoxo X1, понял что продукция от Apple не мое, там слишком кастомная клавиатура.
    • +4
      А я вот столкнулся с такой ситуацией: нетбук мой уже устарел, да и производительности его мне уже не хватает. Стал искать замену. Нетбук всегда таскаю с собой, поэтому и главными критериями при выборе новой машинки для меня стали компактность и производительность. Стал рассматривать нишу 11" ультрабуков. Какого же было мое удивление, когда я понял, что у Apple здесь впринципе нет конкурентов. Точнее есть только один. Asus Zenbook. Но оказалось, что с худшими характеристиками стоит он дороже. Я то до этого думал, что за яблочко на крышечке переплачивать надо, а оказалось совершенно наоборот. У Macbook Air 11" совершенно адекватная цена и хорошие возможности. Вообще, к технике от Apple я отношусь скептически, но другого выхода просто нет. Куплю в конце месяца, поставлю линукс. Надеюсь проблем не будет. Такие дела.
    • +1
      Отличное железо + отличная ось, что вам не нравится?
      • +1
        Мне не понравилась клавиатура — расположение и отсутствие некоторых клавиш, и то что батарейка не долго заряд держит. Также хочу отметить, что он греется довольно быстро, в результате приходится включать вентиляторы на полную мощность, чтобы остыл быстрее, но это довольно шумно.
  • +14
    Отлично, отправьте предложение в Gentoo сообщество на внесение Вашего материала на wiki или в Handbook.
    • 0
      Спасибо за оценку. Попробую предложить gentoo-сообществу.
      • 0
        Кстати говоря, инструкция по установке на EFI-систему действительно нужна в handbook. Время пришло.
        • 0
          Конечно, практически все новые железки выпускаются уже с UEFI
  • 0
    И всё же минус есть — теоретическая возможность мультибута теряется.
    • +6
      Можно добавить вторую строчку в UEFI.
  • 0
    Кроме FAT32, какие ещё FS можно использовать для хранения ядра?
    • +5
      На маке — ещё можно HFS (маковский EFI его понимает). На PC, UEFI которого понимает только FAT — только FAT.

      Только мне непонятно, чем тут FAT плох. От него требуется всего-то хранить один файл и один раз при включении его запускать. Тут, по-моему, чем проще ФС, тем лучше.
      • +1
        держать доп. раздел чисто из-за загрузки… а в чем будет выигрыш?
        • +1
          Ну, в своё время многие выносили /boot как отдельный раздел. И ставили LILO или GRUB туда.
          • +1
            Немного уточню, из-за соображений безопасности, /boot не монтируется автоматически при запуске системы, для него прописан следующий сценарий в /etc/fstab:
            # DEVICE	MOUNTPOINT	FILESYSTEM	OPTIONS	DUMP	FCSK
            /dev/sda1	/boot		auto		noauto	1 	1
            ...
            
        • +1
          Мой стандартный сетап — всё на LVM, кроме раздела с ядром. Сможете так сделать без отдельного раздела?
          • +1
            Кроме всего прочего, так ещё есть гарантия, что уж ядро-то, которое лежит на спрятанном разделе, останется нетронутым. Монтировать раздел имеет смысл только при обновлении ядра. В ядре встроен initramfs с busybox — как бы resque-shell.
          • 0
            Ну для домашнего применения это, скажем так, не очень распространено, но мне нравится ваша идея…
            • +1
              Ну у меня и дома все компы такие =)
              • +1
                И у меня))
          • 0
            Смогу. grub2 давно умеет грузить ядро с lvm, отдельный раздел не нужен.
            • 0
              А grub2 где лежать будет?
      • 0
        Как показала практика, UEFI еще понимает NTFS(по умолчанию windows 7 делает раздел EFI в этой файловой системе).
        И если покопать, то думаю и другие ФС оно поддерживает.
  • +4
    Делал также, но неудобно то, что нельзя параметры загрузки ядра менять, и то, что надо отдельный раздел для ядра держать. Сейчас использую grub2-efi, доволен.
    • 0
      И, наверное, это (компиляция ядра для смены параметров загрузки) — минус. Хотя автор так не считает…
      • 0
        Ну, в арче ядро собрано уже с этими параметрами, но все-равно, если надо изменить какие-то параметры, например, загрузить single mode, то нужно какой-то загрузчик ставить. Я ставил rEFInd, но потом на grub2 вернулся.
    • +1
      Как часто меняете параметры загрузки ядра?
      • +1
        Один важный случай — загрузка в режиме resque. Это тот же самый образ ядра, но определённый параметр (на которой реагирует initramfs).

        Хотя в реальности это, конечно, нужно в крайне редких случаях.
      • +1
        Не часто, но бывает, так что это необходимость.
  • 0
    bzImage.efi собирается в EFI формате?
    • 0
      Нет, это обычная сборка ядра, просто переименованная под стать UEFI — такое требование стандарта, насколько я понял. В документации ядра про это упоминается вскользь:
      The bzImage located in arch/x86/boot/bzImage must be copied to the EFI System Partiion (ESP) and renamed with the extension ".efi". Without the extension the EFI firmware loader will refuse to execute it.
  • 0
    А благодаря чему не стоит проблема отсутствия initrd? Драйвера необходимых дисков и ФС жёстко включены в ядро? И какие у этого минусы, раз все пользуются initrd?
    • 0
      во-первых, initrd уже лет пять никто не пользуется, пользуются initramfs
      во-вторых, образ initramfs вполне можно встроить прямо в файл ядра, так что всё присутствует
      • 0
        Все верно.
    • +1
      Выражение «все пользуются initrd» верно на столько же, на сколько и «все пользуются Ubuntu» например.
      И проблемы его отсутствия в 99.5% случаев никакой нет.
      В 0.05% случаев это редкая-хитрая-глючная железяка (контроллер дисковый например), которой надо особенным хитровыдуманным образом модуль ядра загрузить еще до того как ядро найдет свой рутовый раздел, потому что он таки расположен как раз на этой хитрой железяке.
    • 0
      psh вводит вас в заблуждение. UEFI вполне себе умеет передавать параметры (efibootmgr… -u «params1 params2» ...). Более того, у EFI_STUB имеется параметр «initrd=/EFI/linux/initrd.img». Образ должен лежать на EFI-разделе.
      • 0
        phs
  • 0
    Я стараюсь обновлять ядро на своем домашнем сервере. Что уж греха таить — случается и kernel panic. И в этом случае наличие предыдущего (работоспособного) ядра в /boot и функция fallback в GRUB помогают. Возможно ли реализовать подобное с помощью UEFI?
    • 0
      Ну GRUB2 умеет работать с EFI, так что пусть он и делает fallback.
      В этом случае ядро грузит GRUB, и EFI stub в ядре, вообще говоря, не нужен.
      • 0
        Поправка: я использую GRUB Legacy.
        • 0
          С этим — никак. GRUB legacy не поможет вам в случае с EFI.
          • 0
            А умельцы из fedora используют свой grub legacy с патчами для поддержки загрузки EFI.
      • 0
        Дык в этом случае так и остаётся «прокладка» — Grub. Как он будет грузиться — с помощью BIOS или EFI — неважно, важно, что он всё же остаётся в системе.
        А тут смысл — вообще избавиться от какого-либо загрузчика.
    • +2
      Создайте отдельный пункт загрузки в UEFI с заведомо рабочим ядром, который будете использовать для отката при тестировании новых версий ядра. Например так:
      efibootmgr --create  --label 'Fail-Safe Kernel' --loader '\failSafebzImage.efi' --part 1 
      

      Файл /boot/failSafebzImage.efi должен уже существовать.
  • 0
    Кто работал с arm, тому всё это очень привычно, фактически такая же идеология.

    То что загрузчик не понимает параметров есть большая печаль, так как надо перекомпиливать ядро для каждой конкретной установки. Не в случае генту это очень напряжно.
    • 0
      Возможно в будущих реализациях UEFI это учтут, но не думаю что случится в скором будущем.
      • 0
        А как с этим живут винда и макось? Им же тоже надо знать где рутовая партиция.
        • 0
          Точно не могу сказать, но думаю точно также, через ESP общаются с прошивкой.
          • 0
            Ну а нельзя с ней так пообщаться, чтобы она выдала желаемые параметры ядра? Или там отгорожено всё?
            • 0
              Ядро тут не причем, его параметры вы можете посмотреть командой:
              $ cat /proc/cmdline 
              root=/dev/sda2 rootfstype=ext4 quiet splash=silent,fadein,theme:natural_gentoo console=tty1 
              
              


              Возможно, в прошивке просто прописан таймаут который надо обождать, нет под рукой MacBook чтобы проверить. Попробуйте посмотреть что указанно в переменных по пути /sys/firmware/efi/vars/*. Все что есть в Linux для работы с переменными UEFI, это утилита *efibootmgr*.
        • 0
          У винды в ESP живёт bootmgr, который и отвечают за передачу параметров загрузки.
          • 0
            Ну тогда это тоже самое, что и grub2.
            • 0
              В принципе да, но сравнивать загрузки Windows и Linux я бы все таки не стал.
      • 0
        Да с чего вы вообще решили, что UEFI не умеет передавать параметры? И не только вы, но и множество других хабраюзеров.
        • 0
          Есть рабочие примеры?
          • 0
            Прямо сейчас за своим ноутбуком могу загрузить генту через UEFI, рут передается в качестве параметра. efibootmgr имеет параметр -u, после которого идёт строка с параметрами efi-программе.

            Так же можно загружать ядро с помощью grub2-efi. В новых версиях появились 2 новые команды для загрузки: linuxefi и initrdefi. Параметры прекрасно принимают.

            Так же, если архитектура UEFI и архитектура ядра совпадают, то можно передать управления с помощью chainloader (опять же в грабе).

            chainloader /EFI/gentoo/kernel.efi initrd=/EFI/gentoo/initrd root=/dev/sda8 rootflags=subvol=gentoo

            Ну и самое простое — c помощью efi-shell. Запуск не отличается от запуска обычной юниксовой программы в консоле.

          • 0
            Эту ссылку вы сами привели в конце статьи. Там описаны параметры и способ загрузки с initrd.
            fs0:> bzImage.efi console=ttyS0 root=/dev/sda4
    • 0
      Да вы ещё потребуйте, чтобы UEFI соответствовал спецификации Multiboot =)
    • 0
      UEFI умеет передавать параметры. Изначально умел.
  • 0
    Когда-то давно достался мне старенький MacMini, использовал его для эксперементов, в частности ставил на него Убунту. Так вот перед загрузкой Apple'овского ядра задержки нет, но вот перед загрузкой GRUB была задержка в секунд 20. Это страшно бесило.
    Вопрос: загрузка GNU/Linux без стороннего загрузчика на macmini через UEFI решает проблему возникновения вышеописанной задержки?
    • 0
      Сейчас мне сложно ответить на этот вопрос, т.к. не в курсе реализации UEFI на Mac Mini, возможно там есть какая то «отсебятина» от Apple, с которой придется считаться.
    • 0
      Длительная задержка при запуске груба — достаточно известная проблема, и встречается не только на UEFI. Причина в чём-то другом. Чаще всего, граб пытается запустить какую-то ФС (неправильно сконфигурированную) и отваливается по таймауту, и только потом запускает её правильно. Как-то так.
      • 0
        Вот и интересуюсь, будет ли задержка без груба?
      • 0
        На MacBook задержка до передачи управления Grub. Скорее всего прошивка ищет что то иное в качестве загрузчика, и пока не переберет все желаемые варианты и попытки — не переходит к традиционному MBR и Grub.
  • 0
    У Вас на макбуке есть эта пресловутая задержка через UEFI?
    • 0
      На Macbook-е сейчас стоит «старая» система, с использованием MBR. Задержка перед Grub есть и довольно долгая.
      Работу с UEFI на нем смогу проверить не ранее чем через пару недель, т.к. он сейчас временно не доступен мне.
      • 0
        Ок, отпишите, пожалуйста, результат.
        • 0
          Постараюсь, записал себе в еверноут.
    • 0
      Проверить на Macbook-е уже не получится, к сожалению. Однако я нашел интересный проект — rEFIt, возможно он поможет.
  • 0
    А если с дуалбутом, Win7 поднять оттуда получится? Статью прочёл по диагонали, может не заметил где может подцепляться загрузочный сектор винды
    • 0
      С Windows я не проверял загрузку, т.к. не использую эту ОС, да и не было цели как таковой. Если у вас имеется bootloader, который используется в Windows, то можно попробовать его расположить на ESP. Сомневаюсь правда в реализации такой идеи, т.к. Microsoft, скорее всего, не делится такой информацией с конечными пользователями.
  • 0
    познавательная статья. Но мне вот еще интересно узнать: А ЗАЧЕМ? Зачем столько мучений и страданий? Вы что-то выиграли по сравнению со старым способом установки Линукса? Без ответа на этот вопрос я считаю все усилия напрасными.
    • 0
      А где тут страдания?
      Стандартный grub в gentoo по хендбуку ставится с примерно сопоставимыми усилиями.
      Выигрыш — пара секунд на загрузку grub. Ну и просто забавно.
    • 0
      Основной целью было изучение новой технологии.

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