Bagaimana Linux / xBSD mem-boot sebelum GRUB?


23

Menurut Wikipedia , GRUB dirilis pada tahun 1995. Pada saat itu Linux dan xBSD ada selama beberapa tahun. Saya tahu versi awal Unix terkait dengan perangkat keras pada tahun 70an dan 80an, tetapi Linux dan xBSD bebas untuk mendistribusikan dan menginstalnya. Yang menimbulkan pertanyaan bagaimana Anda bisa mem-boot Linux saat itu? Apakah distribusi dikirimkan dengan implementasi bootloader sendiri?


32
Umm ... Anda tidak ada ketika LILO adalah satu-satunya bootloader Linux? Dan saya tidak pernah menggunakan LILO atau Grub pada sistem BSD saya. Anda tertarik dengan yang mana? Lihat misalnya biosboot(8).
Kusalananda

8
@ Kusalananda Sayangnya, saya lebih peduli tentang mainan dan menggambar Ninja Turtles daripada pipa, eksekutif, dan kerang saat itu :) Saya tertarik dengan sejarah umum, bukan bootloader tertentu. Dari halaman yang Anda tautkan, saya melihat OpenBSD memiliki biosbootdua arsitektur, i386 dan amd64. Apakah itu berarti OpenBSD secara khusus harus menargetkan arsitektur alih-alih memiliki satu, alat pemersatu?
Sergiy Kolodyazhnyy

1
Bootloader tahap pertama akan berbeda untuk setiap arsitektur (hanya i386 dan amd64 yang memiliki BIOS "bios"). Lihatlah NetBSD jika Anda tertarik pada arsitektur yang lebih eksotis daripada PC standar rawa.
Kusalananda

3
@ Kusalananda Saya tidak berpikir LILO adalah satu-satunya bootloader Linux. Sejauh yang saya tahu, loader yang dibangun ke dalam kernel telah mendahului LILO, dan pada saat dukungan untuk loader bawaan dihentikan, setidaknya ada beberapa bootloader lain di sekitar.
kasperd

2
LILO adalah bootloader default untuk banyak distro hingga awal 2000
phuclv

Jawaban:


51

Distribusi Linux pertama yang saya gunakan pada tahun 90an ( Slackware 3.0IIRC) menggunakan LILO sebagai bootloader. Dan banyak distro yang digunakan LILOselama bertahun-tahun bahkan ketika GRUBmenjadi bootloader "default".

Terlebih lagi, pada tahun-tahun awal Linux adalah hal biasa untuk mem-boot Linux dari OS lain (yaitu DOS atau Windows) daripada mengandalkan bootloader / dual boot. Misalnya ada loadlin .

Jangan lupa Syslinux , yang merupakan boot loader sederhana yang sering digunakan untuk instalasi / pemulihan distro USB boot sendiri. Atau Isolinux (dari proyek yang sama) yang digunakan oleh banyak distro "Live".

Perlu diingat bahwa hari ini GRUBdapat digunakan untuk memuat banyak sistem operasi, sementara LILOitu lebih terbatas, dan secara khusus ditargetkan untuk Linux (yaitu LInux LOader), dengan beberapa dukungan untuk boot ganda ke Windows.
GRUBsangat berguna untuk dual / multi-boot karena banyak opsi yang dapat dikonfigurasi, kemampuan scripting, dll ...
Jika Anda hanya ingin satu OS pada mesin Anda "apa saja" (yaitu bootloader mana saja yang merupakan default untuk distribusi Linux / BSD Anda) harus cukup.


5
@ MrShunz: tidak ada UEFI saat itu. Boot windows hanya masalah menambahkan entri misalnya other=/dev/hda1dengan table=/dev/hdake lilo.conf, dan lilo hanya akan mentransfer kontrol ke sektor boot di hda1, mengetahui tabel partisi akan di hda.
ninjalj

2
Anda dulu bisa mendapatkan NTLDR untuk memuat LILO; lihat jaeger.morpheus.net/linux/ntldr.php ; Saya menemukan yang sama secara mandiri, kembali pada hari itu.
Roger Lipscombe

2
Kelemahan dari pendekatan LILO adalah rusak jika lokasi disk file memuat perubahan. Secara khusus ini berarti bahwa LILO harus ditulis ulang ke lokasi boot (baik MBR atau sektor boot partisi) setelah setiap peningkatan kernel.
plugwash

1
@plugwash: GRUB memiliki masalah yang sama dengan file tahap kedua. Perbedaannya di sini adalah 1) "tahap kedua" dari LILO adalah kernel, jadi itu adalah pembaruan kernel, bukan pembaruan LILO yang memecahkan banyak hal; dan 2) pembaruan GRUB mencakup penulisan ulang otomatis lokasi tahap kedua ke MBR (dengan tahap kedua kemudian memuat kernel Linux, dengan pengetahuan penuh tentang sistem file sehingga lokasi kernel tidak menjadi masalah). ;-)
DevSolar

