Linux USB Stick แบบผสมสำหรับ UEFI และ BIOS รุ่นเก่าเป็นไปได้หรือไม่


14

ความคิดของฉันคือการสร้าง USB-Boot-Stick ด้วย Lubuntu ที่สามารถบูตบนแล็ปท็อป BIOS รุ่นเก่าและระบบ UEFI ที่ใหม่กว่า

นี่จะค่อนข้างง่ายเมื่อ Stick จะถูกตั้งค่าเป็นอุปกรณ์บูตแบบดั้งเดิม แต่ฉันต้องการให้เป็นอุปกรณ์ที่สามารถใช้ UEFI ได้

  1. มันสมเหตุสมผลหรือไม่! หรือฉันเข้าใจแนวคิดเรื่อง UEFI อย่างน่ากลัว?
  2. หากจำเป็นอาจมีการติดตั้ง Linux ที่แตกต่างกันสองตัว (อันหนึ่งสำหรับ UEFI, อันหนึ่งสำหรับแบบดั้งเดิม แต่ทั้งคู่ในไดรฟ์เดียวกัน)
  3. บูตอุปกรณ์ GPT บน Bios รุ่นเก่า - จะใช้งานได้หรือไม่

ฉันไม่เห็นชัดเจนมันอาจเป็นความคิดที่ดีกว่าที่จะมี boot boot ของ Linux ที่แยกออกจากกัน แต่ฉันอยากรู้อยากเห็นเพื่อสำรวจขอบเขต :)

ดังนั้นความคิดของฉันเกี่ยวกับไฮบริดลินุกซ์ -uefi-boot-usb-stick ที่จะทำงานกับ BIOS ดั้งเดิมเป็นไปได้หรือไม่?


(3) ดูเหมือนว่าจะเป็นไปได้สำหรับ linux ที่มี grub http://www.rodsbooks.com/gdisk/booting.html

นอกจากนี้ฉันมีพาร์ติชั่น EF00 ที่พร้อมสำหรับการติดพาร์ติชั่น Swap, Fat32 และ Ext4 สองพาร์ติชั่น


(1) ดูเหมือนว่าจะเป็นไปได้ด้วยเช่นกันhttp://www.rodsbooks.com/bios2uefi/

อย่างไรก็ตามคำแนะนำนี้มาจากปี 2012 ซึ่งบางเวลาผ่านไป - ไม่มีใครมีตัวอย่างการทำงานที่ง่ายขึ้นหรือไม่


สำหรับนักวิจัยคนอื่น ๆ ในหัวข้อนี้:

การบูต Windows 7 จากดิสก์ GPT บนแผงวงจรหลักที่ไม่ใช่ EFI มีวิธีการบูต Windows 7/8 โดยใช้ BIOS บน GPT หรือไม่

http://www.borncity.com/blog/2012/07/25/uefi-emulation-auf-pcs/


UPDATE:

ฉันจัดการเพื่อสร้างส่วน UEFI รวมถึงการตั้งค่า Boot ที่ปลอดภัยด้วย rEFInd

ทำตามคำแนะนำที่ระบุไว้ฉันใช้ddเพื่อคัดลอกgptmbr.binไปยังไดรฟ์ของฉันซึ่งตอนนี้ดูเหมือนว่าจะทำอะไรอย่างน้อยในระบบ BIOS: "นี่ไม่ใช่ดิสก์ที่สามารถบู๊ตได้"

อย่างไรก็ตามฉันได้ทำตามคำแนะนำและตั้งค่าpmbrสถานะสำหรับดิสก์และการlegacy bootตั้งค่าสถานะgpt - ยังคงได้รับข้อผิดพลาดนี้ความคิดใด ๆ

พาร์ติชัน ESP ของฉันคือพาร์ติชั่นที่สองของดิสก์และติดตั้งด้วยไฟล์ efi

การตั้งค่า:

  • พื้นที่ 64GB
  • พาร์ติชั่น GPT
  • ดิสก์มีการตั้งค่าสถานะ pmbr
  • พาร์ติชันที่ 1 เริ่มต้นที่ 16MiB และมีขนาดประมาณ 45GB ซึ่งเป็น fat32 primary สำหรับข้อมูล
  • พาร์ติชั่นที่ 2 เริ่มต้นประมาณ 45GB และเป็นระบบ EFI (fat32) พร้อมการตั้งค่า rEFInd ที่ใช้งานได้
  • พาร์ติชั่นที่ 3 - 5th คือบ้าน (ext4), swap และ root (ext4) จาก Lubuntu ที่ทำงานของฉัน 14.04.1

ใช้ddฉันได้คัดลอกgptmbr.bin6.02 Syslinux ที่คอมไพล์แล้วไปยัง 440bytes แรก

