Tại sao hầu hết các chuỗi phân phối UEFI và grub?


31

Hầu hết các bản phân phối đều cài đặt bộ tải khởi động bổ sung trên hệ thống UEFI. Bản thân UEFI là một bộ tải khởi động, nó cung cấp một menu để chọn các hệ điều hành khác nhau hoặc các hạt nhân riêng lẻ. Hơn nữa, các cài đặt UEFI có thể dễ dàng được thay đổi bằng các công cụ không gian người dùng như efibootmgr.

Kernels kể từ 3.3 hỗ trợ EFI_STUB, có nghĩa là hạt nhân có thể được tải trực tiếp từ UEFI. Lý do phân phối quyết định sử dụng bộ tải khởi động bổ sung là gì? Hầu hết các hướng dẫn về Linux / UEFI tập trung chủ yếu vào cách thiết lập trình tải khởi động bổ sung (rEFInd, grub2, ELILO, v.v.) thay vì khởi động Linux bằng EFI_STUB.

Điều duy nhất còn thiếu trong các bản phân phối là hỗ trợ. Vì hầu hết các bản phân phối đều có bộ tải khởi động thứ hai, nên kernel không được thêm vào menu khởi động UEFI và cũng không được sao chép vào phân vùng hệ thống EFI.

Ba kịch bản là đủ để làm tất cả các phép thuật. Một trong đó sao chép các initramfs vào ESP. Một cái thứ hai sao chép kernel vào ESP và tạo một mục mới trong menu khởi động UEFI. Kịch bản thứ ba loại bỏ kernel cũ và initramfs khỏi ESP và xóa mục nhập menu khởi động UEFI. Điều này cho phép cập nhật / thanh lọc kernel / initramfs hoàn toàn tự động mà không cần tương tác của người dùng. Tôi đang sử dụng phương pháp này từ hơn một năm nay và nó đã hoạt động hoàn hảo.

Tại sao hầu hết các bản phân phối sử dụng grub thay vì EFI_STUB?

Liên kết:

EDIT: Tôi không nói về việc loại bỏ hoàn toàn hỗ trợ grub mà là đưa ra lựa chọn cho những người muốn sử dụng nó vì nhiều lý do. Các bản phân phối có thể cung cấp một gói grub-eficho những ai muốn xâu chuỗi UEFI và grub và một gói efistub-bootchứa các tập lệnh mà tôi đã đề cập ở trên.


4
Tại sao họ nên? Họ đã thiết lập các phương thức để xử lý / tạo tập tin cấu hình grub. Hơn nữa, nó giúp nếu tất cả các hệ thống (không phải UEFI & UEFI) hoạt động giống nhau.
Ulrich Dangel

Nghe hay đấy. Nhưng vì theo liên kết đó, bạn có thể làm điều đó nếu bạn muốn, có thể đó là một vũng lầy tiềm năng cho các distro tự động làm điều đó cho bạn. Betcha một số cuối cùng sẽ cung cấp cho bạn tùy chọn tho.
goldilocks

1
@Bakuriu Chẳng hạn, một hệ thống dễ hiểu hơn, trình tự khởi động đơn giản hơn, mã được thực thi ít hơn và thời gian khởi động nhanh hơn một chút.
Marco

4
Câu hỏi này nên được hoãn lại, vì lý do giữ được đưa ra là sai. Câu hỏi không có câu trả lời đơn giản không thể kiểm chứng: UEFI không cung cấp menu khởi động. Một số thực hiện. Một số thì không, vì để đạt được thời gian khởi động mục tiêu cho Windows 8, BIOS thậm chí không khởi tạo các thiết bị đầu vào . Hãy để một mình chờ xem người dùng có nhấn phím không. Vì vậy, bạn phải thông qua Windows để truy cập Linux hoặc ngược lại. Cái trước hoạt động trên một số hệ thống, nhưng tôi nghi ngờ thông số kỹ thuật đảm bảo nó. Cái sau không hoạt động (bạn có thể nhập thiết lập UEFI từ GRUB, nhưng không phải từ Linux).
sourcejedi

1
@sourcejedi Bạn cho rằng không phù hợp với nguồn của bạn. UEFI không cung cấp menu khởi động (UI không nhất quán giữa các nhà cung cấp). mjg59 có nghĩa là bạn không thể vào menu khởi động mà không thỏa hiệp về mặt triết học (chấp nhận W8 EULA). Nhưng vấn đề này sẽ giống nhau đối với các trình cài đặt có bộ tải khởi động không phải là EFISTUB. Vì vậy, nó không trả lời lý do tại sao chúng tôi muốn grub hơn EFISTUB.
Lingzhu Xiang

Câu trả lời:


10

