Bagaimana cara membuat UEFI bios memulai GRUB, bukan Windows?

22

TL; DR, ditambahkan di edit:

Pertanyaannya adalah:

Bagaimana saya bisa membuat BIOS lebih memilih GRUB daripada Windows Boot Manager pada partisi boot UEFI yang sama?

Masalahnya bukan dengan Grub; Grub melakukan hal yang benar ketika BIOS memulainya. Masalahnya bukan dengan "disk tidak dapat di-boot," karena kedua bootstrap Windows UEFI dan Grub UEFI bootstrap dapat di-boot. Masalahnya adalah UEFI mana bootstrap yang dipilih BIOS untuk booting.

Saya sedang menyiapkan komputer baru, dan ingin boot secara default ke Ubuntu, tetapi memiliki opsi untuk memilih Windows saat boot. Ini sangat penting jika listrik padam dan kembali; Aku bahkan tidak akan berada di rumah.

Saya mulai dengan menginstal Ubuntu 17.04 pada disk NVMe internal saya, dipartisi dengan GPT untuk menggunakan setengah dari disk, dan partisi boot UEFI terpisah. GRUB melakukan boot dengan baik, dan saya melihat menu boot GRUB saat start-up di mana saya dapat memilih item apa pun yang diketahui GRUB.

Kemudian saya menginstal Windows 10 Pro dari ISO yang baru diunduh. Itu menginstal Windows Boot Manager ke partisi UEFI yang sama, dan meninggalkan Ubuntu utuh (hebat!) Dan boot dengan baik ke Windows 10.

Namun, itu "sesuatu" yang membuat firmware UEFI segera memilih Windows Boot Manager daripada GRUB pada power-up. Satu-satunya cara untuk mem-boot Linux sekarang adalah dengan menggunakan boot manager BIOS (F11 pada BIOS saya) dan pilih boot loader GRUB secara manual. UEFI BIOS tahu bahwa ada beberapa instalasi yang dapat di-boot pada partisi UEFI, karena saya dapat memilih di antaranya di dalam boot manager. Namun, ketika saya berada di menu pengaturan di UEFI BIOS, itu hanya memungkinkan saya memilih "UEFI boot drive internal saya" dalam pemilihan prioritas boot - itu tidak membiarkan saya memilih bootloader tertentu pada partisi yang akan digunakan . Dan, secara default, ia memilih Windows, bukan GRUB.

Internet (dan situs ini) menunjukkan bahwa cara lama untuk memperbaikinya adalah dengan menjalankan update-grub(sehingga GRUB mengenali Windows) dan kemudian grub-install(untuk mengembalikan GRUB pada perangkat.) Saya telah melakukan ini, tetapi sayangnya, masih memiliki perilaku seperti dijelaskan di atas, di mana BIOS secara default memilih Windows Boot Manager. ( update-grubmenemukan Windows Boot Manager yang diinstal, dan menambahkannya ke menu, dan item menu itu berfungsi ketika saya secara manual memilih partisi GRUB di boot manager UEFI.)

Apa yang dapat saya lakukan untuk menjadikan GRUB boot "default" di partisi boot UEFI saya?

Menggunakan motherboard MSI X399 Carbon.

Suntingan kedua: Karena jawaban yang benar akhirnya disebutkan dalam komentar untuk tanggapan, saya akan mengulanginya di sini:

"BCDEDIT" in an admin shell on Windows is the working solution. The others don't work.
Jon Watte
sumber
Anda hanya perlu menginstal Windows lalu Linux. Bukan sebaliknya. Saya memiliki masalah sebaliknya. Ketika listrik padam kemudian kembali, komputer saya masuk ke grub dan boot ke Linux, smh. Satu hal yang kudapat adalah bahwa saya memiliki masing-masing sistem pada drive mereka sendiri. Pada urutan boot, saya memilih drive dengan Linux dan Grub di dalamnya.
dmb
1
Sungguh menakjubkan betapa banyak orang menyarankan hal-hal yang sudah disarankan oleh orang lain, dan saya sudah mengatakan tidak bekerja, baik dalam posting asli saya, atau dalam komentar di bawah ini. Solusi yang benar adalah "BCDEDIT" di shell admin Windows. Tidak ada saran lain yang menyelesaikannya (dan sebagian besar dari mereka, saya sudah mencoba, sesuai pertanyaan saya.)
Jon Watte