ภายใต้ส่วน 3.2 ฉันเห็นว่าพาร์ติชัน 2 ของฉันมีbootและlegacy_bootตั้งค่าสถานะ

ในระหว่างการบูตที่ฉันได้รับไม่มีแผ่นดิสก์บูตพบ - ถ้าผมตั้ง 5 ของฉันแทนของพาร์ทิชันที่ 2 จะเป็นlegacy_bootฉันจะได้รับหายไป OS

มันยังมีชีวิตอยู่!

(เนื่องจากคำถามเก่าของฉันถูกลบ/ubuntu//q/516730/319747 )


ฉันเดาว่าฉันต้องคัดลอกไฟล์บาง*.c32ไฟล์และไฟล์อื่น ๆ ไปยังโฟลเดอร์syslinux ที่ eighter บน EFI ของฉัน (ที่ไหน?!) หรือบน root partition ( /boot/syslinux?!) เพื่อให้มันทำงาน - ฉันถูกไหม ไฟล์อะไรบ้างที่จำเป็น?

นอกจากนี้ฉันคิดว่าฉันจะต้องใช้syslinucx.cfgไฟล์นั้นด้วยใช่ไหม


เป้าหมายของฉันอย่างน้อยก็เป็นการบูตโดยตรงของระบบ lubuntu บนพาร์ติชั่น root ext4

ปรับปรุง:

แม้ว่าฉันจะไม่รู้ว่าทำไมฉันถึงได้ทำงาน - แต่ไม่ใช่ด้วยการติดตั้งด้วยตนเอง

  • การpmbrตั้งค่าสถานะไม่ดีและห้ามระบบ UEFI ของฉันจากการบูตไม้เป็น UEFI
  • การlegacy_bootตั้งค่าสถานะจำเป็นสำหรับพาร์ติชันที่ 5 ของฉัน (ลินุกซ์รูท)
  • ฉันต้องใช้ extlinux --install /path/to/root/parition
  • ฉันต้องสร้าง a syslinux.cfgในโฟลเดอร์ syslinux ภายใต้การบูตของพาร์ติชั่นรูทของฉัน

ฉันทำทั้งหมดนี้ในแท่งที่เล็กกว่าที่สองจากนั้นพยายามที่จะคัดลอกเพียงโฟลเดอร์ syslinux แต่ไม่มีโชค - extlinux --installดูเหมือนจะเป็นข้อบังคับ

ใครรู้ว่าทำอะไรกันแน่extlinux --install? สามารถทำได้ด้วยตนเองหรือคุณจะติดตั้งเวอร์ชั่นใหม่เช่น 6.02 โดยไม่ต้องติดตั้งลงในระบบของคุณได้อีกหรือไม่?

ให้ไม้ของฉันทำงานกับพาร์ติชั่นที่กล่าวถึงใน BIOS, UEFI และ UEFI SecureBoot, นรกแห่งการขับขี่, เรียนรู้อะไรมากมาย, เกือบ 2TB เสียชีวิตด้วยการแยกส่วน, ระวังตัวและโชคดี


ลิงก์ของคุณเสียหาย .. คุณมีเรื่องราวของคุณที่อื่นไหม? ฉันต้องการทำเช่นเดียวกัน ขอบคุณ
pvinis

1
@pvinis ขอบคุณสำหรับข้อมูลฉันได้รวมคำถาม / ผลลัพธ์จาก askubuntu ไว้ที่นี่เพราะมันถูกลบไปแล้ว
Jook

คำตอบ:


11

เป็นไปได้และทำได้บ่อยมากกับทั้งแท่ง USB ภายนอกและไดรฟ์ภายใน

เกี่ยวกับประเภทตารางพาร์ทิชัน:

  • โดยปกติแล้วไบออสไม่ต้องการตารางพาร์ติชั่นใด ๆ มันสนใจเฉพาะส่วนรหัส bootstrapที่ 440 ไบต์แรกของ MBR ของคุณ (แม้ว่าจะมีข้อยกเว้นการใช้งานไบออสบางอย่างจริง ๆ แล้วพังถ้าไม่สามารถหา MBR ด้วยหนึ่งในประเภทพาร์ติชั่นปกติหวังว่ามันจะหายาก)

    ตารางพาร์ทิชัน GPT ไม่ร่างกายแทนที่ MBR - มันมักจะเริ่มต้นที่ภาค 1 ในขณะที่ MBR อยู่ในภาค 0 - ดังนั้นจึงเป็นไปได้สำหรับดิสก์ที่จะมีทั้ง ในความเป็นจริงมากที่สุดดิสก์ GPT จะมี "MBR ป้องกัน" ที่มีเพียงพาร์ทิชันเดียวที่ครอบคลุมดิสก์ทั้งหมดเพื่อป้องกันไม่ให้เครื่องมือเก่า MBR เท่านั้นแบ่งตั้งใจทำลายข้อมูล

    ดังนั้นคุณสามารถติดตั้งเซกเตอร์สำหรับบู๊ต Syslinux ลงใน MBR ของคุณและมันจะทำการบูท (  syslinux-install_updateสคริปต์จะทำสิ่งนี้ให้คุณ แต่คุณสามารถค้นหาgptmbr.binในแพ็คเกจ syslinux เพื่อทำด้วยตนเอง)

    เช่นเดียวกับการตั้งค่าสถานะ "แอ็คทีฟ" บนพาร์ติชัน MBR, Syslinux จะค้นหาการตั้งค่าสถานะ "ดั้งเดิม BIOS บู๊ต" ในพาร์ติชัน GPT (บิต 2 - UEFI spec 2.4 ส่วน 5.3.3 ตารางที่ 20); สคริปต์ดังกล่าวยังตั้งค่าสถานะนั้นโดยอัตโนมัติหากคุณมีsgdisk(จาก gptfdisk) ติดตั้ง

    ด้วงยังสามารถใช้งานได้ แต่มันก็น่ารำคาญกว่าเล็กน้อย เนื่องจาก GRUB 2 ต้องการ "ฝัง" ส่วนของตัวเองในภาคที่ไม่ได้ใช้งานแบบดั้งเดิมที่ 1-62 มันจะเขียนทับ GPT ที่เก็บไว้ในตำแหน่งเดียวกัน ดังนั้นคุณอาจต้องสร้างพาร์ติชันเฉพาะขนาด 2-4 MB และทำเครื่องหมายเป็น BIOS ที่สามารถบูตได้เพื่อที่grub-installจะพบว่าตัวเองอยู่ในตำแหน่งฝัง

  • ในทางกลับกันข้อกำหนด UEFI ไม่ต้องการการสนับสนุนสำหรับประเภทพาร์ติชัน MBR (ส่วน 12.3.1) และกำหนดประเภทพาร์ติชัน MBR 0xEFให้กับพาร์ติชันระบบ EFI (ส่วน 5.2.2)

    ดังนั้นหากคุณไม่สามารถทำให้ดิสก์ของคุณทำงานกับ GPT ได้ด้วยเหตุผลบางประการคุณยังสามารถสร้างพาร์ติชันระบบ EFI บน MBR และจะใช้ตราบเท่าที่มีระบบไฟล์ที่ถูกต้องและไฟล์ที่จำเป็นทั้งหมด (ส่วน 12.3.1.3):

    สำหรับอุปกรณ์สื่อแบบถอดได้ต้องมีพาร์ติชันระบบที่สอดคล้องกับ UEFI เพียงพาร์ติชันเดียวและพาร์ติชันนั้นต้องมีไดเรกทอรีที่กำหนดโดย UEFI ในไดเรกทอรีราก EFIไดเรกทอรีจะถูกตั้งชื่อ รถตัก OS และการใช้งานจะถูกเก็บไว้ในไดเรกทอรีย่อยด้านล่างเรียกว่าEFI BOOTต้องมีอิมเมจ EFI ที่สามารถเรียกทำงานได้เพียงหนึ่งภาพสำหรับแต่ละสถาปัตยกรรมโปรเซสเซอร์ที่ได้รับการสนับสนุนในBOOTไดเรกทอรี เพื่อให้สื่อแบบถอดได้สามารถบู๊ตได้ภายใต้ EFI จะต้องสร้างขึ้นตามกฎที่วางไว้ในส่วน 3.4.1.1

เกี่ยวกับระบบปฏิบัติการลีนุกซ์ไม่สนใจว่าจะบูทจากไบออสในวันนี้และจาก UEFI ในวันพรุ่งนี้ ฉันต้องรีบูตเครื่องแล็ปท็อปของฉันจากโหมด UEFI ไปเป็นโหมด "ความเข้ากันได้ของ BIOS" และกลับมาเป็นร้อยครั้งในสัปดาห์นี้ในขณะที่พยายามหาจุดบกพร่องในการรองรับ 3.17 UEFI ...


โปรดทราบว่าบทความ "การแปลง BIOS เป็น UEFI" เป็นเรื่องที่ค่อนข้างแตกต่าง มันอธิบายถึงวิธีการติดตั้งUEFI - การใช้งาน UEFI ที่เรียกว่า "DUET" - จะเริ่มจากระบบ BIOS เท่านั้น มันไม่เกี่ยวกับการบูทระบบปฏิบัติการโดยตรงจากไบออส


+1 - syslinux_install ฉันจะตรวจสอบว่าขอขอบคุณสำหรับการยืนยันความมั่นใจและการป้อนข้อมูลใหม่
Jook

ฉันทำตามคำแนะนำของคุณแล้ว แต่ฉันติดอยู่กับการตั้งค่าmbrดูเหมือนว่าฉันจะโอเค แต่ไม่พบEFI Systemพาร์ติชันของฉัน เป็นปัญหาหรือไม่ว่าเป็นพาร์ติชั่นที่สองของดิสก์ที่เริ่มต้นประมาณ 45GB ลงในดิสก์? ฉันต้องตั้งค่าส่วนที่น่าสนใจใน EFI นอกเหนือจากการตั้งค่า EFI ที่ทำงานใน alreadz หรือไม่
Jook

มันทำงานได้แล้ว :) ขอบคุณ! syslinux ค่อนข้างดีและพาฉันไปที่ gPxe และ plopkexec ซึ่งฉันจะตรวจสอบอีกครั้ง สำหรับนักวิจัยคนอื่น ๆ : askubuntu.com/q/516730/319747
Jook

