Linux / xBSDはGRUBの前にどのように起動しましたか?


23

ウィキペディアによると、GRUBは1995年にリリースされました。その時点までに、LinuxとxBSDは数年間存在していました。初期のUnixバージョンは70年代と80年代にハードウェアに結び付けられていましたが、LinuxとxBSDは自由に配布およびインストールできました。当時、Linuxをどのようにブートするのでしょうか?ディストリビューションは、ブートローダーの独自の実装で出荷されましたか?


32
うーん... LILOが唯一のLinuxブートローダーだった頃はなかったのですか?また、BSDシステムでLILOもGrub 使用したことはありません。どちらに興味がありますか?例を参照してくださいbiosboot(8)
クサラナンダ

8
@Kusalananda残念ながら、当時のパイプ、エグゼクティブ、シェルよりもおもちゃやニンジャタートルの方が好きでした:)特定のブートローダーではなく、一般的な歴史に興味があります。リンクしたページから、OpenBSDにはbiosbooti386とamd64の2つのアーキテクチャがあります。つまり、OpenBSDは、統合ツールを1つではなく、アーキテクチャをターゲットにする必要があったということですか?
セルギーコロディアズニー

1
最初の段階のブートローダーは、アーキテクチャごとに異なります(とにかく「BIOS」BIOSを持つのはi386とamd64のみです)。沼地の標準PCよりもエキゾチックなアーキテクチャに興味があるなら、NetBSDを見てください。
クサラナンダ

3
@Kusalananda LILOが唯一のLinuxブートローダーだとは思いません。私が知る限り、カーネルイメージに組み込まれたローダーはLILOよりも前であり、組み込みローダーのサポートが終了するまでに、少なくとも少数の他のブートローダーが存在していました。
カスペルド

2
LILOは2000年代の初めまで多くのディストリビューションのデフォルトのブートローダーでした
phuclv

回答:


51

私が90年代に使用した最初のLinuxディストリビューション(Slackware 3.0IIRC)は、LILOをブートローダーとして使用していました。そして、「デフォルト」のブートローダーになってLILOも、多くのディストリビューションが長年使用されていましたGRUB

さらに、Linuxの初期には、ブートローダー/デュアルブートに頼るのではなく、別のOS(DOSまたはWindows)からLinuxをブートすることが一般的でした。たとえば、loadlinがありました。

Syslinuxを忘れないでください。Syslinuxは、USBセルフブート可能なインストール/リカバリディストリビューションでよく使用される、よりシンプルなブートローダーです。または、同じプロジェクトのIsolinuxは、多くの「ライブ」ディストリビューションで使用されています。

今日GRUBは多くのオペレーティングシステムをロードするために使用できますLILOが、より限定的で、特にLinux(つまり、LInux LOader)を対象としており、Windowsへのデュアルブートをサポートしています。
GRUB多数の構成可能なオプション、スクリプト機能などがあるため、デュアル/マルチブートに非常に便利です
。マシンに単一のOSが必要な場合は、 "any"(つまり、Linux / BSDディストリビューションのデフォルトであるブートローダー)足ります。


5
@MrShunz:当時UEFIはありませんでした。ブートの窓は、単に例のエントリの追加の問題だったother=/dev/hda1table=/dev/hdaするとlilo.conf、とLILOはちょうどHDAになり、パーティションテーブルを知って、hda1にでブートセクタに制御を移すでしょう。
ninjalj

2
以前はNTLDRを取得してLILOをロードできました。jaeger.morpheus.net/linux/ntldr.phpを参照してください。私はその日、同じことを独自に発見しました。
ロジャーリップスコム

2
LILOアプローチの欠点は、ロードするファイルのディスクの場所が変更されると壊れることです。特に、これは、カーネルをアップグレードするたびに、LILOをブート場所(MBRまたはパーティションブートセクター)に書き換える必要があることを意味します。
プラグウォッシュ

1
@plugwash:GRUBには、2番目のステージファイルと同じ問題があります。ここでの違いは、LILOの「第二段階」)が1ということであるだった、それはカーネルのアップデートではなく、LILOはその破った事を更新したので、カーネル。2)GRUBの更新には、MBRへの第2ステージの場所の自動再書き込みが含まれます(第2ステージでは、カーネルの場所が問題にならないようにファイルシステムの完全な知識でLinuxカーネルをロードします)。;-)
DevSolar

