Чому більшість дистрибуторів ланцюжок UEFI і grub?


31

Більшість дистрибутивів встановлюють додатковий завантажувач у системі UEFI. UEFI сам є завантажувачем, він пропонує меню для вибору різних операційних систем або окремих ядер. Крім того, параметри UEFI можна легко змінити за допомогою таких інструментів, як користувальницький простір efibootmgr.

Ядра з 3.3 підтримують EFI_STUB, що означає, що ядро ​​може завантажуватися безпосередньо з UEFI. З якої причини розповсюдження вирішує використовувати додатковий завантажувач? Більшість навчальних посібників для Linux / UEFI зосереджені головним чином на тому, як налаштувати додатковий завантажувач (rEFInd, grub2, ELILO тощо) замість завантаження Linux з EFI_STUB.

Єдине, чого бракує в дистрибутивах, - це підтримка. Оскільки більшість дистрибутивів є ланцюжком другого завантажувача, ядро ​​не додається до меню завантаження UEFI, а також не копіюється в системний розділ EFI.

Три сценарії достатньо, щоб виконати всю магію. Той, який копіює initramfs в ESP. Другий копіює ядро ​​в ESP і створює новий запис у меню завантаження UEFI. Третій скрипт видаляє старе ядро ​​та initramfs з ESP та видаляє запис меню завантаження UEFI. Це дозволяє повністю автоматизувати оновлення / очищення ядра / initramfs без взаємодії з користувачем. Я використовую цей підхід вже більше року, і він працював бездоганно.

Чому більшість дистрибутивів використовує grub замість EFI_STUB?

Посилання:

EDIT: Я не говорю про повне видалення підтримки grub, а про те, щоб запропонувати вибір тим, хто хоче використовувати її з різних причин. Розподіл може забезпечити пакет grub-efiдля тих, хто хоче зв’язати UEFI і grub, і пакет, efistub-bootякий містить сценарії, про які я згадував вище.


4
Чому вони повинні? Вони вже встановили методи для роботи / генерації файлу конфігурації grub. Крім того, це допомагає, якщо всі системи (не UEFI та UEFI) ведуть себе однаково.
Ульріх Дангель

Звучить круто. Але оскільки за цим посиланням ви можете це зробити, якщо хочете, можливо, це потенційна трясовина для дистрибутивів, щоб зробити це за вас автоматично. Betcha деякі з часом дадуть вам можливість тому.
goldilocks

1
@Bakuriu Простіша для розуміння система, простіша послідовність завантаження, менше виконаний код і трохи швидший час завантаження.
Марко

4
Це питання слід відкласти, оскільки вказана причина утримання неправильна. На питання є проста незаперечна відповідь: UEFI не надає меню завантаження. Деякі реалізації. Деякі цього не роблять, оскільки для досягнення цільового часу завантаження для Windows 8 BIOS навіть не ініціалізує пристрої введення . Нехай чекає, чи натисне користувач клавішу. Тож вам доведеться пройти Windows, щоб потрапити до Linux, або навпаки. Колишній працює на деяких системах, але я сумніваюся, що специфікація це гарантує. Останній не працює (ви можете ввести налаштування UEFI з GRUB, але не з Linux).
sourcejedi

1
@sourcejedi Ви заявляєте, що не відповідає вашим джерелам. UEFI надає меню завантаження (хоча інтерфейс користувача не відповідає усім постачальникам). mjg59 означав, що ви не можете потрапити до меню завантаження без філософських компромісів (приймаючи W8 EULA). Але ця проблема буде однаковою для установців із завантажувачами, що не входять в систему EFISTUB. Тож це не відповідає, чому ми також віддамо перевагу грибку над EFISTUB.
Lingzhu Xiang

Відповіді:


10

Зважаючи на те, що UEFI був визначений лише у 2005 році, там є маса застарілого обладнання, яке не підтримує специфікацію. Щоб додати UEFI до стандартного розповсюдження, потрібно тестувати два шляхи коду замість одного, і це не лише те, що завантажувальний код є сумно вибагливим, це один з найбільш дратуючих трудомістких бітів коду для тестування.


5
Це не тільки дратує затрату часу на тестування, але і є найбільш дратівливим кодом, який може піти не так. Поміркуйте: що вам більше подобається, якесь питання, коли система працює і працює в основному нормально, або не в змозі навіть завантажувати систему? Завантажувач, безумовно, є одним із програм, які я дуже сильно не торкаюся, якщо це не потрібно.
CVn

Вищенаведений коментар @ MichaelKjörling має бути у відповіді. Перехід на новий завантажувач дуже ризикований. Розробники дистрибуторів хочуть, щоб їхні користувачі мали хороший досвід, але більше того, вони хочуть, щоб кожен потенційний новий користувач мав бездоганний перший досвід. Мені шкода, що я назвав дистрибуцію "дистрибутивом", але це було нормально спільно з творцями.
Йоган

@Johan msw може вільно відредагувати цю точку відповіді, я не проти. (Це недостатньо, щоб відповісти самостійно, ІМО.) І Тобу, і золотухи торкаються і цього питання.
CVn

3

