GRUB ตรวจไม่พบ Windows: วิธีแก้ไข

/th/images/the-grub2-boot-loader-on-a-laptop-screen-with-ubuntu-as-an-option.jpg

หากคุณเพิ่งตั้งค่าการกำหนดค่าดูอัลบูตด้วย Windows และ Linux คุณอาจพบปัญหาเดียวกันกับที่ฉันเคยทำ: Windows ไม่แสดงเป็นตัวเลือกในเมนู GRUB ฉันจะแสดงให้คุณเห็นว่าฉันแก้ไขมันได้อย่างไร (และเหตุผลทางเทคนิคเบื้องหลัง)

เพื่อให้เจาะจงมากขึ้น ฉันติดตั้ง CachyOS บนไดรฟ์ที่แยกจากไดรฟ์ Windows 11 ของฉัน ฉันติดตั้งลีนุกซ์รุ่นต่างๆ บนไดรฟ์นี้หลายครั้งแล้ว และโดยทั่วไปแล้วเมนูบู๊ตก็ใช้งานได้ ตัวเลือกการบูต Windows 11 ของฉันจะปรากฏขึ้นโดยไม่ต้องใช้ความพยายามใด ๆ จากฉัน ในกรณีนี้ ต้องใช้ขั้นตอนเพิ่มเติมสองสามขั้นตอนเพื่อให้ใช้งานได้

หากเมื่อคุณเปิดเครื่อง PC คุณไม่เห็นเมนูการบูตเลย คุณจะต้องเรียนรู้วิธีทำให้เมนู GRUB ปรากฏขึ้นก่อน

ทำไม Windows จึงไม่แสดงใน GRUB

ปรากฎว่าการติดตั้ง GRUB ในปัจจุบันมักมาพร้อมกับการปิดการใช้งาน os-prober และนั่นคือสาเหตุที่ Windows ไม่ปรากฏขึ้น หากคุณไม่ทราบ os-prober เป็นแพ็คเกจที่ช่วยให้ GRUB สามารถระบุระบบปฏิบัติการอื่นที่ติดตั้งบนพีซีของคุณโดยอัตโนมัติ เมื่อปิดใช้งาน GRUB จะไม่สามารถระบุ Windows ได้หากไม่มีการแทรกแซงด้วยตนเอง

เหตุผลนี้คือความไม่ไว้วางใจในแพ็คเกจ os-prober ผู้พัฒนาบรรจุภัณฑ์ GRUB ได้เลือกที่จะปิดการใช้งาน os-prober เพื่อเป็นการป้องกันความปลอดภัยย้อนกลับไปในปี 2021 เมื่อ Julian Andres Klode ผู้พัฒนา Canonical ได้สรุปเหตุผลในการปิดการใช้งาน os-prober ใน Ubuntu พวกเขากล่าวว่า “os-prober นั้นไม่ปลอดภัยโดยธรรมชาติ เนื่องจากมันจะเมาต์พาร์ติชั่นทั้งหมดบนดิสก์ของคุณโดยใช้ grub-mount เพื่อตรวจสอบระบบปฏิบัติการอื่น ๆ” แม้ว่าจะมีการสร้างแพตช์ตั้งแต่นั้นมา แต่หลายคนก็ไม่ไว้วางใจมัน

คุณสามารถเปิดใช้งาน os-prober อีกครั้งได้อย่างง่ายดายหากต้องการ ไม่ว่าคุณจะควรหรือไม่ควร ขึ้นอยู่กับสถานการณ์ของคุณ ฉันไม่ได้อยู่ในธุรกิจการให้คำแนะนำด้านความปลอดภัยทางไซเบอร์โดยไม่ทราบรูปแบบภัยคุกคามของคุณเป็นอย่างน้อย