1
IIRC grubは、可能であれば、MBRと最初のパーティション間のファイルシステムを理解する「ステージ1.5」を保存し、ステージ1.5のスペースがない場合(またはインストールする場合)に特定のファイルシステムセクターへの参照のみを保存しますMBRではなくパーティションブートセクター)
プラグウォッシュ

28

LILOは、非常に初期の段階(最初のLinuxディストリビューションの1つであるMCCが使用)から、Grubの前にPCでLinuxをブートするための事実上の標準でした。他のさまざまなブートローダーが同時に使用されました。ロードリンは非常に一般的でした。DOSからLinuxをブートumsdosし、DOSファイルシステムでLinux環境をホストするためのいくつかの構成でさえ使用されました...別の一般的な構成にはブートローダーがまったく含まれていませんでした。 Linuxユーザーは、「ブートおよびルート」フロッピーの既知のペアを保持しました。1つはカーネルを含み、もう1つはレスキュー目的の基本的なルートファイルシステムです。

他のオペレーティングシステムのブートローダーを使用してLinuxをブートする方法もいくつかありました。たとえば、OS / 2のブートマネージャー、またはWindows NTのNTLDR。

他のシステムには独自のブートローダーがありました。

  • SPARC上のSILO(Sunワークステーションなど);
  • PA-RISC上のPALO(HPワークステーション);
  • PowerPC上のYaBootおよびQuik。
  • AlphaでのaBootとMILO ...

最近でも、Grubが唯一のブートローダーではありません。カーネルをフロッピーから直接起動することはあまり有用ではありませんが(フロッピーに収まるほど小さいカーネルを構築できると仮定して、まだ可能かどうかは確認していません)、EFIから直接起動できます(実質的にはGrubと同様に、他のオペレーティングシステムをロードするために設計された独自の小さなオペレーティングシステム)。多くの小規模なシステム(組み込みシステム、シングルボードコンピューターなど)には、U-Bootがあります。(また、U-Boot用のEFIレイヤーあります。)


PowerPCアーキテクチャも興味深いものです。これは、一部のマザーボードにはチューリング完全BIOS-Openfirmware(基本的には、いくつかのプリインストール機能を備えたForthプログラミング言語)が搭載されていたためです。これにより、BIOSの設定方法を知っていれば、ブートローダーなしでBIOSから直接起動できました
slebetman

ちょっと、奇妙なことに、NTLDRはLinuxカーネルを直接ロードできますか?NTLDRはgrub4dosをチェーンローダーしてからLinuxカーネルをロードできると聞きました。
炸鱼薯条德里克

@slebetman:より正確には、OpenFirmwareはSun for SPARCで開発され、PowerPC Reference ArchitectureのPowerPCアライアンス(IBM、Apple、Motorola)、特にPowerPCベースのMacintoshのAppleに採用されました。強力な側面の1つは、単純なドライバーを拡張カードのROMチップ内、またはHDDの指定されたブート領域に格納でき、既知の指定されたABIに対してバイトコードで書き込まれているため、どのCPUに関係なく動作することです起動しようとしていたアーキテクチャとOS。
イェルクWミッターク

たとえば、ROMチップ内にOpenFirmwareドライバーを備えたRAIDアダプターがあり、OpenFirmware環境はそのドライバーを使用してRAIDにアクセスできます。RAID内には、OFW環境を可能にするパーティションテーブル形式用の別のドライバーがありますパーティションを見つけるには、各パーティションの先頭にファイルシステムのOFWドライバーを配置します。これにより、OFWシステムはカーネルを検索でき、カーネルの先頭にはOFWバイトコードで書かれた小さなブートローダーがあります。
イェルクWミッターク

GRUBは同様の方法で動作しますが、違いは、これらすべてのドライバーはGRUB専用に作成する必要があることです。一方、OFWの美しさは、デバイスがドライバーを搭載することでした。 OFW環境が記述されたときに存在するのは、「魔法のように」機能するだけです。UEFIも同様に動作しますが、その「ポータブルバイトコードフォーマット」は基本的にDOSのサブセットであり、これがItaniumがまだx86エミュレーターを必要とする主な理由です。
イェルクWミッターク

12

2.6カーネルの中頃まで、x86カーネルはフロッピーディスクにコピーされた場合(ディスクイメージのように)直接起動できました。

実際、これはLinuxを起動する最初の方法でした。

