Хорошо, теперь следует несколько более сложная тема. Я хочу спросить, как проще всего реализовать чистую загрузку ядра EFISTUB Linux с помощью диспетчера загрузки rEFInd?
Самым лучшим методом будет дистрибутив Linux, который изначально включает параметр установки для EFISTUB через rEFInd . К сожалению, этого не существует. Даже установщик Manjaro Linux, поддерживающий rEFInd, использует для загрузки ядра Linux файл grubx64.efi (который загружается с помощью rEFInd). В этом действительно нет большого смысла. (По сути, это абсолютно бессмысленно.)
Во многих случаях встроенная загрузка EFI через GRUB отлично работает и на оборудовании Apple. Однако бывают ситуации, когда это невозможно . Я имею в виду, в частности, все модели Apple, которые не открывают видео BIOS постоянно в собственном режиме EFI. Например, это верно для всех моделей, не основанных на MXM (более ранних и поздних), которые не содержат графического процессора Intel, но имеют отдельный чип графического процессора. На таком оборудовании Apple видеобиос встроен в основную прошивку EFI, а не в отдельный флеш-чип (как в видеокартах MXM GPU). Хотя информация vBIOS всегда присутствует и доступна в устаревшем режиме эмуляции CSM BIOS (он же загрузочный лагерь Apple), она НЕ находится в собственном EFI.Таким образом, когда Linux загружается в EFI через GRUB, ядро не может получить информацию о vBIOS и не может продолжить работу с KMS (настройка режима ядра). В системах на базе Radeon GPU это приводит к * Ошибка * Нет поддержки UMS в модуле Radeon!
сообщение. Источник: Проблемы Linux на iMac11,2
Подтвержденный (неполный) список моделей Apple, затронутых «vBIOS, не представленной в EFI»:
Решением этой проблемы является загрузка «чистого» ядра Linux непосредственно из EFI через встроенную функцию EFISTUB. Это позволяет ядру Linux получить необходимую информацию vBIOS и правильно инициализировать настройку режима ядра.
На данный момент я планирую следующие шаги:
Подготовить желаемую схему разбиения на разделы в Mac OS. В моем случае это будет: sda1 (EFI ESP), sda2 (Macintosh HD), sda3 (Apple Recovery HD), sda4 (Linux HD) Обратите внимание, что раздел восстановления не отображается в дисковой утилите Apple.
Установите Ubuntu через эмуляцию CSM BIOS (с MBR) в раздел sda4 . (в этом примере не используется дополнительная загрузка, свопинг или раздел данных!)
После этих пунктов эта тема становится несколько более сложной из-за специфических ограничений Apple EFI. В обычной среде UEFI шаги, описанные здесь Как загрузить, загрузить ядро с помощью загрузчика EFI-заглушки (efistub)? (См. ВТОРОЙ ответ) позволит перейти на загрузку ядра EFISTUB.
Однако в системах на основе прошивки Apple EFI необходимы некоторые модификации. Еще одним ограничением является то, что Linux работает на первом этапе в режиме CSM BIOS . Как следствие, шаг «Добавить загрузочную запись» (с помощью efibootmgr)не может быть применен. Это необходимо сделать позже через EFI Shell (вне Linux).
Когда Ubuntu будет полностью установлен, смонтируйте раздел efi esp в / boot / esp
. (Имейте в виду, что при обычной загрузке EFI установка Ubuntu использует точку монтирования в / boot / efi
. Поэтому следующие команды должны быть скорректированы, если точка монтирования отличается.) Поскольку Ubuntu в нашем случае был установлен через CSM BIOS при эмуляции каталог ubuntu
отсутствует в ESP. Сначала его нужно создать:
mkdir / boot / esp / EFI / ubuntu
Создайте новый файл sudo nano /etc/kernel/postinst.d/zz-update-efistub
со следующим содержимым:
#! / Bin / sh
rm / загрузка / esp / EFI / ubuntu / *
cp / vmlinuz /vmlinuz.efi
cp / vmlinuz * /initrd.img / загрузка / esp / EFI / ubuntu /
rm /boot/esp/EFI/ubuntu/vmlinuz.old
Это называется крючком. Он синхронизирует файлы ядра ESP с файлами в корневом разделе. Сделайте его исполняемым с помощью:
sudo chmod + x /etc/kernel/postinst.d/zz-update-efistub
судо /etc/kernel/postinst.d/zz-update-efistub
Загрузчик ядра vmlinuz.efi
необходим в более старых версиях прошивки Apple EFI. На них обычный файл vmlinuz
не распознается как загрузочный.
Как упоминалось, загрузочная запись не может быть установлена, потому что Linux не находится в режиме UEFI. Это должно быть сделано в последнюю очередь для EFI Shell . Однако следующую команду можно использовать позже для настройки загрузочной записи, когда Linux работает в собственном EFI.
sudo efibootmgr -c -d / dev / sda -p 1 -L "Ubuntu (efistub)" -l /EFI/ubuntu/vmlinuz.efi -u "root = / dev / sda4 rw initrd = / EFI / ubuntu /initrd.img тихий всплеск "
Синтаксис правильный для этого примера здесь. В противном случае аргументы -d
и -p
должны быть изменены в соответствии с используемой структурой разделов. EFI ESP - это / dev / sda1
, а раздел root =
- sda4
.
Следующие шаги требуют, чтобы Apple Защита целостности системы (SIP) была отключена. Эта функция является обязательной, начиная с Mac OS 10.11 (и выше). Это можно легко сделать на уровне прошивки EFI с помощью загрузочного компакт-диска rEFInd. После этого:
Загрузитесь в Mac OS и установите инструмент GPT fdisk. http://www.rodsbooks.com/gdisk/
Запустите его в Терминале как root sudo gdisk / dev / disk0
и преобразуйте гибридную схему MBR GPT в стандартную защитную схему GPT. Полезную информацию можно найти здесь: https://discussions.apple.com/thread/6095828
Загрузите и установите rEFInd (загрузите новейший файл pkg с веб-сайта). Откройте терминал и установите rEFInd в EFI ESP. Руководство можно найти здесь: Установка rEFInd в Mac OS Следует отметить, что rEFInd должен быть установлен после Linux. В противном случае драйвер rEFInd ext4fs (и поддержка Linux) не будет установлен. В качестве альтернативы также можно пропустить этот шаг и загрузить rEFInd с компакт-диска.
Наконец, перезагрузите только что установленный менеджер загрузки rEFInd и запустите оболочку EFI .В качестве последнего шага необходимо добавить загрузочную запись. В этом примере команда будет выглядеть так:
vmlinuz.efi root=/dev/sda4 ro initrd=\EFI\ubuntu\initrd.img
Это приводит к конфигурации, в которой две vmlinuz.efi
опции загрузки существуют в rEFInd. Первый расположен в разделе esp sda1
и может быть загружен непосредственно из стандартного загрузчика EFI от Apple. Другой находится в корневом разделе sda4
(или в его загрузочной папке
). Второй vmlinuz.efi
можно загрузить из rEFInd, но не из стандартного загрузчика Apple. И наоборот, похоже, что rEFInd не может загрузить первый файл vmlinuz.efi без дополнительной информации о корневом разделе. (Процесс загрузки зависнет и отобразится оболочка BusyBox.)
Ну, как упоминалось в начале, иногда необходимо запускать голое ядро Linux непосредственно из rEFInd, чтобы избежать таких серьезных проблем, как проблема "vBIOS не отображается в EFI". В этом случае ядро также должно иметь расширение efi. Это требует ручной настройки, потому что имя ядра меняется с каждым обновлением ядра. Синтаксис может выглядеть так:
sudo cp /boot/vmlinuz-5.4.0-65-generic /boot/vmlinuz-5.4.0-65-generic.efi
В некоторых ситуациях может потребоваться удалить ранее созданный файл vmlinuz.efi
. Но я рекомендую сначала попробовать, не удаляя.
sudo rm /boot/vmlinuz.efi
Наконец, если все работает должным образом, раздел esp
можно автоматически смонтировать в fstab
с помощью следующей команды. (Это необходимо для автоматического обновления файлов загрузчика ядра.)
/dev/sda1 /boot/esp vfat rw,auto,user,uid=1000,gid=1000,utf8 0 0
или
/dev/sda1 /boot/efi vfat rw,auto,user,uid=1000,gid=1000,utf8 0 0
Все предложения по дальнейшим улучшениям приветствуются! ; -)