1
Grub IIRC jika memungkinkan akan menyimpan "tahap 1.5" yang memahami sistem file antara MBR dan partisi pertama dan hanya akan menggunakan untuk menyimpan referensi ke sektor sistem file tertentu jika tidak ada ruang untuk tahap 1.5 (atau jika itu diinstal ke sektor boot partisi daripada MBR)
plugwash

28

LILO adalah standar de-facto untuk mem-boot Linux pada PC sebelum Grub, dari tahap yang sangat awal (MCC, salah satu distribusi Linux pertama, menggunakannya). Berbagai bootloader lain digunakan secara serentak. Loadlin sangat umum; itu mem-boot Linux dari DOS, dan bahkan digunakan dalam beberapa konfigurasi umsdosuntuk meng-host lingkungan Linux dalam sistem file DOS ... Konfigurasi umum lainnya sama sekali tidak melibatkan bootloader: kernel bisa mem-boot sendiri dari floppy, dan kebanyakan Pengguna Linux menyimpan sepasang disket "boot dan root" yang dikenal baik, yang satu berisi kernel, yang lain merupakan sistem file root dasar untuk tujuan penyelamatan.

Ada beberapa cara menggunakan bootloader sistem operasi lain untuk mem-boot Linux juga; misalnya, manajer boot OS / 2, atau NTLDR Windows NT.

Sistem lain memiliki bootloader sendiri:

  • SILO on SPARC (Sun workstation dan lainnya);
  • PALO di PA-RISC (HP workstation);
  • YaBoot dan Quik di PowerPC;
  • aBoot dan MILO di Alpha ...

Bahkan saat ini Grub bukan satu-satunya bootloader yang akan Anda lihat. Walaupun memiliki boot kernel langsung dari floppy tidak lagi sangat berguna (saya belum memeriksa apakah itu masih mungkin, dengan asumsi Anda dapat membangun kernel yang cukup kecil untuk muat pada floppy), ia dapat boot langsung dari EFI (yang secara efektif merupakan sistem operasi kecil sendiri yang dirancang untuk memuat sistem operasi lain, seperti Grub). Pada banyak sistem yang lebih kecil (sistem tertanam, komputer papan tunggal ...) Anda akan menemukan U-Boot . (Dan ada juga lapisan EFI untuk U-Boot .)


Arsitektur PowerPC juga menarik karena beberapa motherboard memiliki Turing-complete BIOS - Openfirmware (pada dasarnya bahasa pemrograman Forth dengan beberapa fungsi yang sudah diinstal). Ini memungkinkan boot langsung dari BIOS tanpa bootloader jika Anda tahu cara mengkonfigurasi BIOS Anda
slebetman

Hei, hanya ingin tahu, NTLDR dapat memuat kernel linux secara langsung? Saya mendengar bahwa NTLDR dapat chainloader grub4dos dan kemudian memuat kernel linux.
炸鱼 薯条 德里克

@slebetman: Lebih tepatnya, OpenFirmware dikembangkan oleh Sun untuk SPARC dan kemudian diadopsi oleh aliansi PowerPC (IBM, Apple, Motorola) untuk Arsitektur Referensi PowerPC, dan secara khusus oleh Apple untuk Macintoshs yang berbasis PowerPC. Salah satu aspek yang kuat adalah bahwa driver sederhana dapat disimpan di dalam chip ROM pada kartu ekspansi, atau di beberapa area boot yang ditunjuk dari HDD, dan karena mereka ditulis dalam bytecode terhadap ABI yang ditentukan, mereka akan bekerja terlepas dari CPU mana arsitektur dan OS yang Anda coba boot.
Jörg W Mittag

Misalnya Anda dapat memiliki adaptor RAID yang memiliki driver OpenFirmware di dalam chip ROM, maka lingkungan OpenFirmware dapat menggunakan driver itu untuk mengakses RAID, di dalam RAID, mungkin ada driver lain untuk format tabel partisi, yang akan memungkinkan lingkungan OFW untuk menemukan partisi, pada awal setiap partisi akan menjadi driver OFW untuk sistem file, yang akan memungkinkan sistem OFW untuk menemukan kernel, dan kernel akan memiliki bootloader kecil yang ditulis dalam bytecode OFW di awal.
Jörg W Mittag

GRUB dapat beroperasi dengan cara yang sama, tetapi perbedaannya adalah bahwa semua driver harus ditulis khusus untuk GRUB, sedangkan keindahan OFW adalah bahwa perangkat akan membawa drivernya, yang berarti bahwa bahkan perangkat yang belum ada ketika lingkungan OFW ditulis hanya akan "ajaib" bekerja. UEFI juga dapat beroperasi dengan cara yang serupa, tetapi "format bytecode portabel" pada dasarnya adalah subset dari DOS, yang merupakan alasan utama mengapa Itaniums masih membutuhkan emulator x86.
Jörg W Mittag

12

Hingga pertengahan 2.6 kernel, kernel x86 langsung dapat di-boot jika disalin ke floppy disk (seolah-olah itu adalah disk image).

Ini sebenarnya adalah cara asli untuk mem-boot Linux.

