Linux / xBSD บูตก่อน GRUB อย่างไร


23

จากข้อมูลของWikipediaนั้น GRUB ได้เปิดตัวในปี 1995 โดยจุดนั้น Linux และ xBSD มีอยู่เป็นเวลาหลายปี ฉันรู้ว่ายูนิกซ์รุ่นแรก ๆ นั้นเชื่อมโยงกับฮาร์ดแวร์ในยุค 70 และ 80 แต่ Linux และ xBSD มีอิสระในการเผยแพร่และติดตั้ง คำถามใดที่คุณจะบูท Linux ได้ในตอนนั้น? ดิสทริบิวชันจัดส่งด้วยการปรับใช้ bootloaders ของตนเองหรือไม่


32
อืมมม ... คุณไม่ได้อยู่เมื่อ LILO เป็น Linux bootloader เพียงคนเดียวหรือเปล่า และฉันไม่เคยใช้ LILO หรือ Grub กับระบบ BSD ของฉัน คุณสนใจเรื่องไหน biosboot(8)ดูเช่น
Kusalananda

8
@ Kusalananda แต่น่าเสียดายที่ฉันสนใจของเล่นและวาดเต่านินจามากกว่าท่อผู้บริหารและกระสุนย้อนหลัง :) ฉันสนใจประวัติศาสตร์ทั่วไปไม่ใช่ bootloader เฉพาะ จากหน้าเว็บที่คุณเชื่อมโยงฉันเห็นว่า OpenBSD มีbiosbootสองสถาปัตยกรรมคือ i386 และ amd64 หมายความว่า OpenBSD โดยเฉพาะต้องกำหนดเป้าหมายสถาปัตยกรรมแทนที่จะมีหนึ่งเดียวเป็นเครื่องมือรวมหรือไม่
Sergiy Kolodyazhnyy

1
bootloader ขั้นแรกจะแตกต่างกันสำหรับแต่ละสถาปัตยกรรม (เฉพาะ i386 และ amd64 เท่านั้นที่มีไบออส "ไบออส" อยู่) ลองดูที่ NetBSD หากคุณสนใจสถาปัตยกรรมที่แปลกใหม่กว่าพีซีมาตรฐาน
Kusalananda

3
@usalananda ฉันไม่คิดว่า LILO เคยเป็น bootloader Linux คนเดียว เท่าที่ฉันรู้โหลดเดอร์ที่สร้างไว้ในอิมเมจเคอร์เนลมี LILO และการสนับสนุนเวลาสำหรับโหลดเดอร์ในตัวนั้นถูกหยุดลง
kasperd

2
LILO เป็น bootloader เริ่มต้นสำหรับจำนวนมาก distros ขึ้นจนถึงจุดเริ่มต้นของยุค 2000
phuclv

คำตอบ:


51

การกระจาย Linux ครั้งแรกที่ฉันใช้ใน 90s ( Slackware 3.0IIRC) ใช้LILOเป็น bootloader และ distros จำนวนมากที่ใช้มาLILOนานหลายปีแม้ว่าจะGRUBเป็น bootloader "เริ่มต้น"

ยิ่งไปกว่านั้นในช่วงปีแรก ๆ ของ Linux มันเป็นเรื่องปกติที่จะบูท Linux จากระบบปฏิบัติการอื่น (เช่น DOS หรือ Windows) แทนที่จะใช้ bootloader / การบูทคู่ ตัวอย่างเช่นมีloadlin

อย่าลืมSyslinuxซึ่งเป็นบูตโหลดเดอร์ที่ง่ายกว่ามักใช้กับ USB distros ที่สามารถบู๊ตได้เอง หรือIsolinux (จากโครงการเดียวกัน) ที่ใช้โดย distros "Live" จำนวนมาก