สำหรับตัวฉันเอง ฉันรู้สึกสบายใจที่จะเปิดใช้งาน os-prober อีกครั้ง เนื่องจากการวิจัยของฉันบอกฉันว่าข้อกังวลส่วนใหญ่อยู่ที่วิธีแก้ปัญหา Secure Boot และฉันได้ปิดการใช้งาน Secure Boot บนพีซีของฉันแล้ว มันขึ้นอยู่กับคุณอีกครั้งที่จะตัดสินใจว่าเส้นทางที่ปลอดภัยที่สุดคืออะไร ด้วยเหตุนี้ ฉันจะแสดงสองตัวเลือกที่แตกต่างกันให้คุณดู โดยหนึ่งในนั้นหลีกเลี่ยง os-prober โดยสิ้นเชิง

/th/images/the-grub2-boot-loader-on-a-laptop-screen-with-ubuntu-as-an-option.jpg

ที่เกี่ยวข้อง

วิธีกำหนดการตั้งค่า GRUB2 Boot Loader

เลือกระบบปฏิบัติการเริ่มต้นและแม้แต่แสดงภาพพื้นหลัง

ตัวเลือกง่าย ๆ: เปิดใช้งาน os-prober

หากคุณรู้สึกมั่นใจในการเปิดใช้งาน os-prober เนื่องจากผลกระทบด้านความปลอดภัย คุณสามารถทำได้โดยแก้ไขการกำหนดค่า GRUB เริ่มต้นของคุณ โดยทั่วไป คุณสามารถค้นหาไฟล์การกำหนดค่าได้ที่ /etc/default/grub ดังนั้นการแก้ไขจะต้องเปิดไฟล์ด้วยโปรแกรมแก้ไขข้อความที่คุณเลือกและมีสิทธิ์การเข้าถึงระดับผู้ดูแลระบบ หากต้องการแก้ไขด้วยนาโน ฉันใช้คำสั่งนี้:


sudo nano /etc/default/grub

เลื่อนดูไฟล์จนกว่าคุณจะพบบรรทัดที่อ่านว่า #GRUB\_DISABLE\_OS\_PROBER=false ยกเลิกการแสดงความคิดเห็นโดยการลบสัญลักษณ์ # นั่นคือทั้งหมดที่คุณต้องทำเพื่อเปิดใช้งาน os-prober นอกเหนือจากการบันทึกไฟล์ ในนาโน คุณทำได้โดยกด Ctrl+o ตามด้วย Enter เพื่อยืนยันชื่อไฟล์ จากนั้นกด Ctrl+x เพื่อออกจากนาโน อย่าลืมอัปเดต GRUB เพราะฉันจะอธิบายในภายหลัง

ตัวเลือกที่ปลอดภัยกว่า: เพิ่ม Windows เป็นรายการเมนูด้วยตนเอง

อีกทางเลือกหนึ่งที่ปลอดภัยกว่าแต่เกี่ยวข้องมากกว่านั้นอีกเล็กน้อยคือการข้ามการเปิดใช้งาน os-prober และเพิ่ม Windows ลงในเมนูบูตของ GRUB ด้วยตัวเองแทน

ในการดำเนินการนี้ คุณต้องทราบก่อนว่าระบบ Linux ของคุณตั้งตำแหน่งพาร์ติชัน EFI ของการติดตั้ง Windows ไว้ที่ใด คุณสามารถค้นหาได้โดยการรันคำสั่งต่อไปนี้ ซึ่งแสดงรายการดิสก์ทั้งหมดและวัตถุประสงค์:


sudo dfisk -l

/th/images/windows-partitions-listed-in-a-linux-terminal-using-the-lsblk-command.png

ฉันเห็นว่าในไดรฟ์ Windows ของฉันมีอุปกรณ์ชื่อ “ระบบ EFI” ซึ่งอยู่ที่ /dev/nvme0n1p1 ฉันจะคัดลอกที่อยู่นั้นและเตรียมให้พร้อมสำหรับคำสั่ง blkid ต่อไปนี้ ซึ่งจะเปิดเผย UUID ของอุปกรณ์ ซึ่งเราต้องการสำหรับรายการบูตแบบกำหนดเอง:


sudo blkid /dev/nvme0n1p1

/th/images/the-uuid-of-a-windows-efi-partition-as-revealed-by-the-blkid-command.png