Jawaban:

21

Ada beberapa cara berbeda untuk melakukan ini, termasuk:

  • Utilitas pengaturan EFI - Sebagian besar EFI menyediakan utilitas pengaturan yang dapat Anda akses dengan menekan tombol khusus saat boot (Esc, Del, atau tombol fungsi, biasanya; tetapi kunci apa itu bervariasi dari satu sistem ke sistem lainnya). Ini sering, tetapi tidak selalu, menyediakan cara untuk menyesuaikan urutan boot. Jika firmware Anda memberikan opsi seperti itu, Anda harus dapat menggunakannya untuk memindahkan GRUB ke posisi teratas. (GRUB kemungkinan akan dipanggil ubuntu, mengingat Anda menginstalnya dari distribusi itu.)
  • Shell EFI - Anda dapat menggunakan bcfgperintah di shell EFI versi 2, seperti yang dijelaskan pada wiki Arch Linux. Jika sistem Anda belum diatur dengan shell yang mudah diakses, pendekatan ini mungkin lebih sulit untuk digunakan daripada yang lain, tetapi itu adalah OS-agnostik.
  • EasyUEFI - Program Windows EasyUEFI pihak ketiga kemungkinan merupakan cara termudah untuk melakukan apa yang Anda inginkan. Anda dapat mengklik ubuntuentri dalam daftar EasyUEFI dan memindahkannya ke atas.
  • bcdedit- bcdeditPerintah Windows dapat mengubah urutan boot berbasis NVRAM. Secara khusus, membuka jendela Command Prompt Administrator dan mengetik bcdedit /set "{bootmgr}" path \EFI\ubuntu\shimx64.efi(opsional diikuti oleh bcdedit /set "{bootmgr}" description "ubuntu"agar deskripsi tetap masuk akal) harus melakukan trik.
  • efibootmgr- Alat Linux ini dapat menyesuaikan urutan boot. Mulailah dengan mengetik sudo efibootmgrsendirian untuk melihat opsi. Catat nomor ( Boot####) yang terkait dengan ubuntuentri, dan urutan boot saat ini (di BootOrdertelepon). Anda kemudian dapat memasukkan urutan boot baru dengan ubuntuentri di atas dengan menggunakan -oopsi. Misalnya, jika urutan boot saat ini adalah 0000,0003,0007,0004 dan ubuntu0007, Anda akan mengetik sudo efibootmgr -o 0007,0000,0003,0004untuk menyesuaikan urutan boot.
  • refind-mkdefault- Skrip ini dilengkapi dengan rEFInd, dan ini adalah cara untuk mengotomatiskan prosedur sebelumnya. Jika Anda tidak menggunakan rEFInd, Anda harus mengunduh skrip di sini dan membuatnya dapat dieksekusi ( chmod a+x refind-mkdefault). Anda kemudian menjalankannya sebagai sudo ./refind-mkdefault -L ubuntuatau sudo ./refind-mkdefault -L shimx64untuk membuat GRUB entri boot default.

Ada potensi masalah dan komplikasi dengan semua opsi ini. Faktor yang paling mungkin menyulitkan adalah jika ada ubuntuentri boot lama atau alternatif . Penting bagi Anda untuk memindahkan yang benar ke posisi teratas dalam urutan boot; jika Anda memindahkan yang salah, Anda akan berakhir dengan tidak ada perubahan dalam perilaku atau sesuatu boot non-fungsional, yang akan membuat lebih sulit untuk boot. Jika Anda menggunakan efibootmgr, BootCurrentsaluran mungkin membantu Anda menentukan opsi mana yang harus Anda tetapkan sebagai default.

Ada cara lain untuk melakukannya yang berlebihan. Menginstal ulang GRUB (via Boot Repair atau grub-install) harusnya melakukan trik, misalnya. Namun, pendekatan ini berisiko merusak konfigurasi GRUB yang sudah dikenal.

Perhatikan juga bahwa beberapa EFI bermasalah dan ada masalah lain yang dapat mempersulit GRUB untuk melakukan booting secara andal. Anda mungkin ingin memeriksa pertanyaan dan jawaban ini di AskUbuntu jika Anda mengalami masalah seperti itu:

Rod Smith
sumber
Seperti yang saya jelaskan dalam pertanyaan, utilitas pengaturan EFI tidak akan membiarkan saya memilih ubuntu sebagai default, meskipun saya melakukannya di menu boot manual. Itu hanya akan membiarkan saya memilih drive, dan kemudian memulai Windows dari itu. efibootmgr berusaha mengubah urutan boot, tetapi BIOS tidak memperhatikan saat reboot. EasyBCD tidak berfungsi - tidak membiarkan saya menambahkan lebih banyak item menu. Namun, "BCDEDIT" di shell admin benar-benar berfungsi, jadi terima kasih untuk opsi itu!
Jon Watte
Perhatikan bahwa EasyBCD dan EasyUEFI adalah dua program berbeda dari vendor yang sama. Sayangnya sepertinya versi gratis EasyUEFI tidak lagi tersedia - hanya versi uji coba yang ditawarkan. Namun, BOOTICE adalah program gratis lain yang dapat mengedit pengaturan boot UEFI: situs asli Tiongkok , situs berbahasa Inggris dengan deskripsi dan tangkapan layar .
telcoM
Menggunakan sudo efibootmgr -n 0002jauh lebih baik daripada memodifikasi pesanan SO saat ini. Itu berubah BootNext: 0001dan pergi BootCurrent: 0002untuk waktu berikutnya, membuat entri GRUB Anda saat ini tidak tersentuh. Tambahkan saja bash with chmod +xdan balutkan perintah itu dengan sepanjang reboot.
m3nda
2

Saya sudah mengalami masalah yang tepat ini beberapa minggu terakhir. Saya menemukan jawabannya menggunakan opsi ini. Sebelum melakukan hal-hal ini, saya sarankan Anda untuk masuk ke BIOS / UEFI dan memeriksa urutan boot dan memastikan di mana grub diinstal terlebih dahulu.

Jadi bagaimana saya melihatnya adalah Anda memiliki dua opsi.

Pilihan 1

Yang saya sarankan kepada Anda adalah menginstal Windows 10 terlebih dahulu. Kemudian instal ubuntu. Tapi saya tahu itu agak tabu untuk hanya mengatakan "instal ulang perangkat lunak Anda" jadi saya akan menawarkan alternatif juga.

pilihan 2

Dengan pengaturan Anda saat ini, saya akan merekomendasikan Anda untuk boot ke CD / flash drive Ubuntu Live dan menginstal dan menjalankan boot-repair. Klik opsi "Perbaikan yang Direkomendasikan" dan ikuti instruksi yang diberikan. Telusuri dengan seksama dan baca semua perintah sebelum menjalankan. Ini akan menimpa instalasi grub saat ini dengan yang baru yang diharapkan akan memperbaikinya.

taterbotz
sumber
Thansk untuk sarannya, tetapi saya sudah mencobanya. Pertama kali saya menginstal sesuatu, saya pergi Windows 10 pertama, kemudian Ubuntu 17,04, lalu Boot Repair. Itu masih default ke Windows, dan kemudian saya menghapus dan menginstal ulang dengan Ubuntu terlebih dahulu, yang membawa saya ke tempat saya sekarang.
Jon Watte
Saya menganggap Anda sudah mencoba menyesuaikan urutan boot di UEFI Anda, bukan?
taterbotz
Ya, seperti yang saya katakan: "ketika saya berada di menu pengaturan di UEFI BIOS, itu hanya memungkinkan saya memilih" UEFI boot drive internal saya "dalam pemilihan prioritas boot - itu tidak membiarkan saya memilih bootloader tertentu mana pada partisi itu untuk menggunakan "
Jon Watte
2

Saya melihat beberapa solusi:

  1. Edit UEFI Anda untuk menyesuaikan default. Di linux Anda bisa menggunakan efibootmgr. Di Windows saya tidak yakin tapi saya pikir Anda bisa boot ke opsi pemulihan yang memungkinkan Anda mengkonfigurasi UEFI. Atau Anda mungkin lebih suka menginstal sesuatu seperti rEFInd.
  2. Ubah nama folder pada partisi EFI. Saya pikir itu lebih suka, atau jatuh kembali ke, folder bernama boot.
  3. Cukup gunakan boot loader Windows, saya pikir itu dapat dikonfigurasi untuk mem-boot OS lain.
jiggunjer
sumber
Saya dapat mengedit urutan boot menggunakan efibootmgr, tetapi BIOS mengabaikannya dan tetap menjalankan Windows. Mengubah nama folder boot (atau bahkan menyalin grub ke "boot") tidak berfungsi sampai saya menghapus Microsoft. Pemuat boot Windows tidak mem-boot OS non-Windows (setidaknya bukan yang tidak ditandatangani.)
Jon Watte
@JonWatte Mungkin uefi bootloader berbeda, saya ingat boot ubuntu dari windows 7 bootloader pada mesin bios 32-bit. Mungkin masih bisa chainload grub2? Karena efibootmgrtidak berfungsi, saya tahu saya tidak akan membeli MSI.
jiggunjer
Ya, motherboard MSI ini memiliki beberapa masalah lain juga dan akan kembali ke Amazon dengan imbalan Gigabyte.
Jon Watte
1

Saya baru saja mengganti papan ibu saya di laptop saya dan grub menghilang sepenuhnya.

Saya tahu ini ditandai sebagai tetap tetapi saya pikir ini mungkin berguna bagi Anda.

Untuk membuat grub tampil sebagai opsi boot. Saya perlu menambahkan EFI ke bios.

Saya pergi ke "opsi daftar boot" di bios saya. Klik pada "Tambahkan Opsi Booting" (Saya sadar bahwa ini adalah bios khusus). Ini memberi saya opsi untuk nama file, yang dalam kasus saya adalah \EFI\ubuntu\grubx64.efidan memberinya namagrub

Saya kemudian memindahkan grubentri ke bagian atas urutan boot, dan sekarang ini ditampilkan sebagai entri default.

Yaitu yang saya katakan adalah Anda mungkin hanya perlu menemukan file EFI yang benar dan memindahkannya ke bagian atas urutan / urutan boot Anda.

Wes
sumber
1

Tidak ada opsi di atas yang berfungsi untuk saya dengan laptop HP 655 lama. Saya menemukan solusinya adalah mengatur windows boot manager tidak aktif:

sudo -s
efibootmgr
efibootmgr -b 4 --inactive

Ganti 4 dengan jumlah windows boot manager Anda. Jalankan efibootmgr lagi dan Anda akan melihat bintang menghilang untuk menandai tidak aktif.

Setelah komputer saya boot ke menu boot grup dan windows masih dapat dipilih dari itu.

Cmazay
sumber
-2

Solusi yang mungkin adalah mengedit file / etc / default / grub secara manual.

sudo vim /etc/default/grub

Entri default ditentukan oleh GRUB_DEFAULT=pengaturan di / etc / default / grub. "Entri menu" pertama memiliki nilai "0". Jika Ubuntu adalah entri kedua di layar boot kemudian atur GRUB_DEFAULT = 1.

Setelah itu, Anda perlu menjalankan perintah untuk memperbarui konfigurasi grub: update-grub

Opsi lain adalah instalasi grub-customizer dan menggunakan GUI untuk mengkonfigurasi prioritas boot.

Tuan Raspberry
sumber
Masalahnya bukan dengan Grub. Seperti yang saya katakan di posting, jika saya dapat membuat BIOS memilih opsi booting UEUB Grub, maka saya mendapatkan menu boot-up Grub, yang memungkinkan saya memilih Windows atau Ubuntu. Ini adalah menu yang saya inginkan secara default. Sayangnya, BIOS memilih Windows Boot Manager secara default.
Jon Watte
Seperti yang saya katakan, Anda dapat memperbaikinya dalam urutan boot grub dengan mengkonfigurasi Ubuntu sebagai sistem pertama yang memulai. Gunakan grub-customizer untuk melakukan ini menggunakan GUI. linuxandubuntu.com/home/…
Mr. Raspberry
Sekali lagi, Grub bahkan tidak memulai dengan BIOS. Urutan boot grub tidak masalah. GRUB_DEFAULT tidak masalah. Bukan itu masalahnya di sini.
Jon Watte