หน้าต่างบูตคู่บนฮาร์ดไดรฟ์ระบบ UEFI / GPT ตัวที่สอง


15

ฉันต้องการติดตั้ง linux แต่ฉันไม่ต้องการเสี่ยงต่อการติดตั้ง windows ปัจจุบันของฉันเนื่องจากฉันได้ยินเรื่องราวสยองขวัญมากมาย โชคดีที่ฉันมีฮาร์ดไดรฟ์พิเศษ ฉันสามารถติดตั้ง linux ลงในนั้นและจากนั้นบูต windows คู่โดยไม่ต้องปรับเปลี่ยนไดรฟ์ windows?

นอกจากนี้ฉันมี "BIOS" UEFI และไดรฟ์ windows อยู่ในรูปแบบ GPT

คำตอบ:


18

ฉันจะใช้คำ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 อย่างไรก็ตามตัวติดตั้งบางตัวนั้นไม่ได้ถูกสร้างขึ้นมาเท่ากันและหากนี่ทำให้เกิดปัญหาขึ้นและคุณก็มีปัญหาเช่น:

  1. ฉันติดตั้ง linux ลงบนดิสก์แผ่นแรกและตอนนี้ฉันไม่สามารถบูต windows หรือ

  2. ฉันติดตั้ง 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-probeFedora) พิมพ์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

อ้างอิง

  • คู่มือ GRUB 2

  • หน้า Arch Linux Wiki GRUB

    Arch มีเอกสารที่ดีที่สุดบางส่วนและส่วนใหญ่ (รวมถึงหน้านั้น) ส่วนใหญ่จะใช้กับ GNU / Linux distro ใด ๆ


2
คำศัพท์ที่ถูกต้องทางเทคนิคที่คุณกำลังมองหาซึ่งไม่ได้เป็น clunky คือเฟิร์มแวร์ซึ่งสามารถแสดงตัวเป็นไบออสหรือ UEFI
Milind R

น่าเสียดายที่เฟิร์มแวร์มีความหมายทั่วไปมากกว่าที่กล่าวถึงซอฟต์แวร์ใด ๆ ที่ฝังอยู่ในฮาร์ดแวร์
Kylotan

บนเดสก์ท็อปของฉัน "chain" ไม่ได้เป็นคำสั่งขณะทำการบูท แต่มัน chainloader ในไฟล์ 40_custom ที่ฉันต้องเขียน แจ้งให้เราทราบว่านี่เป็นเรื่องปกติหรือไม่
FlogFR

ดีมาก! อย่างไรก็ตามเมื่อฉันลองทำสิ่งนี้การติดตั้ง Windows 8 ของฉันจะไม่ปรากฏเป็นรายการใน grub2 ฉันแก้ไขข้อผิดพลาดทางไวยากรณ์ทั้งหมดและไฟล์ grub.cfg ถูกสร้างขึ้นโดยไม่มีข้อผิดพลาด นอกจากนี้โปรดทราบว่ามีข้อผิดพลาดทางไวยากรณ์เมื่อมีการกล่าวถึง chainload ครั้งแรก: chainload $({root})ควรchainload (${root})(ฉันไม่สามารถแก้ไขได้เนื่องจากมีการเปลี่ยนแปลงน้อยเกินไป)
sobek

@ sobek ขอบคุณสำหรับสิ่งนั้น - แก้ไขแล้ว หากคุณเพิ่มบางสิ่งลงในไฟล์/etc/grub.dและจะไม่ถูกเพิ่มเมื่อคุณสร้างการกำหนดค่าสิ่งที่แปลกเกิดขึ้น หากคุณรันgrub-mkconfigโดยที่ไม่-oได้ใช้มาตรฐานนั้นอาจช่วยยืนยันหรือปฏิเสธว่าส่วนเพิ่มเติมของคุณกำลังถูกประมวลผล
goldilocks
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.