Как поставить загрузчик linux

мЙЮОЩЕ ЪБРЙУЙ
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 РЕТЧПЗП ДЙУФТЙВХФЙЧБ

Читайте также:  Linux which groups exist

уЛПРЙТХКФЕ ЙЪ ОЕЗП НЕФЛХ ЪБЗТХЪЛЙ РЕТЧПЗП ДЙУФТЙВХФЙЧБ. уЛПРЙТПЧБООХА ЪБЗТХЪПЮОХА НЕФЛХ ОХЦОП ЧУФБЧЙФШ Ч ЖБКМ /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.

  • Находим файл /boot/grub/grub.cfg в файловой системе установленного Линукса. Открываем его для редактирования. Внутри него находим слово «Microsoft» в контексте строки, начинающейся с «chainloader» и заменяем это слово (должно быть только одно вхождение и именно в строке с «chainloader», так что не ошибетесь) на название каталога, в который мы переименовали Microsoft (т.е. на Microsoft2 в нашем примере). Сохраняем изменения в файле.
  • Читайте также:  Normal user in linux

    Также, в этом файле вы можете поменять названия в списке, который выводит GRUB. Например, вместо openSUSE Leap 42.2 27.01 в части кода:

    Написать openSUSE The best choice!:):

    Хоть мелочь, а приятно! Остальное в коде советую не трогать.

    Если трудно разобраться с управлением Midnight Commander (в этом нет ничего страшного, у меня тоже в первый раз были проблемы с этой программой), все операции можно выполнить в файловом менеджере Nautilus (или в другом, не суть важно), но изначально запустив его под правами пользователя root.

    После этого идем на перезагрузку и радуемся результату. Но, как оказывается, такая проблема есть и у дистрибутива OpenSUSE Leap 42.2. Как показала практика, если на компьютере установлен дистрибутив OpenSUSE с Windows 10, то приведенная выше инструкция не поможет. Точнее, она поможет, но только ее нужно дополнить. После выполнения основной части выполняем следующие шаги:

    1. После выполнения всех операций заходим в папку /EFI/opensuse/x86_64-efi/ (название итоговой папки x86_64-efi может быть другим в зависимости от архитектуры ПК)
    2. Копируем файл grub.efi (если у вас включена опция Secure Boot, там будет еще файл shim.efi, тогда советую скопировать их вместе)
    3. Заходим в папку /EFI/Boot и удаляем все файлы, которые там есть (при обновлении загрузчика они снова появятся, но в этом нет ничего страшного)
    4. Вставляем файл (или файлы), которые мы скопировали и спокойно идем на перезагрузку.
      Вот и вся инструкция. Думаю, кому-то пригодится…

    P.S. Если же у вас все хорошо, GRUB с OpenSUSE запускается, но не видит Windows, радуйтесь — проблема решается всего одной командной: grub2-mkconfig -o /boot/grub2/grub.cfg, а если у вас стоит Ubuntu, нужно выполнить просто update-grub.

    Для тех же, кого заинтересовала данная тема, рекомендую прочитать статью: «Начальный загрузчик GRUB 2 — полное руководство».

    Источник

    Настройка UEFI-загрузчика. Самое краткое руководство в мире

    Как устроена загрузка современных ОС? Как при установке системы настроить загрузку посредством UEFI, не утонув в руководствах и ничего не сломав?

    Я обещал «самое краткое руководство». Вот оно:

    1. Создаём на диске таблицу разделов GPT
    2. Создаём FAT32-раздел на пару сотен мегабайт
    3. Скачиваем из интернета любой UEFI-загрузчик
      (нам нужен сам загрузчик, это один бинарный файл!)
    4. Переименовываем и кладем этот файл на созданный раздел по адресу /EFI/Boot/bootx64.efi
    5. Создаём текстовый конфиг, кладем его там, где загрузчик ожидает его увидеть
      (настройка и местоположение конфига зависят от конкретной реализации загрузчика, эта информация доступна в интернете)
    6. После перезагрузки видим меню загрузчика
      (Если на диске установлена 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»).

    Читайте также:  Sir audio tools standardclip mac os

    За всеми вышенаписанными «многобуков» вы могли легко упустить такую мысль: пользователь, чтобы изменить настройки программной части (например, добавить параметр запуска ОС), вынужден перезаписывать 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 — система будет спокойно загружаться с флешки, не видя разницы.

    Источник

    Оцените статью