Дистрибуція має обмежені ресурси, і поза цим може бути зовсім ніяких причин. Це може бути досить простим і безпечним, але незалежно від того, для чого знадобиться більше робіт з технічного обслуговування, тому що опція збитку повинна підтримуватися, якщо тільки для систем, які не належать до УЄФІ.

Я впевнений, що у кожного є список функцій та варіантів, які вони хотіли б бачити у дистрибутивах (я дам вам кілька сторінок, коханий), і, без сумніву, багато з них були б "абсолютно легко, без клопоту, чесно. .. ". Однак не існує нескінченної кількості годин людини на їх виконання. Якщо ми стикаємося з такими рішеннями ("Чи ми вкладаємо роботу над цією функцією порівняно з деякими іншими?"), Основними питаннями повинні бути:

  • Це потрібно? (Відповідь тут - ні).
  • Скільки людей піде на користь, а скільки? (ІМО: кілька, і не багато)
  • Чи є розумна альтернатива, за допомогою якої користувач може влаштувати себе, не роблячи нічого? (Мабуть, є.)

Причина, по якій люди взагалі використовують дистрибутив, полягає в тому, що всі мають обмеження щодо ресурсів (інакше просто наймайте команду, купуйте їм трохи місця та обладнання та змушуйте їх робити все для вас саме так, як вам хочеться). Тож реальність така, що дистрибуція відображає узагальнені потреби своїх користувачів.

Однак, я думаю, що вчасно це буде прийнято як варіант, і я підтримав це питання.


2

Орієнтація на завантажувачі UEFI на додаток до grub ускладнить контроль якості та підтримку. Дистрибуції орієнтовані на грубку, а не на специфікацію UEFI, тому що grub - це вільне програмне забезпечення, рухоме, гнучкіше та якісне. Ви все одно можете отримати завантаження з чистою UEFI, дотримуючись підручника та встановивши розділ UEFI /boot, оскільки якщо ви це зробите, технічне обслуговування залежить від вас.


Ваше твердження якості є дискусійним, але я думаю, що причина, на яку він націлився, не має нічого спільного з цим. у них вже є тисячі рядків погано написаного сценарію оболонки, щоб обробити його, то чому б вони хотіли 20 хороших?
mikeserv

1

Справжня проблема полягає в тому, що люди не розуміють, як це працює. Наприклад, у своєму запитанні ви зазначаєте, що три сценарії - це все, що необхідно, і більшість відповідей тут стосується всього / будь-якого додаткового обслуговування, яке потрібно для його роботи - але правда, ці сценарії вам не потрібні. або будь-яка додаткова робота.

Все, що вам потрібно, - це прив’язати кріплення ESP - або там, де ви хочете зберегти ядро, - /bootщо ви можете зробити з одним рядком /etc/fstab. Зробіть це, і всі поточні сценарії оновлення ядра просто продовжуватимуть працювати.

