LINUX.ORG.RU

«Сломался» приоритет(алгоритм?) загрузки

 , ,


0

1

Имеется такое устройство - Asus VivoMini VC66. На HDD 500гб установлена Ubuntu 20.04 (UEFI).
Скрин gparted
Раньше, если в настройках «Boot» в UEFI установить первым пунктом внешнее USB-устройство (заранее подключенное), то при последующих включениях, комп на старте всегда пытался загрузиться с него, а при его отсутствии грузился со встроенного HDD. При этом было неважно, что именно подключено - флешка или внешний USB-HDD и в какой usb-разъём.

С некоторых пор, это «сломалось».
Теперь, если USB-устройство было выставлено первым пунктом и отсутствует при включении компа, то ничего не грузится. Нужно зайти в настройки «Boot» в UEFI и выбрать Ubuntu, например. Все отключаемые (внешние устройства) вынужден сейчас загружать через меню по F8.
Пытался вернуть прежнее поведение загрузки. Настройки UEFI просмотрел и покрутил вдоль и поперёк, но безрезультатно. Посмотрел содержимое /boot/efi/EFI, но как понять, что там отсутствует или изменилось?

Приоритет загрузки «сломался», вероятно, после установки и последующего удаления Alt Linux, так как до этого всё было норм. Или я, что-то не то снёс или Alt Linux что-то перезаписал? Я не пойму где хранилась запись о том, что загрузка с usb приоритетна, если даже в списках «Boot» всегда одна ОС была, а остальные ОС грузились через меню grub. Как вернуть приоритет загрузки с usb, как раньше?
Вот содержимое раздела /dev/sda1 и
файлов /boot/efi/EFI/BOOT/grub.cfg и /boot/efi/EFI/ubuntu/grub.cfg

├── BOOT
│   ├── BOOTX64.EFI
│   ├── fbx64.efi
│   ├── grub.cfg
│   ├── grubx64.efi
│   └── mmx64.efi
└── ubuntu
    ├── BOOTX64.CSV
    ├── grub.cfg
    ├── grubx64.efi
    ├── mmx64.efi
    └── shimx64.efi

/boot/efi/EFI/BOOT/grub.cfg

search --root-dev-only --set=root --fs-uuid cc8736e0-426f-44d7-93f4-ee8daefec553 hd0,gpt2
set prefix=($root)'/boot/grub'
configfile $prefix/grub.cfg

/boot/efi/EFI/ubuntu/grub.cfg

search.fs_uuid cc8736e0-426f-44d7-93f4-ee8daefec553 root hd0,gpt2
set prefix=($root)'/boot/grub'
configfile $prefix/grub.cfg

Помимо ubuntu в «Boot» UEFI есть ещё пункт «Hard Drive», именно из-за него комп не хотел грузиться. Он всегда выставляется первым, после отключения usb-устройства, поэтому я перевёл его в disable в «Hard Drive BBS Priorities».

sudo efibootmgr
BootCurrent: 0001
Timeout: 1 seconds
BootOrder: 0001,0002
Boot0001* ubuntu
Boot0002* Hard Drive

Скрины меню «Boot» UEFI, извините за качество, лучше не получается
Boot menu
Конфигурация загрузки
Настройки CSM
Безопасная загрузка
Прошу помочь вернуть приоритеты загрузки как раньше было.


Есть к сожалению шанс, что ответа нет. Что твой UEFI спокойно грузит Linux без танцев с бубном и можно по F8 грузится с флешек – уже хороший результат. Многие UEFI настолько кривы, что даже просто заставить их грузить установленный Linux – головная боль. Я бы на твоем месте не трогал ничего, лучше так, чем все сломать.

Vsevolod-linuxoid ★★★★★
()
Ответ на: комментарий от Vsevolod-linuxoid