มองหาค่า UUID ในเครื่องหมายคำพูดแล้วจดบันทึกไว้ จากนั้น เราจะแก้ไขไฟล์ 40\_custom ของ GRUB ซึ่งช่วยให้เราสามารถเพิ่มรายการบูตแบบกำหนดเองให้กับ GRUB ได้ ฉันใช้นาโนเพื่อทำสิ่งนี้ แต่คุณสามารถใช้โปรแกรมแก้ไขข้อความที่คุณต้องการได้


sudo nano /etc/grub.d/40_custom

วางในบล็อคโค้ดต่อไปนี้ จากนั้นแทนที่ your-Windows-EFI-partition-UUID ด้วย UUID ที่คุณพบ


menuentry "Windows" --class windows --class os {

 insmod ntfs

 search --no-floppy --set=root --fs-uuid your-Windows-EFI-partition-UUID

 ntldr /bootmgr}

โปรดทราบว่าคุณสามารถเปลี่ยนข้อความภายในเครื่องหมายคำพูดตาม “เมนู” ด้วยสิ่งที่คุณต้องการให้รายการบูต Windows ของคุณปรากฏเป็น

หลังจากทำการเปลี่ยนแปลงไฟล์การกำหนดค่าเริ่มต้นของ GRUB หรือเพิ่มรายการบูตแบบกำหนดเองแล้ว อย่าลืมสร้างการกำหนดค่า GRUB ของคุณใหม่ กระบวนการนี้คือสิ่งที่ทำให้การเปลี่ยนแปลงของคุณมีผลจริงๆ พูดตามตรง ฉันลืมเรื่องนี้ไปเองตอนที่ปิดการใช้งาน os-prober และสับสนเมื่อ Windows ไม่ปรากฏขึ้นหลังจากรีบูตเครื่อง

เพื่อให้สิ่งต่าง ๆ ง่ายขึ้น distros บางตัวได้กำหนดค่านามแฝงไว้ล่วงหน้าสำหรับการอัพเดต GRUB เช่น update-grub คุณสามารถลองรันมันก่อนได้ (เหมือน sudo) แต่หากไม่ได้ผล คุณสามารถอัพเดตด้วยตนเองได้ตลอดเวลาด้วยคำสั่งนี้:


 sudo grub-mkconfig -o /boot/grub/grub.cfg

รอให้การสร้างใหม่เสร็จสิ้น จากนั้นลองรีบูตเครื่อง คุณควรเห็น Windows รวมถึงระบบปฏิบัติการอื่น ๆ ที่คุณติดตั้งไว้ในเมนูบูต GRUB

พิจารณาเปลี่ยน GRUB เพื่อหลีกเลี่ยงปัญหา

หากคุณกังวลเกี่ยวกับช่องโหว่ของ os-prober และคุณไม่ต้องการจัดการกับการแก้ไขเมนู GRUB ด้วยตนเอง ฉันขอแนะนำให้พิจารณาตัวจัดการการบูตอื่น

ตัวอย่างเช่น คุณสามารถแทนที่ GRUB ด้วย systemd-boot แม้ว่าการรองรับ BIOS รุ่นเก่า (ซึ่งต่างจาก UEFI) จะไม่เพียงพอก็ตาม คุณอาจลองใช้ Clover Bootloader ซึ่งเดิมออกแบบมาสำหรับ Hackintoshes และรองรับทั้ง UEFI และ BIOS อีกตัวเลือกหนึ่งที่จะทำให้คุณได้รับประสบการณ์ที่คล้ายกับตัวจัดการการบูตของ macOS คือ rEFInd

*️⃣ ลิงค์ที่มา:

วิธีทำให้เมนู GRUB ของคุณปรากฏขึ้น นักพัฒนา Canonical Julian Andres Klode สรุปเหตุผลในการปิดการใช้งาน os-prober ปิดการใช้งาน Secure Boot วิธีกำหนดค่าการตั้งค่า GRUB2 Boot Loader แสดงรายการดิสก์ทั้งหมดและวัตถุประสงค์ นามแฝง systemd-boot , Clover Bootloader , rEFInd ,