ทำไมการกระจายส่วนใหญ่ถึงเชน UEFI และด้วง


31

การกระจายส่วนใหญ่จะติดตั้งบูทโหลดเดอร์เพิ่มเติมบนระบบ UEFI UEFI นั้นเป็นบูตโหลดเดอร์มันมีเมนูให้เลือกระบบปฏิบัติการที่แตกต่างกันหรือแต่ละเมล็ด นอกจากนี้การตั้งค่า UEFI สามารถจะเปลี่ยนแปลงได้ด้วยเครื่องมือ userspace efibootmgrเช่น

เคอร์เนลตั้งแต่ 3.3 รองรับ EFI_STUB ซึ่งหมายความว่าเคอร์เนลสามารถโหลดได้โดยตรงจาก UEFI เหตุผลการกระจายการตัดสินใจที่จะใช้บูตโหลดเดอร์เพิ่มเติมคืออะไร? บทเรียนส่วนใหญ่บน Linux / UEFI มุ่งเน้นไปที่วิธีการตั้งค่าบูตโหลดเดอร์เพิ่มเติมเป็นหลัก (rEFInd, grub2, ELILO และอื่น ๆ ) แทนการบูท Linux ด้วย EFI_STUB

สิ่งเดียวที่ขาดหายไปในการกระจายคือการสนับสนุน เนื่องจากดิสทริบิวชันส่วนใหญ่เชื่อมโยงบูตโหลดเดอร์ตัวที่สองเคอร์เนลจะไม่ถูกเพิ่มลงในเมนูการบู๊ต UEFI และจะไม่คัดลอกไปยังพาร์ติชันระบบ EFI

มีสคริปต์สามบทที่เพียงพอที่จะใช้เวทมนตร์ทั้งหมด หนึ่งซึ่งคัดลอก initramfs ไปยัง ESP อันที่สองคัดลอกเคอร์เนลไปที่ ESP และสร้างรายการใหม่ในเมนูการบู๊ต UEFI สคริปต์ที่สามลบเคอร์เนลเก่าและ initramfs ออกจาก ESP และลบรายการเมนูการบูต UEFI สิ่งนี้จะช่วยให้การปรับปรุง / การล้างเคอร์เนล / เริ่มต้นโดยอัตโนมัติโดยไม่ต้องมีการโต้ตอบกับผู้ใช้ ฉันใช้วิธีนี้มานานกว่าหนึ่งปีและใช้งานได้อย่างไม่มีที่ติ

ทำไมการกระจายส่วนใหญ่จึงใช้ด้วงแทน EFI_STUB

ลิงค์:

แก้ไข: ฉันไม่ได้พูดถึงการลบการสนับสนุนด้วงทั้งหมด แต่เพื่อเสนอทางเลือกสำหรับผู้ที่ต้องการใช้ด้วยเหตุผลต่างๆ การแจกแจงสามารถให้แพคเกจgrub-efiสำหรับผู้ที่ต้องการเชื่อมโยง UEFI และด้วงและแพ็คเกจefistub-bootที่มีสคริปต์ที่ฉันกล่าวถึงข้างต้น


4
ทำไมพวกเขาควร? พวกเขาได้สร้างวิธีการสำหรับการจัดการ / สร้างไฟล์การกำหนดค่าด้วงแล้ว นอกจากนี้ยังช่วยหากระบบทั้งหมด (ที่ไม่ใช่ UEFI & UEFI) ทำงานเหมือนกัน
Ulrich Dangel

ฟังดูดีนะ. แต่เนื่องจากตามลิงค์นั้นคุณสามารถทำได้ถ้าคุณต้องการบางทีมันอาจเป็นหล่มที่อาจเป็นไปได้ที่ distros จะทำเพื่อคุณโดยอัตโนมัติ Betcha บางคนจะให้คุณเลือกในที่สุด
goldilocks

1
@Bakuriu ระบบที่เข้าใจง่ายขึ้นลำดับการบู๊ตที่ง่ายขึ้นโค้ดที่เรียกใช้งานน้อยลงและเวลาการบูทเครื่องเร็วขึ้นเล็กน้อย
Marco

