Làm cách nào để tạo bios UEFI khởi động GRUB chứ không phải Windows?


22

TL; DR, được thêm vào trong chỉnh sửa:

Câu hỏi là:

Làm cách nào để tạo BIOS thích GRUB hơn Windows Boot Manager trên cùng phân vùng khởi động UEFI?

Vấn đề không nằm ở Grub; Grub làm điều đúng khi BIOS khởi động nó. Vấn đề không nằm ở "đĩa không thể khởi động được", vì cả bootstrap Windows UEFI và bootstrap Grub UEFI đều có khả năng khởi động. Vấn đề là UEFI bootstrap mà BIOS chọn để khởi động từ đâu.

Tôi đang thiết lập một máy tính mới và muốn mặc định khởi động vào Ubuntu, nhưng có tùy chọn để chọn Windows khi khởi động. Điều này đặc biệt quan trọng nếu mất điện và trở lại; Tôi thậm chí sẽ không ở trong nhà.

Tôi đã bắt đầu bằng cách cài đặt Ubuntu 17.04 trên đĩa NVMe nội bộ của mình, được phân vùng bằng GPT để sử dụng một nửa đĩa và phân vùng khởi động UEFI riêng biệt. GRUB khởi động tốt, và tôi thấy menu khởi động GRUB khi khởi động nơi tôi có thể chọn bất kỳ mục nào GRUB biết.

Sau đó, tôi đã cài đặt Windows 10 Pro từ một ISO được tải xuống gần đây. Nó đã cài đặt Windows Boot Manager trên cùng một phân vùng UEFI và giữ nguyên Ubuntu (tuyệt vời!) Và khởi động tốt vào Windows 10.

Tuy nhiên, nó đã làm "một cái gì đó" khiến phần sụn UEFI ngay lập tức chọn Trình quản lý khởi động Windows thay vì GRUB khi bật nguồn. Cách duy nhất để khởi động Linux bây giờ là sử dụng trình quản lý khởi động BIOS (F11 trên BIOS của tôi) và chọn trình tải khởi động GRUB theo cách thủ công. BIOS UEFI biết rằng có nhiều cài đặt khởi động trên phân vùng UEFI, vì tôi có thể chọn giữa chúng trong trình quản lý khởi động. Tuy nhiên, khi tôi đang ở trong menu thiết lập trong UEFI BIOS, nó chỉ cho phép tôi chọn "UEFI boot my drive" trong lựa chọn ưu tiên khởi động - nó không cho phép tôi chọn bộ tải khởi động cụ thể nào trên phân vùng đó để sử dụng . Và theo mặc định, nó chọn Windows chứ không phải GRUB.

Các internets (và trang này) gợi ý rằng cách cũ để khắc phục điều này là chạy update-grub(để GRUB nhận ra Windows) và sau đó grub-install(để đưa GRUB trở lại thiết bị.) Tôi đã làm điều này, nhưng thật không may, nó vẫn có hành vi như được mô tả ở trên, trong đó BIOS theo mặc định chọn Windows Boot Manager. ( update-grubkhông tìm thấy cài đặt Windows Boot Manager và thêm nó vào menu và mục menu đó hoạt động khi tôi chọn thủ công phân vùng GRUB trong trình quản lý khởi động UEFI.)

Tôi có thể làm gì để biến GRUB thành khởi động "mặc định" trên phân vùng khởi động UEFI của mình?

Sử dụng bo mạch chủ MSI X399 Carbon.

Chỉnh sửa thứ hai: Bởi vì câu trả lời đúng cuối cùng được đề cập trong một bình luận cho một phản hồi, tôi sẽ lặp lại nó ở đây:

"BCDEDIT" in an admin shell on Windows is the working solution. The others don't work.

Bạn chỉ cần cài đặt Windows rồi Linux. Không phải hướng ngược lại. Tôi có vấn đề hoàn toàn ngược lại. Khi mất điện rồi quay trở lại, máy tính của tôi sẽ hoạt động và khởi động vào Linux, smh. Một điều tho, là tôi có mỗi hệ thống trên ổ đĩa riêng của họ. Theo thứ tự khởi động, tôi chọn ổ đĩa có Linux và Grub trong đó.
dmb

1
Thật đáng ngạc nhiên khi nhiều người đề xuất những điều đã được đề xuất bởi những người khác và tôi đã nói rằng không hoạt động, trong bài viết gốc của tôi, hoặc trong các bình luận bên dưới. Giải pháp chính xác là "BCDEDIT" trong trình quản trị Windows. Không có gợi ý nào khác giải quyết được (và hầu hết trong số họ, tôi đã thử, theo câu hỏi của tôi.)
Jon Watte