โปรดทราบว่าวันนี้GRUBสามารถใช้ในการโหลดระบบปฏิบัติการหลายระบบในขณะที่LILOมีข้อ จำกัด มากขึ้นและมีเป้าหมายเฉพาะที่ Linux (เช่น LInux LOader) โดยรองรับการบูทคู่กับ Windows
GRUBมีประโยชน์มากสำหรับการบูทคู่ / มัลติเนื่องจากตัวเลือกที่กำหนดค่าได้หลายอย่างความสามารถในการเขียนสคริปต์ ฯลฯ ...
หากคุณต้องการระบบปฏิบัติการเดียวบนเครื่องของคุณ "ใด ๆ " (เช่นใดก็ตาม bootloader เป็นค่าเริ่มต้นสำหรับการกระจาย Linux / BSD ของคุณ) เพียงพอ.


5
@MrShunz: ไม่มี UEFI มาก่อน บูตหน้าต่างเป็นเพียงเรื่องของการเพิ่มเข้ามาของเช่นยother=/dev/hda1กับtable=/dev/hdaการlilo.confและ LILO เพิ่งจะถ่ายโอนการควบคุมการบูตที่ hda1 รู้ตารางพาร์ทิชันจะเป็นที่ hda
ninjalj

2
คุณเคยได้รับ NTLDR เพื่อโหลด LILO; ดูjaeger.morpheus.net/linux/ntldr.php ; ฉันค้นพบสิ่งเดียวกันได้อย่างอิสระในวันนั้น
Roger Lipscombe

2
ข้อเสียของวิธีการ LILO คือมันจะแตกถ้าตำแหน่งของดิสก์ของไฟล์ที่จะโหลดการเปลี่ยนแปลง โดยเฉพาะสิ่งนี้หมายความว่า LILO จำเป็นต้องถูกเขียนใหม่ไปยังตำแหน่งบู๊ต (MBR หรือเซกเตอร์สำหรับบูตพาร์ติชัน) หลังจากการอัพเกรดเคอร์เนลทุกครั้ง
plugwash

1
@plugwash: GRUB มีปัญหาเดียวกันกับไฟล์ระยะที่สอง ข้อแตกต่างคือที่นี่ 1) "ขั้นตอนที่สอง" ของ LILO เป็นเคอร์เนลดังนั้นจึงเป็นการอัปเดตเคอร์เนลไม่ใช่การอัปเดต LILO ที่ทำลายสิ่งต่าง ๆ และ 2) การอัปเดตของ GRUB นั้นรวมถึงการเขียนตำแหน่งสเตจที่สองไปที่ MBR อีกครั้งโดยอัตโนมัติ (ในสเตจที่สองจากนั้นโหลดเคอร์เนล Linux ด้วยความรู้เต็มรูปแบบของระบบไฟล์ดังนั้นตำแหน่งเคอร์เนลจึงไม่สำคัญ) ;-)
DevSolar

1
IIRC grub จะจัดเก็บ "ระยะ 1.5" ที่เข้าใจระบบไฟล์ระหว่าง MBR และพาร์ติชั่นแรกและจะใช้วิธีจัดเก็บการอ้างอิงไปยังเซกเตอร์ระบบไฟล์เฉพาะหากไม่มีที่ว่างสำหรับสเตจ 1.5 (หรือถ้าติดตั้ง บูตเซกเตอร์พาร์ติชันแทน MBR)
plugwash

28

LILOเป็นมาตรฐานแบบพฤตินัยสำหรับการบูทลีนุกซ์บนพีซีก่อน Grub จากระยะแรก (MCC ซึ่งเป็นหนึ่งในลีนุกซ์รุ่นแรกที่ใช้งาน) bootloaders อื่น ๆ อีกมากมายถูกนำมาใช้พร้อมกัน Loadlinค่อนข้างธรรมดา มัน booted Linux จาก DOS และยังใช้ในการกำหนดค่าบางอย่างกับumsdosการโฮสต์สภาพแวดล้อม Linux ในระบบไฟล์ DOS ... การกำหนดค่าทั่วไปอื่นไม่เกี่ยวข้องกับ bootloader เลย: เคอร์เนลสามารถบูตตัวเองจากฟลอปปี้และส่วนใหญ่ ผู้ใช้ลีนุกซ์เก็บฟลูปปี้“ บูตและรูท” ที่รู้จักกันเป็นอย่างดีคู่หนึ่งมีเคอร์เนลและอีกหนึ่งระบบไฟล์รูทพื้นฐานสำหรับการช่วยเหลือ