2

ใช่มันเป็นไปได้

แนวคิดพื้นฐานคือGPT แบ่งพาร์ติชัน USB ของคุณแบบนี้:

  1. พาร์ติชันสำหรับบูต BIOS (ชนิด GPT 1686148-6449-6E6F-744E-656564454649) - 1 MiB ไม่มีระบบไฟล์
  2. พาร์ติชันระบบ EFI (ชนิด GPT C12A7328-F81F-11D2-BA4B-00A0C93EC93B) - ระบบไฟล์ 200 MiB, VFAT
  3. พาร์ติชันสำหรับบูต Linux (ชนิด GPT 0FC63DAF-8483-4772-8E79-3D69D8477DE4) - ระบบไฟล์ 1 GiB, ext4
  4. ระบบไฟล์ Linux root / home (ชนิด GPT 0FC63DAF-8483-4772-8E79-3D69D8477DE4) - พื้นที่ว่างที่เหลือ, ระบบไฟล์ XFS หรือ Btrfs

การแบ่งพาร์ติชันนี้ทำให้เราสามารถบู๊ตบนระบบ Legacy ได้เพราะด้วย GPT ยังมีพื้นที่ว่างสำหรับ MBR (สำหรับเหตุผลด้านความเข้ากันได้แบบย้อนหลัง) และGrub2มีพื้นที่เพียงพอที่จะติดตั้งสเตจกลางบางส่วนลงใน BIOS บูตพาร์ติชัน BIOS รุ่นเก่าไม่สนใจเกี่ยวกับรูปแบบการแบ่งพาร์ติชันและเคอร์เนล Grub2 / Linux ไม่มีปัญหาในการทำความเข้าใจ GPT ในระบบเดิม