Cho rằng UEFI chỉ được xác định vào năm 2005, có một loạt các thiết bị cũ không hỗ trợ thông số kỹ thuật. Để thêm UEFI vào một bản phân phối tiêu chuẩn sẽ yêu cầu thử nghiệm hai đường dẫn mã thay vì một, và không chỉ mã khởi động nổi tiếng là khó xử, đây là một trong những đoạn mã tốn thời gian khó chịu nhất để kiểm tra.


5
Không chỉ mất thời gian để kiểm tra, đây là mã khó chịu nhất có thể bị lỗi. Hãy xem xét: bạn thích điều gì, một số vấn đề trong khi hệ thống hoạt động và hoạt động bình thường, hoặc thậm chí không thể khởi động hệ thống? Bộ tải khởi động chắc chắn là một trong những phần mềm tôi cảm thấy mạnh mẽ nhất về việc không chạm vào trừ khi cần thiết.
một CVn

Nhận xét trên của @ MichaelKjorling nên được trả lời. Chuyển sang một bộ tải khởi động mới là rất rất rủi ro. Những người sáng tạo muốn có người dùng của họ có trải nghiệm tốt, nhưng hơn thế nữa, họ muốn người dùng mới tiềm năng duy nhất có trải nghiệm lần đầu hoàn hảo. Tôi xin lỗi vì tôi đã gọi phân phối là "bản phân phối", nhưng cảm thấy ổn khi kết hợp với người tạo.
Johan

@Johan msw có thể tự do chỉnh sửa điểm đó thành câu trả lời, tôi không phiền. (Đó không phải là một câu trả lời riêng, IMO.) Cả Tobugoldlilocks đều liên quan đến vấn đề này.
CVn

3

Các bản phân phối có nguồn lực hạn chế và có thể không có bất kỳ lý do nào ngoài điều đó. Nó có thể khá đơn giản và an toàn, nhưng không có vấn đề gì sẽ đòi hỏi nhiều công việc bảo trì hơn vì tùy chọn grub phải được duy trì, nếu chỉ dành cho các hệ thống không phải UEFI.

Tôi chắc rằng mọi người đều có một danh sách các tính năng và tùy chọn mà họ muốn thấy các bản phân phối (tôi sẽ cung cấp cho bạn một vài trang, lol), và chắc chắn nhiều trong số đó sẽ là "hoàn toàn dễ dàng, không phức tạp, trung thực. .. ". Tuy nhiên, không có số lượng người vô hạn để thực hiện chúng. Khi phải đối mặt với các quyết định như thế này ("Chúng ta có đưa công việc vào tính năng này, so với một số câu hỏi khác không?") Các câu hỏi chính phải là:

  • Có cần thiết không? (Câu trả lời ở đây là không).
  • Có bao nhiêu người sẽ được hưởng lợi, và bao nhiêu? (IMO: một vài, và không nhiều)
  • Có một sự thay thế hợp lý bằng cách mà người dùng có thể tự điều chỉnh mà không cần chúng tôi làm gì không? (Rõ ràng là có.)

Lý do mọi người sử dụng distro hoàn toàn là vì mọi người đều bị hạn chế về tài nguyên (nếu không, chỉ cần thuê một nhóm, mua cho họ một số không gian và thiết bị và để họ làm mọi thứ cho bạn chính xác như bạn muốn). Vì vậy, thực tế là các bản phân phối phản ánh nhu cầu chung của người dùng của họ.

Điều đó nói rằng, tôi nghĩ rằng điều này sẽ kịp thời được thông qua như là một lựa chọn, và tôi nêu lên câu hỏi.


2

Nhắm mục tiêu bộ tải khởi động UEFI ngoài grub sẽ làm phức tạp việc kiểm soát và hỗ trợ chất lượng. Các distro đang nhắm mục tiêu grub chứ không phải thông số kỹ thuật UEFI vì grub là phần mềm miễn phí, có thể hack, linh hoạt hơn và chất lượng cao. Bạn vẫn có thể có được một khởi động UEFI thuần túy bằng cách làm theo hướng dẫn và gắn phân vùng UEFI vào /boot, bởi vì nếu bạn làm điều đó, việc bảo trì sẽ thuộc về bạn.


khẳng định chất lượng của bạn là điều gây tranh cãi, nhưng tôi nghĩ lý do nó nhắm mục tiêu không liên quan gì đến nó. họ đã có hàng ngàn dòng script shell được viết kém để xử lý nó, vậy tại sao họ lại muốn 20 cái tốt?
mikeerv

1

Vấn đề thực sự là mọi người không hiểu cách thức hoạt động của nó. Ví dụ, trong câu hỏi của bạn, bạn đề cập rằng ba tập lệnh là tất cả những gì cần thiết và hầu hết các câu trả lời ở đây là về tất cả / bất kỳ bảo trì bổ sung nào sẽ được yêu cầu để làm cho nó hoạt động - nhưng sự thật là bạn không cần những tập lệnh đó hoặc bất kỳ công việc bổ sung.