Câu trả lời:


21

Có khá nhiều cách khác nhau để làm điều này, bao gồm:

  • Tiện ích thiết lập EFI - Hầu hết các EFI cung cấp các tiện ích thiết lập mà bạn có thể truy cập bằng cách nhấn một phím đặc biệt khi khởi động (thông thường là Esc, Del hoặc một phím chức năng; nhưng khóa này thay đổi từ hệ thống này sang hệ thống khác). Những điều này thường xuyên, nhưng không phải luôn luôn, cung cấp một cách để điều chỉnh thứ tự khởi động. Nếu phần sụn của bạn cung cấp tùy chọn như vậy, bạn sẽ có thể sử dụng nó để di chuyển GRUB lên vị trí trên cùng. (GRUB có khả năng được gọi ubuntu, với điều kiện bạn đã cài đặt nó từ bản phân phối đó.)
  • Trình bao EFI - Bạn có thể sử dụng bcfglệnh trong trình bao EFI phiên bản 2, như được mô tả trên wiki Arch Linux. Nếu hệ thống của bạn chưa được thiết lập với lớp vỏ dễ truy cập, phương pháp này có thể khó sử dụng hơn các hệ thống khác, nhưng đó là điều không thể biết về hệ điều hành.
  • EasyUEFI - Chương trình Windows EasyUEFI của bên thứ ba có thể là cách dễ nhất để làm những gì bạn muốn. Bạn có thể nhấp vào ubuntumục trong danh sách của EasyUEFI và di chuyển nó lên đầu.
  • bcdedit- Lệnh Windows bcdeditcó thể thay đổi thứ tự khởi động dựa trên NVRAM. Cụ thể, mở một quản trị cửa sổ Command Prompt và gõ bcdedit /set "{bootmgr}" path \EFI\ubuntu\shimx64.efi(tùy chọn tiếp theo bcdedit /set "{bootmgr}" description "ubuntu"để giữ cho các mô tả hợp lý) nên làm các trick.
  • efibootmgr- Công cụ Linux này có thể điều chỉnh thứ tự khởi động. Bắt đầu bằng cách gõ sudo efibootmgrmột mình để xem các tùy chọn. Lưu ý số ( Boot####) được liên kết với ubuntumục nhập và thứ tự khởi động hiện tại (trên BootOrderdòng). Sau đó, bạn có thể nhập một thứ tự khởi động mới với ubuntumục ở trên cùng bằng cách sử dụng -otùy chọn. Chẳng hạn, nếu thứ tự khởi động hiện tại là 0000,0003,0007,0004 và ubuntulà 0007, bạn sẽ gõ sudo efibootmgr -o 0007,0000,0003,0004để điều chỉnh thứ tự khởi động.
  • refind-mkdefault- Kịch bản này đi kèm với rEFInd và đó là một cách để tự động hóa thủ tục trước đó. Nếu bạn không sử dụng rEFInd, bạn cần tải xuống tập lệnh tại đây và làm cho nó có thể thực thi được ( chmod a+x refind-mkdefault). Sau đó, bạn sẽ chạy nó dưới dạng sudo ./refind-mkdefault -L ubuntuhoặc sudo ./refind-mkdefault -L shimx64để biến GRUB thành mục khởi động mặc định.

Có những vấn đề tiềm ẩn và biến chứng với bất kỳ lựa chọn nào trong số này. Yếu tố phức tạp nhất có thể là nếu có ubuntucác mục khởi động cũ hoặc thay thế . Điều quan trọng là bạn di chuyển vị trí chính xác đến vị trí trên cùng trong thứ tự khởi động; nếu bạn di chuyển sai, bạn sẽ không có thay đổi nào về hành vi hoặc việc khởi động không chức năng, điều này sẽ khiến việc khởi động khó khăn hơn. Nếu bạn sử dụng efibootmgr, BootCurrentdòng có thể giúp bạn biết tùy chọn nào bạn nên đặt làm mặc định.

Có nhiều cách khác để làm điều đó là quá mức cần thiết. Chẳng hạn, cài đặt lại GRUB (thông qua Boot Repair hoặc grub-install) để thực hiện thủ thuật. Tuy nhiên, những cách tiếp cận này có nguy cơ làm hỏng cấu hình GRUB đã hoạt động.

Cũng lưu ý rằng một số EFI bị lỗi và có một số vấn đề khác có thể khiến GRUB khó khởi động một cách đáng tin cậy. Bạn có thể muốn kiểm tra những câu hỏi và câu trả lời này trên AskUbfox nếu bạn gặp phải những vấn đề như vậy:


Như tôi đã mô tả trong câu hỏi, tiện ích thiết lập EFI sẽ không cho phép tôi chọn ubfox làm mặc định, mặc dù nó cho phép tôi làm điều đó trong menu khởi động thủ công. Nó sẽ chỉ cho tôi chọn ổ đĩa, và sau đó khởi động Windows từ đó. efibootmgr đã cố gắng thay đổi thứ tự khởi động, nhưng BIOS đã không chú ý đến việc khởi động lại. EasyBCD không hoạt động - nó không cho phép tôi thêm các mục menu. Tuy nhiên, "BCDEDIT" trong trình quản trị thực sự đã hoạt động, vì vậy cảm ơn vì lựa chọn đó!
Jon Watte

Lưu ý rằng EasyBCD và EasyUEFI là hai chương trình khác nhau từ cùng một nhà cung cấp. Đáng buồn thay, dường như phiên bản miễn phí của EasyUEFI không còn nữa - chỉ có các phiên bản dùng thử được cung cấp. Tuy nhiên, BOOTICE là một chương trình miễn phí khác có thể chỉnh sửa cài đặt khởi động UEFI: trang gốc tiếng Hoa , trang tiếng Anh có mô tả và ảnh chụp màn hình .
telcoM

Sử dụng sudo efibootmgr -n 0002là tốt hơn nhiều so với sửa đổi thứ tự SO hiện tại. Nó thay đổi BootNext: 0001và để lại BootCurrent: 0002cho lần tiếp theo, không để lại các mục GRUB hiện tại của bạn. Chỉ cần thêm một bash với chmod +xvà gói lệnh đó cùng với khởi động lại.
m3nda

2

Tôi đã gặp vấn đề chính xác này trong vài tuần qua. Tôi đã tìm ra nó bằng cách sử dụng các tùy chọn này. Trước khi thực hiện bất kỳ điều nào trong số này, tôi khuyên bạn nên truy cập BIOS / UEFI của bạn và kiểm tra thứ tự khởi động và đảm bảo vị trí của grub được cài đặt trước.

Vì vậy, làm thế nào tôi thấy nó là bạn có hai lựa chọn.

lựa chọn 1

Những gì tôi muốn giới thiệu cho bạn là cài đặt Windows 10 trước. Sau đó cài đặt Ubuntu. Nhưng tôi biết đó là điều cấm kỵ khi chỉ nói "cài đặt lại phần mềm của bạn" vì vậy tôi cũng sẽ cung cấp một giải pháp thay thế.

Lựa chọn 2

Với thiết lập hiện tại của bạn, tôi khuyên bạn nên khởi động vào ổ đĩa CD / flash Live Ubuntu và cài đặt và chạy boot-repair. Nhấp vào tùy chọn "Đề xuất sửa chữa" và làm theo hướng dẫn được cung cấp. Đi qua nó một cách cẩn thận và đọc tất cả các lệnh trước khi thực hiện. Điều này sẽ ghi đè cài đặt grub hiện tại với một cài đặt mới mà hy vọng sẽ sửa nó.


Thansk cho các đề xuất, nhưng tôi đã thử chúng. Lần đầu tiên tôi cài đặt mọi thứ, tôi đã đi Windows 10 trước, sau đó là Ubuntu 17.04, sau đó là Boot Repair. Nó vẫn được mặc định cho Windows, và sau đó tôi xóa sạch và cài đặt lại với Ubuntu trước, điều này đưa tôi đến nơi tôi đang ở.
Jon Watte

Tôi cho rằng bạn đã cố gắng điều chỉnh thứ tự khởi động trong UEFI của mình, phải không?
taterbotz

Có, như tôi nói: "khi tôi đang ở trong menu cài đặt trong UEFI BIOS, nó chỉ cho phép tôi chọn" UEFI khởi động ổ đĩa trong của tôi "trong lựa chọn ưu tiên khởi động - nó không cho phép tôi chọn bộ tải khởi động cụ thể nào trên phân vùng đó để sử dụng "
Jon Watte

2

Tôi thấy một số giải pháp:

  1. Chỉnh sửa UEFI của bạn để điều chỉnh mặc định. Trên linux bạn có thể sử dụng efibootmgr. Trên Windows tôi không chắc nhưng tôi nghĩ bạn có thể khởi động vào tùy chọn khôi phục cho phép bạn định cấu hình UEFI. Hoặc bạn có thể thích cài đặt một cái gì đó như rEFInd.
  2. Thay đổi tên thư mục trên phân vùng EFI. Tôi nghĩ rằng nó thích, hoặc rơi trở lại, một thư mục được gọi boot.
  3. Chỉ cần sử dụng bộ tải khởi động Windows, tôi nghĩ rằng nó có thể được cấu hình để khởi động các hệ điều hành khác.

Tôi có thể chỉnh sửa thứ tự khởi động bằng efibootmgr, nhưng BIOS bỏ qua nó và khởi động Windows bằng mọi cách. Thay đổi tên thư mục khởi động (hoặc thậm chí sao chép grub thành "boot") không hoạt động cho đến khi tôi xóa Microsoft. Trình tải khởi động Windows không khởi động hệ điều hành Windows không phải Windows (ít nhất là không được ký.)
Jon Watte

@JonWatte Có lẽ bộ tải khởi động uefi khác, tôi nhớ khởi động ubfox từ bộ tải khởi động windows 7 trên máy bios 32 bit. Có lẽ nó vẫn có thể chainload grub2? Vì efibootmgrkhông hoạt động, tôi biết tôi sẽ không mua MSI.
jiggunjer

Vâng, bo mạch chủ MSI này cũng có một số vấn đề khác và sẽ quay trở lại Amazon để đổi lấy Gigabyte.
Jon Watte

1

Tôi chỉ cần thay thế bảng mạch của mẹ trong máy tính xách tay của tôi và grub biến mất hoàn toàn.

Tôi biết điều này được đánh dấu là cố định nhưng tôi nghĩ rằng nó có thể hữu ích cho bạn.

Để làm cho grub xuất hiện như một tùy chọn khởi động. Tôi cần thêm EFI vào bios.

Tôi đã đi đến "tùy chọn danh sách khởi động" trong bios của tôi. Nhấp vào "Thêm tùy chọn khởi động" (Tôi biết rằng đây là đặc thù của bios). Điều này đã cho tôi một tùy chọn cho tên tệp, trong trường hợp của tôi là \EFI\ubuntu\grubx64.efivà đặt tên cho nógrub

Sau đó tôi đã di chuyển grubmục nhập lên trên cùng của trình tự khởi động và bây giờ nó hiển thị như mục nhập mặc định.

Tức là những gì tôi đang nói là bạn có thể chỉ cần xác định vị trí tệp EFI chính xác và di chuyển nó lên đầu chuỗi / thứ tự khởi động của bạn.


1

Không có tùy chọn nào ở trên phù hợp với tôi với máy tính xách tay HP 655 cũ. Tôi tìm ra giải pháp là thiết lập windows boot manager không hoạt động:

sudo -s
efibootmgr
efibootmgr -b 4 --inactive

Thay thế 4 bằng số trình quản lý khởi động windows của bạn. Chạy lại efibootmgr và bạn sẽ thấy ngôi sao biến mất để đánh dấu không hoạt động.

Sau khi máy tính của tôi khởi động vào menu khởi động grup và các cửa sổ vẫn có thể được chọn từ đó.


-2

Một giải pháp khả thi sẽ là chỉnh sửa thủ công tệp / etc / default / grub.

sudo vim /etc/default/grub

Mục nhập mặc định được xác định bởi GRUB_DEFAULT=cài đặt trong / etc / default / grub. "Mục nhập" đầu tiên có giá trị là "0". Nếu Ubuntu là mục thứ hai trong màn hình khởi động thì đặt GRUB_DEFAULT = 1.

Sau đó, bạn sẽ cần chạy lệnh để cập nhật cấu hình grub: update-grub

Một tùy chọn khác sẽ là cài đặt grub-customizer và sử dụng GUI của nó để cấu hình mức độ ưu tiên khởi động.


Vấn đề không nằm ở Grub. Như tôi đã nói trong bài đăng, nếu tôi có thể khiến BIOS chọn tùy chọn khởi động Grub UEFI, thì tôi sẽ nhận được menu khởi động Grub, cho phép tôi chọn Windows hoặc Ubuntu. Đây là menu tôi muốn theo mặc định. Thật không may, BIOS chọn Windows Boot Manager theo mặc định.
Jon Watte

Như tôi đã nói, bạn có thể sửa nó theo thứ tự khởi động grub bằng cách cấu hình Ubuntu là hệ thống đầu tiên khởi động. Sử dụng grub-customizer để làm điều này bằng GUI. linuxandubfox.com/home/ Kẻ
Ông Raspberry

Một lần nữa, Grub thậm chí không bắt đầu bằng BIOS. Thứ tự khởi động Grub không thành vấn đề. GRUB_DEFAULT không thành vấn đề. Đó không phải là vấn đề ở đây.
Jon Watte
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.