บนระบบ UEFI เฟิร์มแวร์ UEFI จะละเว้น MBR และใช้พาร์ติชันระบบ EFI เป็นจุดเริ่มต้น

ตัวอย่างเช่นกับ Fedora โดยทั่วไปคุณต้องทำสิ่งต่อไปนี้:

ตรวจสอบให้แน่ใจว่าระบบแฟ้มลินุกซ์ Boot จะติดตั้งอยู่ภายใต้/bootและพาร์ทิชันระบบ EFI /boot/efiระบบแฟ้มจะติดตั้งอยู่ภายใต้

(Re-) ติดตั้งทั้งบูตดั้งเดิมและ UEFI boot loader:

grub2-pc grub2-efi-x64 shim-x64 efibootmgr

(อีกครั้ง) สร้างไฟล์กำหนดค่า grub ทั้งสำหรับการเริ่มระบบดั้งเดิมและการบูต UEFI:

# grub2-mkconfig -o /boot/efi/EFI/fedora/grub.cfg
# grub2-mkconfig -o /boot/grub2/grub.cfg

ขึ้นอยู่กับว่าระบบของคุณบูตในโหมดดั้งเดิมหรือโหมด UEFI คุณต้องแก้ไขไฟล์แรกหรือไฟล์ที่สองและแทนที่(linux|initrd)16ด้วย(linux|initrd)efiหรือวิธีอื่น ๆ

ติดตั้งด้วงเข้าไปใน MBR:

# grub2-install --target=i386-pc /dev/sd_your_usb_stick_device

voila


PS: ฉันเขียนสคริปต์การเตรียมที่ใช้วิธีไฮบริดนี้และสามารถใช้ในการสร้างแท่ง USB ดังกล่าวโดยอัตโนมัติ
maxschlepzig
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.