Tất cả những gì bạn cần là liên kết gắn kết ESP - hoặc bất cứ nơi nào bạn muốn giữ kernel - hơn /boot, điều bạn có thể làm với một dòng duy nhất /etc/fstab. Làm điều đó và tất cả các kịch bản cập nhật kernel hiện tại sẽ tiếp tục hoạt động.

`/ Etc / fstab 'của tôi trông giống như:

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
#

Tuy nhiên, có một điểm tốt được thực hiện ở đây về các cài đặt dành riêng cho nhà sản xuất. UEFI rõ ràng không không chỉ định giao diện cho một menu khởi động. Đó là để lấy và sẽ không nhất quán giữa các máy. Thật khó chịu, nhưng sự thật.

Và do đó, trong khi một trình tải như grubthực sự chỉ làm cho nhiều công việc hơn , một ứng dụng menu - chẳng hạn như rEFInd - cân bằng sự khác biệt và đơn giản hóa mọi thứ.


1
Tôi không hiểu làm thế nào điều này có thể làm việc. Lưu ý rằng tên tệp của kernel và initramfs 'bao gồm phiên bản. Nếu không có tập lệnh nào, bạn sẽ khởi động kernel cũ sau khi cài đặt kernel mới. Hoặc diễn đạt khác nhau: Làm thế nào để bạn thay đổi kernel mặc định để trỏ đến kernel mới? (Tập lệnh của tôi sử dụng efobootmgrđể cập nhật thứ tự khởi động và thay đổi kernel mặc định).
Marco

@Marco - cũng là đường dẫn khởi động mặc định \EFI\BOOT\BOOTX64.efivà vì vậy nó có thể được đặt tên cho nó. UEFI không thể (theo thông số kỹ thuật) xử lý các đối số cho kernel ở vị trí đầu tiên - và do đó, hình ảnh initramfs / kernel cần được liên kết với nhau trong trường hợp đó. nhưng tôi không biết ý của bạn về việc đặt tên phiên bản - tôi nghĩ chỉ có những người làm công việc đó mới làm điều đó và dù sao tôi cũng coi đó là không hiệu quả. tên thông thường cho kernel của bạn là vmlinuz. Dù sao, cách đúng đắn để làm điều đó là với trình quản lý khởi động chứ không phải trình tải . Sử dụng ứng dụng EFI tìm thấy kernel của bạn và chuyển tên của nó cho EFI để khởi động - giống như rEFInd.
mikeerv

Tôi sử dụng Debian và tên của kernel là ví dụ như vmlinuz-4.2.0-1-amd64tôi để lại và sau đó sử dụng efibootmgrđể thêm nó vào danh sách khởi động và làm cho nó mặc định. Tôi thấy rằng việc đặt tên kernel BOOTX64.eficó thể là một giải pháp. Nhưng bằng mọi cách tôi sẽ cần phải có một kịch bản để làm điều đó và hơn nữa điều đó không dễ dàng cho phép giữ nhiều hạt nhân nếu tất cả chúng đều được đặt tên giống nhau.
Marco

@Marco - bạn không cần một tập lệnh hoàn toàn riêng biệt - trình quản lý gói của bạn - apt, có thể - sẽ chạy một số tập lệnh nào đó khi kernel được cài đặt để xây dựng initramfs. nó có thể đã thực hiện hàng trăm thứ ở đó để tìm ra tên kernel của bạn, nhưng chỉ cần một dòng bổ sung duy nhất sẽ đổi tên thành bất cứ thứ gì bạn muốn. và bạn có thể dễ dàng giữ bao nhiêu hạt nhân tùy thích nếu bạn giữ một cây khởi động . rEFInd xử lý nó bằng cách làm cho hình ảnh khởi động mặc định trở thành hình ảnh hạt nhân được sửa đổi gần đây nhất trong các đường dẫn tìm kiếm của nó.
mikeerv

Sửa đổi tập lệnh chứng khoán được cài đặt bởi trình quản lý gói là một ý tưởng tồi. Chúng có thể được cập nhật để lần lượt xóa sạch các thay đổi của bạn và - trong trường hợp cụ thể này - thậm chí có thể dẫn đến một hệ thống không thể khởi động. Có các thư mục cho các tập lệnh người dùng được gọi sau khi cài đặt kernel / initramfs và được sử dụng cho mục đích chính xác như thế này. BTW: Bạn đang đề nghị chỉnh sửa các tập lệnh trong bình luận của bạn. Tuy nhiên, trong câu trả lời của bạn, bạn nêu rõ, bạn không cần các tập lệnh hoặc bất kỳ công việc bổ sung nào, điều đó không đúng (ít nhất là đối với Debian).
Marco

0

Họ xâu chuỗi UEFI và GRUB như một giải pháp triển khai tạm thời.

Khi hỗ trợ của UEFI và các vấn đề đi kèm (ví dụ: Khởi động an toàn) được giải quyết, ngày càng nhiều bản phân phối sẽ sử dụng trực tiếp. Trong thời gian này, điều này vẫn còn rất mới: Google Xu hướng hiển thị việc áp dụng khá hạn chế: http://www.google.com/trends/explore?q=cannot+boot+uefi#q=uefi%2C%20%20efi%2C % 20% 20 tỷ & cmpt = q

Những người khác đều đã đề cập đến những cạm bẫy tiềm năng của việc tìm kiếm một giải pháp UEFI thuần túy và / hoặc hỗ trợ đồng thời cả hai hệ thống UEFI và UEFI thuần túy. Nhân UEFI có thể hoạt động trên hệ thống không phải UEFY, nhưng các công cụ cập nhật kernel cần cập nhật menu GRUB HOẶC menu khởi động UEFI HOẶC cả hai, v.v.

Đây thực sự là về kiểm soát chất lượng như đã đề cập: các vấn đề quan trọng với mã này có tác động cao: Khi máy tính không khởi động được người dùng mới, tức là chuyển đổi Linux tiềm năng, sẽ bỏ nó thành rác và quay trở lại một cái gì đó "an toàn".

Nhưng như tôi đã nói khi công nghệ được áp dụng nhiều hơn, nó sẽ trở thành tiêu chuẩn.


Tôi hy vọng là không - nhưng chủ yếu là vì tôi lo ngại nghiêm trọng về các chế độ khóa của UEFI và "lời hứa" của Microsoft để đảm bảo sẽ luôn có hình ảnh được ký để linux sử dụng ...
Shadur 23/07/13

0

Mã bổ sung là cần thiết để khắc phục lỗi firmware

Khi không kết nối mạng, phân phối phụ thuộc nhiều hơn vào phần sụn để khởi động chính xác. Vì bất kỳ phần mềm nào cũng sẽ có vấn đề, phần sụn cũng dễ bị như vậy. Bây giờ các bản phân phối Linux cũng sẽ phải viết để khắc phục các lỗi phần sụn này.

Một trường hợp thực tế cuộc sống là một ví dụ. Bo mạch chủ Asrock H81 pro BTC P1.80 cho phép tạo các mục menu khởi động với efibootmgr. Có thể có nhiều mục menu khởi động được tạo và có thể thay đổi thứ tự khởi động bằng cách sử dụng efibootmgr --bootorder XXXX,YYYY,ZZZZhoặc tùy chọn khởi động tiếp theo tạm thời có thể được đặt bằng cách sử dụng efibootmgr --bootnext XXXX. Cả hai đầu ra trả về lệnh này cung cấp cho bạn ý tưởng rằng thứ tự khởi động đã thay đổi hoặc ví dụ lần khởi động tiếp theo sẽ chạy BootNext: XXXX. Tuy nhiên, khi khởi động lại, phần sụn cứng đầu chỉ cần bỏ qua tùy chọn khởi động mới được yêu cầu và khởi động lại vào BootCurrent:giá trị trước đó . Thay đổi thứ tự khởi động vĩnh viễn chỉ có thể được thực hiện từ tiện ích thiết lập phần sụn. Và một thay đổi không vĩnh viễn là không có sẵn ở tất cả.


-2

Tôi nghĩ rằng nếu việc khởi động chỉ được trao bởi EFI và chúng tôi loại bỏ bộ nạp khởi động thì sẽ khó khăn cho cả nhà cung cấp CTNH và nhà sản xuất Hệ điều hành. Nhà cung cấp CTNH sẽ có nhiều hạt nhân hơn để kiểm tra trong khi đối với các công ty sản xuất HĐH, sẽ giống như liệu hạt nhân của họ có được tải bởi các FW khác nhau hay không.

Hơn nữa với việc khởi động trực tiếp kernel từ EFI, nơi nào trong stack stack boot sẽ phù hợp? Trong kịch bản hiện tại, một khi điều khiển chuyển đến bộ tải khởi động hệ điều hành, sau đó bộ nạp khởi động kiểm tra xem kernel có được ký chính xác hay không. Trong trường hợp chúng ta tải kernel trực tiếp từ EFI thì tôi nghĩ rằng nó sẽ chỉ tạo ra sự lộn xộn vì toàn bộ stack sẽ bị xáo trộn. Chỉ là một ý kiến ​​từ những gì tôi hiểu.


điều đó thật ngớ ngẩn. Lý do bộ tải khởi động kiểm tra khóa là vì UEFI không. chuỗi nạp là không cần thiết để đảm bảo khởi động một hạt nhân đã ký bạn chỉ cần kiểm tra chìa khóa trong firmware - cách thức mà nó nên làm việc.
mikeerv
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.