Мне тоже иногда кажется, что лучше не трогать от греха подальше, (: но ведь раньше как-то работало не один год. Причём, в режиме CSM загружался винт с ОС, поставленной на компе с bios.
Что «сломалось»? Где была информация о том, что первым нужно грузиться c usb и куда она делась? Раньше, иногда (но не всегда), такой порядок загрузки «ломался» если ubuntu прилетало обновление ядра, например 5.15.0-xx0 на следующее 5.15.0-xx1. Тогда ubuntu автоматом ставилась первой по списку, но это легко решалось перестановкой пунктов в UEFI.
F8, конечно, тоже годится, но с ней нужно караулить момент и есть нюансы

allext
() автор топика

ТС-сообщение так трудолюбиво оформлено, что захотелдось подумать над вопросом…

Я так понимаю события момента «С некоторых пор» уже не восстановить, но это и не обязательно. Лучше понять процедуру выбора загрузочного устройства, на этой описанной конкретной железке.

У разных реализаций UEFI эта процедура не стандартизирована. В приведенном примере мы видим разнообразный, почти не урезанный набор параметров конфигурации загрузки - можно попытаться восстановить логику по ним. Но можем и прочитать результирующий конфиг, хранящийсся в переменных UEFI на флешке материнки, утилитой efibootmgr https://wiki.archlinux.org/title/Unified_Extensible_Firmware_Interface_(Русский)#Пользовательские_инструменты

Предлагаю начать с гипотизы, что внешние устройства грузились до часа Х в режиме не старого BIOS, а по новому UEFI. На скрине Настройки CSM четвертый параметр Legacy only, что по логическому рассуждению отключает загрузку с носителей формата UEFI.

anonymous
()
Ответ на: комментарий от anonymous

Я так понимаю события момента «С некоторых пор» уже не восстановить

«С некоторых пор» - это установка Alt Linux. Процесс прошёл штатно, но был момент, который меня остановил - это активный пункт «Записать в NVRAM» на странице установки загрузчика. Моё понимание было нечётким, но было уже поздно откатываться и разбираться в чём здесь смысл. Решил продолжить установку не снимая галки с этого пункта.
После, нормально загрузился в Альт, некоторое время пользовался, но потом решил удалить.
Удалил запись через efibootmgr и каталоги Альта с /dev/sda3. Уже позже удалил каталог Альта с /dev/sda1/.
Почему-то кажется, что где-то здесь. Но, возможно, только кажется. ¯\_(ツ)_/¯

В CSM - «устройства хранения», ЕМНИП, всегда было Legacy only. Вторым пунктом идёт - «Вначале UEFI драйвер». Там тоже попереключал, но ничего не изменилось.

Пока просмотрю инфу по ссылке, чтобы дров не наломать.

allext
() автор топика
Ответ на: комментарий от anonymous

четвертый параметр Legacy only … отключает загрузку с носителей формата UEFI

В CSM за это отвечает пункт «Параметры загрузочных устройств» Можно выбрать - «UEFI и Legacy», «UEFI only», «Legacy only». С этим всё нормально.
Неудобство в том, что загрузочные usb-устройства, теперь, теряют приоритет, если были отключены.

allext
() автор топика

1.А если удалить запись NVRAM Альта и папку с его ефи?

  1. В grub2 можно сделать поиск второго диска и загрузку с него, если найден. Это предположительно, я ранее добавлял пункт меню USB и грузился с него. Думаю не сложно сделать поиск, хорошая вещь надо тоже себе сделать.
AZJIO
()
Ответ на: комментарий от AZJIO

А если удалить запись NVRAM Альта и папку с его ефи?

На данный момент, я не нахожу никаких записей про Альт. То, что показывал efibootmgr - удалено. Каталоги Альта тоже удалены. Моё предположение, что проблема началась после установки/удаления Альта, может быть ошибочным.
Просто, при установке других дистров не видел такого пункта, но это может быть обычным процессом. Позже посмотрел в поиске, ничего криминального в этом нет. Во всяком случае, ничего вроде «всё стереть а потом записать» не делалось.
Но с этого момента загрузка с usb не хочет быть первой.

Не вижу смысла добавлять в grub то, что можно грузить ещё раньше из меню F8, что сейчас и делаю. Наверное, прислушаюсь к Vsevolod-linuxoid

allext
() автор топика
Ответ на: комментарий от anonymous

https://ibb.co/gbPGH77w - Boot menu
https://ibb.co/JJtSPkX - Конфигурация загрузки
https://ibb.co/605p0JPv - CSM
https://ibb.co/KjJW2DBC - Меню безопасной загрузки

Закинул. У меня ibb, imgbb и постимадж очень долго и нудно загружают страницу с картинкой, а имгур не хочет загружать ничего.

allext
() автор топика
Ответ на: комментарий от allext

Спасибо!

Закинул. У меня ibb, imgbb и постимадж очень долго и нудно загружают

главное ты меня правильно понял.

Пока что под подозрением только Безопасная загрузка (SecureBoot) – у тебя включено. Убунта умеет, Альт наверное также. А флешки же не доверенные по-умолчанию. (или я ошибаюсь?)

Этот продвинутый уефи от Асуса вроде бы должен уметь делать скриншоты? Ему нужна будет флешка для хранения.

Ещё один совет. Загрузись с флешки и посмотри текущее состояние загрузочных записей. Или может флешка грузится в легасимод…

anonymous
()
Ответ на: комментарий от anonymous

Загрузись с флешки и посмотри текущее состояние загрузочных записей

Не совсем понял, ты имеешь ввиду выхлоп efibootmgr? Потому, что именно это и привело к обнаружению причины. Нюанс загрузки с флеш выяснился.

Захожу в настройки UEFI, выставляю загрузку с флеш, F10->save&reset->Enter.
Загружаюсь с флешки и смотрю вывод efibootmgr

BootCurrent: 0004
Timeout: 1 seconds
BootOrder: 0004,0003,0001,0002,0005
Boot0001* ubuntu
Boot0002* Hard Drive
Boot0003* UEFI: VendorCoProductCode 2.00, Partition 1
Boot0004* UEFI: VendorCoProductCode 2.00, Partition 2
Boot0005* USB

И тут вижу, что загрузка не с usb-устройства, а с раздела на нём, но раздел, ведь, не считается устройством.
Переигрываю.
В настройках UEFI, выставляю загрузку с флеш так: VendorCoProductCode 2.00, а не как раньше - UEFI: VendorCoProductCode 2.00, Partition 2.
F10->save&reset->Enter
Теперь приоритет загрузки с usb сохраняется при отключениях и подключениях других устройств тоже.

Теперь, почему именно так было и каким боком тут Альт.
Была у меня мультизагрузочная флешка, сделанная с помощью ventoy и никогда никакие ubunt-ы, debian-ы и mint-ы не говорили, что она legacy, а я и не обратил внимания. Пока не начал установку Alt-a. На этапе, когда нужно указать / и раздел efi, было сообщение о загрузке в режиме legacy(не помню дословно). Прекратил установку и переделал флеш в ventoy-е, выбрав gpt.
После этого, в настройках uefi в «boot» про флеш появилось три пункта:
UEFI: VendorCoProductCode 2.00, Partition 1 - При его выборе ничего не грузилось
UEFI: VendorCoProductCode 2.00, Partition 2 - При выборе - загрузка в UEFI mode
VendorCoProductCode 2.00 - При выборе - загрузка в legasy mode

Поэтому и выбирался раздел «2», со всеми вытекающими.¯\_(ツ)_/¯
Осталось, только, разобраться с правильным форматированием и разметкой флеш под UEFi, но это уже другая история, я задолбался.
Спасибо за подсказку в нужном направлении и всем неравнодушным :)