มีหลายวิธีในการใช้ bootloaders ของระบบปฏิบัติการอื่นในการบูต Linux เช่นกัน ตัวอย่างเช่นตัวจัดการการบูตของ OS / 2 หรือ NTLDR ของ Windows NT

ระบบอื่นมี bootloaders เป็นของตัวเอง:

  • SILOบน SPARC (Sun เวิร์กสเตชันและอื่น ๆ );
  • PALOบน PA-RISC (เวิร์กสเตชันของ HP);
  • YaBoot และ Quik บน PowerPC;
  • aBoot และ MILO บน Alpha ...

แม้ในปัจจุบัน Grub ไม่ได้เป็นเพียง bootloader เดียวที่คุณจะเห็น ในขณะที่การบูทเคอร์เนลโดยตรงจากฟลอปปี้ไม่มีประโยชน์อีกต่อไป (ฉันไม่ได้ตรวจสอบว่ามันยังคงเป็นไปได้หรือไม่สมมติว่าคุณสามารถสร้างเคอร์เนลขนาดเล็กพอที่จะพอดีกับฟลอปปี้) มันสามารถบู๊ตได้โดยตรงจาก EFI ระบบปฏิบัติการขนาดเล็กของตัวเองออกแบบมาเพื่อโหลดระบบปฏิบัติการอื่น ๆ เช่น Grub) ในระบบหลายขนาดเล็ก (ระบบฝังตัวคอมพิวเตอร์เครื่องเดียวที่คณะกรรมการ ... ) คุณจะพบU-Boot (และยังมีเลเยอร์ EFI สำหรับ U-Boot )


สถาปัตยกรรม PowerPC ก็น่าสนใจเช่นกันเนื่องจากเมนบอร์ดบางรุ่นมี BIOS ทัวริงที่สมบูรณ์ - Openfirmware วิธีนี้อนุญาตให้ทำการบูทโดยตรงจาก BIOS โดยไม่ต้องใช้ bootloader หากคุณรู้วิธีกำหนดค่าไบออสของคุณ
slebetman

เฮ้อยากรู้อยากเห็น NTLDR สามารถโหลดเคอร์เนล linux โดยตรงได้ไหม ฉันได้ยินมาว่า NTLDR สามารถ chainloader grub4dos แล้วโหลดเคอร์เนล linux
炸鱼薯条德里克

@slebetman: แม่นยำยิ่งขึ้น OpenFirmware ได้รับการพัฒนาโดย Sun สำหรับ SPARC และนำมาใช้โดยพันธมิตร PowerPC (IBM, Apple, Motorola) สำหรับ PowerPC Reference Architecture และโดยเฉพาะ Apple สำหรับ PowerPC ที่ใช้ PowerPC ด้านที่ทรงพลังอย่างหนึ่งคือสามารถเก็บไดรเวอร์ง่ายๆไว้ในชิป ROM บนการ์ดเอ็กซ์แพนชันหรือในบางพื้นที่บู๊ตที่กำหนดของ HDD และเนื่องจากพวกมันถูกเขียนเป็น bytecode กับ ABI ที่ระบุพวกมันจะทำงานโดยไม่คำนึงว่าซีพียูตัวใด สถาปัตยกรรมและระบบปฏิบัติการที่คุณพยายามบูต
Jörg W Mittag

เช่นคุณอาจมีอะแดปเตอร์ RAID ซึ่งมีไดรเวอร์ OpenFirmware อยู่ในชิป ROM จากนั้นสภาพแวดล้อม OpenFirmware สามารถใช้ไดรเวอร์นั้นเพื่อเข้าถึง RAID ภายใน RAID อาจมีไดร์เวอร์อีกตัวสำหรับรูปแบบตารางพาร์ติชันซึ่งจะช่วยให้สภาพแวดล้อม OFW เพื่อหาพาร์ติชั่นที่จุดเริ่มต้นของแต่ละพาร์ติชั่นจะเป็นไดรเวอร์ OFW สำหรับระบบไฟล์ซึ่งจะทำให้ระบบ OFW สามารถค้นหาเคอร์เนลได้และเคอร์เนลจะมี bootloader เล็ก ๆ เขียนใน OFW bytecode ที่จุดเริ่มต้น
Jörg W Mittag

