วิธีการทำให้ UEFI bios เริ่ม GRUB ไม่ใช่ Windows


23

TL; DR ถูกเพิ่มในการแก้ไข:

คำถามคือ:

ฉันจะทำให้ BIOS ต้องการ GRUB มากกว่า Windows Boot Manager บนพาร์ติชันสำหรับเริ่มระบบ UEFI เดียวกันได้อย่างไร

ปัญหาไม่ได้อยู่กับด้วง; ด้วงทำสิ่งที่ถูกต้องเมื่อ BIOS เริ่มต้นมัน ปัญหาไม่ได้เกิดจาก "ดิสก์ไม่สามารถบู๊ตได้" เพราะทั้ง bootstrap ของ Windows UEFI และ bootstrap Grub UEFI นั้นสามารถบู๊ตได้ ปัญหาคือว่า UEFI bootstrap BIOS เลือกที่จะบูตจาก

ฉันกำลังตั้งค่าคอมพิวเตอร์เครื่องใหม่และต้องการเริ่มระบบใน Ubuntu เป็นค่าเริ่มต้น แต่มีตัวเลือกให้เลือก Windows ในการบูต นี่เป็นสิ่งสำคัญอย่างยิ่งหากพลังงานดับและกลับมา ฉันจะไม่อยู่บ้าน

ฉันเริ่มต้นด้วยการติดตั้ง Ubuntu 17.04 บนดิสก์ NVMe ภายในแบ่งพาร์ติชันด้วย GPT เพื่อใช้ครึ่งดิสก์และพาร์ติชันสำหรับบูต UEFI แยกต่างหาก รองเท้าบูทด้วงนั้นใช้ได้และฉันเห็นเมนูบูตด้วงที่เริ่มต้นขึ้นซึ่งฉันสามารถเลือกสิ่งที่รายการด้วงรู้

ฉันติดตั้ง Windows 10 Pro จาก ISO ที่เพิ่งดาวน์โหลดมา มันติดตั้ง Windows Boot Manager ลงในพาร์ติชั่น UEFI เดียวกันและปล่อยอูบุนตูไว้เหมือนเดิม (เยี่ยมมาก!) และบูตได้ดีใน Windows 10

อย่างไรก็ตามมันทำบางสิ่งบางอย่างที่ทำให้เฟิร์มแวร์ UEFI เลือก Windows Boot Manager ทันทีแทนที่จะเป็น GRUB เมื่อเปิดเครื่อง วิธีเดียวในการบู๊ต Linux ตอนนี้คือการใช้ตัวจัดการการบูต BIOS (F11 บน BIOS ของฉัน) และเลือกตัวโหลดการบูต GRUB ด้วยตนเอง BIOS UEFI รู้ว่ามีการติดตั้งที่สามารถบู๊ตได้หลายตัวบนพาร์ติชัน UEFI เพราะฉันสามารถเลือกระหว่างพวกมันในตัวจัดการการบูต อย่างไรก็ตามเมื่อฉันอยู่ในเมนูการตั้งค่าใน UEFI BIOS มันให้ฉันเลือก "UEFI บูตไดรฟ์ภายในของฉัน" ในการเลือกลำดับความสำคัญในการบูต - มันไม่ให้ฉันเลือกบูตโหลดเดอร์ตัวใดตัวหนึ่งในพาร์ติชันนั้น . และโดยค่าเริ่มต้นจะเลือก Windows ไม่ใช่ด้วง

internets (และไซต์นี้) แสดงให้เห็นว่าวิธีเก่า ๆ ในการแก้ไขปัญหานี้คือการเรียกใช้update-grub(ดังนั้น GRUB รู้จัก Windows) และจากนั้นgrub-install(เพื่อใส่ GRUB บนอุปกรณ์) ฉันได้ทำไปแล้ว แต่น่าเสียดายที่มันยังคงมีพฤติกรรมเหมือน อธิบายไว้ข้างต้นโดยค่าเริ่มต้นของ BIOS จะเลือก Windows Boot Manager ( update-grubค้นหาการติดตั้งตัวจัดการการบูตของ Windows และเพิ่มลงในเมนูและรายการเมนูนั้นทำงานเมื่อฉันเลือกพาร์ติชัน GRUB ในตัวจัดการการบูต UEFI ด้วยตนเอง)

ฉันจะทำอย่างไรเพื่อให้ GRUB เป็นบูต "เริ่มต้น" บนพาร์ติชันสำหรับเริ่มระบบ UEFI ของฉัน

ใช้เมนบอร์ด MSI X399 Carbon