allext
() автор топика
Ответ на: комментарий от allext

что загрузка не с usb-устройства…

С устройства загрузка в легаси-режиме.

а с раздела на нём…

Не с раздела, а с ЕФИ-загрузчика, находящегося на этом раздела, загрузка в ЕФИ-режиме.

Изучай свой УЕФИ, тебе с ним жить!

andytux ★★★★★
()
Ответ на: комментарий от allext

После этого, в настройках uefi в «boot» про флеш появилось три пункта: UEFI: VendorCoProductCode 2.00, Partition 1 - При его выборе ничего не грузилось UEFI: VendorCoProductCode 2.00, Partition 2 - При выборе - загрузка в UEFI mode VendorCoProductCode 2.00 - При выборе - загрузка в legasy mode

Тут вроде все логично - код легаси загрузчика записался при установке альта в нулевой сектор устройства, а не нулевой сектор раздела.

А вот тут

BootOrder: 0004,0003,0001,0002,0005

самое интересное - в зависимости от реализации UEFI этот список может себя вести по-разному. Главное что этот список есть в некой переменной хранимой внутри UEFI, но заполняется список разными UEFI по-разному - разная логика действий «Добавить/удалить пункт» и «Поставить первым в списке», причем возможности пользователя по управлению этими действиями в интерфейсе UEFI могут и отсутствовать/быть не очевидными, и управлятся внутрянкой черного ящика. Чтобы заглянуть внутрь черного ящика UEFI нужен инструмент, и… он есть! Цикл статей на хабре был с десяток лет назад от уважаемого CodeRush

