Come è stato avviato Linux / xBSD prima di GRUB?


23

Secondo Wikipedia , GRUB è stato rilasciato nel 1995. A quel punto Linux e xBSD esistevano da diversi anni. So che le prime versioni di Unix erano legate all'hardware negli anni '70 e '80, ma Linux e xBSD erano liberi di distribuire e installare. Il che fa sorgere la domanda come avresti avviato Linux allora? Le distribuzioni venivano spedite con le proprie implementazioni di bootloader?


32
Umm ... Non eri in giro quando LILO era l'unico bootloader Linux? E non ho mai usato LILO né Grub sui miei sistemi BSD. A quale sei interessato? Vedi ad es biosboot(8).
Kusalananda

8
@Kusalananda Sfortunatamente, mi interessava di più i giocattoli e il disegno di Tartarughe Ninja piuttosto che pipe, esecuzioni e conchiglie allora :) Sono interessato alla storia generale, non al bootloader specifico. Dalla pagina che hai collegato vedo che OpenBSD ha biosbootper due architetture, i386 e amd64. Ciò significa che OpenBSD ha dovuto mirare specificamente alle architetture invece di avere uno strumento unificante?
Sergiy Kolodyazhnyy

1
Il bootloader del primo stadio sarebbe diverso per ogni architettura (solo i386 e amd64 hanno comunque un BIOS "bios"). Dai un'occhiata a NetBSD se sei interessato a architetture più esotiche rispetto al PC standard.
Kusalananda

3
@Kusalananda Non credo che LILO sia mai stato l'unico bootloader Linux. Per quanto ne so, il caricatore incorporato nelle immagini del kernel è precedente a LILO, e quando il supporto per il caricatore incorporato è stato interrotto c'erano almeno una manciata di altri bootloader in giro.
Kasperd

2
LILO era il bootloader predefinito per molte distro fino all'inizio degli anni 2000
phuclv

Risposte:


51

La prima distribuzione Linux che ho usato negli anni '90 ( Slackware 3.0IIRC) usava LILO come bootloader. E molte distribuzioni utilizzate LILOda anni anche quando GRUBstava diventando il bootloader "predefinito".

Inoltre, nei primi anni di Linux era comune avviare Linux da un altro sistema operativo (cioè DOS o Windows) invece di fare affidamento su un bootloader / dual boot. Ad esempio c'era loadlin .

Non dimenticare Syslinux , che è un caricatore di avvio più semplice, spesso utilizzato per distribuzioni di avvio / ripristino con avvio automatico USB. O Isolinux (dallo stesso progetto) utilizzato da molte distro "Live".

Tieni presente che oggi GRUBpuò essere utilizzato per caricare molti sistemi operativi, mentre LILOera più limitato e specificamente destinato a Linux (ad esempio LInux LOader), con un po 'di supporto per il doppio avvio su Windows.
GRUBè molto utile per l'avvio doppio / multiplo a causa delle sue numerose opzioni configurabili, funzionalità di scripting, ecc ...
Se vuoi solo un singolo sistema operativo sul tuo computer "qualsiasi" (vale a dire qualsiasi bootloader è il valore predefinito per la tua distribuzione Linux / BSD) essere abbastanza.


5
@MrShunz: all'epoca non esisteva UEFI. L'avvio di Windows consisteva solo nell'aggiungere una voce, ad esempio, other=/dev/hda1con table=/dev/hdato lilo.conf, e lilo avrebbe semplicemente trasferito il controllo al settore di avvio su hda1, sapendo che la tabella delle partizioni sarebbe su hda.
ninjalj

2
Un tempo eri in grado di ottenere NTLDR per caricare LILO; vedi jaeger.morpheus.net/linux/ntldr.php ; Ho scoperto lo stesso in modo indipendente, nel corso della giornata.
Roger Lipscombe, il

2
L'aspetto negativo dell'approccio LILO è che si rompe se cambia la posizione del disco dei file da caricare. In particolare, ciò significa che LILO doveva essere riscritto nella posizione di avvio (MBR o settore di avvio della partizione) dopo ogni aggiornamento del kernel.
lavare il

1
@plugwash: GRUB ha lo stesso problema con il suo secondo file di fase. La differenza qui è che 1) il "secondo stadio" di LILO era il kernel, quindi erano gli aggiornamenti del kernel, non gli aggiornamenti di LILO a rompere le cose; e 2) Gli aggiornamenti di GRUB includono una riscrittura automatica della posizione della seconda fase su MBR (con la seconda fase quindi caricamento del kernel Linux, con piena conoscenza del file system, quindi la posizione del kernel non ha importanza). ;-)
DevSolar