การแก้ไขที่สอง: เนื่องจากคำตอบที่ถูกต้องถูกกล่าวถึงในความคิดเห็นต่อการตอบกลับฉันจะทำซ้ำที่นี่:

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

คุณเพียงแค่ต้องติดตั้ง Windows และ Linux ไม่ใช่วิธีอื่น ๆ ฉันมีปัญหาตรงข้ามแน่นอน เมื่อไฟฟ้าดับแล้วกลับมาคอมพิวเตอร์ของฉันจะเข้าสู่ด้วงและบูทเข้าสู่ Linux, smh สิ่งหนึ่งที่สำคัญคือฉันมีแต่ละระบบในไดรฟ์ของตัวเอง ตามลำดับการบู๊ตฉันเลือกไดรฟ์ที่มี Linux และ Grub อยู่
dmb

1
เป็นเรื่องที่น่าอัศจรรย์ว่ามีคนจำนวนกี่คนที่แนะนำสิ่งที่คนอื่น ๆ แนะนำแล้วและฉันก็บอกว่าไม่ได้ผลทั้งในโพสต์ดั้งเดิมของฉันหรือในความคิดเห็นด้านล่าง ทางออกที่ถูกต้องคือ "BCDEDIT" ในเชลล์ผู้ดูแลระบบ Windows ไม่มีข้อเสนอแนะอื่น ๆ แก้ไขได้ (และส่วนใหญ่ของพวกเขาผมได้พยายามแล้วเป็นต่อคำถามของฉัน.)
จอน Watte

คำตอบ:


22

