- мЙЮОЩЕ ЪБРЙУЙ Linux, РТПЗТБННЩ — РТПВМЕНЩ Й ТЕЫЕОЙС
- Настройка запуска меню загрузчика GRUB при установке Linux с Windows на один компьютер с таблицей разделов GPT
- Настройка UEFI-загрузчика. Самое краткое руководство в мире
- Как делать не надо
- Не надо лезть в NVRAM и трогать efivars
- Не надо использовать GRUB
- «Самое краткое руководство» — чуть более подробно
- Другие загрузчики
- Различные неочевидные последствия
мЙЮОЩЕ ЪБРЙУЙ
Linux, РТПЗТБННЩ — РТПВМЕНЩ Й ТЕЫЕОЙС
еЭЕ ТБЪ П ЪБЗТХЪЮЙЛБИ linux (ХУФБОПЧЛБ — ЧПУУФБОПЧМЕОЙЕ)
пУОПЧОЩЕ ЪБЗТХЪЮЙЛЙ.
пУОПЧОПЕ ОБЪОБЮЕОЙЕ ЪБЗТХЪЮЙЛБ — ЪБРХУЛ ЧЩВТБООПК ПРЕТБГЙПООПК УЙУФЕНЩ. оБЙВПМЕЕ РПРХМСТОЩН ЪБЗТХЪЮЙЛПН УЕЗПДОС СЧМСЕФУС GRUB. ч ВПМЕЕ УФБТЩИ ДЙУФТЙВХФЙЧБИ РП ХНПМЮБОЙА РТЙНЕОСМУС ЪБЗТХЪЮЙЛ LILO. уРЙУЩЧБФШ УП УЮЕФБ LILO РПЛБ ОЕМШЪС, РПУЛПМШЛХ ЕЭЕ НОПЗП УЙУФЕН ЙУРПМШЪХАФ ЙНЕООП ЕЗП.
лТПНЕ LILO Й GRUB ОЕЛПФПТЩЕ ДЙУФТЙВХФЙЧЩ НПЗХФ ЧЛМАЮБФШ УПВУФЧЕООЩЕ ЪБЗТХЪЮЙЛЙ — ОБРТЙНЕТ, Ч ASPLinux ФБЛПЧЩН СЧМСЕФУС ASPLoader. ъБЗТХЪЮЙЛ GRUB УЮЙФБЕФУС ВПМЕЕ ЗЙВЛЙН Й УПЧТЕНЕООЩН, ЮЕН LILO. вМБЗПДБТС ЙОПК УИЕНЕ ЪБЗТХЪЛЙ ПРЕТБГЙПООЩИ УЙУФЕН GRUB «РПОЙНБЕФ» ВПМШЫЕ ЖБКМПЧЩИ УЙУФЕН, ОЕЦЕМЙ LILO, Б ЙНЕООП: FAT/FAT32, ext2, ext3, ReiserFS, XFS, BSDFS Й ДТ.
чТЕНС ОЕ УФПЙФ ОБ НЕУФЕ. й ФЕРЕТШ ОБ НЕУФП GRUB РТЙЫЕМ GRUB2, ХНЕАЭЙК ЪБЗТХЦБФШУС У ЖБКМПЧПК УЙУФЕНЩ ext4. A ЪБЗТХЪЛБ У ЕИt4 — ТБЪДЕМПЧ РТПУФП ОЕПВИПДЙНБ УПЧТЕНЕООПНХ ДЙУФТЙВХФЙЧХ.
GRUB2 — ЬФП ОЕ РТПУФП ОБВПТ РБФЮЕК ДМС GRUB, Б РПМОПУФША ОПЧБС ТБЪТБВПФЛБ, УПЪДБООБС У «ОХМС». йНЕООП РПЬФПНХ Х GRUB2 УПЧЕТЫЕООП ДТХЗПК ЖПТНБФ ЛПОЖЙЗХТБГЙПООПЗП ЖБКМБ.
тБЪТБВПФЛБ «ПВЩЮОПЗП» GRUB РПМОПУФША РТЕЛТБЭЕОБ, Л ОЕНХ ЧЩРХУЛБАФУС МЙЫШ РБФЮЙ.
лПОЖЙЗХТБГЙПООЩН ЖБКМПН GRUB УМХЦЙФ ЖБКМ /boot/grub/grub.conf (Ч УФБТЩИ ЧЕТУЙСИ — /boot/grub/menu.lst (ЧРТПЮЕН menu.lst Ч ОПЧЩИ ЧЕТУЙСИ — ЬФП УУЩМЛБ ОБ grub.conf).
пУОПЧОЩН ЛПОЖЙЗХТБГЙПООЩН ЖБКМПН GRUB2 — /boot/grub/grub.cfg. ьФПФ ЛПОЖЙЗХТБГЙПООЩК ЖБКМ ОЕ ТЕДБЛФЙТХЕФУС ЧТХЮОХА. дМС ЕЗП УПЪДБОЙС ЙУРПМШЪХЕФУС ХФЙМЙФБ /usr/sbin/grub-mkconfig, ЛПФПТБС ЗЕОЕТЙТХЕФ ЬФПФ ЛПОЖЙЗХТБГЙПООЩК ЖБКМ ОБ ПУОПЧЕ ЫБВМПОПЧ, ИТБОСЭЙИУС Ч ЛБФБМПЗЕ /etc/grub.d, Й ОБУФТПЕЛ ЙЪ ЖБКМБ /etc/default/grub.
хУФБОПЧЙФШ GRUB/GRUB2 НПЦОП ЛПНБОДПК:
чПУУФБОПЧМЕОЙЕ ЪБЗТХЪЮЙЛПЧ GRUB/GRUB2
чЩ РЕТЕХУФБОПЧЙМЙ Windows, Б ПОБ ХУФБОПЧЙМБ Ч MBR УЧПК ЪБЗТХЪЮЙЛ, Й ФЕРЕТШ ЧЩ ОЕ НПЦЕФЕ ЪБЗТХЪЙФШ Linux?
ртйнеюбойе
рТПГЕДХТБ ЧПУУФБОПЧМЕОЙС ДМС ПВПЙИ ЪБЗТХЪЮЙЛПЧ ПДЙОБЛПЧБ, ЕЕ ПРЙУБОЙЕ РПДИПДЙФ Й Л GRUB, Й Л GRUB2.
дМС ЧПУУФБОПЧМЕОЙС ЪБЗТХЪЮЙЛБ GRUB ОХЦОП ЪБЗТХЪЙФШУС У LiveCD (РПДПКДЕФ МАВПК LiveCD У МАВЩН ДЙУФТЙВХФЙЧПН Linux) Й ЧЧЕУФЙ УМЕДХАЭЙЕ ЛПНБОДЩ:
mkdir /old
mkdir /old/dev
mount /dev/sdaN /old
ртйнеюбойе
чУЕ ЛПНБОДЩ ОХЦОП ЧЧПДЙФШ ПФ ЙНЕОЙ root. дМС ЬФПЗП УМЕДХЕФ ЙУРПМШЪПЧБФШ
ЛПНБОДЩ su ЙМЙ sudo.
ч ЮБУФОПУФЙ, Ч LiveCD Ubuntu ОХЦОП ЧЧПДЙФШ ЧУЕ ЛПНБОДЩ У ЙУРПМШЪПЧБОЙЕН ЛПНБОДЩ sudo, ОБРТЙНЕТ
sudo mkdir /old
sudo mkdir /old/dev
юФП ПЪОБЮБАФ ЬФЙ ЛПНБОДЩ:
— РЕТЧБС ЙЪ ОЙИ УПЪДБЕФ ЛБФБМПЗ /old, ЛПФПТЩК ВХДЕФ ЙУРПМШЪПЧБФШУС Ч ЛБЮЕУФЧЕ ФПЮЛЙ НПОФЙТПЧБОЙС;
— ЧФПТБС — УПЪДБЕФ Ч ЬФПН ЛБФБМПЗЕ РПДЛБФБМПЗ dev, ЛПФПТЩК РТЙЗПДЙФУС ДМС НПОФЙТПЧБОЙС devfs — РУЕЧДПЖБКМПЧПК УЙУФЕНЩ;
— ФТЕФШС — ЙУРПМШЪХЕФУС ДМС НПОФЙТПЧБОЙС ЛПТОЕЧПК ЖБКМПЧПК УЙУФЕНЩ ДЙУФТЙВХФЙЧБ Linux, ХУФБОПЧМЕООПЗП ОБ ЦЕУФЛПН ДЙУЛЕ Ч ТБЪДЕМЕ /dev/sdaN (ЗДЕ N — ОПНЕТ ТБЪДЕМБ), Л ЛБФБМПЗХ /old. дМС СУОПУФЙ — РТЕДРПМПЦЙН, ЮФП ОБ ЧБЫЕН ЛПНРШАФЕТЕ ДЙУФТЙВХФЙЧ Linux ВЩМ ХУФБОПЧМЕО Ч ТБЪДЕМ /dev/sda5. фПЗДБ ЧБН ОХЦОП ЧЧЕУФЙ УМЕДХАЭХА ЛПНБОДХ:
mount /dev/sda5 /old
рПУМЕ ЬФПЗП ОХЦОП РПДНПОФЙТПЧБФШ ЛБФБМПЗ /dev Л ЛБФБМПЗХ /old/dev. ьФП ДЕМБЕФУС У РПНПЭША ЧУЕ ФПК ЦЕ ЛПНБОДЩ mount, ОП У РБТБНЕФТПН —bind:
mount —bind /dev /old/dev
chroot /old
лПНБОДБ chroot ЪБНЕОСЕФ ЛПТОЕЧХА УЙУФЕНХ ОБЫЕЗП LiveCD ОБ ЛПТОЕЧХА УЙУФЕНХ ДЙУФТЙВХФЙЧБ, ХУФБОПЧМЕООПЗП ОБ ЧЙОЮЕУФЕТЕ. чБН ПУФБЕФУС МЙЫШ ЧЧЕУФЙ ЛПНБОДХ:
ьФБ ЛПНБОДБ ХУФБОПЧЙФ ЪБЗТХЪЮЙЛ GRUB ФБЛ, ЛБЛ ПО ВЩМ ХУФБОПЧМЕО ДП РЕТЕХУФБОПЧЛЙ Windows. рПУМЕ ХУФБОПЧЛЙ GRUB ОХЦОП РЕТЕЪБЗТХЪЙФШ ЛПНРШАФЕТ ЛПНБОДПК reboot.
дЧЕ Й ВПМЕЕ пу Linux ОБ ПДОПН ЛПНРШАФЕТЕ
б ФЕРЕТШ ТБУУНПФТЙН ЮБУФП ЧПЪОЙЛБАЭХА ОБ РТБЛФЙЛЕ РТПВМЕНХ. чЩ ТЕЫЙМЙ ХУФБОПЧЙФШ ОБ УЧПК ЛПНРШАФЕТ (ОБ ЛПФПТПН ХЦЕ ВЩМБ ХУФБОПЧМЕОБ Windows) ПРЕТБГЙПООХА УЙУФЕНХ Linux. чУЕ РТПЫМП ЗМБДЛП, Й ФЕРЕТШ ЧЩ У РПНПЭША GRUB НПЦЕФЕ ЪБРХУФЙФШ ДЧЕ УЙУФЕНЩ — Windows Й Linux. оП РПФПН ЧЩ ТЕЫЙМЙ ХУФБОПЧЙФШ ЕЭЕ ПДЙО ДЙУФТЙВХФЙЧ Linux, ПДОБЛП УФБТЩК ХДБМСФШ РПЛБ ОЕ ИПФЙФЕ. рПЬФПНХ ЧЩ УПЪДБМЙ ЕЭЕ ПДЙО Linux-ТБЪДЕМ Й ХУФБОПЧЙМЙ Ч ОЕЗП ОПЧЩК ДЙУФТЙВХФЙЧ, ОП РПУМЕ РЕТЕЪБЗТХЪЛЙ ПВОБТХЦЙМЙ ОЕВПМШЫХА РТПВМЕНХ:
— Ч НЕОА GRUB ПФПВТБЦБЕФУС ФПМШЛП РПУМЕДОЙК ХУФБОПЧМЕООЩК ДЙУФТЙВХФЙЧ Й Windows, ФП ЕУФШ ЧЩ ОЕ НПЦЕФЕ ЪБЗТХЪЙФШ РЕТЧЩК ДЙУФТЙВХФЙЧ.
— ЙМЙ Ч НЕОА GRUB ПФПВТБЦБАФУС ПВБ ДЙУФТЙВХФЙЧБ Й Windows, ОП ЪБРХУФЙФШ ЧЩ НПЦЕФЕ ФПМШЛП РПУМЕДОЙК ХУФБОПЧМЕООЩК ДЙУФТЙВХФЙЧ (Й, РПОСФОП, Windows).
чПУУФБОПЧЙФШ ЪБЗТХЪЮЙЛ РЕТЧПЗП ДЙУФТЙВХФЙЧБ, ЧПУРПМШЪПЧБЧЫЙУШ ТЕЛПНЕОДБГЙСНЙ, РТЙЧЕДЕООЩНЙ ЧЩЫЕ, НЩ ОЕ НПЦЕН, РПУЛПМШЛХ РПУМЕ ЬФПЗП НЩ УНПЦЕН ЪБРХУФЙФШ ФПМШЛП РЕТЧЩК ДЙУФТЙВХФЙЧ Й Windows (ОБ НПНЕОФ ЖПТНЙТПЧБОЙС ЖБКМБ grub.conf РЕТЧПЗП ДЙУФТЙВХФЙЧБ ЕЭЕ ОЙЮЕЗП ОЕ ВЩМП ЙЪЧЕУФОП П ЧФПТПН ДЙУФТЙВХФЙЧЕ, ЛПФПТЩК ЧЩ ОЕДБЧОП ХУФБОПЧЙМЙ).
оБЫЙ ДЕКУФЧЙС ВХДХФ ЪБЧЙУЕФШ ПФ ЛПОЛТЕФОПК УЙФХБГЙЙ. дМС ВПМШЫЕК ПРТЕДЕМЕООПУФЙ РТЕДРПМПЦЙН, ЮФП РЕТЧЩК ДЙУФТЙВХФЙЧ ВЩМ ХУФБОПЧМЕО Ч ТБЪДЕМ dev/sda5, Б ЧФПТПК — Ч ТБЪДЕМ /dev/sda6.
еУМЙ Х ЧБУ РТПВМЕНБ РП РЕТЧПНХ УМХЮБА (ЛПЗДБ ТБОЕЕ ХУФБОПЧМЕООПЗП ДЙУФТЙВХФЙЧБ ЧППВЭЕ ОЕФ Ч ЪБЗТХЪПЮОПН НЕОА), ФПЗДБ ЧБН ОХЦОП РТЙНПОФЙТПЧБФШ ТБЪДЕМ РЕТЧПЗП ДЙУФТЙВХФЙЧБ (Х ОБУ ЬФП /dev/sda5) Л ЛБФБМПЗХ /mnt (ЙМЙ Л МАВПНХ ДТХЗПНХ):
# mount /dev/sda5 /mnt
ъБФЕН ОБДП ПФЛТЩФШ ЖБКМ /mnt/boot/grub/grub.conf (/mnt/boot/grub/menu.lst).
оБДП РПОЙНБФШ, ЮФП ЧЩ ПФЛТЩЧБЕФЕ ЖБКМ grub.conf РЕТЧПЗП ДЙУФТЙВХФЙЧБ
уЛПРЙТХКФЕ ЙЪ ОЕЗП НЕФЛХ ЪБЗТХЪЛЙ РЕТЧПЗП ДЙУФТЙВХФЙЧБ. уЛПРЙТПЧБООХА ЪБЗТХЪПЮОХА НЕФЛХ ОХЦОП ЧУФБЧЙФШ Ч ЖБКМ /boot/grub/grub.conf — ЬФП ЖБКМ ЛПОЖЙЗХТБГЙЙ GRUB, ЙУРПМШЪХЕНЩК Ч ОБУФПСЭЙК НПНЕОФ. жБКМ УПИТБОЙФЕ, ОП РПЛБ ОЕ ЪБЛТЩЧБКФЕ Й ОЕ РЕТЕЪБЗТХЦБКФЕ ЛПНРШАФЕТ. пВТБФЙФЕ ЧОЙНБОЙЕ — ДМС ЪБЗТХЪЛЙ ОБЫЕЗП РЕТЧПЗП ДЙУФТЙВХФЙЧБ ФТЕВХАФУС ЖБКМЩ vmlinuz- ЧЕТУЙС СДТБ -default Й initrd- ЧЕТУЙС СДТБ -default. йИ ОХЦОП УЛПРЙТПЧБФШ ЙЪ ЛБФБМПЗБ /mnt/boot Ч ЛБФБМПЗ /boot:
УТ /mnt/boot/vmlinuz* /boot
УТ /mnt/boot/initrd* /boot
фЕРЕТШ НПЦОП РЕТЕЪБЗТХЪЙФШ ЛПНРШАФЕТ. рЕТЧЩК ДЙУФТЙВХФЙЧ, ХУФБОПЧМЕООЩК Ч /dev/sda5, ВХДЕФ ЪБЗТХЦЕО. ,
Источник
Настройка запуска меню загрузчика GRUB при установке Linux с Windows на один компьютер с таблицей разделов GPT
Привет, Хабр! Сегодня мы рассмотрим ситуацию, когда при двойной установке Linux & Windows загрузчик GRUB не стартует, давая возможность выбрать ОС, а автоматически загружается Windows. Немного теории:
GRUB (GRand Unified Bootloader) — программа-загрузчик операционных систем.
GRUB может загрузить любую совместимую с ней операционную систему. Среди них: Linux, FreeBSD, Solaris и многие другие. Кроме того, GRUB умеет по цепочке передавать управление другому загрузчику, что позволяет ему загружать Windows (через загрузчик NTLDR), MS-DOS, OS/2 и другие системы.
Значит с теорией мы немного разобрались (думаю этого будет достаточно), теперь же рассмотрим, какие бывают подводные камни, при установке Dual Boot Windows и Linux на одном компьютере.
Эксперимент производился на рабочей станции со следующими характеристиками:
Base Board Information
- Manufacturer: Acer
- Product Name: Aspire XC600
Memory Device
- Size: 4096 MB
- Type: DDR3
- Speed: 1333 MHz
- Manufacturer: Kingston
- Rank: 2
HDD
- product: ST500DM002-1BD14
- vendor: Seagate
- physical id: 0.0.0
- bus info: scsi@0:0.0.0
- logical name: /dev/sda
- size: 465GiB (500GB)
- capabilities: gpt-1.00 partitioned partitioned:gpt
Доказано, что проблем с установкой Debian 8.6 Jessie совместно с Windows 10 не обнаружено. Debian корректно прописывается в автозагрузке, GRUB запускается без ошибок и две ОС также работают нормально.
Но, как показала практика, не со всеми дистрибутивами такое происходит. При установке Ubuntu 16.04.1 вместо Debian на ту же рабочую станцию вылез первый подводный камень — GRUB не стартовал, и Windows 10 автоматом шла на загрузку.
Решение проблемы было найдено спустя недели три-четыре (тогда уже надоело считать, сколько времени убито на решение проблемы). Оно оказалось неожиданным, но в тоже время вся система заработала. Значит, если вы столкнулись с такой же проблемой, приведенная ниже инструкция может вам пригодится и сэкономить кучу времени.
Важно! До начала выполнения инструкции нужно подготовить LiveCD с дистрибутивом Linux Mint — все операции мы будем выполнять на нем (я выбрал этот дистрибутив из-за того, что на него спокойно можно установить Midnight Commander, что сложно сделать на LiveCD с Ubuntu, так мы получаем больше пространства для маневров). Также стоит заметить, что команда из под консоли update-grub вам не поможет, так как она рассчитана на случай, когда GRUB запускается, но не видит другие ОС кроме Линукса. Также рекомендую создавать резервные копии файлов/каталогов, над которыми вы осуществляете хоть малейшие изменения.
- Через терминал, с правами root смонтировать раздел с EFI в папку /mnt. В моем случае, это была команда mount /dev/sda2 /mnt.
Введите команду sudo -s и подтвердите пароль (он пустой по умолчанию) для последующих операций (многие советуют не делать этого, а вводить sudo и команду для выполнения — я поддерживаю это мнение, но инструкция рассчитана на опытных пользователей системы Linux, которые понимаю, что делают все на свой страх и риск).
Запустить Midnight Commander командой mc.
Найти в файловой системе следующий каталог: EFI в папке /mnt.
Переименовать каталог Microsoft во что-нибудь другое, например в Microsoft2.
Создаем новый каталог с именем Microsoft.
Заходим в только что созданный каталог Microsoft и частично создаем внутри его иерархию папок аналогичную старому Microsoft (тому, что переименовали). В моем случае он имел такую структуру папок: /boot/, затем куча папок и файл bootmgfw.efi рядом с ними. Нужно воссоздать структуру папок ровно до этого файла. Т.е. всё, что лежит рядом с ним — не нужно, а всё, что идет до него (т.е. родительские папки, соседние с ними тоже не нужны) воссоздаем в нашей новой папке Microsoft. В моем случае понадобилось создать только папку /boot, итоговый путь до нового каталога вышел таким: /EFI/Microsoft/boot. Можно просто скопировать все папки и файлы — проверено, это работает и можно не создавать все вручную.
Находим в каталоге из шага 6 папку с именем нашего дистрибутива Линукса, в нашем случае это Ubuntu. Копируем (оригиналы файлов и папку ubuntu на всякий случай оставляем, не помешают) все файлы из данной в папки в итоговый каталог, созданный на предыдущем шаге: /EFI/Microsoft/boot.
В получившейся файловой системе находим файл grubx.efi или grubx64.efi (будет только один из них: в зависимости от разрядности установленного Линукса). Переименовываем его в bootmgfw.efi.
Также, в этом файле вы можете поменять названия в списке, который выводит GRUB. Например, вместо openSUSE Leap 42.2 27.01 в части кода:
Написать openSUSE The best choice!:):
Хоть мелочь, а приятно! Остальное в коде советую не трогать.
Если трудно разобраться с управлением Midnight Commander (в этом нет ничего страшного, у меня тоже в первый раз были проблемы с этой программой), все операции можно выполнить в файловом менеджере Nautilus (или в другом, не суть важно), но изначально запустив его под правами пользователя root.
После этого идем на перезагрузку и радуемся результату. Но, как оказывается, такая проблема есть и у дистрибутива OpenSUSE Leap 42.2. Как показала практика, если на компьютере установлен дистрибутив OpenSUSE с Windows 10, то приведенная выше инструкция не поможет. Точнее, она поможет, но только ее нужно дополнить. После выполнения основной части выполняем следующие шаги:
- После выполнения всех операций заходим в папку /EFI/opensuse/x86_64-efi/ (название итоговой папки x86_64-efi может быть другим в зависимости от архитектуры ПК)
- Копируем файл grub.efi (если у вас включена опция Secure Boot, там будет еще файл shim.efi, тогда советую скопировать их вместе)
- Заходим в папку /EFI/Boot и удаляем все файлы, которые там есть (при обновлении загрузчика они снова появятся, но в этом нет ничего страшного)
- Вставляем файл (или файлы), которые мы скопировали и спокойно идем на перезагрузку.
Вот и вся инструкция. Думаю, кому-то пригодится…
P.S. Если же у вас все хорошо, GRUB с OpenSUSE запускается, но не видит Windows, радуйтесь — проблема решается всего одной командной: grub2-mkconfig -o /boot/grub2/grub.cfg, а если у вас стоит Ubuntu, нужно выполнить просто update-grub.
Для тех же, кого заинтересовала данная тема, рекомендую прочитать статью: «Начальный загрузчик GRUB 2 — полное руководство».
Источник
Настройка UEFI-загрузчика. Самое краткое руководство в мире
Как устроена загрузка современных ОС? Как при установке системы настроить загрузку посредством UEFI, не утонув в руководствах и ничего не сломав?
Я обещал «самое краткое руководство». Вот оно:
- Создаём на диске таблицу разделов GPT
- Создаём FAT32-раздел на пару сотен мегабайт
- Скачиваем из интернета любой UEFI-загрузчик
(нам нужен сам загрузчик, это один бинарный файл!) - Переименовываем и кладем этот файл на созданный раздел по адресу /EFI/Boot/bootx64.efi
- Создаём текстовый конфиг, кладем его там, где загрузчик ожидает его увидеть
(настройка и местоположение конфига зависят от конкретной реализации загрузчика, эта информация доступна в интернете) - После перезагрузки видим меню загрузчика
(Если на диске установлена Windows 8 или 10 — с большой вероятностью это руководство сокращается до пунктов 3 — 5.)
TL;DR не надо прописывать путь к загрузчику в новых загрузочных записях UEFI — надо файл загрузчика расположить по стандартному «пути по-умолчанию», где UEFI его найдет, и вместо загрузочного меню UEFI пользоваться меню загрузчика, которое гораздо проще и безопаснее настраивается
Как делать не надо
Есть, на самом-то деле, несколько способов настроить UEFI-загрузку. Я начну с описания других вариантов — чтобы было понятно, как (и почему) делать не надо. Если вы пришли за руководством — мотайте в самый низ.
Не надо лезть в NVRAM и трогать efivars
Наиболее «популярная» процедура установки загрузчика в систему такова: установщик ОС создаёт специальный раздел, на нём — структуру каталогов и размещает файлы загрузчика. После этого он с помощью особой утилиты (efibootmgr в linux, bcdedit в windows) взаимодействует с прошивкой UEFI-чипа, добавляя в неё загрузочную запись. В этой записи указывается путь к файлу загрузчика (начиная от корня файловой системы) и при необходимости — параметры. После этого в загрузочном меню компьютера появляется опция загрузки ОС. Для linux существует возможность вообще обойтись без загрузчика. В загрузочной записи указывается путь сразу к ядру вместе со всеми параметрами. Ядро должно быть скомпилировано с опцией EFISTUB (что давно является стандартом для большинства дистрибутивов), в этом случае оно содержит в себе заголовок «исполняемого файла EFI», позволяющий прошивке его запускать без внешнего загрузчика.
При старте системы, когда пользователь выбирает нужную ему загрузочную запись, прошивка UEFI сперва ищет на прописанном в этой записи диске особый EFI-раздел, обращается к файловой системе на этом разделе (обязательно FAT или FAT32), и запускает загрузчик. Загрузчик считывает из файла настроек свой конфиг, и либо грузит ОС, либо предоставляет загрузочное меню. Ничего не замечаете? Да, у нас два загрузочных меню — одно на уровне прошивки чипа UEFI, другое — на уровне загрузчика. В реальности о существовании второго пользователи могут даже не догадываться — если в меню всего один пункт, загрузчик Windows начинает его грузить без лишних вопросов. Увидеть экран с этим меню можно, если поставить вторую копию Windows или просто криво её переустановить.
Обычно для управления загрузочными записями руководства в интернете предлагают взаимодействовать с прошивкой UEFI. Есть аж пять основных вариантов, как это можно сделать: efibootmgr под linux, bcdedit в windows, какая-то софтина на «Маках», команда bcfg утилиты uefi shell (запускается из-под UEFI, «на голом железе» и без ОС, поскольку скомпилирована в том самом особом формате) и для особо качественных прошивок — графическими средствами UEFI (говоря популярным языком, «в настройках BIOS»).
За всеми вышенаписанными «многобуков» вы могли легко упустить такую мысль: пользователь, чтобы изменить настройки программной части (например, добавить параметр запуска ОС), вынужден перезаписывать flash-память микросхемы на плате. Есть ли тут подводные камни? О да! Windows иногда способна сделать из ноутбука кирпич, linux тоже, причём разными способами. Качество прошивок часто оставляет желать лучшего — стандарты UEFI либо реализованы криво, либо не реализованы вообще. По логике, прошивка обязана переживать полное удаление всех переменных efivars без последствий, не хранить в них критичных для себя данных и самостоятельно восстанавливать значения по-умолчанию — просто потому что пользователь имеет к ним доступ, и вероятность их полного удаления далека от нуля. Я лично в процессе экспериментов неоднократно (к счастью, обратимо) «кирпичил» свой Lenovo — из загрузочного меню исчезали все пункты, включая опцию «зайти в настройки».
Работа с загрузочными записями UEFI — тоже не сахар. К примеру, утилита efibootmgr не имеет опции «редактировать существующую запись». Если ты хочешь немного изменить параметр ядра — ты удаляешь запись целиком и добавляешь её снова, уже измененную. При этом строка содержит в себе двойные и одинарные кавычки, а также прямые и обратные слеши в не особо очевидном порядке. Когда я наконец заставил эту магию работать — я сохранил её в виде bash-скриптов, которые до сих пор валяются у меня в корневой ФС:
Не надо использовать GRUB
Это чёртов мастодонт, 90% функциональности которого предназначено для дисков с MBR. Для настройки необходимо отредактировать ряд файлов, после чего выполнить команду генерации конфига. На выходе получается огромная малопонятная нормальному человеку простыня. В составе — гора исполняемых файлов. Ставится командой, которую просто так из головы не возьмешь — надо обязательно лезть в документацию
Для сравнения — самый простенький UEFI-bootloader, который есть в составе пакета systemd, ставится командой
Эта команда делает ровно две вещи: копирует исполняемый файл загрузчика на EFI-раздел и добавляет свою загрузочную запись в прошивку. А конфиг для неё занимает ровно СЕМЬ строчек.
«Самое краткое руководство» — чуть более подробно
Загрузочное меню надо реализовывать на уровне загрузчика — править текстовые конфиги гораздо проще и безопасней.
Загрузочная запись нам не нужна — дело в том, что при выставлении в настройках BIOS загрузки с диска прошивка UEFI сначала ищет на нём EFI-раздел, а затем пытается исполнить файл по строго фиксированному адресу на этом разделе: /EFI/Boot/BOOTX64.EFI
Что такое «EFI-раздел»? В теории, он должен иметь особый тип «EFI System» (ef00). На практике, годится первый раздел на GPT-диске, отформатированный в FAT32 и имеющий достаточно места, чтобы разместить загрузчик и вспомогательные файлы (если есть).
Пункт 3: «Скачиваем из интернета любой UEFI-загрузчик». Что это значит? Загрузчик — это просто исполняемый файл определенного формата, к которому в комплекте идет конфиг. К примеру, если у вас есть под рукой установленный пакет с systemd — файл загрузчика можно найти по адресу /usr/lib/systemd/boot/efi/systemd-bootx64.efi, переименовать его в bootx64.efi и скопировать в /EFI/Boot/ на EFI-разделе. Нет под рукой systemd? Скачайте архив с сайта Archlinux. Или с репозитария Ubuntu. Или Debian. Есть под рукой система с Windows? Возьмите виндовый загрузчик оттуда, тоже сгодится )) Если сумеете настроить, я честно говоря не пробовал.
Пункт 4: «Настроить конфиг». Как и обычная программа, когда загрузчик запускается — он ожидает найти по определенным путям файлы конфигурации. Обычно эту информацию легко найти в интернете. Для загрузчика systemd-boot нам необходимо в корне EFI-раздела создать каталог «loader», а в нём файл «loader.conf» с тремя строчками (привожу свои):
Параметр editor отвечает за возможность отредактировать пункт загрузочного меню перед запуском.
Рядом с loader.conf необходимо создать каталог entries — один файл в нём будет отвечать за одну загрузочную запись в boot-меню. У меня там один файл arch.conf с таким содержанием:
Я не упомянул, но довольно очевидно — ядро и initramfs должны лежать в одной файловой системе с загрузчиком, то есть на EFI-разделе. Пути к ним в конфигах отсчитываются от корня этой ФС.
Другие загрузчики
systemd-boot очень простой и предоставляет спартанского вида чёрно-белое меню. Есть варианты красивей, если душа просит красоты.
rEFind — очень красивый загрузчик. Скачать можно тут в виде deb-пакета. Использую на своём ноуте. Умеет создавать загрузочное меню автоматически, без конфига — просто сканируя файлы.
Clover. Позволяет выставлять нативное разрешение экрана, имеет поддержку мыши на экране загрузки, разные темы оформления. Дефолтная тема ужасна, конфиг в виде xml нечитаем, настроить не смог.
Различные неочевидные последствия
Вы можете легко попробовать эту схему в работе. Берёте USB-флешку, форматируете в таблицу разделов GPT, создаете FAT-раздел и копируете туда загрузчик. Комп сможет с неё стартовать.
Если просто скопировать на такую флешку boot-раздел установленного linux — система будет спокойно загружаться с флешки, не видя разницы.
Источник