Jika Anda melihat header kernel x86 hari ini Anda melihat pesan kesalahan yang mengatakan boot dari disket seperti itu tidak berfungsi lagi.


2
Di sisi lain, kernel x86 sekarang langsung dapat di-boot jika diberikan ke firmware UEFI. Jadi masih ada bootloader rintisan yang ditempel di depan kernel, hanya tipe yang berbeda ...
grawity

@grawity: Apakah Anda yakin tidak bermaksud x64?
Yosua

1
@ Yosua: Saya tidak yakin apa yang Anda maksud dengan itu. EFI sebenarnya tidak menjalankan bagian ini sebagai kode.
grawity

2
@ Yosua apa? Ini adalah "DEC BP", "POP DX" dalam mode 16-bit (EBP / EDX dalam mode 32-bit). Tapi toh itu seharusnya tidak dieksekusi; Binari EFI adalah file PE (yang tentu saja tidak masalah jika ditulis ke sektor boot ...).
Stephen Kitt

1
@ Joshua OK, tapi itu bukan perilaku x86 yang tidak jelas dalam pikiranku ;-). (Saya menganggap "perilaku x86 tidak terdefinisi" sebagai opcode yang perilakunya tidak didefinisikan, bukan perilaku platform yang tidak ditentukan.)
Stephen Kitt

5

Saya mulai dengan Linux di akhir 90-an dan seperti yang disebutkan liloadalah default. Jika Anda ingin boot ganda dengan sistem DOS, Anda bisa melakukan boot telanjang tanpa memuat barang ke HIMEM atau memuat driver CD, dll. Dan menggunakannya loadlin. Untuk Win95 dual booting, Anda dapat membuat drive tersebut dapat di-boot terlebih dahulu dengan DOS, kemudian instal '95, dan 'boot loader 95 akan membuat Anda tetap mem-boot kernel DOS, dan kemudian Anda bisa menggunakannya loadlin.

Untuk dual boot dengan NT4, triknya adalah menulis LILO ke /partisi, kemudian lepaskan 512 byte pertama menggunakan dd( dd if=/dev/sda2 of=/path/to/file bs=512 count=1) dan letakkan file yang dihasilkan di mana ntldrbisa melihatnya dan Anda bisa menggunakannya dari boot loader WinNT. Masalah dengan melakukan itu adalah ketika Anda memutakhirkan kernel Anda, Anda harus ingat untuk mengulangi semua langkah sebelum me-reboot, jika tidak, Anda akan mengalami masalah untuk kembali ke sistem Linux. Proses yang sama bekerja dengan Win2k.

Dengan LILO, setiap kali kernel diperbarui, Anda harus ingat untuk memperbarui LILO.

Dengan loadlinsetiap saat kernel diperbarui, Anda harus ingat untuk menyalin kernel ke partisi DOS.

Satu opsi lain yang diisyaratkan dalam jawaban lain adalah menulis kernel langsung ke disket menggunakan dd if=/path/to/vmlinuz of=/dev/fd0TETAPI perangkat root harus diatur dengan benar di kernel, baik pada waktu kompilasi atau dengan menggunakan rdevutilitas.

Ketika GRUBmuncul, ada banyak kegembiraan karena Anda tidak lagi harus ingat untuk memperbarui LILO, atau memperbarui LILO dan menghapus ulang info boot, dll. Tidak lagi tertinggal dari sistem Linux Anda karena Anda lupa memperbarui boot loader info ...


Kedengarannya seperti itu banyak pekerjaan dan peluang besar untuk dibiarkan dengan mesin non-boot saat itu, tapi jelas pengalaman pendidikan
Sergiy Kolodyazhnyy

@SergiyKolodyazhnyy ya, dan tidak ada banyak info di internet, atau mesin pencari hebat untuk menemukannya jika ada di sana. Ada beberapa distro penyelamat floppy disk tunggal yang hanya memiliki cukup Linux untuk boot dan memperbaiki LILO, dll. Kami telah datang jauh!
ivanivan

Menjalankan make installakan berjalan /sbin/lilo, jadi Anda tidak benar-benar harus memperbarui apa pun dengan tangan (dan itu mungkin masih terjadi, jika Anda telah lilomenginstal). Itu mungkin masalah pendapat, tapi saya tidak ingat banyak bersukacita grub, sebaliknya. Dan lilo(setidaknya versi 1999) bisa dual boot windows dengan baik, tidak perlu loadlin.
Mosvy

0

Dan sebelum LILO dan GRUB, Anda harus meluncurkannya dari baris perintah dengan semacam utilitas bootloader khusus.

Sebagai contoh, Amiga menyediakan Linux. Anda harus menggunakan utilitas baris perintah yang disebut amiboot untuk memuat kernel ELF ke dalam memori dan melompat ke sana.

Ini adalah video seseorang menggunakan amiboot dari baris perintah untuk meluncurkan linux pada Amiga 600 . Skrip StartInstall miliknya memanggil amiboot yang dapat dieksekusi. Anda dapat menonton amiboot configure memory, mencari tahu alamat pemuatan yang diinginkan, dan meneruskan parameter ke kernel sekitar 0:55.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.