มีวิธีที่แตกต่างกันในการทำเช่นนี้รวมถึง:

  • ยูทิลิตี้การตั้งค่า EFI - EFIส่วนใหญ่จะมียูทิลิตีการตั้งค่าที่คุณสามารถเข้าถึงได้โดยการกดปุ่มพิเศษ ณ เวลาบูต (โดยทั่วไปคือ Esc, Del หรือปุ่มฟังก์ชั่น แต่สิ่งที่สำคัญคือแตกต่างกันไป สิ่งเหล่านี้มักจะเป็นวิธีการปรับเปลี่ยนลำดับการบูต หากเฟิร์มแวร์ของคุณมีตัวเลือกดังกล่าวคุณควรจะสามารถใช้มันเพื่อย้ายด้วงไปยังตำแหน่งบนสุด (ด้วงนั้นน่าจะถูกเรียกใช้ubuntuเนื่องจากคุณติดตั้งจากการแจกจ่ายนั้น)
  • An EFI shell - คุณสามารถใช้bcfgคำสั่งในเชลล์ EFI เวอร์ชัน 2 ดังอธิบายใน Arch Linux wiki หากระบบของคุณยังไม่ได้ตั้งค่าด้วยเปลือกที่เข้าถึงได้ง่ายวิธีนี้น่าจะใช้งานได้ยากกว่าระบบอื่น แต่เป็นระบบที่ไม่เชื่อเรื่องพระเจ้า
  • EasyUEFI - โปรแกรมWindows EasyUEFIของ บริษัท อื่นน่าจะเป็นวิธีที่ง่ายที่สุดในการทำสิ่งที่คุณต้องการ คุณสามารถคลิกที่ubuntuรายการในรายการของ EasyUEFI และย้ายไปด้านบน
  • bcdedit- bcdeditคำสั่งWindows สามารถเปลี่ยนลำดับการบู๊ตที่ใช้ NVRAM โดยเฉพาะการเปิดหน้าต่างพรอมต์คำสั่งของผู้ดูแลระบบและการพิมพ์bcdedit /set "{bootmgr}" path \EFI\ubuntu\shimx64.efi(ตามด้วยตัวเลือกbcdedit /set "{bootmgr}" description "ubuntu"เพื่อให้คำอธิบายมีเหตุผล) ควรทำการหลอกลวง
  • efibootmgr- เครื่องมือ Linux นี้สามารถปรับลำดับการบู๊ตได้ เริ่มต้นด้วยการพิมพ์sudo efibootmgrเพียงอย่างเดียวเพื่อดูตัวเลือก จดบันทึกหมายเลข ( Boot####) ที่เกี่ยวข้องกับubuntuรายการและลำดับการบู๊ตปัจจุบัน (บนBootOrderบรรทัด) จากนั้นคุณสามารถป้อนคำสั่งบูตใหม่ด้วยubuntuรายการที่ด้านบนโดยใช้-oตัวเลือก ตัวอย่างเช่นหากคำสั่งการบู๊ตปัจจุบันคือ 0000,0003,0007,0004 และubuntuเป็น 0007 คุณจะต้องพิมพ์sudo efibootmgr -o 0007,0000,0003,0004เพื่อปรับลำดับการบู๊ต
  • refind-mkdefault- สคริปต์นี้มาพร้อมกับ rEFInd และเป็นวิธีการทำขั้นตอนก่อนหน้านี้โดยอัตโนมัติ หากคุณไม่ได้ใช้ rEFInd คุณจะต้องดาวน์โหลดสคริปต์ที่นี่และทำให้ปฏิบัติได้ ( chmod a+x refind-mkdefault) จากนั้นคุณจะเรียกใช้มันเป็นsudo ./refind-mkdefault -L ubuntuหรือsudo ./refind-mkdefault -L shimx64เพื่อทำให้ GRUB เป็นรายการบูตเริ่มต้น

มีปัญหาที่อาจเกิดขึ้นและภาวะแทรกซ้อนกับตัวเลือกใด ๆ เหล่านี้ ปัจจัยที่มีความซับซ้อนมากที่สุดคือหากมีubuntuรายการบูตเก่าหรือสำรอง เป็นสิ่งสำคัญที่คุณจะต้องย้ายตำแหน่งที่ถูกต้องไปยังตำแหน่งสูงสุดในลำดับการบู๊ต หากคุณย้ายผิดคุณจะท้ายด้วยการเปลี่ยนแปลงพฤติกรรมหรือสิ่งที่ไม่ทำงานการบูตซึ่งจะทำให้ยากต่อการบูต ถ้าคุณใช้efibootmgrที่BootCurrentสายอาจช่วยให้คุณที่จะบอกว่าตัวเลือกที่คุณควรตั้งเป็นค่าเริ่มต้น

มีวิธีอื่นที่จะทำมันมากเกินไป การติดตั้ง GRUB ใหม่ (ผ่านBoot Repairหรือgrub-install) ควรทำตามขั้นตอนเช่น วิธีการเหล่านี้มีความเสี่ยงที่จะเกิดความเสียหายกับโครงแบบด้วงที่รู้จักกันดี

โปรดทราบด้วยว่า EFIs บางตัวมีข้อผิดพลาดและมีปัญหาอื่น ๆ ที่ทำให้การด้วงในการบู๊ตนั้นเชื่อถือได้ยาก คุณอาจต้องการตรวจสอบคำถามและคำตอบเหล่านี้ใน AskUbuntu หากคุณพบปัญหาดังกล่าว:


ดังที่ฉันอธิบายในคำถามยูทิลิตี้การตั้งค่า EFI จะไม่ให้ฉันเลือกอูบุนตูเป็นค่าเริ่มต้นถึงแม้ว่ามันจะให้ฉันทำในเมนูบู๊ตด้วยตนเอง มันแค่ให้ฉันเลือกไดรฟ์แล้วเริ่ม Windows จากนั้น efibootmgr พยายามเปลี่ยนลำดับการบู๊ต แต่ BIOS ไม่ได้ให้ความสนใจในการรีบูต EasyBCD ไม่ทำงาน - มันไม่ให้ฉันเพิ่มรายการเมนูอีก อย่างไรก็ตาม "BCDEDIT" ในเชลล์ผู้ดูแลระบบใช้งานได้จริงขอบคุณสำหรับตัวเลือกนั้น!
Jon Watte

โปรดทราบว่า EasyBCD และ EasyUEFI เป็นสองโปรแกรมที่แตกต่างจากผู้ขายรายเดียวกัน น่าเศร้าที่ดูเหมือนว่า EasyUEFI เวอร์ชันฟรีไม่สามารถใช้ได้อีก - มีเฉพาะรุ่นทดลองใช้เท่านั้น อย่างไรก็ตาม BOOTICE เป็นอีกหนึ่งโปรแกรมฟรีที่สามารถแก้ไขการตั้งค่าการบูต UEFI: เว็บไซต์ต้นฉบับภาษาจีน , เว็บไซต์ภาษาอังกฤษที่มีคำอธิบายและภาพหน้าจอ
telcoM

การใช้sudo efibootmgr -n 0002ดีกว่าแก้ไขคำสั่ง SO ปัจจุบันมาก มันจะเปลี่ยนแปลงBootNext: 0001และออกBootCurrent: 0002ในครั้งต่อไปโดยปล่อยรายการ GRUB ปัจจุบันของคุณไม่ถูกแตะต้อง เพียงเพิ่มทุบตีด้วยchmod +xและล้อมรอบคำสั่งนั้นพร้อมรีบูตหนึ่ง
m3nda

3

ฉันได้รับปัญหาที่แน่นอนนี้ในไม่กี่สัปดาห์ที่ผ่านมา ฉันคิดออกโดยใช้ตัวเลือกเหล่านี้ ก่อนที่จะทำสิ่งเหล่านี้ฉันขอแนะนำให้คุณเข้าไปที่ BIOS / UEFI ของคุณและตรวจสอบลำดับการบู๊ตและตรวจสอบให้แน่ใจว่าได้ติดตั้งด้วงไว้ที่ใดก่อน

ดังนั้นฉันเห็นว่าคุณมีสองตัวเลือก

ตัวเลือกที่ 1

สิ่งที่ฉันอยากจะแนะนำให้คุณติดตั้ง Windows 10 ก่อน จากนั้นติดตั้ง Ubuntu แต่ฉันรู้ว่ามันเป็นเรื่องต้องห้ามที่จะพูดว่า "ติดตั้งซอฟต์แวร์ของคุณใหม่" ดังนั้นฉันจะเสนอทางเลือกอื่นด้วย

ตัวเลือก 2

ด้วยการติดตั้งปัจจุบันของคุณผมจะแนะนำให้คุณบูตเป็น / boot-repairแฟลชไดรฟ์สดอูบุนตูซีดีและติดตั้งและรัน คลิกตัวเลือก "การซ่อมแซมที่แนะนำ" และทำตามคำแนะนำที่ให้ไว้ อ่านอย่างละเอียดและอ่านคำสั่งทั้งหมดก่อนดำเนินการ สิ่งนี้จะแทนที่การติดตั้งด้วงปัจจุบันด้วยอันใหม่ซึ่งหวังว่าจะแก้ไขได้


ขอบคุณสำหรับคำแนะนำ แต่ฉันได้ลองแล้ว ครั้งแรกที่ฉันติดตั้งสิ่งต่าง ๆ ฉันไปที่ Windows 10 ก่อนจากนั้นก็เป็น Ubuntu 17.04 และ Boot Repair มันยังคงเป็นค่าเริ่มต้นกับ Windows จากนั้นฉันก็เช็ดและติดตั้งใหม่กับ Ubuntu ก่อนซึ่งจะพาฉันไปยังที่ที่ฉันอยู่ตอนนี้
Jon Watte

ฉันคิดว่าคุณพยายามปรับลำดับการบู๊ตใน UEFI ใช่ไหม
taterbotz

ใช่อย่างที่ฉันพูดว่า: "เมื่อฉันอยู่ในเมนูตั้งค่าใน UEFI BIOS มันให้ฉันเลือก" UEFI บูตไดรฟ์ภายในของฉัน "ในการเลือกลำดับความสำคัญในการบูต - มันไม่ให้ฉันเลือกบูตโหลดเดอร์ตัวใดตัวหนึ่ง บนพาร์ติชันที่จะใช้ "
Jon Watte

2

ฉันเห็นวิธีแก้ปัญหาต่าง ๆ :

  1. แก้ไข UEFI ของคุณเพื่อปรับค่าเริ่มต้น บน Linux efibootmgrคุณสามารถใช้ บน Windows ฉันไม่แน่ใจ แต่ฉันคิดว่าคุณสามารถบูตเป็นตัวเลือกการกู้คืนที่ให้คุณกำหนดค่า UEFI หรือคุณอาจต้องการติดตั้งบางอย่างเช่น rEFInd
  2. เปลี่ยนชื่อโฟลเดอร์ในพาร์ติชัน EFI bootฉันคิดว่ามันชอบหรืออยู่กลับไปยังโฟลเดอร์ที่เรียกว่า
  3. เพียงใช้ตัวบูตการบูตของ Windows ฉันคิดว่าสามารถกำหนดค่าให้บูตระบบปฏิบัติการอื่นได้

ฉันสามารถแก้ไขลำดับการบู๊ตด้วย efibootmgr ได้ แต่ BIOS จะข้ามไปและเริ่ม Windows ใหม่ การเปลี่ยนชื่อโฟลเดอร์บูต (หรือแม้แต่การคัดลอกด้วงไปสู่ ​​"บูต") ไม่ทำงานจนกว่าฉันจะลบ Microsoft ออก ตัวบูตการบูตของ Windows ไม่ได้บูตระบบปฏิบัติการที่ไม่ใช่ Windows (อย่างน้อยไม่ได้ลงนาม)
Jon Watte

@ JonWatte บางที uefi bootloader นั้นแตกต่างกันฉันจำบูต ubuntu จาก windows 7 bootloader บนเครื่อง bios แบบ 32 บิต บางทีมันอาจจะ chainload grub2 ได้ไหม? เนื่องจากefibootmgrใช้งานไม่ได้ฉันรู้ว่าจะไม่ซื้อ MSI
jiggunjer

ใช่เมนบอร์ด MSI นี้มีปัญหาอื่น ๆ ด้วยและจะกลับไปที่อเมซอนเพื่อแลกกับ Gigabyte
Jon Watte

1

ฉันเพิ่งเปลี่ยนบอร์ดแม่ในแล็ปท็อปและด้วงหายไปอย่างสมบูรณ์

ฉันรู้ว่านี่ถูกทำเครื่องหมายว่าคงที่ แต่ฉันคิดว่ามันอาจมีประโยชน์สำหรับคุณ

เพื่อให้ด้วงปรากฏเป็นตัวเลือกการบูต ฉันต้องการเพิ่ม EFI ในไบออส

ฉันไปที่ "ตัวเลือกรายการบูต" ใน BIOS ของฉัน คลิกที่ "Add Boot Option" (ฉันทราบว่านี่เป็นไบออสเฉพาะ) สิ่งนี้ทำให้ฉันมีตัวเลือกสำหรับชื่อไฟล์ซึ่งในกรณีของฉันคือ \EFI\ubuntu\grubx64.efiและตั้งชื่อgrub

ฉันย้ายgrubรายการไปที่ด้านบนของลำดับการบู๊ตและตอนนี้มันแสดงเป็นรายการเริ่มต้น

นั่นคือสิ่งที่ฉันกำลังพูดคือคุณอาจต้องค้นหาไฟล์ EFI ที่ถูกต้องแล้วย้ายมันไปด้านบนของลำดับการบู๊ต / การสั่งซื้อของคุณ


1

ไม่มีตัวเลือกใด ๆ ข้างต้นที่ใช้กับแล็ปท็อป HP 655 รุ่นเก่าได้ ฉันพบทางออกคือการตั้ง windows boot manager ไม่ได้ใช้งาน:

sudo -s
efibootmgr
efibootmgr -b 4 --inactive

แทนที่ 4 ด้วยจำนวนตัวจัดการการบูต windows ของคุณ เรียกใช้ efibootmgr อีกครั้งและคุณจะเห็นดาวหายไปเพื่อทำเครื่องหมายว่าไม่มีกิจกรรม

หลังจากที่คอมพิวเตอร์ของฉันบูทไปยังเมนูการบูตแบบ Grup และหน้าต่างยังคงสามารถเลือกได้


-2

ทางออกที่เป็นไปได้คือการแก้ไขไฟล์ / etc / default / grub ด้วยตนเอง

sudo vim /etc/default/grub

รายการเริ่มต้นจะถูกกำหนดโดยการGRUB_DEFAULT=ตั้งค่าใน / etc / default / grub "รายการเมนูแรก" มีค่าเป็น "0" หาก Ubuntu เป็นรายการที่สองในหน้าจอบูตให้ตั้งค่า GRUB_DEFAULT = 1

หลังจากนั้นคุณจะต้องเรียกใช้คำสั่งเพื่ออัปเดตการกำหนดค่า grub: update-grub

อีกตัวเลือกหนึ่งคือการติดตั้ง grub-customizer และใช้ GUI เพื่อกำหนดค่าลำดับความสำคัญการบูต


ปัญหาไม่ได้อยู่กับ Grub อย่างที่ฉันพูดในโพสต์ถ้าฉันสามารถทำให้ BIOS เลือกตัวเลือกการบูต Grub UEFI ได้ฉันจะได้รับเมนูการบูต Grub ซึ่งช่วยให้ฉันเลือก Windows หรือ Ubuntu นี่คือเมนูที่ฉันต้องการตามค่าเริ่มต้น น่าเสียดายที่ BIOS เลือก Windows Boot Manager เป็นค่าเริ่มต้น
Jon Watte

อย่างที่บอกไปแล้วว่าคุณสามารถแก้ไขมันได้ในลำดับการบู๊ตด้วงโดยตั้งค่า Ubuntu เป็นระบบแรกที่เริ่มต้น ใช้ grub-customizer เพื่อทำสิ่งนี้โดยใช้ GUI linuxandubuntu.com/home/…
คุณราสเบอร์รี่

อีกครั้ง Grub ไม่ได้เริ่มต้นด้วย BIOS คำสั่งบูตด้วงไม่สำคัญ GRUB_DEFAULT ไม่สำคัญ นั่นไม่ใช่ปัญหาที่นี่
Jon Watte
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.