コンピュータの電源を入れたときに、起動するオペレーティングシステムを選択するソフトウェアは何ですか。また、複数のオプションが与えられた場合にどのように決定するのですか。
具体的には、同じディスク上に複数のオペレーティングシステムがインストールされているコンピュータがある場合はどうなりますか?また、外部ドライブがある場合はどうなりますか?すべてのストレージデバイスのすべてのパーティションで、認識できるフォーマットを検索しますか?
私の理解から、すべてのディスクには、コンピューターがブートする必要があるパーティションに関する情報を含む独自のブートセクターがあります。しかし、複数のディスクが接続されていて、各ディスクに異なるブートセクターがある場合、どのディスクがロードされるのでしょうか。
このトピックを調査しようとしたとき、すべてのテクノロジーが同じように動作するとは限らないため、混乱が生じました(たとえば、ブート可能なフラグが重要であると言う人もいれば、無視できると言う人もいます)。さまざまなシステムがどのように機能するかを明確にしていただければ幸いです。
残念ながら、コンピューターが進化するにつれて、これはより複雑になっています。
最初(つまり、最初のPC)には、固定の順序がありました(これはケーブルに依存していました)。
ほとんどすべてのコンピュータには、デフォルトの起動順序があり、BIOSによって制御/影響を受ける可能性があります。最近のコンピューターは、UEFIを使用してこの機能を補完します。UEFIは、いくつかの点でBIOSに取って代わります。
BIOSの起動には、優先順序があります。 BIOSは、各ドライブで起動可能なブートセクターを探し、これらのロードを試み、1つが起動するまでオプションのリストを下に向かっていきます。
UEFIの場合、ディスク上にファイルシステムがあります(UEFIとラベル付けされた小さな脂肪のパーティションには、第1ステージのブートローダーと命令が含まれています。場合によっては、UEFIにプログラムされた命令(つまり、BIOSと同様にnvramに保存されている設定) )
ブートローダー/ UEFIパーティションが見つかると、プログラムがブートプロセスを引き継ぎます。これにより、異なるモードまたはOSでブートする機能が提供される場合があります。
他の人が言ったように、それは少し複雑になっていますが、私がそれを理解する方法:
コンピュータに最初に電源を入れたときは、ハードドライブではありません。マザーボード上のチップに特別なソフトウェアがあり、最初にロードされ、CPUがそれを実行し始めます。これはBIOSまたはUEFIとして知られています(UEFIは実際にはBIOSの後継です)。
このコードは、ハードウェアのさまざまな部分を初期化する少しの作業を行い、次に制御を渡す次のものを探し始めます。さて、それが何であるかは多くの事柄に依存します。内部ハードドライブ、外部ドライブ、ネットワークアダプター、RAIDコントローラー、アドオンカードなど、多くの可能なオプションがあります。
BIOS/UEFIには、これらのオプションをチェックする順序を決定する設定もあります。それは設定された順序でそれらのそれぞれを通過し、「起動を続行できますか?」そして、デバイスは「そう」または「いいえ」のいずれかを言います。 「イェイ」と言う最初のものが続きます。次に、そのデバイスはBIOSにメモリに読み込まれたコードを提供し、CPUはそのコードで実行を継続します。
ハードドライブの特定のケースでは、ディスク自体は本当にそれが起動できるかどうかを知りません。 BIOSが実行するのは、ドライブの最初のセクター(従来は512バイト)を読み取り、セクターの特定の場所にある特別な数バイトをチェックすることです。値に55 AA(16進数)が含まれている場合、このセクターはコードとして実行されます。それ以外の場合は、次のディスクのチェックに進みます。
現在、512バイトは多くのスペースではありませんが、いくつかの単純なことを行うには十分です。たとえば、古典的なDOSは「ブート可能」とマークされたパーティションを見つけたコードをそこに挿入し、thatパーティションの最初のセクターをロードし、次にそれを実行しました。その次のセクターには、さらにいくつかのセクターをロードし、ファイルシステムの解析を開始し、そこからファイルをロードするなどの十分なコードが含まれています。
しかし、実際には、このコードが何をしなければならないかを示すものはありません。また、アクティブパーティションを読み込むことはできませんでしたが、より多くのコードが存在するディスク上の他のいくつかのセクターはロードできませんでした。そして、そのコードは、複数の起動可能なパーティションまたはOSなどから選択できるメニューを提供します。
とにかく、ドライブの最初のセクターのコードは「ブートローダー」として知られています。そこにはさまざまなブートローダーがあります。最近のLinuxの世界はgrubに大きく依存しています。Windowsには独自のものがあります。ブートローダーは実際に前にオペレーティングシステムに来ますが、オペレーティングシステムをメモリに読み込み、制御を与える方法を知っています。
これはそれをより明確にしますか?
起動時に、マザーボードはそれに接続されているすべて(またはほとんど)の電子コンポーネントに電力を供給します。それらの1つは、プライマリオペレーティングシステムが搭載されているため、システムドライブと呼ばれるハードドライブまたはSSDです。 BIOSまたは(U)EFIを、USB、FireWire、ネットワークなど、別の外部ドライブから起動するように設定していない限り、最初に使用されるドライブです。
このドライブには、通常は読み取り専用(ただし、bcdedit.exeのコマンドセットで編集できます)のマスターブートレコードパーティション(簡略化)があり、ドライブで使用可能なすべてのOSを確認します。 1つは、工場出荷時またはメインOSを再インストール/アップグレードしたときに、デフォルトで設定されています。
Windowsでは、USBからの起動は許可されていませんハードドライブまたはSSD。特定のUSBコントローラーをホストするUSB keyでブートできますが、ケーブルで接続されたUSBドライブからのブートはWindowsでは許可されていません。最初のWindowsサービスとプロセス(smss.exeとcrss.exe)が既に読み込まれ、Windows自体が起動するまで、必要なドライバーは読み込まれません。
マザーボードには、OSを起動するブートローダーを実行するファームウェアが含まれており、そのようなファームウェアの2つの主なタイプは、UEFI(新しい)とBIOS(古い)です。どちらの場合も、マザーボードに少量の不揮発性ストレージがあり、使用するブートローダーに関するユーザーの設定を記録します。多くの場合、起動中に特定のボタンを押して、この特定の起動に対するこの設定を上書きすることもできます。
BIOSは単に物理ドライブの順序を記録するだけでなく(存在する場合、他の前に、または後に、またはまったく試行されない「USBドライブ」などの一般的なエントリ)、起動には最初のドライブ(最初のドライブ)のMBRのロードが含まれます。 512バイト)をメモリに格納し、そこに含まれるコードを実行します。それが失敗した場合、BIOSは次のドライブを試みます。 512バイトはそれほど多くないため、一般的なBIOSブートローダーのインストールプロセスでは、ブートローダーを別の場所に保存し、ドライブ上の場所を記録して、実際のブートローダーを実行するだけの小さなコードをMBRに挿入します。
UEFIは、BIOSとは異なり、FAT32パーティションからファイルを読み取る機能を備えています。特定のGPTコードでマークされたパーティションが必要です。UEFI設定には、そこにあるファイルへのパスのリストが含まれています。 UEFIはそのパーティションを見つけ、リストの最初にあるファイルをメモリにロードし、そこに含まれるコードを実行します。その後、OSを起動すると、OS内からUEFI設定を変更することが可能になります。これは、BIOSでは通常不可能です。
どちらの場合でも、GRUB)などのブートローダーが起動され、独自のハードウェアとファイルシステムドライバーを含む非常に洗練されたプログラムになり、暗号化されたものでもパーティションからファイルを読み取ることができます。 、事前定義されたパーティションの事前定義された場所にあるファイルから独自の構成を読み取り、OSとそれらに渡されるパラメーターのリストを含み、ユーザーにメニューを表示します。選択が完了すると、ファイルを読み取りますOSカーネルを含み、そのOSの要件に従ってそれをメモリに入れて起動し、それ以降はカーネルが制御します。
Linuxなどの一部のOSは、カーネルファイルがUEFI要件と互換性のある方法で配置されているため、ブートローダーを使用せずにUEFIから直接起動できますが、このアプローチは一般的ではありません。
ブート可能なフラグは、ブートローダーが通常パーティション全体の開始時にボリュームブートレコードに配置されたとき(ドライブ全体の開始ではなく)に由来し、MBRコードはパーティションを列挙し、マークされたものからブートローダーをチェーンロードします起動可能。このフラグは、最新のブートローダーとは無関係です。
したがって、ユーザーは、UEFIまたはBIOSとブートローダーの両方でブートするOSを選択できます。実際にはほとんどの場合後者です(UEFI/BIOSは毎回同じブートローダーをロードし、毎回かなりのメニューを表示して、選択したブートしますOS)。
@davidgoと@vilxで説明されているように、ファームウェア(UEFIまたはBIOS)は最初に利用可能なブートデバイスを見つけ、そのデバイスからブートローダーをロード/実行します。
ブートローダーを構成して、2つ目(または3つ目)のディスクまたはその他のデバイスからでも、複数のオペレーティングシステムをロードすることができます。
しかし、(少なくとも私が知っている人たちにとっては)これらのマルチブートシナリオは、仮想化ソフトウェア(VMware、VirtualBoxなど)の可用性により、それほど一般的ではなくなりました。
余談ですが、長年にわたり、BIOS(またはUEFI)が最初にフロッピードライブをスキャンし、次にCD-ROM/DVD-ROMドライブをスキャンし、次に「ハードディスク」をスキャンすることが一般的でした。または、少なくともそれがデフォルト設定でした。明らかにフロッピーディスクはもう時代遅れですが、まだかなりの数のマシンが光学ドライブを最初のブートデバイスとして構成されているのがわかります。
これは、オペレーティングシステムをインストールするときに役立ちました。しかし、たまたまブートセクタウイルスに感染しているフロッピーディスクをマウントしている場合は問題がありました。 (今日、USBメディアで同様の問題が発生しています。)そして、個人的には、1年に1回以下しか起動しないときに、マシンが光学式ドライブをチェックするのは望ましくありません。
コンピュータに組み込まれているソフトウェアがあり、どのディスクを最初に、2番目に(最初のディスクが利用できない場合)、3番目に来るように構成することができます。
これは以前、eepromに保存された「bios」でした(バッテリーから給電)。しかし、現在はハードウェアに組み込まれたLinuxベースのOSでさえ、はるかに複雑になっています(これにより、コンピューターが外部の攻撃を受けやすくなる可能性があります)。
各ディスクにはパーティションテーブルがあり、必ずしもブートセクターではありません。