ด้วงสามารถทำงานในลักษณะที่คล้ายกัน แต่ความแตกต่างก็คือว่าไดรเวอร์ทั้งหมดจะต้องเขียนเฉพาะสำหรับด้วงในขณะที่ความสวยงามของ OFW คืออุปกรณ์จะนำไดรเวอร์มาด้วยซึ่งหมายความว่าแม้อุปกรณ์ที่ยังไม่ได้ มีอยู่เมื่อสภาพแวดล้อม OFW ถูกเขียนขึ้นก็จะทำงาน "มหัศจรรย์" UEFI ยังสามารถทำงานในลักษณะที่คล้ายกันได้ แต่ "รูปแบบ bytecode แบบพกพา" นั้นเป็นส่วนย่อยของ DOS ซึ่งเป็นสาเหตุหลักที่ทำให้ Itaniums ยังคงต้องการตัวจำลอง x86
Jörg W Mittag

12

จนถึงกลาง 2.6 เมล็ดเคอร์เนล x86 สามารถบูตได้โดยตรงหากคัดลอกไปยังฟลอปปี้ดิสก์ (ราวกับว่าเป็นอิมเมจของดิสก์)

อันที่จริงแล้วเป็นวิธีดั้งเดิมในการบูท Linux

หากคุณดูที่ส่วนหัวของเคอร์เนล x86 วันนี้คุณจะเห็นข้อความแสดงข้อผิดพลาดที่แจ้งว่าการบูทจากแผ่นฟลปปี้แบบที่ใช้ไม่ได้อีกต่อไป


2
ในทางตรงกันข้ามเคอร์เนล x86 สามารถบูตได้โดยตรงหากมอบให้กับเฟิร์มแวร์ UEFI ดังนั้นยังคงมี bootloader stub ติดอยู่หน้าเคอร์เนลเพียงประเภทที่แตกต่างกัน ...
grawity

@grawity: คุณแน่ใจหรือว่าคุณไม่ได้หมายถึง x64?
Joshua

1
@Joshua: ฉันไม่แน่ใจว่าคุณหมายถึงอะไร EFI ไม่ได้เรียกใช้งานส่วนนี้เป็นรหัส
grawity

2
@ โจชัวอะไร มันคือ“ DEC BP”,“ POP DX” ในโหมด 16 บิต (EBP / EDX ในโหมด 32 บิต) แต่มันก็ไม่ควรถูกประหารชีวิต ไบนารี EFI เป็นไฟล์ PE (ซึ่งแน่นอนว่าไม่สำคัญว่าจะเขียนไว้ในบูตเซกเตอร์ ... )
สตีเฟ่น Kitt

1
@ โจชัวโอเค แต่นั่นไม่ได้เป็นพฤติกรรม x86 ในใจของฉัน ;-) (ฉันคิดว่า "พฤติกรรม x86 ไม่ได้กำหนด" เป็น opcodes ที่ไม่ได้กำหนดพฤติกรรมไม่ใช่พฤติกรรมแพลตฟอร์มที่ไม่ได้กำหนด)
Stephen Kitt

5

ฉันเริ่มต้นกับ Linux ในช่วงปลายยุค 90 และตามที่กล่าวไว้liloเป็นค่าเริ่มต้น หากคุณต้องการบูทคู่กับระบบ DOS คุณสามารถบูตโดยไม่ต้องโหลดสิ่งใด ๆ ลงใน HIMEM หรือโหลดไดรเวอร์ซีดี ฯลฯ และใช้งานloadlinได้ สำหรับ Win95 dual booting คุณสามารถทำให้ไดรฟ์บูตได้เป็นครั้งแรกด้วย DOS จากนั้นติดตั้ง '95 และ '95's boot loader จะช่วยให้คุณสามารถบูตเคอร์เนล DOS ได้จากนั้นคุณสามารถใช้loadlinได้