今日x86カーネルのヘッ​​ダーを見ると、そのようなフロッピーからの起動はもう機能しないというエラーメッセージが表示されます。


2
一方、x86カーネルは、UEFIファームウェアに与えられた場合、直接起動可能になりました。そのため、カーネルの前にはまだ別のタイプのスタブブートローダーがあります...
grawity

@grawity:x64を意味しないのですか?
ジョシュア

1
@ジョシュア:それがどういう意味かわかりません。EFIは、実際にはこの部分をコードとして実行しません。
悲しみ

2
@ジョシュア何?16ビットモードの「DEC BP」、「POP DX」(32ビットモードのEBP / EDX)です。しかし、とにかく実行すべきではありません。EFIバイナリはPEファイルです(もちろん、ブートセクタに書き込まれるかどうかは関係ありません)。
スティーブンキット

1
@Joshua OK、しかしそれは私の心の中の未定義のx86の振る舞いではありません;-)。(「未定義のx86の動作」は、動作が定義されていないオペコードであり、未定義のプラットフォームの動作ではないと考えています。)
Stephen Kitt

5

私は90年代後半にLinuxを使い始め、前述のようliloにデフォルトでした。DOSシステムでデュアルブートする場合は、HIMEMにデータをロードしたり、CDドライバーなどをロードしたりせずにベアブートを実行して、を使用できますloadlin。Win95のデュアルブートの場合、最初にDOSでドライブをブート可能にしてから、'95をインストールすると、'95のブートローダーによってDOSカーネルをまだブートでき、それからを使用できますloadlin

NT4でのデュアルブートの場合、トリックはLILOを/パーティションに書き込み、dddd if=/dev/sda2 of=/path/to/file bs=512 count=1)を使用して最初の512バイトを削除し、結果ファイルを表示できる場所に配置し、ntldrWinNTのブートローダーから使用できるようにすることでした。それを行う際の問題は、カーネルをアップグレードしたときに、リブートする前にすべてのステップを繰り返すことを忘れないでください。そうしないと、Linuxシステムに戻る際に問題が発生します。同じプロセスがWin2kで機能しました。

LILOでは、カーネルが更新されるたびに、LILOを更新することを忘れないでください。

ではloadlinカーネルが更新され、いつでも、あなたはDOSパーティションにカーネルをコピー・アウトすることを忘れないように持っていました。

他の回答で示唆されている他のオプションの1つはdd if=/path/to/vmlinuz of=/dev/fd0、コンパイル時にまたはrdevユーティリティを使用して、ルートデバイスをカーネルで適切に設定する必要があるが、カーネルをフロッピーに直接書き込むことでした。

ときにGRUB周りに来たあなたは、もはやあなたはブートローダーを更新するのを忘れているためそれ以上はLinuxシステムから取り残さ取得LILO、または更新LILOとブート情報オフ再ストリップなどはありませんを更新することを覚えておくことがなかったので、多くの喜びがありました情報...


当時は非常に多くの仕事があり、当時は起動していないマシンを残すチャンスが多かったようですが、間違いなく教育的な経験
でした

@SergiyKolodyazhnyyええ、そしてインターネット上にそんなに豊富な情報はありませんでした。LILOを起動および修正するのに十分なLinuxを備えた単一のフロッピーディスクレスキューディストロがいくつかありました。私たちは長い道のりを歩んできました!
ivanivan

実行make installするとが実行される/sbin/liloため、実際に手動で更新する必要はありませんでした(liloインストールした場合は、それでも可能です)。それは意見の問題かもしれませんがgrub、逆に、私はあまり喜んでいませんでした。そしてlilo(少なくとも1999年版)デュアルブートウィンドウは問題なく、必要ありませんloadlin
mosvy

0

そして、LILOとGRUBの前に、何らかのカスタムブートローダーユーティリティを使用してコマンドラインから起動する必要がありました。

例として、AmigaにはLinuxが用意されていました。カーネルELFをメモリにロードしてそこにジャンプするには、amibootというコマンドラインユーティリティを使用する必要がありました。

これは、コマンドラインからamibootを使用してAmiga 600でlinux起動する人のビデオです。彼のStartInstallスクリプトは、amiboot実行可能ファイルを呼び出しています。amibootがメモリを構成し、目的のロードアドレスを見つけ、0:55頃にカーネルにパラメータを渡すことができます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.