1
IIRC grub memorizzerà, se possibile, uno "stage 1.5" che comprende il file system tra l'MBR e la prima partizione e ricorrere alla memorizzazione di un riferimento a settori specifici del filesystem se non c'è spazio per lo stage 1.5 (o se si sta installando su un settore di avvio della partizione anziché l'MBR)
plugwash

28

LILO era lo standard di fatto per l'avvio di Linux su PC prima di Grub, sin dalle prime fasi (lo usava MCC, una delle prime distribuzioni di Linux). Vari altri bootloader furono usati contemporaneamente. Loadlin era abbastanza comune; ha avviato Linux da DOS, ed è stato persino usato in alcune configurazioni umsdosper ospitare un ambiente Linux in un file system DOS ... Un'altra configurazione comune non ha coinvolto affatto un bootloader: il kernel potrebbe avviarsi da un floppy, e la maggior parte Gli utenti Linux mantenevano una coppia ben nota di floppy “boot and root”, uno contenente il kernel, l'altro un file system root di base a fini di salvataggio.

Esistevano diversi modi per utilizzare i bootloader di altri sistemi operativi anche per avviare Linux; ad esempio, il boot manager di OS / 2 o NTLDR di Windows NT.

Altri sistemi avevano i loro bootloader:

  • SILO su SPARC (workstation Sun e altri);
  • PALO su PA-RISC (workstation HP);
  • YaBoot e Quik su PowerPC;
  • aBoot e MILO su Alpha ...

Anche oggi Grub non è l'unico bootloader che vedrai. Sebbene l'avvio del kernel direttamente dal floppy non sia più molto utile (non ho verificato se sia ancora possibile, supponendo che sia possibile creare un kernel abbastanza piccolo da adattarsi a un floppy), può avviarsi direttamente da EFI (che è effettivamente il suo possedere un piccolo sistema operativo progettato per caricare altri sistemi operativi, come Grub). Su molti sistemi più piccoli (sistemi integrati, computer a scheda singola ...) troverai U-Boot . (E c'è anche un livello EFI per U-Boot .)


L'architettura PowerPC è anche interessante perché alcune schede madri avevano un BIOS completo Turing - Openfirmware (sostanzialmente il linguaggio di programmazione Forth con alcune funzioni preinstallate). Ciò ha permesso l'avvio diretto dal BIOS senza bootloader se sai come configurare il BIOS
slebetman

Ehi, solo curioso, NTLDR può caricare direttamente il kernel Linux? Ho sentito che NTLDR può chainloader grub4dos e quindi caricare il kernel Linux.
炸鱼薯条德里克

@slebetman: Più precisamente, OpenFirmware è stato sviluppato da Sun per SPARC e quindi adottato dall'alleanza PowerPC (IBM, Apple, Motorola) per l'architettura di riferimento PowerPC, e in particolare da Apple per Macintosh basati su PowerPC. Uno degli aspetti potenti era che i semplici driver potevano essere archiviati all'interno dei chip ROM sulle schede di espansione, o in un'area di avvio designata di un HDD, e poiché erano scritti in bytecode contro un ABI specificato noto, avrebbero funzionato indipendentemente da quale CPU architettura e SO che stavi cercando di avviare.
Jörg W Mittag

Ad esempio potresti avere un adattatore RAID che ha il suo driver OpenFirmware all'interno di un chip ROM, quindi l'ambiente OpenFirmware potrebbe usare quel driver per accedere al RAID, all'interno del RAID, potrebbe esserci un altro driver per il formato della tabella delle partizioni, che consentirebbe l'ambiente OFW per trovare le partizioni, all'inizio di ogni partizione sarebbe un driver OFW per il filesystem, che consentirebbe al sistema OFW di trovare il kernel, e il kernel avrebbe un piccolo bootloader scritto nel bytecode OFW all'inizio.
Jörg W Mittag

GRUB può funzionare in modo simile, ma la differenza è che tutti quei driver devono essere scritti appositamente per GRUB, mentre la bellezza di OFW era che il dispositivo avrebbe portato con sé i suoi driver, il che significa che anche i dispositivi che non lo avevano ancora fatto esistere quando l'ambiente OFW è stato scritto funzionerebbe semplicemente "magicamente". Anche UEFI può funzionare in modo simile, ma il suo "formato bytecode portatile" è essenzialmente un sottoinsieme di DOS, che è la ragione principale per cui Itaniums ha ancora bisogno di un emulatore x86.
Jörg W Mittag

12

Fino alla metà dei kernel 2.6, il kernel x86 era direttamente avviabile se copiato su un disco floppy (come se fosse un'immagine del disco).

Questo era, in effetti, il modo originale di avviare Linux.

Se guardi l'intestazione di un kernel x86 oggi vedi un messaggio di errore che dice che l'avvio da floppy in quel modo non funziona più.


2
D'altra parte, il kernel x86 è ora direttamente avviabile se dato a un firmware UEFI. Quindi c'è ancora uno stload bootloader bloccato davanti al kernel, solo un tipo diverso ...
grawity

@grawity: sei sicuro di non voler dire x64?
Joshua

1
@Joshua: Non sono sicuro di cosa tu voglia dire. EFI in realtà non esegue questa parte come codice.
Grawity

2
@ Giosuè cosa? È "DEC BP", "POP DX" in modalità 16 bit (EBP / EDX in modalità 32 bit). Ma non dovrebbe essere eseguito comunque; I binari EFI sono file PE (che ovviamente non importa se è scritto in un settore di avvio ...).
Stephen Kitt,

1
@Joshua OK, ma non è un comportamento x86 indefinito nella mia mente ;-). (Penso al "comportamento x86 non definito" come a codici operativi il cui comportamento non è definito, non un comportamento piattaforma non definito.)
Stephen Kitt

5

Ho iniziato con Linux alla fine degli anni '90 e, come detto, liloera l'impostazione predefinita. Se si desidera eseguire il dual boot con un sistema DOS, è possibile eseguire un avvio nudo senza caricare elementi in HIMEM o caricare driver CD, ecc. E utilizzarli loadlin. Per il doppio avvio di Win95, è possibile rendere avviabile prima l'unità con DOS, quindi installare '95 e il caricatore di avvio '95 ti consentirebbe di avviare ancora il kernel DOS, e quindi è possibile utilizzare loadlin.

Per il dual boot con NT4, il trucco era scrivere LILO su / partizione, quindi rimuovere i primi 512 byte usando dd( dd if=/dev/sda2 of=/path/to/file bs=512 count=1) e posizionare il file risultante dove ntldrpoterlo vedere e si poteva usare dal boot loader di WinNT. Il problema è stato quando hai aggiornato il tuo kernel, dovevi ricordare di ripetere tutti i passaggi prima di riavviare, altrimenti avresti avuto problemi a tornare nel sistema Linux. Lo stesso processo ha funzionato con Win2k.

Con LILO, ogni volta che il kernel veniva aggiornato, dovevi ricordarti di aggiornare LILO.

Con loadlin ogni volta che il kernel aggiornato, si doveva ricordarsi di copiare il kernel fuori alla partizione DOS.

Un'altra opzione accennata in altre risposte era scrivere il kernel direttamente su un floppy usando dd if=/path/to/vmlinuz of=/dev/fd0MA MA il dispositivo root doveva essere impostato correttamente nel kernel, al momento della compilazione o usando l' rdevutilità.

Quando è GRUBarrivato, c'era molto rallegramento perché non dovevi più ricordare di aggiornare LILO, o aggiornare LILO e rimuovere nuovamente le informazioni di avvio, ecc. Non essere più escluso dal tuo sistema Linux perché hai dimenticato di aggiornare il caricatore di avvio Informazioni...


Sembra che ci sia stato un sacco di lavoro e un'alta possibilità di essere lasciato con una macchina senza avvio in quel momento, ma sicuramente un'esperienza educativa
Sergiy Kolodyazhnyy

@SergiyKolodyazhnyy sì, e non c'erano così tante informazioni su Internet, né i grandi motori di ricerca per trovarle se fosse lì. C'erano diverse distro di salvataggio su floppy disk che avevano appena abbastanza Linux per avviare e riparare LILO, ecc. Abbiamo fatto molta strada!
Ivanivan

L'esecuzione make installsarebbe in esecuzione /sbin/lilo, quindi non è necessario aggiornare nulla manualmente (e potrebbe essere comunque il caso, se è stato liloinstallato). Potrebbe essere una questione di opinione, ma non ricordo molto di gioia grub, al contrario. E lilo(almeno la sua versione del 1999) potrebbe riavviare due finestre bene, non è necessario loadlin.
mosvy

0

E prima di LILO e GRUB, dovevi avviarlo dalla riga di comando con una sorta di utility di bootloader personalizzata.

Ad esempio, l'Amiga aveva Linux disponibile. È stato necessario utilizzare un'utilità della riga di comando chiamata amiboot per caricare in memoria l'ELF del kernel e passare ad esso.

Ecco un video di qualcuno che usa amiboot dalla riga di comando per avviare Linux su un Amiga 600 . Il suo script StartInstall sta chiamando l'eseguibile amiboot. Puoi guardare amiboot configurare la memoria, capire l'indirizzo di caricamento desiderato e passare i parametri al kernel a circa 0:55.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.