สำหรับการบูทคู่กับ NT4, เคล็ดลับคือการเขียน LILO ไปที่ /พาร์ติชันจากนั้นตัดส่วน 512 ไบต์แรกที่ใช้dd( dd if=/dev/sda2 of=/path/to/file bs=512 count=1) และวางไฟล์ผลลัพธ์ที่ntldrสามารถมองเห็นได้และคุณสามารถใช้มันได้จากตัวโหลดบูตของ WinNT ปัญหาในการทำเช่นนั้นคือเมื่อคุณอัพเกรดเคอร์เนลคุณต้องจำไว้ว่าให้ทำซ้ำทุกขั้นตอนก่อนที่จะทำการรีบูตมิฉะนั้นคุณจะมีปัญหาในการกลับเข้าสู่ระบบ Linux กระบวนการเดียวกันทำงานกับ Win2k

ด้วย LILO ทุกครั้งที่เคอร์เนลได้รับการปรับปรุงคุณต้องจำไว้ว่าต้องอัพเดต LILO

กับ loadlinใดก็ตามที่เคอร์เนลอัพเดทคุณต้องจำไว้ว่าให้คัดลอกเคอร์เนลออกไปยังพาร์ติชั่น DOS

อีกตัวเลือกหนึ่งที่ถูกบอกเป็นนัยในคำตอบอื่น ๆ คือการเขียนเคอร์เนลโดยตรงกับฟลอปปี้โดยใช้ dd if=/path/to/vmlinuz of=/dev/fd0แต่อุปกรณ์รูทต้องตั้งค่าอย่างถูกต้องในเคอร์เนลไม่ว่าจะเป็นเวลาคอมไพล์หรือโดยการใช้rdevยูทิลิตี้

เมื่อGRUBมาถึงรอบ ๆ มีความสุขมากเพราะคุณไม่ต้องจำที่จะอัปเดต LILO อีกต่อไปหรืออัปเดต LILO แล้วถอดแถบข้อมูลการบูตออกและอื่น ๆ อีกมากไม่ต้องออกจากระบบ Linux อีกต่อไปเพราะคุณลืมอัปเดตบูตโหลดเดอร์ ข้อมูล...


ฟังดูเหมือนว่ามันเป็นงานจำนวนมากและมีโอกาสสูงที่จะถูกทิ้งไว้กับเครื่องที่ไม่ได้บูตเครื่อง แต่ตอนนี้เป็นประสบการณ์ทางการศึกษาอย่างแน่นอน
Sergiy Kolodyazhnyy

@SergiyKolodyazhnyy ใช่แล้วไม่มีข้อมูลมากมายบนอินเทอร์เน็ตหรือเครื่องมือค้นหาที่ยอดเยี่ยมที่จะค้นหาถ้าอยู่ที่นั่น มีฟล็อปปี้ดิสทริบิวเตอร์ดิสก์เดี่ยวหลายตัวที่มีลีนุกซ์เพียงพอสำหรับบู๊ตและแก้ไข LILO, ฯลฯ . เรามาไกลแล้ว!
ivanivan

การรันmake installจะทำงาน/sbin/liloดังนั้นคุณไม่จำเป็นต้องอัปเดตสิ่งใดด้วยมือ (และอาจเป็นกรณีนี้หากคุณliloติดตั้ง) นั่นอาจเป็นเรื่องของความเห็น แต่ฉันจำไม่ได้ว่าดีใจมากgrubที่ตรงกันข้าม และlilo(อย่างน้อยรุ่น 1999) สามารถบูท windows dual ได้ดีไม่จำเป็นต้องloadlinใช้
mosvy

0

และก่อนที่ LILO และ GRUB คุณจะต้องเรียกใช้จากบรรทัดคำสั่งพร้อมกับยูทิลิตี้ bootloader แบบกำหนดเอง

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

นี่คือวิดีโอของคนที่ใช้ amiboot จากบรรทัดคำสั่งที่จะเปิดตัวบนลินุกซ์เอมิ 600 สคริปต์ StartInstall ของเขากำลังเรียกใช้งาน amiboot คุณสามารถดูการกำหนดค่าหน่วยความจำ amiboot คำนวณที่อยู่โหลดที่ต้องการและส่งพารามิเตอร์ไปยังเคอร์เนลที่ประมาณ 0:55

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