ฉันจะใช้คำBIOSด้านล่างเมื่ออ้างถึงแนวคิดที่เหมือนกันสำหรับทั้งระบบ UEFI ที่ใหม่กว่าและระบบ BIOS แบบดั้งเดิมเนื่องจากในขณะนี้เป็นคำถามเชิง UEFI การพูดคุยเกี่ยวกับ jibes "BIOS" ที่ดีขึ้นเช่นเอกสาร GRUB และ "BIOS / UEFI" เป็น clunky เกินไป GRUB (ที่จริงแล้ว GRUB 2 - มักใช้อย่างคลุมเครือ) คือ bootloader ที่ติดตั้งโดย linux และใช้สำหรับ Windows บูตคู่
อันดับแรกคือคำเกี่ยวกับลำดับไดรฟ์และลำดับการบู๊ต ลำดับของไดรฟ์หมายถึงลำดับที่ไดรฟ์เชื่อมต่อกับบัสบนเมนบอร์ด (ไดรฟ์แรกไดรฟ์ที่สองเป็นต้น) BIOS จะรายงานข้อมูลนี้ สั่งบูตอ้างถึงลำดับที่ BIOS ตรวจสอบไดรฟ์ที่สามารถบู๊ตได้ สิ่งนี้ไม่จำเป็นต้องเหมือนกันกับลำดับของไดรฟ์และมักจะสามารถกำหนดค่าผ่านหน้าจอการตั้งค่า BIOS ลำดับของไดรฟ์ไม่ควรกำหนดค่าหรือรับผลกระทบจากลำดับการบู๊ตเนื่องจากเป็นสิ่งที่ไม่เป็นมิตรกับระบบปฏิบัติการมาก (แต่ในทางทฤษฎีแล้วไบออส obtuse อาจทำได้) นอกจากนี้หากคุณถอดปลั๊กไดรฟ์แรกไดรฟ์ที่สองอาจจะกลายเป็นไดรฟ์แรก เราจะใช้ UUID ในการกำหนดค่าบูตโหลดเดอร์เพื่อพยายามหลีกเลี่ยงปัญหาเช่นนี้ (ผู้ติดตั้ง linux ร่วมสมัยก็ทำเช่นนี้)
วิธีที่ดีที่สุดในการได้รับสิ่งที่คุณต้องการคือการติดตั้ง linux ลงในไดรฟ์ที่สองในแง่ของลำดับของไดรฟ์แล้วเลือกเป็นลำดับแรกในแง่ของลำดับการบู๊ตโดยใช้การตั้งค่า UEFI ข้อได้เปรียบที่เพิ่มขึ้นของสิ่งนี้คือคุณสามารถใช้ BIOS / UEFI สำหรับการบู๊ตเพื่อเลือก windows drive และบายพาส grub ถ้าคุณต้องการ เหตุผลที่ฉันแนะนำ linux ในไดรฟ์ที่สองคือเนื่องจาก GRUB ต้อง "chainload" bootloader ดั้งเดิมของ Windows และ windows bootloader จะถือว่าเป็นไดรฟ์แรกเสมอ มีวิธีที่จะหลอกลวงได้อย่างไรก็ตามหากคุณต้องการหรือต้องการวิธีอื่น ๆ
หวังว่าคุณจะสามารถใช้ซีดีสดหรืออะไรก็ทำได้โดยใช้เครื่องมือติดตั้ง GUI อย่างไรก็ตามตัวติดตั้งบางตัวนั้นไม่ได้ถูกสร้างขึ้นมาเท่ากันและหากนี่ทำให้เกิดปัญหาขึ้นและคุณก็มีปัญหาเช่น:
ฉันติดตั้ง linux ลงบนดิสก์แผ่นแรกและตอนนี้ฉันไม่สามารถบูต windows หรือ
ฉันติดตั้ง linux ลงบนดิสก์ตัวที่สอง แต่ใช้ดิสก์ตัวแรกสำหรับ bootloader และตอนนี้ฉันไม่สามารถบูทอะไรได้!
จากนั้นอ่านต่อไป ในกรณีที่สองคุณควรลองติดตั้ง linux อีกครั้งบนดิสก์ตัวที่สองและคราวนี้ตรวจสอบให้แน่ใจว่าเป็นที่ที่ bootloader ทำงาน วิธีที่ง่ายและผิดพลาดที่สุดในการทำเช่นนั้นก็คือการลบไดรฟ์ Windows ออกจากเครื่องชั่วคราวเนื่องจากเราจะสมมติว่าไม่มีสิ่งใดติดตั้งเพิ่มเติมบนมันโดยไม่คำนึงถึงลำดับของไดรฟ์
เมื่อคุณติดตั้งลินุกซ์แล้วและคุณแน่ใจว่าสามารถบู๊ตได้ให้เสียบไดรฟ์ Windows กลับเข้าไปใหม่ (ถ้าคุณลบออก - และจำไว้ว่าเราต้องการให้มันเป็นอันดับแรกในแง่ของลำดับไดรฟ์และไดรฟ์ที่สองเป็นอันดับแรก ลำดับการบู๊ต) และทำตามขั้นตอนต่อไป
การเข้าถึงการกำหนดค่า GRUB
Boot linux เปิด terminal และ
> su root
คุณจะถูกถามถึงรหัสผ่านของรูท จากจุดนี้ไปข้างหน้าคุณคือ superuser ในเทอร์มินัลนั้น (เพื่อตรวจสอบลองwhoami
) ดังนั้นอย่าทำอะไรโง่ ๆ อย่างไรก็ตามคุณยังคงเป็นผู้ใช้ปกติใน GUI และเนื่องจากเราจะแก้ไขไฟล์ข้อความหากคุณต้องการตัวแก้ไข GUI เราจะต้องเปลี่ยนความเป็นเจ้าของไฟล์นั้นชั่วคราวและไดเรกทอรีที่อยู่ใน:
> chown -R yourusername /etc/grub.d/
หากคุณได้รับ "การดำเนินการไม่ได้รับอนุญาต" แสดงว่าคุณทำไม่su
ถูกต้อง หากคุณได้รับchown: invalid user: ‘yourusername’
คุณก็ใช้คำสั่งสุดท้ายเช่นกัน
ตอนนี้คุณสามารถนำทางไป/etc/grub.d
ใน filebrowser 40_custom
และรูปลักษณ์ของคุณสำหรับไฟล์ที่เรียกว่า ควรมีลักษณะเช่นนี้:
#!/bin/sh
exec tail -n +3 $0
# This file provides an easy way to add custom menu entries. Simply type the
# menu entries you want to add after this comment. Be careful not to change
# the 'exec tail' line above.
หากคุณหาไม่พบในเทอร์มินัลรูทให้ป้อนคำสั่งต่อไปนี้:
> touch /etc/grub.d/40_custom
> chmod 755 /etc/grub.d/40_custom
> chown yourusername /etc/grub.d/40_custom
เปิดในเครื่องมือแก้ไขข้อความของคุณคัดลอกวางส่วนด้านบน (เริ่มต้นด้วย#!/bin/sh
) และไปยังขั้นตอนถัดไป
การเพิ่มตัวเลือกการบูต Windows
คัดลอกวางในตัวแก้ไขข้อความที่ท้ายไฟล์:
menuentry "MS Windows" {
insmod part_gpt
insmod search_fs_uuid
insmod ntfs
insmod chain
}
นี่คือรายการของโมดูล GRUB จะต้องทำให้เสร็จ ( ntfs
อาจฟุ่มเฟือย แต่ไม่ควรทำอะไรเสียหาย) โปรดทราบว่านี่เป็นรายการที่ไม่สมบูรณ์ - เราจำเป็นต้องเพิ่มคำสั่งที่สำคัญบางอย่าง
ค้นหา Bootloader ขั้นที่สองของ Windows
การติดตั้ง linux ของคุณอาจติดตั้งพาร์ติชัน Windows ของคุณโดยอัตโนมัติและคุณควรจะหามันในเบราว์เซอร์ไฟล์ ถ้าไม่ให้คิดวิธีที่จะทำให้มัน (ถ้าคุณไม่แน่ใจว่าถามคำถามในเว็บไซต์นี้) หลังจากที่ทำเราจำเป็นต้องรู้จุดติด - /media/ASDF23SF23/
นี้ควรจะชัดเจนในเบราเซอร์ไฟล์เช่น หากต้องการบันทึกการพิมพ์เราจะใส่ลงในตัวแปรเชลล์:
win="/whatever/the/path/is"
ไม่ควรเว้นวรรคด้านใดด้านหนึ่งของเครื่องหมายเท่ากับ อย่ารวมองค์ประกอบใด ๆ ของเส้นทาง Windows ไว้ที่นี่ นี่ควรชี้ไปที่โฟลเดอร์ระดับบนสุดในพาร์ติชัน Windows ขณะนี้:
cd $win
find . -name bootmgfw.efi
อาจใช้เวลาสองสามนาทีถ้าคุณมีพาร์ติชันขนาดใหญ่ แต่ส่วนใหญ่สิ่งแรกที่แยกออกมาคือสิ่งที่เรากำลังมองหา อาจมีการอ้างอิงเพิ่มเติมในระบบไฟล์ที่มีสตริง goobledygook ที่ยาว - นั่นไม่ใช่มัน ใช้Ctrl-c
เพื่อหยุดการค้นหาเมื่อคุณเห็นสิ่งที่สั้นและง่ายเหมือนหรือ./Windows/Boot/EFI/bootmgfw.efi
./EFI/HP/boot/bootmgfw.efi
ยกเว้น.
จุดเริ่มต้นให้จำเส้นทางนี้ไว้เพื่อดูภายหลัง คุณสามารถคัดลอกลงในเครื่องมือแก้ไขข้อความของคุณในบรรทัดว่างที่ด้านล่างเนื่องจากเราจะใช้ที่นั่น หากคุณต้องการกลับไปยังไดเรกทอรีก่อนหน้าของคุณตอนนี้ให้ใช้cd -
แม้ว่ามันจะไม่สำคัญว่าคุณอยู่ที่ไหนในเชลล์จากที่นี่ไปข้างหน้า
การตั้งค่าพารามิเตอร์ที่เหมาะสม
GRUB ต้องสามารถค้นหาและส่งกระบวนการบู๊ตไปยัง bootloader Windows ขั้นที่สอง เรามีเส้นทางบนพาร์ติชัน Windows แล้ว แต่เราต้องการพารามิเตอร์บางอย่างเพื่อบอก GRUB ว่าการแบ่งส่วนนั้นอยู่ที่ไหน ควรจะมีเครื่องมือที่ติดตั้งในระบบของคุณเรียกว่าgrub-probe
หรือ (สถานที่เช่น grub2-probe
Fedora) พิมพ์grub
แล้วกดTabสองหรือสามครั้ง; คุณควรเห็นรายการรวมถึงรายการใดรายการหนึ่ง
> grub-probe --target=hints_string $win
คุณควรเห็นสตริงเช่น:
--hint-bios=hd1,msdos1 --hint-efi=hd1,msdos1 --hint-baremetal=ahci1,msdos1
กลับไปที่เท็กซ์เอดิเตอร์ที่มีการกำหนดค่า GRUB ในนั้นและเพิ่มบรรทัดหลังinsmod
คำสั่งทั้งหมด(แต่ก่อนที่จะปิดวงเล็บปีกกาปิด) เพื่อให้ดูเหมือน:
insmod chain
search --fs-uuid --set=root [the complete "hint bios" string]
}
อย่าแยกบรรทัดนั้นหรืออนุญาตให้โปรแกรมแก้ไขข้อความทำเช่นนั้น มันอาจพันรอบในจอแสดงผล - วิธีง่ายๆในการบอกความแตกต่างคือการตั้งค่าหมายเลขบรรทัด ต่อไป:
> grub-probe --target=fs_uuid $win
สิ่งนี้ควรส่งคืนตัวอักษรตัวเลขและขีดคั่นที่สั้นลงเช่น "123A456B789X6X" หรือ "b942fb5c-2573-4222-acc8-bbb883f19043" เพิ่มเข้าไปที่ท้ายsearch --fs-uuid
บรรทัดหลังจากสตริง bios บอกทางคั่นด้วยช่องว่าง
ถัดไปหาก(และเฉพาะในกรณีที่) Windows อยู่ในไดรฟ์ที่สองในแง่ของลำดับของไดรฟ์ให้เพิ่มบรรทัดถัดจากsearch --fs-uuid
บรรทัด:
drivemap -s hd0 hd1
นี่คือ "เคล็ดลับ" ที่กล่าวถึงก่อนหน้านี้ หมายเหตุมันไม่รับประกันว่าจะทำงาน แต่ก็ไม่เจ็บที่จะลอง
ในที่สุดบรรทัดสุดท้ายควรเป็น:
chainloader (${root})[the Windows path to the bootloader]
}
เพื่อความชัดเจนตัวอย่างเช่น:
chainloader (${root})/Windows/Boot/EFI/bootmgfw.efi
แค่นั้นแหละ. บันทึกไฟล์และตรวจสอบในเบราว์เซอร์ไฟล์เพื่อให้แน่ใจว่าได้รับการบันทึกและดูอย่างที่ควรจะเป็น
เพิ่มตัวเลือกเมนูใหม่เข้ากับด้วง
ทำได้ด้วยเครื่องมือที่เรียกว่าgrub-mkconfig
หรือgrub2-mkconfig
; จะอยู่ในรายการที่คุณพบTabก่อนหน้านี้ นอกจากนี้คุณยังอาจมีคำสั่ง AA update-grub
เรียกว่า เพื่อตรวจสอบสิ่งนั้นเพียงแค่พิมพ์มันในรูทเทอร์มินัล หากคุณได้รับ "ไม่พบคำสั่ง" คุณต้องใช้grub-mkconfig
โดยตรง หากไม่ใช่ (รวมถึงข้อผิดพลาดอีกต่อไป) คุณเพิ่งตั้งค่าคอนฟิเกอเรชันและสามารถลดลงได้เล็กน้อย
หากต้องการใช้grub-mkconfig
โดยตรงอันดับแรกเราต้องค้นหาgrub.cfg
:
> find /boot -name grub.cfg
นี้อาจจะเป็นหรือ/boot/grub/grub.cfg
/boot/grub2/grub.cfg
> grub-mkconfig -o /boot/grub/grub.cfg
update-grub
จะสแกนการกำหนดค่าโดยอัตโนมัติเพื่อหาข้อผิดพลาด grub-mkconfig
จะไม่ แต่เป็นสิ่งสำคัญที่จะทำเช่นนั้นเพราะมันง่ายต่อการจัดการกับพวกเขาตอนนี้มากกว่าเมื่อคุณพยายามบูตเครื่อง สำหรับสิ่งนี้ใช้grub-script-check
(หรือgrub2-script-check
):
> grub-script-check /boot/grub/grub.cfg
หากสิ่งนี้ (หรือupdate-grub
) ก่อให้เกิดข้อผิดพลาดที่ระบุหมายเลขบรรทัดนั่นคือหมายเลขบรรทัดใน grub.cfg แต่คุณต้องแก้ไขส่วนที่เกี่ยวข้องใน/etc/grub.d/40_custom
(ไฟล์ในโปรแกรมแก้ไขข้อความ) คุณอาจต้องรูทเพื่อดูไฟล์เก่าดังนั้นลองless /boot/grub/grub.cfg
ใช้เทอร์มินัลกด:และป้อนหมายเลขบรรทัด คุณควรเห็นรายการเมนูของคุณ ค้นหาการพิมพ์ผิดแก้ไขใน text editor แล้วเรียกใช้update-grub
หรือgrub-mkconfig
อีกครั้ง
เมื่อเสร็จแล้วคุณสามารถปิดตัวแก้ไขข้อความและพิมพ์exit
ในเทอร์มินัลเพื่อออกจากโหมด superuser
Reboot!
เมื่อคุณไปที่เมนูด้วงเลื่อนลงอย่างรวดเร็ว (ก่อนหมดเวลาปกติ 5 วินาที) ไปที่ตัวเลือก "Windows" และทดสอบ หากคุณได้รับข้อความแสดงข้อผิดพลาดจากด้วงแสดงว่ามีบางอย่างผิดปกติกับการกำหนดค่า หากคุณได้รับข้อความแสดงข้อผิดพลาดจาก Windows แสดงว่ามีปัญหาเกิดขึ้นระหว่างคุณกับ Microsoft ไม่ต้องกังวลอย่างไรก็ตามไดรฟ์ Windows ของคุณยังไม่ได้รับการแก้ไขและคุณจะสามารถบู๊ตได้โดยตรงโดยใส่ไว้ก่อน (ในแง่ของลำดับการบู๊ต) ผ่านการตั้งค่า BIOS
เมื่อคุณกลับไปที่ linux อีกครั้งให้ส่งคืนความเป็นเจ้าของของ/etc/grub.d
ไดเรกทอรีและเนื้อหานั้นกลับสู่สถานะเดิม:
sudo chmod 755 /etc/grub.d/40_custom
อ้างอิง