4
คำถามนี้ควรถูกระงับไว้เนื่องจากเหตุผลการระงับที่ระบุนั้นผิด คำถามนี้มีคำตอบที่ไม่สามารถควบคุมได้ง่าย: UEFI ไม่ได้มีเมนูสำหรับเริ่มระบบ การใช้งานบางอย่างทำ บางคนทำไม่ได้เพราะในการสั่งซื้อที่จะไปถึงเวลาบูตเป้าหมายของพวกเขาสำหรับ Windows 8 ไบออสไม่ได้อุปกรณ์ป้อนข้อมูลการเริ่มต้นแม้กระทั่ง รอคนเดียวเพื่อดูว่าผู้ใช้กดปุ่มหรือไม่ ดังนั้นคุณต้องผ่าน Windows เพื่อไปที่ Linux หรือในทางกลับกัน อดีตทำงานในบางระบบ แต่ฉันสงสัยว่า spec รับรอง สิ่งหลังไม่ได้ผล (คุณสามารถเข้าสู่การตั้งค่า UEFI จาก GRUB แต่ไม่ใช่จาก Linux)
sourcejedi

1
@sourcejedi คุณอ้างว่าไม่ตรงกับที่มาของคุณ UEFI จัดทำเมนูสำหรับเริ่มระบบ (UI ไม่สอดคล้องกันกับผู้ขาย) mjg59 หมายความว่าคุณจะไม่สามารถบู๊ตเมนูได้โดยไม่มีการประนีประนอมทางปรัชญา (ยอมรับ W8 EULA) แต่ปัญหานี้จะเหมือนกันสำหรับตัวติดตั้งที่ไม่มี bootloaders ด้วง EFISTUB ดังนั้นจึงไม่ตอบว่าทำไมเราถึงชอบด้วงมากกว่า EFISTUB เช่นกัน
Lingzhu Xiang

คำตอบ:


10

ระบุว่า UEFI ถูกกำหนดในปี 2005เท่านั้นมีอุปกรณ์ดั้งเดิมที่มีอยู่มากมายที่ไม่รองรับข้อมูลจำเพาะ ในการเพิ่ม UEFI ลงในการแจกแจงแบบมาตรฐานนั้นจำเป็นต้องทำการทดสอบสองโค้ดพา ธ แทนที่จะเป็นหนึ่งอันและไม่เพียง แต่จะเป็นรหัสการบู๊ตที่โด่งดังที่สุดมันเป็นหนึ่งในบิตที่ใช้เวลานานมากในการทดสอบโค้ด


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

ความคิดเห็นข้างต้นโดย @ MichaelKjörlingควรอยู่ในคำตอบ การเปลี่ยนเป็นบูตโหลดเดอร์ใหม่นั้นมีความเสี่ยงมาก ผู้สร้าง Distro ต้องการให้ผู้ใช้ของพวกเขามีประสบการณ์ที่ดี แต่ยิ่งไปกว่านั้นพวกเขาต้องการให้ผู้ใช้ใหม่ที่มีศักยภาพเพียงคนเดียวมีประสบการณ์ครั้งแรกอย่างไร้ที่ติ ฉันขอโทษที่ฉันเรียกการแจกจ่ายว่า "distro" แต่มันก็โอเคกับผู้สร้าง
Johan

@Johan mswมีอิสระที่จะแก้ไขจุดนั้นในคำตอบฉันไม่รังเกียจ (มันไม่เพียงพอที่จะเป็นคำตอบของมันเอง IMO) ทั้งTobuและgoldlilocks ก็แตะต้องประเด็นนี้เช่นกัน
CVn

3

Distros มีทรัพยากรที่ จำกัด และอาจไม่มีเหตุผลใด ๆ เลย มันอาจจะง่ายและปลอดภัยพอสมควร แต่ไม่ว่าจะต้องการงานบำรุงรักษามากขึ้นเพราะตัวเลือกด้วงนั้นต้องได้รับการบำรุงรักษาหากสำหรับระบบที่ไม่ใช่ UEFI เท่านั้น

ฉันแน่ใจว่าทุกคนมีรายการคุณสมบัติและตัวเลือกที่พวกเขาต้องการเห็น distros นำมาใช้ (ฉันจะให้คุณสองสามหน้าฮ่า ๆ ) และไม่ต้องสงสัยเลยว่าหลายคนจะ "ง่ายโดยไม่ต้องยุ่งยากและสุจริต .. " อย่างไรก็ตามไม่มีจำนวนชั่วโมงของคนที่จะใช้งานได้ไม่ จำกัด เมื่อต้องเผชิญกับการตัดสินใจเช่นนี้ ("เราจะนำงานนี้ไปใช้กับคุณลักษณะนี้กับคำถามอื่น ๆ หรือไม่") คำถามหลักควรเป็น:

  • จำเป็นหรือไม่ (คำตอบนี่คือไม่)
  • มีกี่คนที่จะได้ประโยชน์และเท่าไหร่ (IMO: น้อยและไม่มาก)
  • มีทางเลือกที่สมเหตุสมผลตามที่ผู้ใช้สามารถรองรับตนเองโดยที่เราไม่ทำอะไรเลย? (เห็นได้ชัดว่ามี)