anonymous
()
Ответ на: комментарий от allext

И тут вижу, что загрузка не с usb-устройства, а с раздела на нём, но раздел, ведь, не считается устройством.

По F12 (или другое, вызывающее бутменю) предлагается загрузка флешки в 2-х режимах, как ефи и как легаси. Там же видно 2 пункта. При этом на флешке должны быть соответствующие файлы. Легаси режим читает мбр, ефи - файл в папке ефи. Если оба режима сделаны, то и загрузка доступна в обоих режимах.

AZJIO
()
Ответ на: комментарий от allext

Не совсем понял, ты имеешь ввиду выхлоп efibootmgr?

Да, его имел ввиду.

загрузка не с usb-устройства, а с раздела на нём, но раздел, ведь, не считается устройством.

Почему нет? В бутменю (по F8..F12 в зависимости от производителя) отображаются все возможные варианты загрузки с раздела/ов на устройстве.

Осталось, только, разобраться с правильным форматированием и разметкой флеш под UEFi

«Там всё так просто, что сложно» – начинает играть секурбут и всё остальное. Так-то достаточно отформатировать в FAT32, поставить и сконфигурировать загрузчик… и начать удивляться почему не везде и не всегда работает.

У меня на днях была похожая ситуация. Старый девайс грузился с флешки (как позже выяснилось тоже в легасимод). Надо было современные исошки загрузить. И тут началось

  • в современных образах вероятно загрузки в легасимод нет, а родной их загрузчик вероятно из-за секурбута игнорируется
  • и только когда я выбрал уефи-загрузчик на флешке удалось загрузить новые исошки.

Попутно на флешке «нашлась» уефи-онли сборочка, которая как бы и должна бы быть первой в очереди на загрузку (но нет).

Собственно, поэтому я и подумал, что у тебя что-то похожее происходит. Ясно описать не смог. Но ты разобрался. Молодец!

anonymous
()
Ответ на: комментарий от AZJIO

Я и не говорил, что у меня, что-то не загружается. Всё загружалось и в uefi mode и в legacy. Из меню F8 тоже всё запускалось. Проблема, была в том, что загрузочная флеш, выставленная в настройках UEFI как Boot Option #1, после отключения удалялась оттуда и заменялась на что-то другое.
При последующих включениях она уже не имела приоритета и требовалось либо давить F8, либо лезть в настройки и возвращать её в Boot Option #1. Было непонятно почему так, если раньше всё работало.
Вероятно, это такая особенность uefi asus, не знаю как на других компах. Если ему в Boot Option #1 засунуть вот это - UEFI: VendorCoProductCode 2.00, Partition 2, чтобы загрузиться в uefi mode, то никакого приоритета usb-устройствам не даётся.
Нужно было в Boot Option #1 выставить пункт VendorCoProductCode 2.00 - он соответствует Boot0005* USB. После этого, поведение загрузки стало таким как было раньше - подключенные usb грузятся первыми, а если их нет, то загрузка с hdd.

allext
() автор топика
Ответ на: комментарий от allext

такая особенность uefi asus…

Особенность данного, конкретного УЕФИ.

не знаю как на других компах…

Много разных видел. Не видел двух одинаковых.

Касаемо УЕФИ, почти всегда правильный ответ: особенность данного, конкретного УЕФИ. Прибавь к этому обновление без твоего ведома…

andytux ★★★★★
()