Сразу к делу: порядок загрузки в NVRAM хранится в переменных прошивки UEFI, а управляет им утилита efibootmgr. Она показывает список загрузочных записей, меняет их порядок, создаёт новые и удаляет лишние. Для работы хватает одной команды efibootmgr и знания номеров записей вроде 0001 или 0002.
NVRAM — энергонезависимая память на материнской плате. Прошивка UEFI хранит в ней переменные, среди которых — список загрузочных записей. Каждая запись указывает на конкретный загрузчик: путь к .efi-файлу на ESP и диск с разделом, где этот файл лежит.
Три ключевые переменные:
#### — четырёхзначный номер вроде 0000 или 0001.Когда ты выбираешь в BIOS/UEFI пункт вроде «Arch Linux» или «Windows Boot Manager», ты выбираешь одну из этих записей. Удалить запись — значит убрать пункт из меню загрузки, но не тронуть сам загрузчик на диске.
Отдельно стоит упомянуть запасную запись \EFI\BOOT\BOOTX64.EFI. Прошивка ищет её, когда не находит ни одной рабочей записи в BootOrder. Многие установщики кладут туда копию загрузчика, поэтому после сброса NVRAM система всё равно стартует. Если такой копии нет — увидишь экран No bootable device.
Просто запусти:
efibootmgr
Вывод выглядит примерно так:
BootCurrent: 0001
Timeout: 5 seconds
BootOrder: 0001,0000,0002
Boot0000* Windows Boot Manager
Boot0001* Arch Linux
Boot0002* UEFI: SanDisk
Разбор по строкам:
BootCurrent — запись, с которой загрузилась текущая система.Timeout — сколько секунд прошивка ждёт выбора.BootOrder — порядок перебора записей.Boot0000* и дальше — сами записи. Звёздочка после номера значит, что запись активна.Чтобы увидеть, на какой диск и раздел указывает каждая запись, добавь -v:
efibootmgr -v
В выводе появится путь вроде HD(1,GPT,<uuid>,0x1000,0x20000)/File(\EFI\GRUB\grubx64.efi). Первая цифра в скобках — номер раздела, GPT — тип таблицы, дальше UUID раздела и путь к загрузчику. Так удобно проверять, что запись смотрит туда, куда нужно.
Иногда прошивка хранит путь к загрузчику в UTF-16, и в выводе -v он выглядит как набор символов. Тогда добавь флаг --unicode:
efibootmgr -v --unicode
Короткая форма — -u. Путь к загрузчику выведется в читаемом юникод-виде, и его проще сверить с реальным расположением файла на ESP.
Обычно запись создаёт установщик загрузчика: grub-install или bootctl install делают это сами. Но бывает, что запись пропала или ты хочешь добавить загрузчик вручную. Ручное создание пригодится и после клонирования диска: записи в NVRAM указывают на старый диск, и проще создать новую запись, чем искать старую. То же самое после переноса ESP на другой раздел. Тогда:
efibootmgr --create --disk /dev/nvme0n1 --part 1 --label "Arch Linux" --loader "\EFI\GRUB\grubx64.efi"
Разбор флагов:
--create (-c) — создать новую запись.--disk /dev/nvme0n1 — диск, на котором лежит ESP.--part 1 — номер раздела ESP (считается с единицы).--label "Arch Linux" — имя записи, которое увидишь в меню загрузки.--loader "\EFI\GRUB\grubx64.efi" — путь к загрузчику на ESP. Обратные слэши и ведущий \EFI\ обязательны.Путь к загрузчику зависит от того, что установлено. Для systemd-boot это \EFI\systemd\systemd-bootx64.efi, для GRUB — \EFI\GRUB\grubx64.efi. Проверить, какие файлы лежат на ESP, можно так:
ls /boot/EFI
Если ESP смонтирована в /boot. Подробнее про раскладку разделов — в статье «Один EFI-раздел на две системы».
После создания проверь результат:
efibootmgr -v
Новая запись появится в списке, а её номер добавится в BootOrder. Если запись создалась, но не активна, добавь флаг --active (-a) — впрочем, по умолчанию записи создаются активными.
Порядок задаётся списком номеров записей через запятую:
efibootmgr --bootorder 0002,0001,0000
Короткая форма — -o:
efibootmgr -o 0002,0001,0000
Первой в списке будет запись 0002, потом 0001, потом 0000. Прошивка пробует их по очереди: если первая не загрузилась, переходит ко второй. Номера бери из вывода efibootmgr — у каждого они свои.
Запись, которой нет в BootOrder, прошивка при старте не трогает. Она останется в списке, но загрузиться с неё можно только через BootNext или меню выбора загрузки в BIOS. Если хочешь полностью убрать запись из порядка, просто не включай её номер в список.
Хочешь, чтобы первой всегда грузилась Windows, а Arch оставался вторым? Поставь номер Windows-записи в начало списка. Если Windows-запись пропала после установки Arch, её можно восстановить — разбор в статье «Восстановление UEFI-записи Windows после установки Arch».
Иногда нужно загрузиться с флешки или с другого загрузчика, но не менять порядок насовсем. Для этого есть BootNext:
efibootmgr --bootnext 0002
Короткая форма — -n:
efibootmgr -n 0002
Прошивка загрузит запись 0002 один раз, а при следующем старте вернётся к обычному BootOrder. Удобно для тестирования нового загрузчика или однократной загрузки с live-USB. Проверить, что запись установилась, можно тем же efibootmgr — в выводе появится строка BootNext: 0002.
Удаление — две команды в одной:
efibootmgr --bootnum 0004 --delete-bootnum
Короткая форма:
efibootmgr -b 0004 -B
-b выбирает запись по номеру, -B удаляет её. После удаления пункт исчезнет из меню загрузки и из BootOrder. Сам загрузчик на диске останется нетронутым — удаляется только запись в NVRAM.
Осторожно: не удаляй запись, с которой загружается система, если не уверен. Если удалил лишнее — запись можно создать заново командой из раздела выше.
Если нужно удалить несколько записей, повтори команду для каждой. Номера удалённых записей прошивка уберёт из BootOrder сама.
Сколько секунд прошивка ждёт выбора, задаёт переменная Timeout:
efibootmgr --timeout 5
Короткая форма — -t:
efibootmgr -t 5
Значение 0 уберёт ожидание совсем — система загрузится сразу с первой записи. Если хочешь успеть выбрать пункт вручную, ставь 3–5 секунд.
Таймаут хранится в отдельной переменной и не привязан к конкретной записи. Учти: некоторые прошивки пропускают меню выбора, когда в BootOrder всего одна запись, — тогда таймаут не сработает.
efibootmgr работает только на реальном железе с доступом к переменным UEFI. В виртуальной машине или в chroot без проброса переменных получишь ошибку Could not delete Boot variable или EFI variables are not supported. Разбор этой ошибки — в статье «EFI variables are not supported: efibootmgr».
С live-USB всё работает: переменные NVRAM общие для прошивки, а не для установленной системы. Загрузился с флешки — и можешь править записи той же командой. Главное — указывать реальные диски и разделы, а не те, что видит live-система.
Обновление BIOS/UEFI иногда сбрасывает NVRAM. Порядок загрузки возвращается к заводскому, а часть записей пропадает. Лечится пересозданием записей вручную — командой из раздела «Как создать запись загрузки вручную». Перед обновлением прошивки полезно сохранить вывод efibootmgr -v в файл, чтобы потом восстановить записи по нему.
На некоторых материнских платах NVRAM питается от батарейки CMOS. Если она села — переменные сбрасываются. Симптом тот же: меню загрузки пустеет, система грузится с первой попавшейся записи. Замени батарейку и пересоздай записи.
Если прошивка не находит ни одной рабочей записи, появляется сообщение вроде No bootable device. Это не значит, что система сломана — просто запись в NVRAM потерялась. Пошаговое восстановление — в статье «Пропал пункт загрузки: No bootable device».
Проверь три вещи. Первая — существует ли файл загрузчика на ESP: ls /boot/EFI/GRUB/grubx64.efi. Вторая — совпадает ли путь в записи с реальным расположением файла, включая регистр букв. Третья — указывает ли --part на правильный раздел: если ESP не первый раздел, номер легко перепутать. Сверься с выводом efibootmgr -v и lsblk.
После переустановки GRUB запись в NVRAM создаётся автоматически. Но если она не появилась, создай её вручную:
efibootmgr --create --disk /dev/nvme0n1 --part 1 --label "Arch Linux" --loader "\EFI\GRUB\grubx64.efi"
Проверь путь: grub-install кладёт загрузчик в /boot/EFI/GRUB/grubx64.efi, если ESP смонтирована в /boot. Если меняешь загрузчик с GRUB на systemd-boot, старую запись лучше удалить, а новую создать — путь у неё другой: \EFI\systemd\systemd-bootx64.efi.
Запись активна. Если звёздочки нет, прошивка может пропустить запись при загрузке. Обычно все записи активны по умолчанию.
Прямой команды переименования нет. Удали запись и создай заново с нужным --label.
BootNext действует один раз: прошивка загрузит указанную запись при следующем старте и забудет о ней. BootOrder — постоянный порядок, который действует каждый раз.
Нет. systemd-boot управляет записями через bootctl, но efibootmgr всё равно полезен: посмотреть порядок, выставить BootNext или удалить лишние записи от других загрузчиков.
Проверь, что система загружена в UEFI-режиме, а не в Legacy/CSM. В Legacy-режиме переменных NVRAM нет. Также убедись, что не отключён Secure Boot — при некоторых настройках доступ к переменным ограничен. Подробнее — в статье про ошибку «EFI variables are not supported».
Да. В Windows есть утилита bcdedit и графическая программа EasyUEFI. Но для Arch проще работать из Linux: efibootmgr понимает и чужие записи, и свои. Главное — не удаляй записи Windows, если не уверен, что они тебе не нужны.
efibootmgr — главный инструмент для управления порядком загрузки в NVRAM. Пять команд закрывают почти все задачи: efibootmgr — посмотреть, -c — создать, -o — изменить порядок, -n — однократная загрузка, -b -B — удалить. Записи в NVRAM — это не файлы на диске, а переменные прошивки, поэтому они могут пропасть после обновления BIOS или разряда батарейки. Восстановить их за минуту можно той же утилитой. Держи под рукой вывод efibootmgr -v — с ним любое восстановление превращается в пару команд.
Задай вопрос в чате — отвечаем быстро, по делу и без воды.
Комментарии