เหตุผลที่คนใช้ distros เลยก็เพราะทุกคนอยู่ภายใต้ข้อ จำกัด ของทรัพยากร (มิฉะนั้นเพียงจ้างทีมซื้อพื้นที่และอุปกรณ์และให้พวกเขาทำทุกอย่างตามที่คุณต้องการ) ดังนั้นความจริงคือ distros สะท้อนความต้องการทั่วไปของผู้ใช้

ที่กล่าวว่าฉันคิดว่าในเวลานี้จะได้รับการยอมรับเป็นตัวเลือกและฉัน upvoted คำถาม


2

การกำหนดเป้าหมาย bootloaders UEFI นอกเหนือจากด้วงจะทำให้การควบคุมและการสนับสนุนมีความซับซ้อน ดิสรอสเป็นเป้าหมายของด้วงมากกว่าสเป็คของ UEFI เพราะด้วงเป็นซอฟต์แวร์เสรีที่สามารถแฮกได้ยืดหยุ่นและมีคุณภาพสูง คุณยังสามารถรับการบูท pure-UEFI ได้โดยทำตามบทช่วยสอนและติดตั้งพาร์ติชัน UEFI บน/bootเพราะถ้าคุณทำเช่นนั้นการบำรุงรักษาจะอยู่ที่คุณ


การยืนยันคุณภาพของคุณนั้นเป็นที่ถกเถียงกันอยู่ แต่ฉันคิดว่าเหตุผลที่ตั้งเป้าหมายนั้นไม่เกี่ยวข้องกับมัน พวกเขามีเชลล์สคริปต์ที่เขียนไม่ดีหลายพันบรรทัดเพื่อจัดการมันดังนั้นทำไมพวกเขาต้องการ 20 อันที่ดี?
mikeserv

1

ปัญหาที่แท้จริงคือคนไม่เข้าใจวิธีการทำงาน ตัวอย่างเช่นในคำถามของคุณคุณพูดถึงว่ามีสามสคริปต์ทั้งหมดที่จำเป็นและคำตอบส่วนใหญ่ที่นี่คือทั้งหมดเกี่ยวกับ / การบำรุงรักษาเพิ่มเติมใด ๆ ที่จะต้องใช้ในการทำงาน - แต่ความจริงก็คือคุณไม่ต้องการสคริปต์เหล่านั้น หรืองานเพิ่มเติมใด ๆ

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