Мій `/ etc / fstab 'виглядає так:

LABEL=ESP /esp vfat defaults 0 2
#
#^ i like a separate mount point - not necessary though
#
/esp/EFI/arch_root /boot none bind,defaults 0 2
#
#^ i keep separate installations in separate directories
#

Тут є хороший момент, що стосується налаштувань конкретних виробників. UEFI явно нічого НЕ вказати інтерфейс для меню завантаження. Це для захоплень і не буде відповідати між машинами. Це дратує, але правда.

І так, хоча завантажувач, такий як grubнасправді, приносить лише більшу роботу, програма меню - наприклад, rEFInd - вирівнює різниці та спрощує все.


1
Я не розумію, як це могло б працювати. Зауважте, що імена файлів ядра та initramfs містять версію. Якщо немає сценаріїв, ви завантажите своє старе ядро ​​після встановлення нового. Або по-іншому: Як ви можете змінити ядро ​​за замовчуванням, щоб вказати на нове? (Мої сценарії використовують efobootmgrдля оновлення порядку завантаження та зміни ядра за замовчуванням).
Марко

@Marco - добре шлях до завантаження за замовчуванням, \EFI\BOOT\BOOTX64.efiі тому його можна було б назвати для цього. нахил UEFI (за специфікацією) в першу чергу обробляє аргументи до ядра - і тому в цьому випадку зображення initramfs / ядра потрібно зв'язати разом. але я не знаю, що ви маєте на увазі щодо іменування версій - я думаю, що це роблять тільки дебіани, і я вважаю це непродуктивним у будь-якому випадку. умовна назва для вашого ядра є vmlinuz. У будь-якому випадку, правильний спосіб зробити це з менеджером завантаження, а не з завантажувачем . Використовуйте додаток EFI, яке знаходить ваше ядро ​​та передає його ім'я EFI для завантаження - як це робить rEFInd.
mikeserv

Я використовую Debian і ім'я ядра, наприклад, vmlinuz-4.2.0-1-amd64яке я залишаю таким, як є, а потім використовую, efibootmgrщоб додати це до списку завантаження і зробити його за замовчуванням. Я бачу, що іменування ядра BOOTX64.efiможе бути рішенням. Але в будь-якому випадку мені потрібно мати сценарій, щоб це зробити, і, крім того, це не дозволяє легко зберігати кілька ядер, якщо всі вони названі однаковими.
Марко

@Marco - вам не потрібен цілий окремий скрипт - ваш менеджер пакунків - можливо, підходить - все одно буде запущений якийсь сценарій, коли ядро ​​встановлено для створення initramfs. він, ймовірно, робить там сотні речей, щоб відпрацювати ім’я вашого ядра, але лише один додатковий рядок зробить перейменування на все, що завгодно. і ви можете легко зберегти стільки ядер, скільки вам подобається, якщо ви збережете дерево завантаження . rEFInd обробляє його, роблячи завантажувальне зображення за замовчуванням самим нещодавно зміненим зображенням ядра у своїх шляхах пошуку.
mikeserv

Зміна скриптів акцій, встановлених менеджером пакунків, є поганою ідеєю. Вони можуть бути оновлені, що, в свою чергу, стирає ваші зміни, і в цьому конкретному випадку - навіть може призвести до завантаження системи. Існують каталоги для сценаріїв користувачів, які викликаються після встановлення ядра / initramfs і призначені для використання саме для цієї мети. BTW: Ви пропонуєте редагувати сценарії у коментарях. Однак у своїй відповіді ви зазначаєте, що «вам не потрібні ці сценарії чи додаткова робота», що не відповідає дійсності (принаймні, для Debian).
Марко

0

Вони розпочали ланцюжок UEFI та GRUB як рішення про тимчасове впровадження.

Коли підтримка UEFI та супутні проблеми (наприклад, безпечне завантаження) будуть вирішені, все більше дистрибутивів використовуватимуть її безпосередньо. Тим часом це все ще зовсім нове: Google Trends демонструє досить обмежене прийняття: http://www.google.com/trends/explore?q=cannot+boot+uefi#q=uefi%2C%20%20efi%2C % 20% 20біо & cmpt = q

Інші згадували про можливі проблеми, пов'язані з досягненням чистого рішення UEFI та / або підтримки одночасно як систем, що не є UEFI, так і чистими системами UEFI. Ядро UEFI може працювати в системі, яка не є UEFY, але інструменти оновлення ядра повинні оновлювати або меню GRUB, або меню завантаження UEFI АБО і те, і інше і т.д.

Дійсно, про контроль якості, як згадувалося: важливо, що проблеми з цим кодом мають високий вплив: Коли комп'ютер не зможе завантажувати нових користувачів, тобто потенційних перетворювачів Linux, він викине його як сміття і повернеться до чогось "безпечного".

Але, як я вже говорив, у міру того, як технологія набуває більшої популярності, вона стане стандартом.


Я сподіваюсь, що ні - але це здебільшого тому, що у мене є серйозні занепокоєння щодо режимів блокування UEFI та "обіцянки" Microsoft переконатися, що завжди буде підписане зображення для використання Linux ...
Shadur

0

Для усунення помилок вбудованого програмного забезпечення необхідний додатковий код

Якщо ланцюжок не пов'язаний, дистрибутив більше покладається на програмне забезпечення для правильного завантаження. Оскільки будь-яке програмне забезпечення матиме проблеми, прошивка також схильна до цього. Тепер дистрибутивам Linux доведеться писати також для вирішення цих помилок прошивки.

Справа з реального життя як приклад. Материнська плата Asrock H81 pro BTC P1.80 дозволяє створювати записи меню завантаження за допомогою efibootmgr. Можна створити кілька записів меню завантаження, і порядок завантаження можна змінити за допомогою efibootmgr --bootorder XXXX,YYYY,ZZZZабо встановити тимчасовий варіант наступного завантаження за допомогою efibootmgr --bootnext XXXX. Обидві ці команди повертають вихід, який дає вам уявлення про те, що порядок завантаження змінився, або наступна завантажиться, наприклад BootNext: XXXX. Однак при перезавантаженні вперта прошивка просто ігнорує щойно запитуваний варіант завантаження і перезавантажується в попереднє BootCurrent:значення. Постійна зміна порядку завантаження може бути здійснена лише з утиліти налаштування прошивки. А непостійна зміна взагалі недоступна.


-2

Я думаю, що якщо завантаження передається лише EFI, і ми видалимо завантажувач, то це буде важко як для виробника HW, так і для виробників операційної системи. У постачальника HW буде більше ядер для тестування, тоді як для компаній, що виробляють ОС, це буде схоже на те, чи завантажено їх ядро ​​різними FW.

Крім того, з прямим завантаженням ядра від EFI, куди в стек поміститься захисне завантаження? У поточному сценарії, як тільки управління переходить до завантажувача ОС, тоді завантажувач перевіряє, чи правильно підписано ядро ​​чи ні. Якщо ми завантажимо ядро ​​безпосередньо з EFI, то я думаю, що це створить безлад лише тоді, коли буде порушено весь стек. Просто думка з того, що я розумію.


це нерозумно. причина завантажувача перевіряє ключ, тому що UEFI цього не робить. завантаження ланцюга зайве, щоб забезпечити завантаження підписаного ядра, ви просто перевірте ключ в прошивці - як він повинен працювати.
mikeserv
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.