`/ etc / fstab 'ของฉันดูเหมือนว่า:

LABEL=ESP /esp vfat defaults 0 2
#
#^ i like a separate mount point - not necessary though
#
/esp/EFI/arch_root /boot none bind,defaults 0 2
#
#^ i keep separate installations in separate directories
#

มีจุดที่ดีที่ทำที่นี่ แต่เกี่ยวกับการตั้งค่าเฉพาะของผู้ผลิต UEFI อย่างชัดเจนไม่ได้ระบุอินเตอร์เฟซสำหรับเมนูบูต นั่นขึ้นอยู่กับการคว้าและจะไม่สอดคล้องกันระหว่างเครื่อง มันน่ารำคาญ แต่จริง

ในขณะที่โหลดเดอร์เช่นgrubจริง ๆ แล้วใช้งานได้มากกว่าแอปพลิเคชันเมนู - เช่น rEFInd จะทำให้ความแตกต่างเท่ากันและทำให้ทุกอย่างง่ายขึ้น


1
ฉันไม่เข้าใจว่ามันใช้งานได้อย่างไร โปรดทราบว่าชื่อไฟล์ของเคอร์เนลและเริ่มต้นรวมถึงเวอร์ชัน หากไม่มีสคริปต์คุณจะบูตเคอร์เนลเก่าของคุณหลังจากติดตั้งใหม่ หรือใช้ถ้อยคำต่างกัน: คุณเปลี่ยนเคอร์เนลเริ่มต้นให้ชี้ไปที่เคอร์เนลใหม่ได้อย่างไร (สคริปต์ของฉันใช้efobootmgrเพื่ออัปเดตลำดับการบู๊ตและเปลี่ยนเคอร์เนลเริ่มต้น)
Marco

@Marco - เส้นทางการบูตเริ่มต้นเป็นอย่างดี\EFI\BOOT\BOOTX64.efiและดังนั้นจึงอาจได้รับการตั้งชื่อตามนั้น UEFI ลาดเท(ตามข้อมูลจำเพาะ)จัดการอาร์กิวเมนต์ไปยังเคอร์เนลตั้งแต่แรก - ดังนั้นรูปภาพเริ่มต้นของเคอร์เนล / เคอร์เนลจะต้องถูกรวมเข้าด้วยกันในกรณีนั้น แต่ฉันไม่รู้ว่าคุณหมายถึงอะไรเกี่ยวกับการตั้งชื่อเวอร์ชั่น - ฉันคิดว่ามีเพียงพวกเดเบียนเท่านั้นที่ทำได้และฉันคิดว่ามันไม่ก่อผล vmlinuzชื่อธรรมดาสำหรับเคอร์เนลของคุณ อย่างไรก็ตามวิธีการที่เหมาะสมที่จะทำมันอยู่กับจัดการการบูตไม่ได้เป็นรถตักดิน ใช้แอพพลิเคชั่น EFI ที่พบเคอร์เนลของคุณและส่งต่อชื่อไปยัง EFI เพื่อบู๊ตเหมือนกับที่ rEFInd ทำ
mikeserv

ฉันใช้ Debian และชื่อของเคอร์เนลนั้นเป็นvmlinuz-4.2.0-1-amd64สิ่งที่ฉันปล่อยไว้ตามเดิมจากนั้นใช้efibootmgrเพื่อเพิ่มเข้าไปในรายการบูตและทำให้เป็นค่าเริ่มต้น ฉันเห็นว่าการตั้งชื่อเคอร์เนลBOOTX64.efiอาจเป็นวิธีแก้ปัญหา แต่ในทางใดทางหนึ่งฉันจะต้องมีสคริปต์เพื่อทำสิ่งนั้นและยิ่งกว่านั้นที่ไม่อนุญาตให้เก็บเมล็ดหลายเมล็ดได้อย่างง่ายดายถ้าพวกมันถูกตั้งชื่อเหมือนกัน
Marco

@Marco - คุณไม่จำเป็นต้องมีสคริปต์แยกต่างหาก - ตัวจัดการแพ็คเกจของคุณ - อาจจะ - กำลังเรียกใช้สคริปต์บางส่วนเมื่อมีการติดตั้งเคอร์เนลเพื่อสร้าง initramfs มันอาจจะทำหลายร้อยอย่างเพื่อให้ชื่อเคอร์เนลของคุณมีอยู่แล้ว แต่เพียงแค่บรรทัดพิเศษบรรทัดเดียวจะทำการเปลี่ยนชื่อเป็นสิ่งที่คุณต้องการ และคุณสามารถเก็บไว้เป็นเมล็ดจำนวนมากเท่าที่คุณต้องการถ้าคุณให้บูตต้นไม้ rEFInd จัดการกับมันโดยทำให้อิมเมจสำหรับบูตเริ่มต้นเป็นอิมเมจเคอร์เนลที่แก้ไขล่าสุดในพา ธ การค้นหา
mikeserv

การแก้ไขสคริปต์หุ้นที่ติดตั้งโดยผู้จัดการแพ็คเกจเป็นความคิดที่ไม่ดี พวกเขาอาจได้รับการปรับปรุงซึ่งจะเช็ดการเปลี่ยนแปลงของคุณและ - ในกรณีนี้อาจส่งผลให้ระบบไม่สามารถบูตได้ มีไดเรกทอรีสำหรับสคริปต์ผู้ใช้ที่ถูกเรียกใช้หลังจากการติดตั้งเคอร์เนล / initramfs และที่มีวัตถุประสงค์เพื่อใช้สำหรับวัตถุประสงค์เช่นนี้ BTW: คุณกำลังแนะนำให้แก้ไขสคริปต์ในความคิดเห็นของคุณ อย่างไรก็ตามในคำตอบของคุณคุณระบุว่า“ คุณไม่ต้องการสคริปต์เหล่านั้นหรืองานเพิ่มเติมใด ๆ ” ซึ่งไม่เป็นความจริง (อย่างน้อยก็สำหรับ Debian)
Marco

0

พวกเขาโยง UEFI และ GRUB เป็นโซลูชันการดำเนินการชั่วคราว

เนื่องจากการสนับสนุนของ UEFI และปัญหาที่เกี่ยวข้อง (เช่น Secure Boot) ได้รับการแก้ไขการกระจายมากขึ้นจะใช้โดยตรง ในขณะนี้ยังใหม่มาก: Google Trends แสดงการยอมรับที่ค่อนข้าง จำกัด : http://www.google.com/trends/explore?q=cannot+boot+uefi#q=uefi%2C%20%20efi%2C % 20% 20bios & cmpt = Q

คนอื่น ๆ ล้วนกล่าวถึงข้อผิดพลาดที่อาจเกิดขึ้นจากการไปหาโซลูชั่น UEFI ที่บริสุทธิ์และ / หรือสนับสนุนทั้งระบบที่ไม่ใช่ UEFI และระบบ UEFI ที่บริสุทธิ์พร้อมกัน เคอร์เนล UEFI อาจทำงานบนระบบที่ไม่ใช่ UEFY แต่เครื่องมืออัปเดตเคอร์เนลจำเป็นต้องอัปเดตเมนู GRUB หรือเมนูบูต UEFI หรือทั้งสองอย่าง ฯลฯ

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

แต่อย่างที่ฉันพูดเมื่อเทคโนโลยีได้รับการยอมรับมากขึ้นมันจะกลายเป็นมาตรฐาน


ฉันหวังว่าจะไม่ - แต่ส่วนใหญ่เป็นเพราะฉันกังวลอย่างมากเกี่ยวกับโหมด lockdown ของ UEFI และ "สัญญา" ของ Microsoft เพื่อให้แน่ใจว่าจะมีภาพที่ลงชื่อสำหรับ linux เสมอที่จะใช้ ...
Shadur

0

จำเป็นต้องมีรหัสเพิ่มเติมเพื่อแก้ไขข้อบกพร่องของเฟิร์มแวร์

เมื่อไม่ได้ผูกมัดด้วงการกระจายจะขึ้นอยู่กับเฟิร์มแวร์มากขึ้นในการบูตอย่างถูกต้อง เนื่องจากซอฟต์แวร์ใด ๆ จะมีปัญหาเฟิร์มแวร์ก็มีแนวโน้มที่จะ ทีนี้ลีนุกซ์ดิสทริบิวชันจะต้องเขียนเพื่อแก้ไขข้อบกพร่องของเฟิร์มแวร์เหล่านี้ด้วย.

กรณีชีวิตจริงเป็นตัวอย่าง เมนบอร์ด Asrock H81 pro BTC P1.80 ช่วยให้สามารถสร้างรายการเมนูการบู๊ตefibootmgrได้ อาจมีรายการเมนูการบูตหลายสร้างขึ้นและลำดับการบูตสามารถเปลี่ยนการใช้หรือตัวเลือกการบูตต่อไปชั่วคราวสามารถตั้งค่าการใช้efibootmgr --bootorder XXXX,YYYY,ZZZZ ทั้งสองนี้ออกคำสั่งผลตอบแทนที่ช่วยให้คุณความคิดที่ว่าลำดับการบูตที่มีการเปลี่ยนแปลงหรือการบูตต่อไปจะทำงานเช่นefibootmgr --bootnext XXXX BootNext: XXXXอย่างไรก็ตามในการรีบูตเฟิร์มแวร์ที่ดื้อรั้นเพียงแค่เพิกเฉยตัวเลือกการบูตที่ร้องขอใหม่และทำการรีบูตเป็นBootCurrent:ค่าก่อนหน้า การเปลี่ยนแปลงคำสั่งบูตอย่างถาวรสามารถทำได้จากยูทิลิตี้การตั้งค่าเฟิร์มแวร์เท่านั้น และการเปลี่ยนแปลงที่ไม่ถาวรไม่สามารถใช้ได้เลย


-2

ฉันคิดว่าถ้า EFI ส่งมอบโดยเฉพาะและเราลบ bootloader มันจะเป็นเรื่องยากสำหรับทั้งผู้จำหน่าย HW และผู้ผลิตระบบปฏิบัติการ ผู้ขาย HW จะมีเมล็ดมากขึ้นเพื่อทดสอบในขณะที่สำหรับ บริษัท ที่ทำระบบปฏิบัติการมันจะเป็นเหมือนว่าเคอร์เนลของพวกเขาจะถูกโหลดโดย FW ที่แตกต่างกัน

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


นั่นมันโง่ เหตุผลที่ bootloader ตรวจสอบคีย์นั้นเป็นเพราะ UEFI ไม่ได้ การโหลดโซ่นั้นซ้ำซ้อนเพื่อรักษาความปลอดภัยในการบูทเคอร์เนลที่เซ็นชื่อคุณเพียงตรวจสอบคีย์ในเฟิร์มแวร์ - วิธีที่มันควรจะทำงาน
mikeserv
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.